搜索文件中最常出现的模式

时间:2011-07-24 07:50:05

标签: algorithm data-structures

如何在文本文件中找到n个最常出现的模式。你会使用什么数据结构? 这里,模式不是单个单词,而是单词序列。例如,“this is a”可能是文件中经常出现的模式。

后续问题:

  • 如果文件非常大(以GB为单位)怎么办?
  • 如果文件包含多种语言的文本(英语,日语等)怎么办?

PS:我知道使用哈希表或BST可以相对容易地找到最常出现的单词。只是想不出我们如何找到多字符串。

3 个答案:

答案 0 :(得分:5)

短语频率的一种方法是使用专门的数据结构,如后缀数组(参见http://en.wikipedia.org/wiki/Suffix_array,如果你喜欢学术论文,http://www.mitpressjournals.org/doi/pdf/10.1162/089120101300346787)。

如果要有数十亿字节的数据要编制索引,请在大型集群上使用hadoop! : - )

答案 1 :(得分:1)

查看PPMCleary and Teahan(部分匹配预测)或{{3}}的PPM *方法。它用于文本压缩。虽然您不需要压缩,但任务是相同的 - 使用高效数据结构非常有效的方式查找常见的大多数字符序列。看看Cleary& amp;上面的Teahan看看他们是如何实现这一点的 - 这是一个非常好的算法。我打赌也有一些开源实现。

答案 2 :(得分:0)

我不明白为什么语言很重要,除了确定单词边界的位置。我还假设模式有一定的长度?或者答案肯定是长度为1的模式,这是微不足道的。那么为什么不使用哈希表来计算所有的n-gram呢?