MP> Здравствуйте. Существует ли распространенный алгоритм/модуль для
MP> поиска слов в словаре, даже если введенное слово отличается от требуемого
MP> - лишняя буква в любой позиции
MP> - отсутствующая буква в любой позиции
MP> - неверная буква
MP> - перепутанные местами буквы
MP> Причем желательно варьировать количество изменяемых при поиске букв.
MP> Естественно, найденых слов может быть найдено более одного.
MP> Что посоветуете?
MP> З.Ы. Пример: должно быть найдено слово "паровоз" на введенные слова
MP> "паравоз", "парвоз", "паро-воз".
google://Levenshtein
use Text::Levenshtein qw(distance fastdistance);
print distance("foo","four"), "n";
# печатает "2"
print fastdistance("foo","four"), "n";
# печатает "2" faster
$"=',';
my @words=("four","foo","bar");
my @distances=distance("foo",@words);
MP> З.Ы. База - Mysql, если есть встроенные средства, тоже подойдут.
AFAIR, нету.
From: "Anton Y. Shevtsov" <shevtsov@tngf.ru.>
> З.Ы. Пример: должно быть найдено слово "паровоз" на введенные слова
> "паравоз", "парвоз", "паро-воз".
Это называется нечеткий поиск. Общего способа нет.
Кто-то пытается считать сумму кодов букв в слове и тогда при выпадении
одной ссумма найденного слова не очень будет отличатся от заданного.. но
все это лажа)) особенно на коротких словах.. чтобы сделать реально
работающее, нужно приложить математику.
Вообщето для этого полно в инете
http://www.3ka.mipt.ru/vlib/books/Programming/ComputerScience/StryngAnalysis/index.html
http://algolist.manual.ru/search/fsearch/
http://www.delphikingdom.com/asp/viewitem.asp?catalogid=722
http://www.pereplet.ru/nauka/perl/find.html
у буржуев это назвается fuzzy logic (вроде)
From: Artur Penttinen <artur+usenet@niif.spb.su>
Newsgroups: ftn.ru.perl
Subject: Поиск похожего?
MP> З.Ы. Пример: должно быть найдено слово "паровоз" на введенные
MP> слова "паравоз", "парвоз", "паро-воз".
AC> Алгоритм - да. Вот, правда, слово вылетело из головы. Он лучше
AC> работает для английского, где нет развесистых склонений.
AC> Поскольку слово я забыл, могу порекомендовать поискать по
AC> английскому переводу слова "созвучие". Модуль, кажется, тоже был.
алгоритм soundex, модуль Text::Soundex
596 Прочтений • [Поиск похожих слов на Perl (нечеткий поиск).] [08.05.2012] [Комментариев: 0]