复杂字符串匹配

时间:2014-05-02 12:09:54

标签: java artificial-intelligence string-comparison string-matching

在Java中,我使用Levenshtein算法(apache commons)来尝试将say对象列表与另一个“几乎抛光”列表进行匹配。几乎抛光的内容包括:

  • 面包
  • 螺丝刀
  • 螺丝
  • 番茄
  • 番茄汁
  • 半个苹果
  • 青苹果
  • 苹果

另一个大的列表可以包含与上面相同的单词,但也包含其他内容,因为它可以是句子的一部分或仅是特定项目(例如,青苹果的四分之一或关于编程的旧书)。此列表中的项目已编入索引并属于特定Box。它是一个数据库表,其中的项目被索引。

我要做的是将大项目列表与“抛光”列表相关联。像

  • 青苹果的四分之一=>苹果
  • 稍微使用过的编程书=>书(或编程书,如果它在列表中)

Levenshtein可能是解决方案,但我没有得到我所期望的,有时是完全错误的,有时它不够智能(“编程键盘”用“编程书”而非“键盘”索引)。 / p>

有更有效的方法吗?我认为我的第一步是清理抛光清单,但我不知道该怎么做。也许我应该对列表中的单词进行加权(如果有多个单词,“-ing”单词不太重要,例如)

我也怀疑我应该提供几个级别的匹配。 100%匹配,80%等。

1 个答案:

答案 0 :(得分:1)

我认为你有两个问题。首先,你有一个句子,你需要从中找到一个关键词(书f.e.)。在这里你有一个问题,如果你有一个像“幽灵般的遮阳伞”这样的句子,幽灵与书中的Levenstein距离4。

在您从句子中检索关键字后,您当然可以将每个单词与特定项目单词进行比较,并将拼写错误的单词视为最短levenstein距离的项目单词。问题在于,对于每个单词,您需要对每个项目进行levenstein比较。

如果你知道你的物品可能是什么,那么关键词的发现会更容易。如果你没有一套特定的项目,但所有专有名词都可以,那么你真的有问题;)