gpt4 book ai didi

ruby - 如何将较长的字符串与较短的单词或字符串匹配

转载 作者:太空宇宙 更新时间:2023-11-03 17:25:09 25 4
gpt4 key购买 nike

我有一个带有标签的项目数据库,例如:

  • item1 被标记为 "pork with apple sauce"
  • item2 被标记为 "pork",
  • item3 被标记为 "apple sauce"

如果我匹配字符串:

"Today I would like to eat pork with apple sauce, it would fill me up"

针对标签,我会得到三个结果。但是,我只想获得最具体的一个,在本例中为 item1

这只是一个例子,我没有使用特定的数据库。只需在 ruby​​ 中进行字符串和映射。我想出了“模糊搜索”。我不确定这是否正确。有人可以建议如何解决这个特定问题吗?

最佳答案

是的,您需要进行模糊匹配(也称为近似匹配)。这是一个众所周知的问题,手动实现近似匹配算法并不是一件容易的事(但我相信这很有趣!=D)。有很多因素会影响两个字符串 A 和 B 的“相似”程度,具体取决于您认为重要的因素,例如 A 在 B 中出现了多少次,或者 A 中单词之间的顺序和距离有多接近出现在B中,或者如果A中的“重要”词出现在B中等等。

如果您可以使用现有的库,似乎有几个 Ruby gem 可以完成这项工作。例如,使用这个名为 fuzzy-string-match 的,它使用 Jaro-Winkler distance从 Lucene(一个 Java 库...它似乎也保留了 Java 驼峰命名方法名称的约定 ¬¬)移植而来:

require 'fuzzystringmatch'

matcher = FuzzyStringMatch::JaroWinkler.create(:pure)

tags = ["pork with apple sauce", "pork", "apple sauce"]
input = "Today I would like to eat pork with apple sauce, it would fill me up"

# Select the tag by distance to the input string (distance == 1 means perfect
# match)
best_tag = tags.max_by { |tag| matcher.getDistance(tag, input) }

p best_tag

将正确选择“pork with apple sauce”

还有另一个 gem 叫做 amatch还有许多其他的近似匹配算法。

关于ruby - 如何将较长的字符串与较短的单词或字符串匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14096363/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com