14

2 つの字幕ファイルがあります。それらが同じテキストを表しているか、類似のテキストを表しているかを示す関数が必要です

「風が吹いている...音楽が流れている」のようなコメントが1つのファイルだけにある場合があります。ただし、内容の 80% パーセントは同じになります。関数は TRUE を返す必要があります (ファイルは同じテキストを表します)。また、次のように l (one - L) の代わりに 1 のようなスペルミスがある場合もあります: She 1eft the bug . もちろん、関数が TRUE を返さなければならないことを意味します。

私のコメント:
関数は、テキストの類似性のパーセンテージを返す必要があります - AGREE

「all the people was happy」と「all the people were not happy」 - ここではスペルミスと見なされるため、同じテキストと見なされます。正確には、関数が返すパーセンテージは低くなりますが、フレーズが類似していると言えるほど高くなります

レーベンシュタインをファイル全体に適用するか、検索文字列だけに適用するかを検討してください。レーベンシュタインについてはわかりませんが、アルゴリズムはファイル全体に適用する必要があります。ただし、非常に長い文字列になります。

4

5 に答える 5

13

レーベンシュタイン アルゴリズム: http://en.wikipedia.org/wiki/Levenshtein_distance

ゼロ以外の結果は、テキストが「同一」ではないことを意味します。「似ている」は、それらがどれだけ離れているか/近いかの尺度です。結果は整数です。

于 2010-02-24T11:42:51.660 に答える
6

あなたが説明した問題(つまり、大きな文字列を比較する)については、周波数ベクトルという用語に基づいて、0(完全に異なる)から1(同一)の数値を返すCosine Similarityを使用できます。

ここで説明されているいくつかの実装を確認することをお勧めします:コサインの類似性

于 2011-11-06T14:06:33.183 に答える
2

おおよその grepを見てください。あなたが話しているように、テキストの大きなチャンクでひどく実行することはほぼ確実ですが、それはあなたにポインタを与えるかもしれません.

編集: agrep の元のバージョンはオープン ソースではないため、 http://en.wikipedia.org/wiki/Agrepから OSS バージョンへのリンクを取得できます。

于 2010-02-24T11:36:59.580 に答える
2

ここで期待しすぎています。特定のニーズに合わせて関数を作成する必要があるようです。既存のファイル比較アプリケーション (おそらくdiffには必要なものがすべて含まれている) から始めて、入力に対して良い結果が得られるように改善することをお勧めします。

于 2010-02-24T11:37:59.460 に答える
1

レーベンシュタイン距離には多くの代替手段があります。たとえば、Jaro-Winkler 距離.

このようなアルゴリズムの選択は、言語、単語の種類、人間が入力した単語などによって異なります...

ここでは、1 つのライブラリ内で複数のアルゴリズムを実装するのに役立ちます。

于 2014-05-20T06:32:06.107 に答える