Определение компонентов в английском предложении, которые не имеют смысла - PullRequest
1 голос
/ 22 февраля 2012

Мне интересно, есть ли алгоритм или библиотека, которая помогает мне идентифицировать компоненты на английском языке, который не имеет смысла? например, очень серьезная грамматическая ошибка? Если да, не могли бы вы объяснить, как это работает, потому что я действительно хотел бы реализовать это или использовать это для своих собственных проектов.

Вот случайный пример:

В предложении: «Я закрыл, и т. Д. Привет дверь».

Как человек, мы можем быстро определить, что [и т. Д. Страница привет] не имеет никакого смысла. Может ли машина указать, что строка не имеет никакого смысла, а также содержит грамматические ошибки?

Если есть такое решение, насколько оно может быть точным? Возможно ли, например, учитывая клип из английского предложения, алгоритм возвращает меру, указывающую, насколько значим или корректен этот клип? Большое спасибо!

PS: я изучил грамматику ссылок CMU, а также библиотеку NLTK. Но, тем не менее, я не уверен, как использовать, например, синтаксический анализатор ссылок, чтобы делать то, что я хотел бы делать, если парсер не принимает предложение, я не знаю, как настроить его, чтобы сказать, какая его часть не правильно .. и я не уверен, поддерживает ли NLTK это.

Еще одна мысль, которая у меня возникла в связи с решением этой проблемы, - посмотреть на частоты словосочетания. Так как в настоящее время я заинтересован в исправлении только очень серьезных ошибок. Если я определяю «серьезную ошибку» как случаи, когда слова в клипе предложения редко используются вместе, то есть частота комбо должна быть намного ниже, чем в других комбинациях в предложении.

Например, в приведенном выше примере: [так и т. Д. Страница привет] эти четыре слова действительно редко встречаются вместе. Одна интуиция моей идеи исходит из того, что когда я набираю такую ​​комбинацию в Google, никаких связанных результатов не выпадает. Так есть ли какая-нибудь библиотека, которая предоставляет мне такую ​​частоту информации, как Google? Такие частоты могут дать хороший намек на правильность слова combo.

Ответы [ 3 ]

2 голосов
/ 23 февраля 2012

Я думаю, что вы ищете модель языка .Языковая модель присваивает каждому предложению вероятность k слов, появляющихся на вашем языке.Простейшим типом языковых моделей являются n-граммные модели: учитывая первые i слова вашего предложения, вероятность соблюдения i+1 -го слова зависит только от n-1 предыдущих слов.

ДляНапример, для биграмной модели (n=2) вероятность предложения w1 w2 ... wk равна

P(w1 ... wk) = P(w1) P(w2 | w1) ... P(wk | w(k-1)).

Чтобы вычислить вероятности P(wi | w(i-1)), вам просто нужно подсчитать число вхожденийбиграмма w(i-1) wi и слова w(i-1) на большом корпусе.

Вот хороший учебный материал по этому предмету: Немного о прогрессе в языковом моделировании , Джошуа Гудман.

2 голосов
/ 22 февраля 2012

Да, такие вещи существуют.

Вы можете прочитать об этом в Википедии .

Вы также можете прочитать о некоторых проблемах точности здесь .

Поскольку определение того, какая часть не правильная после определения предложения, имеет грамматическую проблему, это в значительной степени невозможно без знания предполагаемого смысла автора. Взять, к примеру, «За свои мертвые тела» и «За мертвые тела». Оба являются неправильными и могут быть исправлены путем добавления / удаления запятой или замены их / там. Однако это приводит к совершенно другим значениям (да, второе не будет полным предложением, но будет приемлемым / понятным в контексте).

Проверка орфографии работает, поскольку существует ограниченное количество слов, по которым вы можете проверить слово, чтобы определить, является ли оно действительным (написано правильно). Однако существуют бесконечные предложения, которые могут быть построены с бесконечными значениями, поэтому нет способа исправить плохо написанное предложение, не зная, что за ним стоит.

1 голос
/ 22 февраля 2012

Я думаю, что вы ищете хорошо зарекомендовавшую себя библиотеку, которая может обрабатывать естественный язык и извлекать значения.

К сожалению, такой библиотеки нет. Обработка естественного языка, как вы, вероятно, можете себе представить, не легкая задача. Это все еще очень активная область исследований. Существует много алгоритмов и методов для понимания естественного языка, но, насколько мне известно, большинство из них хорошо работают только для конкретных приложений или слов определенных типов.

И эти библиотеки, такие как CMU, кажутся все еще довольно элементарными. Он не может делать то, что вы хотите сделать (например, выявление ошибок в английском предложении). Вы должны разработать алгоритм, чтобы сделать это, используя инструменты, которые они предоставляют (например, анализатор предложений).

Если вы хотите узнать об этом, проверьте ai-class.com . У них есть несколько разделов, в которых говорится об обработке языка и слов.

...