Существуют ли библиотеки для нечеткого поиска или функции схожести строк, написанные для C#?

Есть похожий вопрос, но не касающийся библиотек C#, которые я могу использовать в своем исходном коде.

Спасибо за вашу помощь.

Я уже видел lucene, но мне нужно что-то более простое для поиска похожих строк без дополнительных затрат на индексацию.

Ответ, который я отметил, имеет два очень простых алгоритма, и один тоже использует LINQ, поэтому он идеален.

8 ответов

Решение

Левенштейновская дистанционная реализация:

У меня есть проект.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

Эта проектная статья кода имеет функцию подобия строк, использующую расстояние Левенштейна.

Посмотрите здесь.

Определенно стоит взглянуть на себя.

http://en.wikipedia.org/wiki/Edit_distance

Проект Beagle для Linux написан на C# (моно) и представляет собой инструмент поиска, похожий на Google Desktop. Там может быть некоторый код для подобного соответствия строк.

Если я правильно помню, он использует библиотеку Lucene для поиска и извлечения данных. Может быть, это может быть полезно и для вашего проекта.

Я использовал "Словарь троичного дерева поиска в C#" ( http://www.codeproject.com/KB/recipes/tst.aspx) для поиска похожих строк.

С уважением, Патрисио

Другие вопросы по тегам