Существуют ли библиотеки для нечеткого поиска или функции схожести строк, написанные для C#?
Есть похожий вопрос, но не касающийся библиотек C#, которые я могу использовать в своем исходном коде.
Спасибо за вашу помощь.
Я уже видел lucene, но мне нужно что-то более простое для поиска похожих строк без дополнительных затрат на индексацию.
Ответ, который я отметил, имеет два очень простых алгоритма, и один тоже использует LINQ, поэтому он идеален.
8 ответов
Левенштейновская дистанционная реализация:
- Использование LINQ (не совсем, см. Комментарии)
- Не используя LINQ
У меня есть проект.NET 1.1, в котором я использую последний. Это упрощенно, но отлично работает для того, что мне нужно. Из того, что я помню, нужно было немного доработать, но ничего, что не было очевидно.
Вы также можете взглянуть на очень впечатляющую библиотеку под названием Sam's String Metrics http://sourceforge.net/projects/simmetrics/files/. это включает в себя множество алгоритмов.
- Расстояние Хемминга
- Расстояние Левенштейна
- Дистанция Рукоделия-Уунча или алгоритм Продавца
- Смит-Уотерман расстояние
- Расстояние Гото или Смит-Уотерман-Гото
- Расстояние блока или расстояние L1 или расстояние городского блока
- Расстояние до Монге Элкана
- Jaro расстояние метрика
- Яро Винклер
- SoundEx расстояние метрика
- Коэффициент соответствия
- Коэффициент кости
- Сходство Жакара или коэффициент Жакара или коэффициент Танимото
- Коэффициент перекрытия
- Евклидово расстояние или расстояние L2
- Косинус сходство
- Вариационное расстояние
- Расстояние Хеллингера или расстояние Бхаттачарья
- Информационный радиус (расхождение Дженсена-Шеннона)
- Среднее гармоническое
- Косое расхождение
- Вероятность путаницы
- Тау
- Метрика Феллеги и Сунтерс (SFS)
- TFIDF или TF / IDF
- Fasta
- BLASTP
- Максимальные совпадения
- д-граммовый
- Укконен Алгоритмы
Они не являются моим собственным изобретением, но они мои любимые, и я только что написал о них в блоге и опубликовал свои собственные подстроенные версии коэффициента кубика, расстояния Левенштейна, самой длинной общей подпоследовательности и двойного метафона в блоге под названием " Четыре функции для поиска нечеткой строки". Матчи в C# Расширения.
Вы смотрели на Lucene.net? Это порт API поискового движка Java Lucene для платформы.Net. Эта библиотека предлагает множество функций поиска. Я играл с ним около года назад, так что не воспринимайте мое предложение как основанное на огромном опыте. Я видел это в книге Windows Developer Power Tools и взял ее на тест-драйв. Вы можете просмотреть их документацию по API, чтобы увидеть, предлагает ли она что-то вроде нечеткого поиска, который вы ищете.
Существует следующий алгоритм расстояния Левенштейна, который присваивает значение сходству двух строк (ну, на самом деле, разницу), который можно использовать для построения: https://web.archive.org/web/20060616180103/http://merriampark.com:80/ldcsharp.htm
Эта проектная статья кода имеет функцию подобия строк, использующую расстояние Левенштейна.
Проект Beagle для Linux написан на C# (моно) и представляет собой инструмент поиска, похожий на Google Desktop. Там может быть некоторый код для подобного соответствия строк.
Если я правильно помню, он использует библиотеку Lucene для поиска и извлечения данных. Может быть, это может быть полезно и для вашего проекта.
Я использовал "Словарь троичного дерева поиска в C#" ( http://www.codeproject.com/KB/recipes/tst.aspx) для поиска похожих строк.
С уважением, Патрисио