【发布时间】:2014-06-19 02:53:58
【问题描述】:
在 Java 中,我使用 Levenshtein 算法(apache commons)来尝试将 say 对象列表与另一个“几乎完美”的列表相匹配。几乎抛光包含以下内容:
- 面包
- 螺丝刀
- 螺丝
- 番茄
- 书籍
- 番茄汁
- 半个苹果
- 青苹果
- 苹果
另一个大列表可以包含与上述相同的单词,但也可以包含其他内容,因为它可以是句子的一部分或只是特定项目(例如,四分之一的青苹果或一本关于编程的旧书)。此列表中的项目已编入索引并属于特定 Box。这是一个索引项目的数据库表。
我要做的是将大项目列表与“抛光”列表链接起来。喜欢
- 四分之一个青苹果 => 苹果
- 一本稍微用过的编程书 => 书(或编程书,如果它在列表中)
Levenshtein 可能是解决方案,但我没有得到我的期望,有时完全错误,有时它不够智能(“编程键盘”索引为“编程书”而不是“键盘”)。
有没有更有效的方法来做到这一点?我以为我的第一步是清理完善的列表,但我还不知道该怎么做。也许我也应该对列表中的单词进行加权(例如,如果有多个单词,“-ing”单词就不那么重要了)
我也怀疑我应该给出几个级别的匹配。 100% 匹配,80% 等
【问题讨论】:
-
为什么选择莱文斯坦?如果您没有拼写问题但只想识别所说的单词,那么您可以尝试制作一个简单的 String.contains(word) ?
-
我可能有拼写问题,因为这两个列表都来自用户。不过,订购的时间要短得多。
标签: java artificial-intelligence string-comparison string-matching