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