Инструмент для создания собственных правил лемматизации слов и аналогичных задач - PullRequest
1 голос
/ 10 марта 2012

Я занимаюсь обработкой естественного языка с немного необычными требованиями.Часто я получаю задания , похожие на лемматизацию - учитывая слово (или просто фрагмент текста), мне нужно найти некоторые шаблоны и каким-то образом преобразовать слово.Например, мне может потребоваться исправить орфографические ошибки, например, для данного слова «есть» мне нужно преобразовать его в «есть».Или мне может потребоваться преобразовать слова «ахахаха», «ахахахаха» и т. Д. В слова «ахаха» и так далее.

Итак, я ищу какой-нибудь универсальный инструмент , который позволяет определять правила преобразования для таких случаев.Правила могут выглядеть примерно так:

 {w}in   ->  {w}ing
 aha(ha)+  ->  ahaha

То есть мне нужно иметь возможность использовать захваченные шаблоны с левой стороны с правой стороны.

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

Я делаю этот проект вClojure, так что в идеале этот инструмент должен быть библиотекой для одного из языков JVM (Java, Scala, Clojure), но другие языки или инструменты командной строки тоже подойдут.

Есть несколько очень интересных проектов НЛП, включая GATE , Stanford CoreNLP , NLTK и другие, и я не эксперт во всехиз них, чтобы я мог пропустить инструмент, который мне нужен там.Если это так, пожалуйста, дайте мне знать.

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

UPD. Кажется, мне нужно привести еще несколько деталей / примеров того, что мне нужно.

По сути, мне нужна функция для замены текста каким-либо регулярным выражением (аналогично String.replaceAll() в Java), но с возможностью использовать перехваченный текст в строке замены .Например, в реальном тексте люди часто повторяют символы, чтобы сделать акцент на конкретном слове, например, кто-то может написать «Этот фильм ооочень круто ...».Мне нужно иметь возможность заменить эти повторяющиеся «оооо» только один символ.Таким образом, может существовать такое правило (в синтаксисе, аналогичном тому, который я использовал ранее в этом посте):

{chars1}<char>+{chars2}?  ->  {chars1}<char>{chars2}

, то есть заменить слово, начинающееся с некоторых символов (chars1), по крайней мере 3 символаи, возможно, заканчивается некоторыми другими символами (chars2) с похожей строкой, но только с одним.Ключевым моментом здесь является то, что мы ловим левую сторону правила и используем его с правой стороны.

Ответы [ 2 ]

2 голосов
/ 10 марта 2012

Я не специалист по НЛП, но я верю, что Снежок может вас заинтересовать.Это язык для представления алгоритмовЕго стеммер используется в поисковой системе Lucene.

1 голос
/ 10 марта 2012

Я обнаружил, что http://userguide.icu -project.org / transforms / general также может быть полезен для некоторых общих задач, связанных с шаблоном / преобразованием, таких как этот, игнорируйте материал о транслитерации, это хорошо для выполнениямного вещей.

Вы можете просто загрузить правила из файла в строку и зарегистрировать их и т. д.

http://userguide.icu -project.org / transforms / general / rules

...