|
1
3
您可能需要对从单词到位置列表(字节码偏移)的映射进行索引。单词列表将按字母顺序排列。然后你就可以有一个二级索引,在这个大的单词列表中,某些字母从哪里开始。
这是我所在系的自然语言教授提倡的方法(我们在一个算法课程的实验室里做了这个练习)。 |
|
|
2
3
你试过使用索引引擎吗。。。喂,卢森和努奇?Lucene是索引引擎。Nutch是网络爬虫。结合力量! 我忘了提。。。库奇达( http://couchdb.apache.org/ ) |
|
|
3
2
我在这方面很成功 Boyer-Moore 算法及其应用 simplified version . 网络上有各种语言的实现。 |
|
|
4
0
@aloobe的答案是使用一个索引文件将单词映射到位置。我只是想解释一下,尽管我认为OP想要的答案可能只是博伊尔·摩尔。 索引文件如下所示(简化为使用人类可读的2位数字):
这使您能够
Binary Search
这种方法也适用于重复的单词。如果你想找到单词的所有位置
索引文件的创建是唯一困难的部分。你需要浏览语料库中的每个单词,建立单词及其索引的数据结构。在此过程中,跳过那些太常见或太短而无法列出的单词,如“a”、“I”、“the”、“and”、“is”等。完成后,可以将该数据结构转换为索引文件。对于25GB的文件,您的索引必须是>不幸的是,32位,所以使用
我建议的结构是 self-balancing binary search tree . 每个节点都是一个字符串值(单词)和索引。但是,树仅基于字符串比较节点。如果这样做,那么按顺序遍历(左、节点、右)将准确地给出索引文件。 |