Существуют ли библиотеки функций нечеткого поиска или строковых функций сходства для С#?
Есть аналогичный вопрос, но не относительно библиотек С#, которые я могу использовать в своем исходном коде.
Спасибо всем за вашу помощь.
Я уже видел lucene, но мне нужно что-то более удобное для поиска похожих строк и без накладных расходов на индексирующую часть.
Ответ, который я обозначил, имеет два очень простых алгоритма, и один использует LINQ, поэтому он идеален.
Ответы
Ответ 1
Реализация расстояния Левенштейна:
У меня есть проект .NET 1.1, в котором я использую последний. Он упрощен, но отлично работает для того, что мне нужно. Из того, что я помню, он нуждался в небольшой настройке, но ничего не было очевидно.
Ответ 2
вы также можете посмотреть на очень впечатляющую библиотеку под названием Sam String Metrics http://sourceforge.net/projects/simmetrics/files/. это включает в себя множество алгоритмов.
- Расстояние Хэмминга
- Расстояние Левенштейна
- Диалог Needleman-Wunch или Sellers Algorithm
- Расстояние Смит-Уотерман
- Расстояние Gotoh или расстояние Smith-Waterman-Gotoh
- Расстояние в блоке или расстояние L1 или расстояние от блока города
- Расстояние Монжа Элькан
- Показатель расстояния Jaro
- Яро Винклер
- Показатель расстояния SoundEx
- Коэффициент соответствия
- Коэффициент костей
- сходство с Jaccard или коэффициент Jaccard или коэффициент Tanimoto
- Коэффициент перекрытия
- Евклидово расстояние или расстояние L2
- Косинус сходства
- Вариационное расстояние
- Расстояние Хеллингер или расстояние Бхаттачарья
- Информационный радиус (расхождение Дженсена-Шэннона)
- Harmonic Mean
- Косые расхождения
- Вероятность путаницы
- Tau
- Показатель Fellegi и Sunters (SFS)
- TFIDF или TF/IDF
- Fastali >
- BLASTP
- Максимальные совпадения
- д-грамм
- Алгоритмы Укконена
Ответ 3
Они не мои собственные изобретения, но они мои любимые, и я только что писал о них и опубликовал свои собственные измененные версии Dice Coefficient, Levenshtein Distance, Longest Common Subsequence и Double Metaphone в блоге, названном Четыре функции для поиска нечетких строковых совпадений в расширениях С#.
Ответ 4
Вы взглянули на Lucene.net? Это порт API поисковой системы Java Lucene для платформы .NET. Эта библиотека предлагает множество функций поиска. Я играл с ним около года назад, поэтому не принимайте мое предложение, основанное на тоннах опыта. Я видел это в книге Windows Developer Power Tools и взял его на тест-драйв. Вы можете просмотреть их API-документацию, чтобы узнать, предлагает ли он что-то вроде поиска нечеткого поиска, который вы ищете.
Ответ 5
Этот код проекта имеет функцию сходства строк, используя Расстояние Левенштейна.
Ответ 6
Существует следующий алгоритм расстояния Левенштейна, который присваивает значение сходству двух строк (ну, фактически, разница), которые можно использовать для построения: http://www.merriampark.com/ldcsharp.htm
Ответ 7
Проект Beagle для Linux написан на С# (моно) и является инструментом поиска Google, как инструмент поиска. Он может иметь некоторый код для такого соответствия строк.
Если я правильно помню, он использует библиотеку Lucene для поиска и получения данных. Возможно, это может быть полезно и для вашего проекта.
Ответ 8
Я использовал "Словарь дерева терминологического поиска в С#" (http://www.codeproject.com/KB/recipes/tst.aspx) для поиска похожих строк.
С уважением, Патрисио
Ответ 9
Взгляните сюда.
Его определенно стоит поискать себя.
http://en.wikipedia.org/wiki/Edit_distance