模糊.substring文本匹配函数

时间:2017-02-19 18:37:07

标签: algorithm nlp substring

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

  • 给出了两个字符串。
  • 一个通常比另一个长。让我们称之为“短”和“长”
  • 我们想得分“长”中出现了多少“短”。
  • 我们想考虑邻近度和奥得河。就像“短”的元素出现在“长”中一样,它们最好以相同的顺序出现并且彼此接近。

示例1:

  • 简短:“杂草被毁”
  • Long:“用细菌基因改造的作物使植物对除草剂具有抗性可以在杂草被破坏的情况下生长,并且能够抵抗破坏性昆虫的基因工程作物减少了对化学杀虫剂的需求。”

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

示例2:

  • 简短:“杂草将被摧毁”
  • Long:与上述相同。

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

示例3:

如果我们将“短”设置为“被破坏的将是杂草”,虽然“破坏”和“杂草”都出现在原始文本中,但分数应该非常低,因为它们的顺序已经改变。

对此有何建议?

最后一点是,没有独特的方法来做这个得分。但我正在寻找AN算法。可以根据需要和要求调整该算法的参数。

2 个答案:

答案 0 :(得分:2)

这是一种可行的方法:

  1. 对于第一个单词short(0),将第一个indexOf存储在long
  2. 对于每个后续单词short(n),存储以下两者:a)第一个indexOf为long,b)(首选)第一个indexOf short(n)不迟于首选indexOf short(n-1) )。
  3. 得出相应的分数

答案 1 :(得分:2)

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

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

另外,请不要忘记初步数据清理,例如错别字修正。