我有大量的文本数据。我的整个数据库都是UTF-8的文本格式
我需要在整个文本数据中列出最重复的短语。
例如,我的愿望输出如下所示:
{
'a': 423412341,
'this': 423412341,
'is': 322472341,
'this is': 222472341,
'this is a': 122472341,
'this is a my': 5235634
}
处理和存储每个短语占用数据库的巨大空间。
例如存储在MySQL或MongoDB中。
问题是是否有任何更有效的数据库或算法可以找到此结果?
Solr,Elasticsearch或其他...
我认为每个短语中最多可以包含10个单词,这对我有好处。
最佳答案
我建议结合来自两个 Realm 的想法:Streaming Algorithms和Apriori Algorithm From Market-Basket Analysis。
采样算法的简短说明
这是一种非常简单的算法,极有可能从频率至少为f的项目中找到前k个项目。它分为两个阶段:第一个阶段查找候选元素,第二个阶段对其进行计数。
在第一阶段,从语料库中随机选择〜log(n)/ f个单词(请注意,这远小于n)。您所有需要的单词很有可能出现在这些单词的集合中。
在第二阶段,维护这些候选元素计数的字典;扫描语料,并计数出现次数。
输出第二阶段产生的项目的前k个。
请注意,第二阶段非常适合并行执行。如果将文本划分为不同的段,并计算每个段中的出现次数,则可以轻松地在最后合并字典。
关于search - 在大量文字上找到最重复的短语,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29753618/