【问题标题】:fuzzy .substring text-matching function模糊 .substring 文本匹配函数
【发布时间】:2017-07-08 22:40:55
【问题描述】:

我正在寻找一种模糊substring 函数的方法。这是什么意思:

  • 给出了两个字符串。
  • 一个通常比另一个长。让我们称之为“短”和“长”
  • 我们想要计算“长”中出现了多少“短”。
  • 我们要考虑邻近度和顺序。就像“短”的元素出现在“长”中一样,它们更倾向于以相同的顺序出现并且彼此靠近。

示例 1:

  • 简短:“杂草被摧毁”
  • Lo​​ng:“用细菌基因改造的作物可以在杂草被破坏的同时生长,而能够抵抗破坏性昆虫的转基因作物减少了对化学杀虫剂的需求。”

这是完全匹配的,得分应为 1.0。

示例 2:

  • 简短:“杂草将被摧毁”
  • 长:同上。

这是一个模糊匹配,因为“weed”和“destroyed”出现在文本中,但没有“will be”。它仍然应该获得高分(比如 0.8)。

示例 3:

如果我们将“Short”设置为“destroyed will be weeds”,虽然“destroyed”和“weeds”都出现在原文中,但分数应该很低,因为它们的顺序发生了变化。

对此有什么建议的实施吗?

最后一点是,没有唯一的方法来进行此评分。但我正在寻找一种算法。该算法的参数可以根据需要和要求进行调整。

【问题讨论】:

  • 停用词可以处理限定词和冠词。 N-grams 可以阐明语法。我的看法。
  • A)这不是一个 Scala 问题 B)它肯定是在要求“场外资源”,所以是题外话。 C)如果不是这样,它就太宽泛了! D) 右侧的许多“相关”问题似乎涵盖了相同的领域。

标签: algorithm nlp substring


【解决方案1】:

我会在依赖树中拆分两个字符串(类似于this)。然后,从根递归遍历较小的树并检查令牌是否存在于较大的树中。如果是,则添加分数similarity_of_dependency_kind。或者,可以乘以similarity_of_destination_words(就同义性而言,类似于wordnet)。

这种方法效率较低,但更准确。

另外,不要忘记初步的数据清理,例如错字更正。

【讨论】:

    【解决方案2】:

    这是一种可能的方法:

    1. 对于第一个单词 short(0),将第一个 indexOf 存储在 long 中
    2. 对于每个后续单词 short(n),存储以下两项:a) 第一个 indexOf 以 long 形式存储,b)(首选)第一个 indexOf short(n),不晚于首选 indexOf short(n-1 )。
    3. 相应评分

    【讨论】:

    • 好答案。重复(“长”段落中的“短”术语)可能会使这种方法复杂化。
    猜你喜欢
    • 1970-01-01
    • 2012-01-03
    • 1970-01-01
    • 2016-02-11
    • 2021-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多