Алгоритм строгания, создающий реальные слова

Мне нужно взять абзац текста и извлечь из него список «тегов». Большая часть этого довольно прямолинейна. Однако мне нужна некоторая помощь, которая теперь приводит к появлению списка слов, чтобы избежать дублирования. Пример: Сообщество / Сообщества

Я использовал реализацию алгоритма Porter Stemmer (кстати, я пишу на PHP):

http://tartarus.org/~martin/PorterStemmer/php.txt

Это работает, вплоть до точки, но не возвращает «настоящих» слов. Приведенный выше пример основан на «коммуне».

Я пробовал «Снежок» (предлагаемый в другом потоке переполнения стека).

http://snowball.tartarus.org/demo.php

Для моего примера (сообщества / сообщества) Snowball проистекает из «сообщества».

Вопрос

Существуют ли какие-либо другие алгоритмы, которые будут делать это? Кто-нибудь еще решил эту проблему?

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

Related of "Алгоритм строгания, создающий реальные слова"

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

  1. Найдите или создайте большой словарь, который отображает каждый возможный вывод обратно на фактическое слово. (например, сообщество -> сообщество)
  2. Создайте функцию, которая сравнивает каждый стебель с списком слов, которые были сведены к этому основанию, и пытается определить, что наиболее похоже. (например, сравнение «коммути» с «сообществом» и «сообществами» таким образом, что «сообщество» будет признано более похожим вариантом)

Лично я думаю, что так, как я бы это сделал, это была бы динамическая форма №1, создавая пользовательскую базу данных словарей, записывая каждое изученное слово вместе с тем, что оно было связано, а затем предполагая, что наиболее распространенным словом является то, которое должно быть используемый. (например, если в моем тексте исходного текста используются «сообщества» чаще, чем «сообщество», а затем сообщать об сообществах -> сообществах.). Основанный на словарях подход будет более точным в целом, и его построение на основе входных данных ствола даст результаты настроенный на ваши тексты, причем основным недостатком является требуемое пространство, что в наши дни не является проблемой.

Если я правильно понимаю, то то, что вам нужно, не является стволовым, а лемматизатором. Lemmatizer – это инструмент со знанием о концах вроде -ies , -ed и т. Д., А также исключительные текстовые формы , такие как написанные и т. Д. Лемматизатор отображает входной словоформу в свою лемму, которая гарантированно является «реальным» словом.

Есть много lemmatizers для английского языка, я использовал только morpha . Morpha – это просто большой файл lex, который вы можете скомпилировать в исполняемый файл. Пример использования:

 $ cat test.txt Community Communities $ cat test.txt | ./morpha -uc Community Community 

Вы можете получить морфу из http://www.informatics.sussex.ac.uk/research/groups/nlp/carroll/morph.html

Эй, я не знаю, возможно ли это, возможно, слишком поздно, но есть только один сценарий PHP, который создает реальные слова: http://phpmorphy.sourceforge.net/ – мне потребовались годы, чтобы найти его. Все остальные стеблемеры должны быть скомпилированы, и даже после этого они работают только по алгоритму Портера, который создает основы, а не леммы (т. Е. Community = communiti). PhpMorphy работает отлично, его легко установить и инициализировать, а также английские, русские, немецкие, украинские и эстонские словари. Он также поставляется со сценарием, который вы можете использовать для компиляции других словарей. Документация на русском языке, но переводится через Google translate, и это должно быть легко.