【发布时间】:2016-05-13 19:01:16
【问题描述】:
我至少有 500 个包含单词的不同文件(每个单词在单独的行中)。问题是这些列表很长(总共 50 亿条记录),我无法让每个列表都独一无二。我想保留文件名,但同时在每个文件中都有唯一的条目(不合并等)。
到目前为止,我尝试了不同的程序,例如 app.merge 和 ccr,在表中具有唯一列的 DB(postgresql 和 sqlite),但没有运气。找不到可靠的解决方案。您对此有何建议?
编辑:我试图阻止任何文件包含常用词。为了更好地解释它,假设我有 3 个文件,内容如下:
f1:
word1
other
something
f2:
word2
word1
other
f3:
word1
something
myentry
结果我希望看到:
f1:
word1
other
something
f2:
word2
f3:
myentry
当然文件本身要大得多(以这个为例:http://md5decrypt.net/Telecharger-wordlist/Md5decrypt-awesome-wordlist.7z)。要回答“我到目前为止测试的内容”的问题 - 这是我现在正在处理的代码:https://pastebin.com/Y8HutakU,这是结果(运行 1 小时后停止):https://pastebin.com/tknve7qA。我知道代码远非最佳,并且在输出中清晰可见,随着 DB 的增长,下一次插入 DB 需要的时间越来越长。我正在尝试使用 DB,因为我认为这将是让所有单词唯一、保留文件名并具有比较方法以供将来使用(当我下载另一个单词列表进行比较等时)的好解决方案。此外,还有一些关于 SQLite 性能的好文章:
【问题讨论】:
-
您是想防止任何两个文件有共同的单词,还是只是想确保每个文件中的单词在该文件中是唯一的?如果是后者,为什么有多少文件或总字数是多少?还有其他解决方案出了什么问题?
-
我正在尝试防止任何文件包含常用词。
-
那么每个文件中的所有单词都是唯一的吗?你认为一共有多少个不同的词?
-
我担心它们不是独一无二的,但我可以用“sort | uniq”来制作它们。我不知道有多少字,但如果 500 个文件占用大约 100GB 的磁盘空间,那么也许我可以以某种方式估计它。 10 个字符作为一个平均单词 + '\n' 在每行的末尾等。
-
使每个文件只有唯一的单词(vesche 的回答看起来可以解决问题),您的问题可能会变得更小。
标签: python postgresql sqlite word-list bigdata