自然语言处理(二)

中文分词

  • 中文分词:指的是将一段文本拆分为一系列单词的过程,这些单词顺序拼接后等于原文本。
  • 中文分词算法大致分为基于词典规则基于机器学习这两大派。
  • 词典中的字符串就是词。词的性质–齐夫定律:一个单词的词频与它的词频排名成反比。
  • 比如,我们希望“北京大学”成为一整个词,而不是“北京 + 大学”之类的碎片。具体来说,就是在以某个下标为起点递增查词的过程中,优先输出更长的单词,这种规则被称为最长匹配算法。从前往后匹配则称为正向最长匹配,反之则称为逆向最长匹配
  • 双向最长匹配,流程如下:同时执行正向和逆向最长匹配,若两者的词数不同,则返回词数更少的那一个。否则,返回两者中单字更少的那一个。当单字数也相同时,优先返回逆向最长匹配的结果。
  • 字符串集合常用字典树(trie树、前缀树)存储,这是一种字符串上的树形数据结构。字典树中每条边都对应一个字, 从根节点往下的路径构成一个个字符串。字典树将词语视作根节点到某节点之间的一条路径,并在终点节点上做个标记。要查询一个单词,只需顺着这条路径从根节点往下走。如果能走到标记的节点,则说明该字符串在集合中,否则不存在。
  • 当词典大小为 n 时,虽然最坏情况下字典树的复杂度依然是O(logn) (假设子节点用对数复杂度的数据结构存储,所有词语都是单字),但它的实际速度比二分查找快。这是因为随着路径的深入,前缀匹配是递进的过程,算法不必比较字符串的前缀。
  • 基于字典树的其它算法
    首字散列其余二分的字典树
    双数组字典树
    AC自动机(多模式匹配)
    基于双数组字典树的AC自动机
  • DoubleArrayTrieSegment分词器是对DAT最长匹配的封装,默认加载hanlp.properties中CoreDictionaryPath制定的词典。
from pyhanlp import *

# 不显示词性
HanLP.Config.ShowTermNature = False

# 可传入自定义字典 [dir1, dir2]
segment = DoubleArrayTrieSegment()
# 激活数字和英文识别
segment.enablePartOfSpeechTagging(True)

print(segment.seg("江西鄱阳湖干枯,中国最大淡水湖变成大草原"))
print(segment.seg("上海市虹口区大连西路550号SISU"))

输出:

[江西, 鄱阳湖, 干枯, ,, 中国, 最大, 淡水湖, 变成, 大草原]
[上海市, 虹口区, 大连, 西路, 550, 号, SISU]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值