1

他の同様のテキストのハッシュと一致/比較するテキスト(私の場合はhtml)から一種のハッシュキーを作成したいと思います

一致するテキストの例:

  • "2012/10/01 これは私のウェブページ #1 です"+ 100k_of_same_text + random_words_1 + ..
  • "2012/10/02 これは私のウェブページ #2​​ です"+ 100k_of_same_text + random_words_2 + ..
  • ...
  • "2012/10/02 これは私のウェブページ #2​​ です"+ 100k_of_same_text + random_words_3 + ..

これまでのところ、数字とタグを削除することを考えていましたが、それでもランダムな単語が残ります.

これを投与するものはありますか?

サーバーへのルート アクセス権があるので、必要な UDF を追加できます。また、必要に応じて、C または他の言語で処理を実行できます。

理想は、一致するテキストの割合を返すような関数generateSimilarHash(text)やその他の関数です。compareSimilarHashes(hash1,hash2)

compare(text1,text2) のような関数は、比較するページがたくさんあるため、私の場合のようには機能しません (現時点では約 20 ミル)。

どんなアドバイスも大歓迎です!

4

3 に答える 3

2

私はこのようなことをする必要がなかったので、一般的なハッシュの知識に基づいて何かを投げ出すだけです。

まず、一般的に、比較したい文字列全体をそこからハッシュされた1つの値として表すことができるとは思えません。次に、それだけを使用して近似一致を有意義に見つけることができます。ハッシュ関数は、一般に、入力値のわずかな変化から出力値に大きな疑似ランダムの差を生成するように設計されています。したがって、単純に使用すると、この問題には適していませんが...

うまくいく可能性があるのは、長いテキストをサブセクションに分割するための規則を使用することです。たとえば、終了句読点(ピリオド、感嘆符、疑問符)を少なくともN文字離して検索し、それらの個々のサブ文字列をハッシュして、一致するハッシュの数を使用できます。一致するテキストの量を概算します。

テキストを適切な数の個別のハッシュに分割するには、適切なレベルの粒度を計算する必要があります。ハッシュのサイズとハッシュ比較の速度と一致の精度のバランスを取ります。また、文字を単一の大文字小文字に変換したり、1つ以上の空白文字の各領域を単一のスペースに置き換えたり、句読点をスペースに置き換えたりするなど、以前の変換を行うこともできます。そうすれば、些細な違いでハッシュが発生することはありません。不一致-好みに合わせて調整します。

あなたの例では:

"2012/10/01これは私のウェブページ#1" + 100k_of_same_text + random_words_1 + ..

終止符で中断したり、終止符がない場合、セクションに最大5〜20語が表示されるように、ソートされた語順で極小値が見つかります...次のような部分文字列で終わる可能性があります。

  • 「2012/10/01これは私のウェブページ#1です。」
  • 「これは100kのテキストの最初のビットです。」
  • 「これは、100kのテキストの2番目のビットです。」
  • 「100kからもう少し。」
  • 「チキンブックドッグクレヨンスティックハグ」
    • 「リンゴ」が地元の分であるために壊れます
  • 「リンゴの小枝紙手袋ブックエンドIBM」
    • 「アクティベーション」がローカル分であるために中断
  • 「活性化皇位簒トライアドモンキーレンチ。」
    • 「。」を破る
  • 「ゼブライタリアクォークシチュー世紀恐竜ジャケットエッグトリック」
    • 「チキン」が地元の分であるために休憩。「世紀」は5語未満です
  • 「チキンジョークロード悪い」

次に、上記のそれぞれで通常の文字列ハッシュ関数を使用します。これを他の同様にハッシュされたテキストと比較するには、一致するハッシュ値の数を探します(テキストの一致するサブセクションの順序や連続性を重要視しない場合は、事前に並べ替えられたリストを反復処理するのが非常に効率的です。両方のハッシュセット、またはハッシュテーブルにハッシュ値を事前入力してから、それぞれを順番にシークします)。

于 2013-02-07T09:26:40.600 に答える
0

ランダムな単語に対して DJB ハッシュ アルゴリズムを使用してみることができます。そして、ハッシュキーを比較します。実際、2 つの異なるテキストで同じ結果が得られる可能性は常にわずかですが、32 ビットのハッシュが十分でない場合は、64 ビットに拡張したり、テキストへの参照を保持して比較したりすることができます。ハッシュは同一です。

詳細はこちら:DJBハッシュ

于 2013-02-07T09:11:30.737 に答える