单词词典里面基本只要保存词的词性的频率,另外考虑到一次性把词典读入内存的消耗太大,必须把词典分块,当有需求的时候才将特定
的块装载进内存中。在这样的需求下,设计采用如下结构的词典:
+-------------+
| Header | -----> 包括词数量,总频率,索引开头位置,索引大小等
+-------------+
| Index | -----> 每个索引项对应于一个词表块。索引项指示了词表块的位置大小等信息。
+-------------+
| Blocks | -----> 以首字分区的块。
+-------------+
建立完成的单词词典有4Mb,180k+的单词。大概足够了。
接下来要建立短语词典了。这个稍微麻烦一点。手头上的材料有一大堆网上的新闻。原则上把这些新闻进行分词,然后把两两邻接的词拼凑在一起,再将结果进行统计就可以了。但麻烦在于手头上没有好的分词算法,而且如果按照某一种分词方法对句子分词,必然使得到的短语字典的统计概率和该分词算法的行为高度一致,就失去了一般性。考虑再三,决定不采用任何方法进行预分词。直接暴力一点,把句子里所有可能的分词都找出来,一起统计其概率。在大量语料的帮助下,不合理的短语或词的组合应该有较低的出现概率,可以在最终根据概率大小进行筛选的时候把它们去掉。
第一版短语字典选用了大概130M作用的新闻作为语言来源。python的效率实在称不上高,第一次运行用了30+分钟,内存使用更是惊人的达