本文重点介绍了3种匹配方式
- 正向最长匹配
- 逆向最长匹配
- 双向最长匹配
词典分词
中文分词:指的是将原文的一段段文本拆分成一个个单词的过程,这些单词顺序拼接后组成原文本。分为两个方法:基于词典规则和基于机器学习
词典分词:最常见的分词算法,一套词典和一套查词典的规则即可。
词
词语指的是具备独立意义的最小单位。词典中的字符串就是词。词的性质满足齐夫定律
:一个单词的频率和它的词频排名成反比。
词典
HanLP词典
词典格式是空格为分隔符的表格形式
- 第一列是单词本身
- 第二列和第三列是词性和相应的词频
如果单词本身就有空格,使用英文逗号分隔的.csv
文件
词典加载
利用Python进行加载
1 | def load_dictionary(): |
切分算法
常用的切分规则
- 正向最长匹配
- 逆向最长匹配
- 双向最长匹配
它们都是基于完全切分过程。完全切分过程指的是找出一段文本中的全部单词。
朴素完全切分
遍历文本中的连续序列,查询该序列中是否在词典中即可。
1 | def fully_segment(text, dic): # 需要遍历的文本和对照的词典 |
正向最长匹配
- 越长的单词表达的意义越丰富,定义单词越长优先级越高
- 以某个下标为起点的递增查词的过程中,
优先输出更长的单词
,这种规则成为最长匹配算法- 下标的顺序是从前往后,称之为正向最长匹配
- 如果是从后往前,则称之为逆向最长匹配
1 | def forward_segment(text, dic): # 需要遍历的文本和对比词典 |
逆向扫描
在从后往前扫描的过程中,保留最长单词。
1 | def backward_segment(text, dic): # 需要扫描的文本和对比的词典 |
双向最长匹配
双向最长匹配的规则如下
- 同时执行正向和逆向最长匹配,如果两者的次数不同,则返回词数更少的那个
- 否则,返回的是两者中单字更少的那个。当单字数也相同,优先返回逆向最长匹配的结果
1 | def count_single_char(word_list): # 统计单字成词的个数 |