НЛП для Java, какой инструментарий я должен использовать? - PullRequest
1 голос
/ 15 декабря 2011

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

Что ищет Серебряное озеро у кандидатов на IPO Прибыль 3 компаний: Apple, Cirrus Logic, IBM Palmisano от IBM: как стать 100-летней компанией

Если в файле показано 3 предложения выше, и я хочу вычислить вхождение каждого слова. Здесь «Компании» и «Компания» следует рассматривать как одно и то же слово «компания» (в нижнем регистре), поэтому общее вхождение слова «компания» равно 2.

Существует ли какой-либо инструментарий НЛП для Java, который может сказать, что два слова, такие как "семьи" и "семья", на самом деле принадлежат одному и тому же слову "семья"?

Я буду подсчитывать вхождение каждого слова для дальнейшего обучения наивного байесовского обучения, поэтому очень важно получить точное число вхождений каждого слова.

Ответы [ 4 ]

4 голосов
/ 15 декабря 2011

Apache Lucene и OpenNLP обеспечивают хорошие реализации алгоритма стеммирования. Вы можете просмотреть и использовать лучший, который подходит вам. Я использовал Lucene для своих проектов.

0 голосов
/ 17 декабря 2011

То, что вы делаете, называется стемминг (получение корневого слова).

Как уже упоминалось, Lingpipe, Gate и Lucene / Solr делают остановку. Другой вариант - Стэнфордский парсер. Или вы могли бы реализовать алгоритм Портера Стемминга самостоятельно.

0 голосов
/ 16 декабря 2011

Вы также можете посмотреть на GATE: http://gate.ac.uk/

Если вы хотите использовать слова для обучения модели мешка слова, вы можете использовать значение TF-IDF вместо абсолютного числа.

http://en.wikipedia.org/wiki/Tf%E2%80%93idf

0 голосов
/ 15 декабря 2011

Вы также можете проверить LingPipe: http://alias -i.com / lingpipe /

...