Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 重复文本检测/哈希_Python - Fatal编程技术网

Python 重复文本检测/哈希

Python 重复文本检测/哈希,python,Python,我在数据库中有一组字符串。每个集合的成员将少于500个,将有成千上万个集合,字符串是自然语言。我想在每个集合中检测重复的字符串。新字符串将与现有字符串集进行比较,如果它们是唯一的,则将其添加到数据库中 是否有哈希算法可以有效地查找(非常)相似的字符串?例如,字符串的字数可能相同,但编码可能略有不同(UTF-8与拉丁语-1)。如果数据库中只有500个字符串,您可以直接比较每个字符串。首先转换为标准表示(如UTF-16)。这是比较两个字符串相似性的好方法。对于初学者,您可能应该进行某种规格化。您可能

我在数据库中有一组字符串。每个集合的成员将少于500个,将有成千上万个集合,字符串是自然语言。我想在每个集合中检测重复的字符串。新字符串将与现有字符串集进行比较,如果它们是唯一的,则将其添加到数据库中


是否有哈希算法可以有效地查找(非常)相似的字符串?例如,字符串的字数可能相同,但编码可能略有不同(UTF-8与拉丁语-1)。

如果数据库中只有500个字符串,您可以直接比较每个字符串。首先转换为标准表示(如UTF-16)。这是比较两个字符串相似性的好方法。

对于初学者,您可能应该进行某种规格化。您可能应该将所有文本转换为单一编码(例如:UTF-8)。您可能还需要进行箱子折叠、其他操作,还可能需要对每个集合进行排序(取决于存储它们的方式)

(对我来说)你的问题不清楚你是想要找到精确的匹配还是仅仅是“相似”的字符串集。如果您只关心标准化考虑后的精确匹配,那么您就基本完成了。只要在字符串集的规范化形式上有一个索引,就可以通过规范化它们来快速查找新的集合

如果你想找到相近的匹配,那么你可能需要做一些相似性哈希。Wikipedia关于的文章描述了许多技术


这些技术背后的基本思想是在每个字符串上计算少量非常有损的散列,即h[0]到h[n]。要查找一个新的字符串集,您需要计算它的哈希值并查找其中的每一个。任何至少有一个匹配项的东西都是“相似”的,匹配项越多,它就越相似(你可以选择在什么阈值处截断东西)。

简单的答案就是猜测一个好的散列参数会是什么,它符合你的“相似”概念

可能就像所有字母的总和(A)和相邻字母之间的差值总和(B)一样,可能会起作用。对于每个新字符串,使用其A和B值快速查找一组更小的类似字符串,然后对这些字符串进行更仔细的比较


这可能不是最纯粹的解决方案,但实际上,很多问题都是通过这种方式解决的。除此之外,我认为目前有相当多的工作要解决遗传学中类似的问题(即在大型数据库中找到类似的基因序列),但我认为没有一个公认的通用解决方案来解决这个问题。

这可能有些过火,但您可能想尝试一下,这是基于Python的

一个可能有用的特性是。当然,这可能会导致某些字符串被标记为重复,因为它们具有相同的语法结构,但单词和含义不同


您还可以使用概率和分类功能。

您可能会发疯,尝试潜在语义分析/映射和奇异值分解:

加上,这是很容易相处的。

在我的博客上可能会感兴趣


提供了算法说明和代码链接。简而言之,这是一种基于n-grams的方法,它不假设输入的内容或结构,并为所有输入文档生成等长签名。

因为将有许多集,使用Difflib等提供的相似距离是不可行的。木瓦可能是这种方法的一部分-如果您需要类似的木瓦,您可以存储变音或soundex。酷,我第一次听说这个。