Существуют ли библиотеки функций нечеткого поиска или сходства строк, написанные для C#? [закрытый]
есть аналогичный вопрос, но не в отношении библиотек C#, которые я могу использовать в своем исходном коде.
спасибо всем за помощь.
Я уже видел lucene, но мне нужно что-то более простое для поиска похожих строк и без накладных расходов индексирующей части.
ответ, который я отметил, имеет два очень простых алгоритма, и один использует LINQ тоже, так что это идеально.
9 ответов:
Левенштейна реализации:
- С помощью LINQ (не совсем, см. комментарий)
- не используя LINQ
У меня есть проект .NET 1.1, в котором я использую последний. Это упрощенно, но прекрасно работает для того, что мне нужно. Из того, что я помню, он нуждался в небольшой настройке, но ничего, что не было очевидным.
вы также можете посмотреть на очень впечатляющую библиотеку под названием Sam String Metrics http://sourceforge.net/projects/simmetrics/files/. это включает в себя множество алгоритмов.
- Хэмминга
- расстояние Левенштейна
- Needleman-wunch расстояние или алгоритм продавцов
- Смит-Уотерман расстояние
- Gotoh расстояние или Smith-Waterman-Gotoh расстояние
- расстояние блока или расстояние L1 или городской блок расстояние
- расстояние Монж Элькан
- метрика расстояния яро
- Яро Винклер
- Метрика расстояния SoundEx
- Соответствующий Коэффициент
- кости коэффициент
- сходство Jaccard или коэффициент Jaccard или коэффициент Tanimoto
- Коэффициент Перекрытия
- Евклидово расстояние или расстояние L2
- Косинус сходство
- вариационное расстояние
- Хеллингер расстояние или Бхаттачарья расстояние
- информационный радиус (расхождение Дженсена-Шеннона)
- Средним Гармоническим
- косое расхождение
- Растерянность Вероятность
- Тау
- fellegi и Sunters (SFS) метрика
- TFIDF или TF / IDF
- Фаста
- BlastP
- максимальная матчей
- q-грамм
- Алгоритмы Ukkonen
Это не мое собственное изобретение, но они мои любимые, и я только что написал о них в блоге и опубликовал свои собственные измененные версии коэффициента Dice, расстояния Левенштейна, самой длинной общей подпоследовательности и двойной Метафоны в блоге под названием четыре функции для поиска нечетких совпадений строк в расширениях C#.
вы взглянули на Lucene.net? это порт API поисковой системы Java Lucene для платформы .Net. Эта библиотека предлагает множество функций поиска. Я играл с ним год или около того назад, поэтому не принимайте мое предложение как основанное на тоннах опыта. Я видел это в книге Windows Developer Power Tools и взял его на тест-драйв. Вы можете посмотреть через их документация API чтобы увидеть, если он предлагает что-то вроде нечеткой Ищите то, что вы ищете.
этой код проекта документа имеет функцию подобия строки с помощью расстояние Левенштейна.
существует следующий алгоритм расстояния Левенштейна, который присваивает значение сходству двух строк (ну, на самом деле разница), которые могут быть использованы для построения:http://www.merriampark.com/ldcsharp.htm
The Проект Бигль для Linux написан на c# (mono) и является google-desktop, как инструмент поиска. Он может иметь некоторый код там для такого рода сопоставления строк.
Если я правильно помню, он использует Lucene библиотека для поиска и извлечения данных. Возможно, это может быть полезно и для вашего проекта.
Я использовал "словарь троичного дерева поиска в C#" (http://www.codeproject.com/KB/recipes/tst.aspx) для поиска похожих строк.
С Уважением, Патрисио