как я могу сделать поиск совпадения для похожих слов - PullRequest
11 голосов
/ 31 октября 2010

Я работаю, пытаясь автоматически классифицировать короткие статьи, и пытаюсь выяснить, как сопоставить похожие слова - например, полки на полках или покраска и перекраска

Я использую алгоритм определения портера, но он помогает только в определенных ситуациях и только в конце слова (оба приведенных выше примера не работают с ним).

Есть ли алгоритм или списки связанных слов, которые могли бы помочь с чем-то вроде этого (кроме создания моего собственного?)

(я работаю в php, поэтому любые решения на этом языке были бы более полезными.)

Ответы [ 2 ]

12 голосов
/ 31 октября 2010

Расстояние Левенштейна - это то, что вы ищете.

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

Если расстояние небольшое, то два слова похожи.

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

Смотри также:
PHP функция Левенштейна
PHP soundex функция

4 голосов
/ 31 октября 2010

Ну, есть мать всех "связанных списков слов", называемая WordNet: http://wordnet.princeton.edu/

Он доступен бесплатно при условии довольно щедрой лицензии. В разделе «Связанные проекты» есть PHP-интерфейс.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...