我想创建一个获取大量文本文件的系统(该系统每2分钟获取一些文本文件)并找到至少有一个常用句子的文件。我可以使用哪些算法来做到这一点?
谢谢
答案 0 :(得分:0)
您可以使用位置敏感的散列(请参阅https://en.wikipedia.org/wiki/Locality-sensitive_hashing或http://infolab.stanford.edu/~ullman/mmds.html的第3章)。
答案 1 :(得分:0)
一种非常简单的方法是在获取文本文件时解析它们,并创建一个包含句子的数据库以及包含该句子的文档。也就是说,你有类似的东西:
Sentences table
Key - a unique sequential integer
Hash - a 32-bit or 64-bit hash code created from the sentence
Text - The full sentence text
Files table
Key - a unique sequential integer
Name - the file's name
Associations table
FileKey
SentenceKey
因此,当您解析一个句子时,创建哈希码并在数据库中查询包含该哈希码的所有句子。可能有倍数。如果没有找到句子,或者如果遇到重复的哈希码(即哈希匹配但句子文本不同),则在Sentences表中创建一个新条目。在任何一种情况下,您都在“关联”表中创建一个条目,说“此文件包含此句子。”
您可以在解析的同时构建包含常用句子的文件列表。您需要做的就是在找到匹配项时随时输出公共文件。
如果您想稍后查询数据,可以按SentenceKey对关联表进行排序,消除仅在一个文件中出现的句子,最后得到重复项。
这是广泛的招数。我掩盖了一些实施细节,但并没有真正的繁重工作。
此外,您不必使用DBMS来执行此操作。如果你有足够的内存,你可以使用内存数据结构。但数据库非常方便,因为它可以保留信息,并且它可以用来做这样的事情。