Нечеткий поиск - проблема с минимальным сходством - PullRequest
2 голосов
/ 09 января 2020

Я использую Lucene. Net ver 3.0.3 и использовал StandardAnalyzer для создания индекса.

В моем указателе есть текст, для которого нечеткий поиск не работает.

  • Текст в документе: CUBAEXPORT
  • Текст для поиска: CUBAEXPOR
  • Минимальное сходство: 90%
  • Длина (CUBAEXPORT) = 10
  • Длина (CUBAEXPOR) = 9
  • Изменить расстояние = 1
  • Сходство = ((10 - 1) / 10) * 100 = 90%

В моем понимании CUBAEXPOR должно быть найдено на уровне 90%, но оно находится на уровне 88%.

enter image description here

1 Ответ

2 голосов
/ 11 января 2020

Он основан на наименьшей из длины поискового термина и длине индексного термина. Итак, поскольку ваш поисковый термин имеет длину 9, сходство 0,88 - это минимум, который позволял бы использовать одно расстояние редактирования.

Расчет максимального расстояния редактирования выглядит примерно так:

int maxEdits = (int)((1-minSim) * (Math.min(textLength, targetLength)));

Кроме того, помните, что здесь может быть проблема точности с плавающей точкой! Таким образом, если бы вы установили minSim = 0.8 и попытались бы с длиной 5, у вас было бы 0 maxEdits, потому что (1-(float).8)*5 = .99999994, и приведение к int возвращает вас 0.

Long и если не считать этого, я бы не стал слишком беспокоиться о том, чтобы хонинговать точно там, где на вашем нечетком запросе рисуется линия.
(И я рад, что Люсен покончила с этим процентным показателем нечеткое сходство дурачества)

...