笔记转载于GitHub项目: https://github.com/NLP-LOVE/Introduction-NLP
2. 词典分词
- 中文分词:指的是将一段文本拆分为一系列单词的过程,这些单词顺序拼接后等于原文本。
- 中文分词算法大致分为基于词典规则与基于机器学习这两大派。
2.1 什么是词
-
在基于词典的中文分词中,词的定义要现实得多:词典中的字符串就是词。
-
词的性质–齐夫定律:一个单词的词频与它的词频排名成反比。

2.2 词典
互联网词库(SogouW, 15万个词条)、清华大学开放中文词库(THUOCL)、HanLP词库(千万级词条)
这里以HanLP附带的迷你核心词典为例(本项目路径):data/dictionnary/CoreNatureDictionary.mini.txt
上升 v 98 vn 18
上升期 n 1
上升股 n 1
上午 t 147
上半叶 t 3
上半场 n 2
上半夜 t 1
HanLP中的词典格式是一种以空格分隔的表格形式,第一列是单词本身,之后每两列分别表示词性与相应的词频。
2.3 切分算法
首先,加载词典:
def load_dictionary():
dic = set()
# 按行读取字典文件,每行第一个空格之前的字符串提取出来。
for line in open("CoreNatureDictionary.mini.txt","r"):
dic.add(line[0:line.find(' ')])
return dic
-
完全切分
指的是,找出一段文本中的所有单词。
def fully_segment(text, dic): word_list = [] for i in range(len(text)): # i 从 0 到text的最后一个字的下标遍历 for j in range(i + 1, len(text) + 1): # j 遍历[i + 1, len(text)]区间 word = text[i:j] # 取出连续区间[i, j]对应的字符串 if word in dic: # 如果在词典中,则认为是一个词 word_list.append(word) return word_list dic = load_dictionary() print(fully_segment('就读北京大学', dic))输出:
['就', '就读', '读', '北', '北京', '北京大学', '京', '大', '大学', '学']输出了所有可能的单词。由于词库中含有单字,所以结果中也出现了一些单字。
-
正向最长匹配
上面的输出并不是中文分词,我们更需要那种有意义的词语序列,而不是所有出现在词典中的单词所构成的链表。比如,我们希望“北京大学”成为一整个词,而不是“北京 + 大学”之类的碎片。具体

本文介绍了中文分词的基本概念,重点讲述了基于词典的分词方法,包括完全切分、正向/逆向最长匹配和双向最长匹配算法。讨论了字典树在分词中的作用,并简单介绍了HanLP的词典分词实现。
最低0.47元/天 解锁文章
3197

被折叠的 条评论
为什么被折叠?



