【问题标题】:complex String matching复杂的字符串匹配
【发布时间】: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


【解决方案1】:

我认为你有两个问题。首先,你有一个句子,你需要从中找到一个关键字(书 f.e.)。如果你有一个像“spooky parasol”这样的句子,其中 spooky 与书的 Levenstein 距离为 4,你就会遇到问题。

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

如果您知道您的商品可能是什么,则更容易找到关键字。如果您没有一组特定的项目,但所有专有名词都可以,那么您确实有问题;)

【讨论】:

  • 找到关键字意味着我应该有一个关键字列表..这基本上是我想做的。我可以限制集合(食物、办公用品可能 99% 正确),但是我需要做的是一个项目列表,检查我的项目列表是否正确,然后使用它从句子中获取项目。多余的,但也许我可以解决这个问题:苹果 -> 半个苹果 -> 一个切片的半个苹果。
猜你喜欢
  • 2017-12-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-14
  • 1970-01-01
  • 1970-01-01
  • 2020-08-04
  • 1970-01-01
相关资源
最近更新 更多