Java - Как найти словоизмененные формы в большой строке?

У меня есть случайное текстовое содержимое в переменной String. Я хочу найти все словоизменения определенного слова, которое указывает пользователь.

Пример . Если пользователь ищет слово "помощь", он должен захватить все вхождения "помощь, помощь, помощь, помощь" в строке.

Возникает вопрос: Есть ли библиотека Java для автоматического обнаружения таких перегибов в указанной строке?

Примечание. Я видел библиотеку Java под названием WolframAlpha, которая утверждает, что делает это и вот его веб-интерфейс, но я не вижу, чтобы эта библиотека работала, и нет руководство доступно для его использования.


person Brad    schedule 03.09.2014    source источник


Ответы (3)


Во-первых, это не библиотека Java, а язык Wolfram, ранее известный как Mathematica. У него есть JLink, и его можно вызывать из Java, но у вас должно быть запущено ядро ​​Wolfram, которое выполняет код.

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

Возможно, вы захотите взглянуть на следующее: Стэнфордский НЛП

person Margus    schedule 03.09.2014
comment
Маргус .. Спасибо, что поделились ценной информацией. Я должен был больше узнать о Вольфраме, прежде чем попробовать его. - person Brad; 03.09.2014
comment
@Brad Если вы просто хотите получить форму множественного числа слова, то достойный алгоритм описан здесь csse.monash.edu.au/~damian/papers/HTML/Plurals.html (с реализацией Perl). - person Margus; 03.09.2014
comment
На самом деле мне нужны все возможные перегибы, как описано в моем вопросе, а не только форма множественного числа. - person Brad; 03.09.2014

Проверьте это.

Я не знаю, насколько велико ваше требование, но вы всегда можете использовать викисловарь и разобрать ваши данные??

Проверьте этот вопрос. Может помочь

person Matt    schedule 03.09.2014
comment
Спасибо, Мэтт. Я уже проверил все эти сообщения раньше. Эво-инфлектор получает только форму множественного числа слова, а не все варианты слова. Я не знаю, почему вы поделились викисловарем. Мне нужна библиотека Java, чтобы использовать ее в моей программе! .. Вопрос, которым вы поделились, также говорит о множественном числе, и я уже проверил упомянутую библиотеку WolframAlpha в этом вопросе, но я не вижу, как ее использовать. - person Brad; 03.09.2014

Это называется основным словом. Сначала вам нужно (для конкретного языка) вывести основу:

assisting -> assist using -ance, -ing, -ly, -s, -ed etcetera.
sought -> search using an exception list

Затем выполните поиск, возможно, с помощью регулярного выражения (Matcher.find). Шаблон:

"\\bassist\\p{L}*"
"\\b(search|sought)\\p{L}"

С префиксами un-dis-inter- дело обстоит еще сложнее, но в целом флексии — это окончания слов в английском языке. Затем идет поиск синонимов.

Словари часто называют корпусами. Поиск по запросу «бесплатный английский корпус» даст результаты.

\\b = граница слова p{L}* = 0 или более (*) букв

person Joop Eggen    schedule 03.09.2014
comment
Спасибо за термин. Это приводит к новым новым приятностям в Google. Я не хочу изобретать велосипед. Конечно, есть библиотека Java, которая уже делает это! - person Brad; 03.09.2014
comment
Хорошо, Lucene — это поисковая система, stackoverflow.com/questions/ 5391840/ - person Joop Eggen; 03.09.2014