【发布时间】:2011-07-24 07:50:04
【问题描述】:
您将如何在文本文件中找到 n 个最常出现的模式。你会使用什么数据结构? 在这里,模式不是一个单词,而是一个单词序列。例如,“this is a”可能是文件中经常出现的模式。
后续问题:
- 如果文件非常大(以 GB 为单位)怎么办?
- 如果文件包含多种语言(英语、日语等)的文本怎么办?
PS:我知道使用哈希表或 BST 可以相对容易地找到最常出现的单词。只是想不出我们如何找到多字串。
【问题讨论】:
您将如何在文本文件中找到 n 个最常出现的模式。你会使用什么数据结构? 在这里,模式不是一个单词,而是一个单词序列。例如,“this is a”可能是文件中经常出现的模式。
后续问题:
PS:我知道使用哈希表或 BST 可以相对容易地找到最常出现的单词。只是想不出我们如何找到多字串。
【问题讨论】:
短语频率的一种方法是使用专门的数据结构,如后缀数组(请参阅http://en.wikipedia.org/wiki/Suffix_array,如果您喜欢学术论文,请参阅http://www.mitpressjournals.org/doi/pdf/10.1162/089120101300346787)。
如果您有千兆字节的数据要索引,请在大型集群上使用 hadoop! :-)
【讨论】:
查看PPM 的PPM(部分匹配预测)或PPM* 方法Cleary and Teahan。它用于文本压缩。尽管您不需要压缩,但任务是相同的 - 使用 高效的数据结构,以非常有效的方式找到最常见的字符序列。看看上面 Cleary & Teahan 的论文,看看他们是如何做到这一点的——这是一个非常好的算法。我敢打赌也有一些开源实现。
【讨论】:
我不明白为什么语言很重要,除了确定单词边界的位置。我还假设模式有一定的长度?否则答案肯定是长度为 1 的模式,这是微不足道的。那么为什么不确实使用哈希表来计算所有 n-gram 呢?
【讨论】: