В поисках лучшей системы оценки соответствия текстов javascript - PullRequest
1 голос
/ 14 августа 2011

Я использовал String Score для многих проектов. Отлично подходит для сортировки списков, таких как имена, страны и т. Д.

Сейчас я работаю над проектом, в котором я хочу сопоставить термин с большим набором текста, а не с несколькими словами. Мол, абзац.

Учитывая следующие две строки:

string1 = "I want to eat.";
string2 = "I want to eat. Let's go eat. All this talk about eating is making me hungry. Ready to eat?";

Я бы хотел, чтобы термин eat возвратил string2 выше string1. Тем не менее, string1 баллы выше:

string1.score('eat');
> 0.5261904761904762

string2.score('eat');
> 0.4477777777777778

Может быть, я ошибаюсь, думая, что string2 должен набрать больше очков, и я хотел бы услышать аргументы для этой логики, если это ваша логика. В противном случае, есть идеи относительно более контекстного алгоритма сопоставления javascript?

1 Ответ

2 голосов
/ 14 августа 2011

Если score не учитывает повторения, то только один случай "eat" в string2 добавляет к баллу, поэтому другие вхождения "eat" рассматриваются как несоответствующий мусор, который считается в общем балле.

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

Мне неясно, прочитав источник , какой алгоритм он использует, но переменные оценки

var total_character_score = 0,
  start_of_string_bonus,
  abbreviation_score,
  fuzzies=1,
  final_score;

, по-видимому, не учитывают многократные повторения.

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

Может быть, Йети Ведьма будет работать для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...