前缀树

中文分词算法 之 词典机制性能优化与测试

夙愿已清 提交于 2019-12-10 07:03:08
在之前的两篇博文 中文分词算法 之 基于词典的正向最大匹配算法 和 中文分词算法 之 基于词典的逆向最大匹配算法 中,我们对 分词实现 和 词典实现 都做了优化,本文对词典实现做进一步优化,并和之前的多个实现做一个对比,使用的词典 下载地址 ,使用的测试文本 下载地址 。 优化TrieV3的关键在于 把虚拟根节点(/)的子节点(词表首字母)提升为多个相互独立的根节点,并对这些根节点建立索引 。优化的依据是 根节点(词表首字母)的数量庞大,索引查找的速度远远超过二分查找 。 下面看看进一步优化后的TrieV4和之前的TrieV3的对比: /** * 获取字符对应的根节点 * 如果节点不存在 * 则增加根节点后返回新增的节点 * @param character 字符 * @return 字符对应的根节点 */ private TrieNode getRootNodeIfNotExistThenCreate(char character){ TrieNode trieNode = getRootNode(character); if(trieNode == null){ trieNode = new TrieNode(character); addRootNode(trieNode); } return trieNode; } /** * 新增一个根节点 * @param