1

私は多くのプロジェクトで文字列スコアを使用しています。名前や国などのリストを並べ替えるのに最適です。

現在、私は、いくつかの単語だけでなく、より大きなテキストのセットに対して用語を一致させたいプロジェクトに取り組んでいます。段落のように。

次の2つの文字列が与えられます。

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戻したいのですが。ただし、スコアは高くなります。string2string1string1

string1.score('eat');
> 0.5261904761904762

string2.score('eat');
> 0.4477777777777778

たぶん私はstring2もっと高いスコアを付けるべきだと考えるのは間違っています、そしてそれがあなたの論理であるならば、私はその論理についての議論を聞きたいです。それ以外の場合、よりコンテキストに応じたjavascriptマッチングアルゴリズムに関するアイデアはありますか?

4

1 に答える 1

2

scoreが繰り返しを考慮していない場合、"eat"inの1つのオカレンスのみstring2がスコアに追加されるため、他のオカレンスは"eat"、合計スコアにカウントされる不一致のガベージとして扱われます。

多くの文字列類似性メトリックはこのように動作します。たとえば、編集距離では、一致しない文字が多いほどスコアが低くなり、繰り返しは不一致として扱われます。

ソースを読んで、それが使用しているアルゴが何であるかはわかりませんが、スコア変数

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

複数の繰り返しを考慮に入れていないようです。

複数のオカレンスをカウントする場合は、文字列類似性アルゴリズムではなく、あいまい一致アルゴリズムであるように思われるため、一致数を見つけることができます。

多分イエティ魔女はあなたのために働くでしょう。

于 2011-08-14T18:09:44.970 に答える