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

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

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

Я уже видел 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
  • Fasta​​li >
  • BLASTP
  • Максимальные совпадения
  • д-грамм
  • Алгоритмы Укконена

Ответ 3

Они не мои собственные изобретения, но они мои любимые, и я только что писал о них и опубликовал свои собственные измененные версии Dice Coefficient, Levenshtein Distance, Longest Common Subsequence и Double Metaphone в блоге, названном Четыре функции для поиска нечетких строковых совпадений в расширениях С#.

Ответ 4

Вы взглянули на Lucene.net? Это порт API поисковой системы Java Lucene для платформы .NET. Эта библиотека предлагает множество функций поиска. Я играл с ним около года назад, поэтому не принимайте мое предложение, основанное на тоннах опыта. Я видел это в книге Windows Developer Power Tools и взял его на тест-драйв. Вы можете просмотреть их API-документацию, чтобы узнать, предлагает ли он что-то вроде поиска нечеткого поиска, который вы ищете.

Ответ 6

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

Ответ 7

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

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

Ответ 8

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

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