HanLP《自然语言处理入门》笔记--2.词典分词


笔记转载于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
  1. 完全切分

    指的是,找出一段文本中的所有单词。

    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))
    

    输出:

    ['就', '就读', '读', '北', '北京', '北京大学', '京', '大', '大学', '学']
    

    输出了所有可能的单词。由于词库中含有单字,所以结果中也出现了一些单字。

  2. 正向最长匹配

    上面的输出并不是中文分词,我们更需要那种有意义的词语序列,而不是所有出现在词典中的单词所构成的链表。比如,我们希望“北京大学”成为一整个词,而不是“北京

  • 7
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值