自然语言处理jieba

自然语言处理

jiebapip安装),可以获取文本中的词汇信息

三种模式
  1. cut("文本",cut_all=True)
    全模式,尽可能拆的完全、提供几乎所有可能的文本词汇
  2. cut("文本",cut_all=False)
    精确模式(默认),基于文本进行区分,只是划分开,原来有几个字就几个字
  3. 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

  1. jieba.analyse.extract_tags("文本",[topK=num,withWeight=False,allowPOS=()])
    基于TF-IDFTF是词频,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)

结果为:
疫苗
驻华
世界卫生组织
  1. 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

注:
字典格式为:词汇 词频 词性
因为“给”和“力”在原词典中词频特别高,所以要识别的时候“给力”不被拆分成两个字,就得把词频的值设得更高.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值