12

この質問を正確に表現する方法がわからないので、例を次に示します。

string1 = "THEQUICKBROWNFOX" string2 = "KLJHQKJBKJBHJBJLSDFD"

string1 を string2 よりも高くスコア付けする関数と、他の何百万もの意味不明な文字列が必要です。スペースがないことに注意してください。これは単語単位ではなく、文字単位の関数です。

90 年代に、私は Delphi でトライグラム スコアリング関数を作成し、Huck Finn のトライグラムを入力しました。コードを C または Python に移植するか、スタンドアロン ツールに組み込むことを検討していますが、もっと効率的な方法があるはずです。今までに。これを何百万回も行うので、速度は素晴らしいです。Reverend.Thomas Beyse() Python ライブラリを試し、すべて大文字の文字列でトレーニングしましたが、単語間にスペースが必要なようで、[] のスコアが返されます。いくつかのマルコフ連鎖ライブラリを見つけましたが、それらも単語間にスペースが必要なようでした。私の理解では、なぜそうなのかわかりません...

とにかく、私は多くの暗号解読を行っているので、将来的にはスペースと句読点を使用するスコア関数が役立つでしょうが、今は ALLCAPITALLETTERS だけが必要です。

助けてくれてありがとう!

4

5 に答える 5

9

前の (単語の開始時に null の可能性がある) 文字が与えられた場合に、各文字の可能性に関する単純な確率モデルから始めます。辞書ファイルに基づいてこれを構築できます。次に、これを拡張して、前の 2 文字または 3 文字をコンテキストとして使用し、初期モデルが十分でない場合に確率を調整できます。次に、すべての確率を乗算して単語のスコアを取得し、結果を正規化して異なる長さの単語を比較できるようにする場合は、おそらく N 乗根 (N は文字列の長さ) を取ります。

于 2011-07-29T20:01:26.990 に答える
0

ここでは一致指数が役立つ場合があります。https://en.wikipedia.org/wiki/Index_of_coincidenceを参照してください。

まず、IC の期待値 1.73 との差を計算します (上記のウィキペディアを参照)。高度な使用法として、言語コーパスの例を使用して期待値を自分で計算したい場合があります。

于 2016-05-27T23:44:47.653 に答える
0

どのように機能するのかはわかりませんが、Mail::SpamAssassin::Plugin::TextCat電子メールを分析し、それが何の言語であるかを推測します (数十の言語がサポートされています)。

于 2011-07-29T20:41:16.260 に答える
-1

ここで、テキスト読み上げの合成のアイデアを適用できるかもしれないと思います。特に、音声合成プログラムが単語の発音を生成できる場合、それは「英語」と見なすことができます。

前処理ステップは、書記素から音素への変換と呼ばれ、通常、文字列を音にマッピングする確率につながります。

これは、この問題へのいくつかのアプローチを説明する論文です。(この論文が信頼できるとは言えません。これは、ランクの高い検索結果であり、この分野の専門知識があまりないためです。)

于 2011-07-30T00:54:55.210 に答える