自然语言处理
jieba
(pip
安装),可以获取文本中的词汇信息
三种模式
cut("文本",cut_all=True)
:
全模式,尽可能拆的完全、提供几乎所有可能的文本词汇cut("文本",cut_all=False)
:
精确模式(默认),基于文本进行区分,只是划分开,原来有几个字就几个字cut_for_search("文本")
:
搜索引擎模式,按照搜索引擎方式对文本进行区分,和全模式一样会拆成好几个词汇
输出:
返回的内容为生成器,全模式举例::
seg_list = jieba.cut("我来到北京清华大学", cut_all=True)
print("/".join(seg_list)) #"/"表示文本切分后用/隔开
结果为:我/来到/北京/清华/清华大学/华大/大学
再试试精确模式:
seg_list = jieba.cut("我来到北京清华大学", cut_all=False)
print("/".join(seg_list))
结果为:我/来到/北京/清华大学
最后搜索引擎模式:
seg_list = jieba.cut_for_search("我来到北京清华大学")
print("/".join(seg_list))
结果为:我/来到/北京/清华/华大/大学/清华大学
关键词提取
(需要import jieba.analyse
)
jieba.analyse.extract_tags("文本",[topK=num,withWeight=False,allowPOS=()])
基于TF-IDF
,TF
是词频,IDF
是反向文档频率(把像一些常用却没意义的词过滤了,比如你我他),总的来说就是找那些词汇频率高,但是只是在某几个文档中高的词,而不要在几乎所有文档中都频率高的(你我他),第二个参数代表返回多少个重要的词(默认20个),第三个代表是否显示权重,第四个代表允许返回的词性,比如'n'
是名词,'nr'
是人名,'ns'
是地名等,举例:
content = ""
keywords = jieba.analyse.extract_tags(content, topK=20, withWeight=True, allowPOS=('n', 'nr', 'ns'))
#返回权重最高的20个词,显示选中,并且返回的内容得是名词、人名或者地名
for item in keywords:
print(item[0],item[1]) #第一个迭代器里是返回词,第二个是权重值
当然该方法除了第一个参数必选,其他都是可选,再举例:
content = "世界卫生组织驻华代表高力博士说,疫苗的监管极其重要,它是政府确保中国生产和使用的疫苗安全、优质和有效的主要手段。"
keywords = jieba.analyse.extract_tags(content, 3) #从文本中提取词频最高三个关键词
for each in keywords:
print(each)
结果为:
疫苗
驻华
世界卫生组织
jieba.analyse.textrank("文本",topK=num,withWeight=False,allowPOS=())
基于TextRank
,即词的共性关系,如果一个词与其他词的共性越高,则其越重要,除了提取方法不同外,其他使用啥的都和上面那个差不多
返回词语位置
1.精确模式返回:通过使用tokenize()
方法,返回的是个元组,里面包含词语、起始和结束位置,举例:
content = "我来到北京清华大学"
words = jieba.tokenize(content)
for each in words:
print(each)
结果为:
('我', 0, 1)
('来到', 1, 3)
('北京', 3, 5)
('清华大学', 5, 9)
2.搜索引擎模式返回:如果要用搜索引擎模式,在前面的方法里加上mode="search"
参数,举例:
words = jieba.tokenize(content, mode="search")
词性标注
使用jieba.posseg.cut("文本")
方法(需要import jieba.posseg
),返回是个迭代器,会返回关键词和对应词性,举例:
import jieba.posseg
content = "世界卫生组织驻华代表高力博士说,疫苗的监管极其重要,它是政府确保中国生产和使用的疫苗安全、优质和有效的主要手段。"
keywords = jieba.posseg.cut(content)
for word,flag in keywords:
print(word,flag) #第一个迭代器里是返回词,第二个是对应词性
部分结果为:
世界卫生组织 nt
驻华 v
代表 n
高 a
力 n
博士 n
说 v
...
常用词性分类
a 形容词
n 名词
nr 人名
ns 地名
nt 机构名
v 动词
vn 动名词
p 介词
r 代词
c 连词
d 副词
e 叹词
u 助词
un 未知词
f 方位词
i 成语
m 数词
t 时间
w 标点符号
更多参考
https://blog.csdn.net/qq_21149391/article/details/79484611
加载词典
当想要使用自定义词典时,可以通过load_userdict()
来加载,举例:
import jieba.posseg
content = "你真给力啊"
keywords = jieba.posseg.cut(content)
print("第一次标注:")
for word,flag in keywords:
print(word, flag)
jieba.load_userdict('E:\dict1.txt') #加载自定义词典
keywords = jieba.posseg.cut(content)
print("加载字典后标注:")
for word,flag in keywords:
print(word, flag)
结果为:
第一次标注:
你 r
真 d
给 p
力 n
啊 y
加载字典后标注:
你 r
真 d
给力 a
啊 zg
其中在dict1.txt
文件中内容:
给力 3000000 a
注:
字典格式为:词汇 词频 词性
因为“给”和“力”在原词典中词频特别高,所以要识别的时候“给力”不被拆分成两个字,就得把词频的值设得更高.