0

この質問はコンセプトチェックのためのものです。リスト{000.00-012.0.0.0および000.00-008.0.0.0}から最も近い一致を見つけたい文字列000.00-010.0.0.0があります(編集メジャーに数値距離メジャーを含めます) 「012」、「010」、「008」をトークンとして取り、これらの間の距離を測定するのが好きです。

文字列一致への標準的なアプローチでは、各文字位置の変化を探し、変化を合計して距離を返します。変更された距離は、CHARS間のASCII距離も測定します-GはDよりもEから遠いです。

'012'が'010'に対して'008'であることを測定するには、3つの文字をトークンにバンドルする必要があります。このトークンは、編集距離と距離を簡単に測定できますか?ツリーデータベースの区切り文字を削除すると、問題はより複雑になります。

現実をチェックしたい私の提案した解決策は、「012」、「010」、および「008」を単一のCHAR ASCII記号、たとえば)、*、および+に変換し、文字距離と文字列編集距離を測定してから、印刷することです。 '012'、 '010'、および'008'に変換し直します。

サンプル文字列:MER99.C0.00M.14.006.00.060.350

そして、ワイルドカードがあります:

  • MER99.*.006.00.060.350
  • MER99.C0.00M.??.006.00.060.350

文字列は同じ長さであるため(長さにはダミー文字が必要な場合もあり、「00M」は実際には「M」です)、ハミング距離と一致します。

一致アルゴリズム、ハミング距離アプローチ、ワイルドカード、またはダミー文字についてのヘルプは必要ありません。これをコンテキストとして質問に追加しました。現在、トークンを個別の文字として扱い、良好な結果が得られますが、トークンとして処理した場合ほど正確ではないことを知っています。制限要因は、おそらくコーディングスキーマ内の不整合です。ただし、アルゴリズムではなく、それを制限として使用したいと思います。

4

1 に答える 1

1

文字列には英数字、つまり36進数が含まれています。さらに、これらの文字は「トークン」にグループ化されます。に保存することはできませんが、に保存することはcharできますint

ツリーにintを格納する代わりに、charが値のタイプを示すペアを格納できます。

  • 0数値の場合
  • 1にとって*
  • 2for xxxx?(マスク)
  • 等...
于 2012-07-26T19:06:49.223 に答える