使用 Python 进行抄袭检测

数据挖掘 Python nlp 模糊逻辑
2021-09-29 17:09:19

背景

使用 Python,我需要对包含大约 2-7 个单词的较长文本的引用进行评分。引用不必与文本精确匹配,但相似的单词应该具有相同的 order

例如,给定以下长文本

世上最美的东西,看不见摸不着,用心去感受

以下报价应获得高分(例如,高于 80 / 100):

我们世界上的美好事物

世界看不见

他们用心去感受

由于它们不精确,但它们保留了顺序。

而另一方面,这些报价应得分较低(例如,低于 50 / 100):

美丽的心是感受不到也看不到的

他们是世界上最常见的

这些词甚至没有出现在这个文本中

因为(前 2 个)完全出现在文本中,但不保留顺序。

问题

这项任务不能通过简单地检查文本中每个单词的存在来完成。我不知道哪种算法最适合这项任务。

我试过的

fuzzywuzzy(partial_token_sort_ratio等) 中的大多数函数token_sort_ratio对后面的词项得分较高。 partial_ratio确实在较早的条款中得分更高,但报价

这些词甚至没有出现在这个文本中

得到了 52 / 100,这是不合理的高。

我的问题

如上所述,如何使用 python 对较长文本中是否存在短引号进行评分?

1个回答

Python 的fuzzywuzzy使用Levenshtein Distance 来查看字符级别的差异。

您必须探索文本相似性的其他方法。查找非线性加权 n-gram 差异的算法,例如Q-gram

python-string-similarity repo实现了许多文本相似性算法。