1

我一直在为很多项目使用字符串分数。它非常适合对列表进行排序,例如名称、国家/地区等。

现在,我正在做一个项目,我想将一个术语与一组更大的文本进行匹配,而不仅仅是几个单词。比如,一段。

给定以下两个字符串:

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 匹配算法的任何想法?

4

1 回答 1

2

如果score不考虑重复,那么只有一次出现的"eat"instring2会增加分数,因此其他出现的"eat"被视为不匹配的垃圾,计入总分。

许多字符串相似性度量都以这种方式运行,例如在编辑距离中,不匹配的字符越多,分数越低,重复被视为不匹配。

从阅读源代码中我不清楚它正在使用什么算法,但是分数变量

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

似乎没有考虑多次重复。

如果您想要计算多次出现,那么听起来您想要的不是字符串相似性算法,而是模糊匹配算法,因此您可以找到匹配的数量。

也许雪人女巫会为你工作。

于 2011-08-14T18:09:44.970 回答