Как я могу настроить расстояние Левенштейна при классификации лингвистически похожих слов (например, времена глаголов, сравнения прилагательных, единственное и множественное число)

У меня нет идей о том, как выполнить эту задачу. Я подсчитываю частоту слова, на самом деле базовую форму слова (например, бег будет считаться бегом). Я просмотрел некоторые реализации расстояния Левенштейна (одна из реализаций, с которой я столкнулся, — это от dotnerperls).

Я также попробовал двойной Метафон, но это не то, что мне нужно.

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

Пример: 1. "бег" будет считаться одним вхождением слова "бег" 2. "слово" также будет вхождением слова "слово" 3. "страх" НЕ будет считаться вхождением слова "шестерня"

Кроме того, я реализую его на С#.

Заранее спасибо.

Изменить: я отредактировал его, как предложил Рене. Еще одно примечание: я пытаюсь рассмотреть вопрос о том, является ли слово подстрокой другого слова, но эта реализация не будет такой динамичной. Другая идея, которую я думаю, такова: «если добавить -s или -ing к строке1, строка1 == строка2, то строка2 будет вхождением строки1». Однако это не так, поскольку некоторые слова имеют неправильное множественное число.


person Jinnean    schedule 07.01.2012    source источник
comment
И ваша точная проблема с тем, что вы реализовали в С#?   -  person rene    schedule 07.01.2012
comment
Извините, забыл включить. Моя проблема заключается в том, как исключить слова, которые на самом деле не похожи по смыслу. Потому что в levenshtein-distance страх и дорогой будут считаться похожими словами, так как требуется только 1 редактирование. Что я хочу, так это настроить его так, чтобы он не учитывал эти случаи, а также включить некоторые слова с 3 или более правками, поскольку превращение глагола в его настоящее время будет иметь более 3 правок.   -  person Jinnean    schedule 07.01.2012
comment
Вам действительно нужно расширить/улучшить свой вопрос, даже показать код реализации, иначе ваш вопрос получит слишком много голосов для закрытия.   -  person rene    schedule 07.01.2012


Ответы (1)


Задача, которую вы пытаетесь решить, называется Stemming или Лемматизация.

Как вы уже поняли, расстояние Левенштейна здесь не подходит. Общие алгоритмы стемминга для английского языка включают Porter-Stemmer и Snowball-Stemmer. Если вы погуглите, я уверен, что вы найдете C#-реализацию одного из них.

person tobigue    schedule 07.01.2012
comment
Спасибо, так это называется Stemming. Я просто новичок в компьютерной лингвистике. - person Jinnean; 07.01.2012
comment
рад, что смог помочь :) эта ссылка выглядит как хорошее начало для C#: iveonik.com/blog/2011/08/ - person tobigue; 07.01.2012