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


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

спасибо всем за помощь.

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

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

9 58

9 ответов:

Левенштейна реализации:

У меня есть проект .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://en.wikipedia.org/wiki/Edit_distance

существует следующий алгоритм расстояния Левенштейна, который присваивает значение сходству двух строк (ну, на самом деле разница), которые могут быть использованы для построения:http://www.merriampark.com/ldcsharp.htm

The Проект Бигль для Linux написан на c# (mono) и является google-desktop, как инструмент поиска. Он может иметь некоторый код там для такого рода сопоставления строк.

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

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

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