NLP⾃然语⾔处理jieba中⽂分词,关键词提取,词性标注,并⾏分
词,起⽌位置,⽂本挖掘,。。。
1. NLP ⾛近⾃然语⾔处理
概念
Natural Language Processing/Understanding,⾃然语⾔处理/理解
⽇常对话、办公写作、上⽹浏览
希望机器能像⼈⼀样去理解,以⼈类⾃然语⾔为载体的⽂本所包含的信息,并完成⼀些特定任务
内容
中⽂分词、词性标注、命名实体识别、关系抽取、关键词提取、信息抽取、依存分析、词嵌⼊……
应⽤
篇章理解、⽂本摘要、情感分析、知识图谱、⽂本翻译、问答系统、聊天机器⼈……
2. NLP 使⽤jieba分词处理⽂本,中⽂分词,关键词提取,词性标注
jieba:基于前缀词典进⾏词图扫描,构成全部可能分词结果的有向⽆环图,动态规划查最⼤概率路径
1. 中⽂分词:jieba.cut
import jieba
seg_list = jieba.cut("我来到北京清华⼤学", cut_all=True)
print("Full Mode: " + "/ ".join(seg_list)) # 全模式
seg_list = jieba.cut("我来到北京清华⼤学", cut_all=False)
print("Default Mode: " + "/ ".join(seg_list)) # 精确模式
seg_list = jieba.cut("他来到了⽹易杭研⼤厦") # 默认是精确模式
print(", ".join(seg_list))
seg_list = jieba.cut_for_search("⼩明硕⼠毕业于中国科学院计算所,后在⽇本京都⼤学深造") # 搜索引擎模式
print(", ".join(seg_list))
2 .关键词提取:act_tags
import jieba.analyse
基于TF-IDF:act_tags(sentence, topK=20, withWeight=False, allowPOS=())
基于TextRank:ank(sentence, topK=20, withWeight=False, allowPOS=('ns', 'n', 'vn', 'v'))
使⽤ add_word(word, freq=None, tag=None) 和 del_word(word) 可在程序中动态修改词典。
使⽤ suggest_freq(segment, tune=True) 可调节单个词语的词频,使其能(或不能)被分出来。
sentence 为待提取的⽂本
topK 为返回⼏个 TF/IDF 权重最⼤的关键词,默认值为 20
withWeight 为是否⼀并返回关键词权重值,默认值为 False
allowPOS 仅包括指定词性的词,默认值为空,即不筛选
3 .词性标注:jieba.posseg.cut()
import jieba.posseg as pseg
words = pseg.cut("我爱北京天安门")
for word, flag in words:
print('%s, %s' % (word, flag))
我 r
爱 v
北京 ns
天安门 ns
4. 并⾏分词
5. Tokenize:返回词语在原⽂的起⽌位置
注意,输⼊参数只接受 unicode
默认模式
result = kenize(u'永和服装饰品有限公司')
for tk in result:
print("word %s\t\t start: %d \t\t end:%d" % (tk[0],tk[1],tk[2])) word 永和 start: 0 end:2
word 服装 start: 2 end:4
word 饰品 start: 4 end:6
word 有限公司 start: 6 end:10
搜索模式
result = kenize(u'永和服装饰品有限公司', mode='search')
for tk in result:
print("word %s\t\t start: %d \t\t end:%d" % (tk[0],tk[1],tk[2])) word 永和 start: 0 end:2
word 服装 start: 2 end:4
word 饰品 start: 4 end:6
word 有限 start: 6 end:8
word 公司 start: 8 end:10
word 有限公司 start: 6 end:10
Segmentation speed
1.5 MB / Second in Full Mode
400 KB / Second in Default Mode
Test Env: Intel(R) Core(TM) i7-2600 CPU @ 3.4GHz;《围城》.txt
词性列表
1. 名词 (1个⼀类,7个⼆类,5个三类)
n 名词
nr ⼈名
nr1 汉语姓⽒
nr2 汉语名字
nrj ⽇语⼈名
nrf ⾳译⼈名
ns 地名
nsf ⾳译地名
nt 机构团体名
nz 其它专名
nl 名词性惯⽤语
ng 名词性语素
2. 时间词(1个⼀类,1个⼆类)
t 时间词
tg 时间词性语素
3. 处所词(1个⼀类)
s 处所词 (家中、门外、境内、西⽅……)
4. ⽅位词(1个⼀类)
f ⽅位词
5. 动词(1个⼀类,9个⼆类)
v 动词
vd 副动词
vn 名动词
vshi 动词“是”
vyou 动词“有”
vf 趋向动词
vx 形式动词
vi 不及物动词(内动词)
vl 动词性惯⽤语
vg 动词性语素
6. 形容词(1个⼀类,4个⼆类)
a 形容词
ad 副形词
an 名形词
ag 形容词性语素
al 形容词性惯⽤语
7. 区别词(1个⼀类,2个⼆类)
b 区别词 (主要、整个、所有……)
bl 区别词性惯⽤语
8. 状态词(1个⼀类)
z 状态词
9. 代词(1个⼀类,4个⼆类,6个三类) r 代词
rr ⼈称代词
rz 指⽰代词
rzt 时间指⽰代词
rzs 处所指⽰代词
rzv 谓词性指⽰代词
ry 疑问代词
ryt 时间疑问代词
rys 处所疑问代词
ryv 谓词性疑问代词
rg 代词性语素
10. 数词(1个⼀类,1个⼆类)
m 数词
mq 数量词
11. 量词(1个⼀类,2个⼆类)
q 量词
qv 动量词
qt 时量词
12. 副词(1个⼀类)
d 副词
13. 介词(1个⼀类,2个⼆类)
p 介词
pba 介词“把”
pbei 介词“被”
14. 连词(1个⼀类,1个⼆类)
c 连词
cc 并列连词
15. 助词(1个⼀类,15个⼆类)
u 助词
uzhe 着
ule 了 喽
uguo 过
ude1 的 底
ude2 地
ude3 得
usuo 所
udeng 等 等等 云云
uyy ⼀样 ⼀般 似的 般
udh 的话
uls 来讲 来说 ⽽⾔ 说来
uzhi 之
ulian 连 (“连⼩学⽣都会”)
16. 叹词(1个⼀类)
e 叹词
17. 语⽓词(1个⼀类)
y 语⽓词(delete yg)
18. 拟声词(1个⼀类)
o 拟声词
19. 前缀(1个⼀类)
h 前缀
20. 后缀(1个⼀类)
k 后缀
21. 字符串(1个⼀类,2个⼆类)
x 字符串
xx ⾮语素字
xu ⽹址URL
22. 标点符号(1个⼀类,16个⼆类)
w 标点符号
wkz 左括号,全⾓:( 〔 [ { 《 【 〖 〈 半⾓:( [ { < wky 右括号,全⾓:) 〕 ] } 》 】 〗 〉 半⾓: ) ] { > wyz 左引号,全⾓:“ ‘ 『
wyy 右引号,全⾓:” ’ 』
wj 句号,全⾓:。
ww 问号,全⾓:? 半⾓:?
wt 叹号,全⾓:! 半⾓:!
wd 逗号,全⾓:, 半⾓:,
wf 分号,全⾓:; 半⾓: ;
wn 顿号,全⾓:、
wm 冒号,全⾓:: 半⾓: :
ws 省略号,全⾓:…… …
weight是什么词性
wp 破折号,全⾓:—— -- ——- 半⾓:--- ----
wb 百分号千分号,全⾓:% ‰ 半⾓:%
wh 单位符号,全⾓:¥ $ £ ° ℃ 半⾓:$
⽂本挖掘主要有哪些功能
⾃然语⾔处理技术⽂本挖掘功能:
* 涉黄涉政检测:对⽂本内容做涉黄涉政检测,满⾜相应政策要求;
* 垃圾评论过滤:在论坛发⾔或⽤户评论中,过滤⽂本中的垃圾⼴告,提升⽂本总体质量;
* 情感分析:对⽤户评论等⽂本内容做情感分析,指导决策与运营;
* ⾃动标签提取:⾃动提取⽂本重要内容⽣成关键性标签,在此基础之上拓展更多功能形式;
* ⽂本⾃动分类:通过对⽂本内容进⾏分析,给出⽂本所属的类别和置信度,⽀持⼆级分类.
NLP WordEmbedding的概念和实现
背景
如何表⽰词语所包含的语义?
苹果?⽔果?Iphone?
苹果、梨⼦,这两个词相关吗?
语⾔的表⽰
符号主义:Bags-of-word,维度⾼、过于稀疏、缺乏语义、模型简单
分布式表⽰:Word Embedding,维度低、更为稠密、包含语义、训练复杂
Word Embedding
核⼼思想:语义相关的词语,具有相似的上下⽂环境,例如, 苹果和梨⼦
所做的事情:将每个词语训练成,词向量
pip install gensim
# 加载包
dels import Word2Vec
dels.word2vec import LineSentence
# 训练模型
sentences = LineSentence('wiki.')
model = Word2Vec(sentences, size=128, window=5, min_count=5, workers=4)
# 保存模型
model.save('word_embedding_128')
# 加载模型
model = Word2Vec.load("word_embedding_128")
# 使⽤模型
items = st_similar(u'中国')
model.similarity(u'男⼈', u'⼥⼈')
demo 2017.11.29 by denny shenzhen
import sys
import jieba
import jieba.analyse
import jieba.posseg as posg
sentence=u'''深圳新闻⽹讯 10⽉30⽇,世界城市⽇——全球城市竞争⼒论坛在⼴州举⾏。会上,中国社科院财经战略研究院和联合国⼈类住区规划署发布了《全球城市竞争⼒报告2017-2018》(以下简称《报告》)。