自然语言处理NLP之中文分词和词性标注
文章目录一、Python第三方库jieba(中文分词、词性标注)特点二、jieba中文分词的安装关键词抽取基于TF-IDF算法TF-IDF原理介绍基于TextRank算法的关键词抽取textRank算法原理介绍总结一、Python第三方库jieba(中文分词、词性标注)特点支持三种分词模式:1.精确模式,试图将句子最精确地切开,适合文本分析;2.全模式,把句子中所有的可以成词的词语都扫描出来, 速
注:此文章内容均节选自充电了么创始人,CEO兼CTO陈敬雷老师的新书《自然语言处理原理与实战》(人工智能科学与技术丛书)【陈敬雷编著】【清华大学出版社】
文章目录
一、Python第三方库jieba(中文分词、词性标注)特点
支持三种分词模式:
1.精确模式,试图将句子最精确地切开,适合文本分析;
2.全模式,把句子中所有的可以成词的词语都扫描出来, 速度非常快,但是不能解决歧义;
3.搜索引擎模式,在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词。
4.支持繁体分词
5.支持自定义词典
二、jieba中文分词的安装
pip3 install jieba
python文件里通过import jieba来引用
“”"
import jieba
import jieba.analyse
import jieba.posseg
‘’’
- 分词
中文分词就是将连续的字序列按照一定的规范重新组合成词序列的过程。
我们知道,在英文的行文中,单词之间是以空格作为自然分界符的,
而中文只是字、句和段能通过明显的分界符来简单划界,唯独词没有一个形式上的分界符,
虽然英文也同样存在短语的划分问题,不过在词这一层上,中文比之英文要复杂得多、困难得多。
1)jieba.cut 方法接受三个输入参数:
需要分词的字符串;cut_all 参数用来控制是否采用全模式;HMM 参数用来控制是否使用 HMM 模型
2)jieba.cut_for_search 方法接受两个参数:
需要分词的字符串;是否使用 HMM 模型。该方法适合用于搜索引擎构建倒排索引的分词,粒度比较细
3)待分词的字符串可以是 unicode 或 UTF-8 字符串、GBK 字符串。
注意:不建议直接输入 GBK 字符串,可能无法预料地错误解码成 UTF-8
4)jieba.cut 以及 jieba.cut_for_search 返回的结构都是一个可迭代的 generator,
可以使用 for 循环来获得分词后得到的每一个词语(unicode),或者用
5)jieba.lcut 以及 jieba.lcut_for_search 直接返回 list
6)jieba.Tokenizer(dictionary=DEFAULT_DICT) 新建自定义分词器,
可用于同时使用不同词典。jieba.dt 为默认分词器,所有全局分词相关函数都是该分词器的映射。
‘’’
import jieba
seg_list = jieba.cut(“我来到北京清华大学”, cut_all=True)
print("【全模式】: " + "/ ".join(seg_list)) # 全模式
seg_list = jieba.cut(“充电了么App是专注上班族职业技能提升充电学习的在线教育平台”, cut_all=True)
print("【全模式】: " + "/ ".join(seg_list)) # 全模式
seg_list = jieba.cut(“我来到北京清华大学”, cut_all=False)
print("【默认精确模式】: " + "/ ".join(seg_list)) # 精确模式
seg_list = jieba.cut(“我来到北京清华大学”) # 默认是精确模式
print(“【精确模式】”+", ".join(seg_list))
seg_list = jieba.cut(“充电了么App是专注上班族职业技能提升充电学习的在线教育平台”) # 默认是精确模式
print(“【精确模式】”+", ".join(seg_list))
#搜索引擎模式
seg_list = jieba.cut_for_search(“我来到北京清华大学”)
print(", ".join(seg_list))
seg_list = jieba.cut_for_search(“充电了么App是专注上班族职业技能提升充电学习的在线教育平台”)
print(", ".join(seg_list))
seg_list = jieba.cut_for_search(“小明硕士毕业于中国科学院计算所,后在日本京都大学深造”)
print(", ".join(seg_list))
print(“分词完毕。”)
‘’’
【全模式】:
我/ 来到/ 北京/ 清华/ 清华大学/ 华大/ 大学
【精确模式】:
我/ 来到/ 北京/ 清华大学
【搜索引擎模式】:
小明, 硕士, 毕业, 于, 中国, 科学, 学院, 科学院, 中国科学院, 计算, 计算所, 后, 在, 日本,
京都, 大学, 日本京都大学, 深造
‘’’
‘’’
分词应用场景:
比如搜索引擎,拿我们充电了么官网的搜索举例。
http://www.chongdianleme.com
‘’’
‘’’
词性标注:
例子:充电了么App是专注上班族职业技能提升充电学习的在线教育平台
充电/v,了/ul,么/y,App/eng,是/v,专注/v,
上班族/nz,职业技能/n,提升/v,充电/v,学习/v,的/uj,在线教育/l,平台/n
词性表如下所示:
Ag
形语素
形容词性语素。形容词代码为 a,语素代码g前面置以A。
a
形容词
取英语形容词 adjective的第1个字母。
ad
副形词
直接作状语的形容词。形容词代码 a和副词代码d并在一起。
an
名形词
具有名词功能的形容词。形容词代码 a和名词代码n并在一起。
b
区别词
取汉字“别”的声母。
c
连词
取英语连词 conjunction的第1个字母。
dg
副语素
副词性语素。副词代码为 d,语素代码g前面置以D。
d
副词
取 adverb的第2个字母,因其第1个字母已用于形容词。
e
叹词
取英语叹词 exclamation的第1个字母。
f
方位词
取汉字“方”
g
语素
绝大多数语素都能作为合成词的“词根”,取汉字“根”的声母。
h
前接成分
取英语 head的第1个字母。
i
成语
取英语成语 idiom的第1个字母。
j
简称略语
取汉字“简”的声母。
k
后接成分
l
习用语
习用语尚未成为成语,有点“临时性”,取“临”的声母。
m
数词
取英语 numeral的第3个字母,n,u已有他用。
Ng
名语素
名词性语素。名词代码为 n,语素代码g前面置以N。
n
名词
取英语名词 noun的第1个字母。
nr
人名
名词代码 n和“人(ren)”的声母并在一起。
ns
地名
名词代码 n和处所词代码s并在一起。
nt
机构团体
“团”的声母为 t,名词代码n和t并在一起。
nz
其他专名
“专”的声母的第 1个字母为z,名词代码n和z并在一起。
o
拟声词
取英语拟声词 onomatopoeia的第1个字母。
p
介词
取英语介词 prepositional的第1个字母。
q
量词
取英语 quantity的第1个字母。
r
代词
取英语代词 pronoun的第2个字母,因p已用于介词。
s
处所词
取英语 space的第1个字母。
tg
时语素
时间词性语素。时间词代码为 t,在语素的代码g前面置以T。
t
时间词
取英语 time的第1个字母。
u
助词
取英语助词 auxiliary
vg
动语素
动词性语素。动词代码为 v。在语素的代码g前面置以V。
v
动词
取英语动词 verb的第一个字母。
vd
副动词
直接作状语的动词。动词和副词的代码并在一起。
vn
名动词
指具有名词功能的动词。动词和名词的代码并在一起。
w
标点符号
x
非语素字
非语素字只是一个符号,字母 x通常用于代表未知数、符号。
y
语气词
取汉字“语”的声母。
z
状态词
取汉字“状”的声母的前一个字母。
un
未知词
不可识别词及用户自定义词组。取英文Unkonwn首两个字母。(非北大标准,CSW分词中定义)
‘’’
def dosegment_all(sentence):
‘’’
带词性标注,对句子进行分词,不排除停用词等
:param sentence:输入字符
:return:
‘’’
sentence_seged = jieba.posseg.cut(sentence.strip())
outstr = ‘’
for x in sentence_seged:
outstr+=“{}/{},”.format(x.word,x.flag)
#上面的for循环可以用python递推式构造生成器完成
#outstr = “,”.join([(“%s/%s” %(x.word,x.flag)) for x in sentence_seged])
return outstr
str = dosegment_all(“充电了么App是专注上班族职业技能提升充电学习的在线教育平台”)
print(str)
print(“词性标注”)
关键词抽取基于TF-IDF算法
基于 TF-IDF(term frequency–inverse document frequency) 算法的关键词抽取:
import jieba.analyse
jieba.analyse.extract_tags(sentence, topK=20, withWeight=False, allowPOS=())
sentence :为待提取的文本
topK:为返回几个 TF/IDF 权重最大的关键词,默认值为 20
withWeight :为是否一并返回关键词权重值,默认值为 False
allowPOS :仅包括指定词性的词,默认值为空,即不筛选
TF-IDF原理介绍
TF-IDF(term frequency–inverse document frequency)
是一种用于资讯检索与文本挖掘的常用加权技术。
TF-IDF是一种统计方法,用以评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度。
字词的重要性随着它在文件中出现的次数成正比增加,
但同时会随着它在语料库中出现的频率成反比下降。
TF-IDF加权的各种形式常被搜索引擎应用,作为文件与用户查询之间相关程度的度量或评级。
除了TF-IDF以外,互联网上的搜寻引擎还会使用基于连结分析的评级方法,
以确定文件在搜寻结果中出现的顺序。
原理
在一份给定的文件里,词频(term frequency,TF)指的是某一个给定的词语在该文件中出现的次数。
这个数字通常会被正规化,以防止它偏向长的文件。
同一个词语在长文件里可能会比短文件有更高的词频,而不管该词语重要与否。
逆向文件频率(inverse document frequency,IDF)是一个词语普遍重要性的度量。
某一特定词语的IDF,可以由总文件数目除以包含该词语之文件的数目,再将得到的商取对数得到。
高权重的TF-IDF:某一特定文件内的高词语频率,以及该词语在整个文件集合中的低文件频率,
可以产生出高权重的TF-IDF。
因此,TF-IDF倾向于过滤掉常见的词语,保留重要的词语。
‘’’
import jieba.analyse
sentence = “”"
充电了么是专注上班族职业培训充电学习的在线教育平台。
免费学习职业技能,提高工作效率,带来经济效益!今天你充电了么?
充电了么官网:http://www.chongdianleme.com
充电了么App下载:https://a.app.qq.com/o/simple.jsp?pkgname=com.charged.app
功能特色如下:
【全行业职位】 - 上班族职业技能提升
覆盖所有行业和职位,不管你是上班族,高管,还是创业都有你要学习的免费视频和文章。其中大数据人工智能AI、区块链、深度学习是互联网一线工业级的实战经验。
除了专业技能学习,还有通用职场技能,比如企业管理、股权激励和设计、职业生涯规划、社交礼仪、沟通技巧、演讲技巧、开会技巧、发邮件技巧、工作压力如何放松、人脉关系等等,全方位提高你的专业水平和整体素质。
【牛人课堂】 - 学习牛人工作经验
1.智能个性化推荐引擎:
海量免费视频课程,覆盖所有行业、所有职位,通过不同行业职位的技能词偏好挖掘分析,智能推荐匹配你目前职位最感兴趣的技能学习课程。
2.听课全网搜索
输入关键词搜索海量视频课程,应有尽有,总有适合你的免费课程。
3.听课播放详情
视频播放详情,除了播放当前视频,更有相关视频课程和文章阅读推荐,对某个技能知识点强化,让你轻松成为某个领域的资深专家。
【精品阅读】 - 技能文章兴趣阅读
1.个性化阅读推荐引擎:
千万级免费文章阅读,覆盖所有行业、所有职位,通过不同行业职位的技能词偏好挖掘分析,智能推荐匹配你目前职位最感兴趣的技能学习文章。
2.阅读全网搜索
输入关键词搜索海量文章阅读,应有尽有,总有你感兴趣的技能学习文章。
【机器人老师】 - 个人提升趣味学习
基于搜索引擎和人工智能深度学习训练,为您打造更懂你的机器人老师,用自然语言和机器人老师聊天学习,寓教于乐,高效学习,快乐人生。
【精短课程】 - 高效学习知识
海量精短牛人课程,满足你的时间碎片化学习,快速提高某个技能知识点。
充电了么官网:http://www.chongdianleme.com
充电了么App下载:https://a.app.qq.com/o/simple.jsp?pkgname=com.charged.app
“”"
keywords = jieba.analyse.extract_tags(sentence,
topK=36,
withWeight=True,
allowPOS=(‘n’, ‘nr’, ‘ns’))
print(“TF-IDF算法提取关键词:-------------------------------------------”)
for item in keywords:
print(item[0], item[1])
基于TextRank算法的关键词抽取
jieba.analyse.textrank(sentence, topK=20, withWeight=False,
allowPOS=(‘ns’, ‘n’, ‘vn’, ‘v’)) 仅包括指定词性的词,默认值为空,即不筛选。
jieba.analyse.TextRank() 新建自定义 TextRank 实例
基本思想:
将待抽取关键词的文本进行分词
以固定窗口大小(默认为5,通过span属性调整),词之间的共现关系,构建图
计算图中节点的PageRank,注意是无向带权图
textRank算法原理介绍
将原文本拆分为句子,在每个句子中过滤掉停用词(可选),并只保留指定词性的单词(可选)。
由此可以得到句子的集合和单词的集合。
每个单词作为pagerank中的一个节点。设定窗口大小为k,假设一个句子依次由下面的单词组成:
w1, w2, w3, w4, w5, …, wn
w1, w2, …, wk、w2, w3, …,wk+1、w3, w4, …,wk+2等都是一个窗口。
在一个窗口中的任两个单词对应的节点之间存在一个无向无权的边。
基于上面构成图,可以计算出每个单词节点的重要性。最重要的若干单词可以作为关键词。
‘’’
keywords = jieba.analyse.textrank(sentence,
topK=36,
withWeight=True,
allowPOS=(‘n’, ‘nr’, ‘ns’))
print(“TextRank算法提取关键词:==============================”)
for item in keywords:
print(item[0], item[1])
总结
除了自然语言处理NLP之中文分词和词性标注
其它深度学习框架也有不错的开源实现,比如MXNet,
此文章有对应的配套视频,其它更多精彩文章请大家下载充电了么app,可获取千万免费好课和文章,配套新书教材请看陈敬雷新书:《分布式机器学习实战》(人工智能科学与技术丛书)
【新书介绍】
《分布式机器学习实战》(人工智能科学与技术丛书)【陈敬雷编著】【清华大学出版社】
新书特色:深入浅出,逐步讲解分布式机器学习的框架及应用配套个性化推荐算法系统、人脸识别、对话机器人等实战项目
【新书介绍视频】
分布式机器学习实战(人工智能科学与技术丛书)新书【陈敬雷】
视频特色:重点对新书进行介绍,最新前沿技术热点剖析,技术职业规划建议!听完此课你对人工智能领域将有一个崭新的技术视野!职业发展也将有更加清晰的认识!
【精品课程】
《分布式机器学习实战》大数据人工智能AI专家级精品课程
【免费体验视频】:
人工智能百万年薪成长路线/从Python到最新热点技术
视频特色: 本系列专家级精品课有对应的配套书籍《分布式机器学习实战》,精品课和书籍可以互补式学习,彼此相互补充,大大提高了学习效率。本系列课和书籍是以分布式机器学习为主线,并对其依赖的大数据技术做了详细介绍,之后对目前主流的分布式机器学习框架和算法进行重点讲解,本系列课和书籍侧重实战,最后讲几个工业级的系统实战项目给大家。 课程核心内容有互联网公司大数据和人工智能那些事、大数据算法系统架构、大数据基础、Python编程、Java编程、Scala编程、Docker容器、Mahout分布式机器学习平台、Spark分布式机器学习平台、分布式深度学习框架和神经网络算法、自然语言处理算法、工业级完整系统实战(推荐算法系统实战、人脸识别实战、对话机器人实战)、就业/面试技巧/职业生涯规划/职业晋升指导等内容。
【充电了么公司介绍】
充电了么App是专注上班族职业培训充电学习的在线教育平台。
专注工作职业技能提升和学习,提高工作效率,带来经济效益!今天你充电了么?
充电了么官网
http://www.chongdianleme.com/
充电了么App官网下载地址
https://a.app.qq.com/o/simple.jsp?pkgname=com.charged.app
功能特色如下:
【全行业职位】 - 专注职场上班族职业技能提升
覆盖所有行业和职位,不管你是上班族,高管,还是创业都有你要学习的视频和文章。其中大数据智能AI、区块链、深度学习是互联网一线工业级的实战经验。
除了专业技能学习,还有通用职场技能,比如企业管理、股权激励和设计、职业生涯规划、社交礼仪、沟通技巧、演讲技巧、开会技巧、发邮件技巧、工作压力如何放松、人脉关系等等,全方位提高你的专业水平和整体素质。
【牛人课堂】 - 学习牛人的工作经验
1.智能个性化引擎:
海量视频课程,覆盖所有行业、所有职位,通过不同行业职位的技能词偏好挖掘分析,智能匹配你目前职位最感兴趣的技能学习课程。
2.听课全网搜索
输入关键词搜索海量视频课程,应有尽有,总有适合你的课程。
3.听课播放详情
视频播放详情,除了播放当前视频,更有相关视频课程和文章阅读,对某个技能知识点强化,让你轻松成为某个领域的资深专家。
【精品阅读】 - 技能文章兴趣阅读
1.个性化阅读引擎:
千万级文章阅读,覆盖所有行业、所有职位,通过不同行业职位的技能词偏好挖掘分析,智能匹配你目前职位最感兴趣的技能学习文章。
2.阅读全网搜索
输入关键词搜索海量文章阅读,应有尽有,总有你感兴趣的技能学习文章。
【机器人老师】 - 个人提升趣味学习
基于搜索引擎和智能深度学习训练,为您打造更懂你的机器人老师,用自然语言和机器人老师聊天学习,寓教于乐,高效学习,快乐人生。
【精短课程】 - 高效学习知识
海量精短牛人课程,满足你的时间碎片化学习,快速提高某个技能知识点。
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)