2009-06-19 6 views
0

難しい質問には申し訳ありません。このようになりますシーケンス補正のためのN-Gram

私はどちらかによって修正される配列の大きなセットを持っている/または数字を追加するか、(何かを削除することはありません)、それらを置き換える:

  • 1,2、3 => 1,7 、4,3
  • 4、5,6- => 4,4,5,6
  • 4,7,8,9 => 4,7,8,9,1
  • 4,7 = > 4,8
  • 4,7,1 => 4,7,2

パッディングされた元のシーケンスとサンプル補正で始まります。私は異なるnグラムが補正された頻度を計算することによって、自動的に配列を修正上で動作できるようにしたい

、最初のサンプルが

  • 1 => 1
  • 2となります=> 1,7,4 => 7
  • 3 => 3
  • 1,2 => 1,7
  • 2,3 => 7,4,3
  • 1,2,3、 3

これらのnグラム修正の頻度を収集したいと思います。私は、サンプルデータにあるかもしれないかもしれない新しい入力を修正する最良の方法を計算する方法を探しています。

これはSMTと似ているようです。

+0

あなたの最後の2つの例で2,3 => 7,4,3が2、、3 => 7,4,3であるべきですか? また、NULLの ",,"エントリは、他のアイテムとは異なる意味を持ちますか? – Sparr

+0

さらに詳しい情報が必要です:これらの修正は再帰的ですか、必要な評価順序がありますか?そして、複数のルールが適用されている場合、どのように処理されますか?たとえば、1,2 => 1,2,3 AND 2,3 => 2,3,4という規則を1,2,3に適用すると1,2,3または1,2が得られるはずです。 3,4または1,2,3,3または1,2,3,3,4 OR 1,2,3 ..............? – BobMcGee

答えて

1

置換えの長さと出現回数に基づいて、既知の置換えにスコアを割り当てます。純粋に、私はこのスコアを長さの2乗に比例させることを提案します(より長い一致は、私が考えることができるほとんどのシナリオではよりまれです)と発生数の平方根にすることで、 16回頻繁に発生する2項目のシーケンスとして表示されます。これはあなたの実際の状況に基づいて調整する必要があります。

長さMのシーケンスを指定すると、長さ1〜MのN個の部分文字列があります(N = M *(M + 1)/ 2)ので、文字列が合理的に短い場合は、可能な交換を可能にする。これらの部分文字列から文字列全体を構成する方法の数もM^2に比例すると私は考えています。

元の文字列を部分文字列で構成する可能性がある場合は、各部分文字列の最高(最高)スコアの合計スコアを加算します。

合計得点が最も高い構成は、(おそらく、プロセスについての私の前提に基づいて)「最良の」交換後の結果になります。

関連する問題