レベンスタイン距離や文字列シメトリクスのさまざまなソリューションのライブラリなどのよく知られたアルゴリズムのいくつかを使用して、2 つの文字列 (製品名) を比較しようとしています ( SmithWatermanGotoh algで最良の結果が得られました)。
2 つの文字列は次のとおりです。
iPhone 3gs 32GB ブラック
Apple iPhone 3 gs 16GB ブラック
一部の単語の順序が異なる場合 (アルゴリズムの動作から予想される)、Levenstein は文字列全体でかなりうまく機能しないため、単語ごとの比較を実装しようとしました。
私が直面している問題は、スペース char (' 3gs '->' 3 gs ' ; ' 32 GB '->' 16GB ') で区切られた類似の「単語」を検出する方法です。
私のコードは、短い (単語数、== の場合は str.length) 文字列を長い文字列と比較します。単語は に分割されArrayList<String>
ます。str1 の各単語を同じ文字列内の他の単語と組み合わせて、新しい配列リストを作成しています。
大まかなコードは次のとおりです。
foreach(str1)
foreach(str2)
res1 = getLevensteinDist
endforeach
foreach(combinedstr2)
res1 = getLevensteinDist
endforeach
return getHigherPercent(res1, res2)
endforeach
これは、str2 の単語が分割されている場合に機能しますが、逆の方法がわかりません。str1 で分割されている str2 の単語を検出します。
私が何をしようとしているのか、少なくとも少しは明確になっていることを願っています。すべての助けに感謝します。