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

StackOverflow https://stackoverflow.com/questions/83777

  •  01-07-2019
  •  | 
  •  

Вопрос

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

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

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

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

Это было полезно?

Решение

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

У меня есть проект .NET 1.1, в котором я использую последний.Это упрощенно, но отлично работает для того, что мне нужно.Насколько я помню, нужно было немного подправить, но ничего такого, что было бы неочевидно.

Другие советы

вы также можете посмотреть очень впечатляющую библиотеку под названием Sam's String Metrics. http://sourceforge.net/projects/simmetrics/files/.это включает в себя множество алгоритмов.

  • Расстояние Хэмминга
  • Расстояние Левенштейна
  • Расстояние Нидлмана-Вунча или алгоритм Селлерса
  • Расстояние Смита-Уотермана
  • Расстояние Гото или расстояние Смита-Уотермана-Гото
  • Расстояние блока или расстояние L1 или расстояние городского квартала
  • Расстояние Монж-Элькан
  • Метрика расстояния Джаро
  • Яро Винклер
  • Метрика расстояния SoundEx
  • Коэффициент соответствия
  • Коэффициент Дайса
  • Сходство Жаккара или коэффициент Жаккара или коэффициент Танимото
  • Коэффициент перекрытия
  • Евклидово расстояние или расстояние L2
  • Косинусное подобие
  • Вариационное расстояние
  • Расстояние Хеллингера или расстояние Бхаттачарьи
  • Информационный радиус (расхождение Дженсена-Шеннона)
  • Гармоническое среднее
  • Косая дивергенция
  • Вероятность путаницы
  • Тау
  • Метрика Феллеги и Сантерса (SFS)
  • TFIDF или TF/IDF
  • ФастА
  • БластП
  • Максимальные совпадения
  • q-грамма
  • Алгоритмы Укконена

Это не мое собственное изобретение, но они мои любимые, и я только что написал о них в блоге и опубликовал свои собственные измененные версии коэффициента кубика, расстояния Левенштейна, самой длинной общей подпоследовательности и двойного метафона в сообщении в блоге под названием Четыре функции для поиска нечетких совпадений строк в расширениях C#.

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

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

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

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

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

Я использовал «Тернарный словарь дерева поиска на С#» (http://www.codeproject.com/KB/recipes/tst.aspx) для поиска похожих строк.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top