-
Notifications
You must be signed in to change notification settings - Fork 253
理解结巴分词
andersc edited this page Sep 1, 2015
·
2 revisions
我在尝试理解结巴分词的实现时,最先接触的资料是CSDN上的一系列博客,即对Python中文分词模块结巴分词算法过程的理解和分析,以及这篇之后的连续几篇。读过这几篇文章后,对于结巴分词的思路及具体实现会有很全面的了解。
另外,关于HMM模型的解释,可参考CppJieba的作者写的文章:中文分词之HMM模型详解。
有了上述准备,再看结巴分词的代码就不算困难了。
jieba的主页上提到其算法实现的核心部分包括:
- 基于前缀词典实现高效的词图扫描,生成句子中汉字所有可能成词情况所构成的有向无环图 (DAG)
- 采用了动态规划查找最大概率路径, 找出基于词频的最大切分组合
- 对于未登录词,采用了基于汉字成词能力的HMM模型,使用了Viterbi算法
看下来,这些确实是理解jieba的关键,而且也符合一次分词的完整过程。
- 正则表达式有大量应用,主要用于切分文本及模式匹配
- 在Python中,由于有Python2和Python3的不兼容性,以及处理str和unicode时涉及到的种种编码问题,在C#中都变得很简单了