我正在尝试使用一些众所周知的算法来比较两个字符串(产品名称),例如Levenstein 距离和字符串 simmetrics的不同解决方案库(使用SmithWatermanGotoh alg获得了最佳结果)。
两个字符串是:
iPhone 3gs 32 GB 黑色
苹果 iPhone 3 gs 16GB 黑色
如果某些单词的顺序不同(这是算法工作方式所预期的),Levenstein 在整个字符串上的工作非常糟糕,所以我尝试实现逐字比较。
我面临的问题是检测用空格字符(' 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 中的单词被拆分,则此方法有效,但我不知道如何进行反向操作,检测 str2 中在 str1 中拆分的单词。
我希望我至少有点清楚我想要做什么。感谢您的每一次帮助。