自然语言处理笔记-基础知识(中文分词)
2019-08-26 本文已影响0人
godzilla_2019
jieba 中文分词
与英文等不同,中文的一句话中,词与词之间是没有空格分开的。而且自然语言处理是无法直接对整个句子进行分析的,所以要进行分词
jieba.cut() 接受三个参数
- 需要分词的字符串
- cut_all 是否采用全模式
- HMM 是否使用 HMM 模型
import jieba
str_list = jieba.cut('我在学习自然语言处理')
print('/'.join(str_list))
# 全模式
str_list = jieba.cut('我在学习自然语言处理', cut_all = True)
print('/'.join(str_list))
我/在/学习/自然语言/处理
我/在/学习/自然/自然语言/语言/处理
jieba.cut_for_search() 该方法适合用于搜索引擎构建倒排索引的分词,粒度比较细。两个参数
- 需要分词的字符串;
- 是否使用 HMM 模型
seg_list = jieba.cut_for_search("小明硕士毕业于中国科学院计算所,后在日本京都大学深造") # 搜索引擎模式
print(", ".join(seg_list))
小明, 硕士, 毕业, 于, 中国, 科学, 学院, 科学院, 中国科学院, 计算, 计算所, ,, 后, 在, 日本, 京都, 大学, 日本京都大学, 深造
jieba.lcut 以及 jieba.lcut_for_search 直接返回 list
str_list = jieba.lcut('我在学习自然语言处理')
print(str_list)
['我', '在', '学习', '自然语言', '处理']
添加自定义词典
有一些专有名词,公司名等,不希望被切分开。
# 如果数据过少,直接使用 jieba.add_word() 添加
str_list = jieba.lcut('李小福是创新办主任也是云计算方面的专家')
print('未添加之前:', str_list)
jieba.add_word('创新办', freq = None, tag = None)
jieba.add_word('云计算', freq = None, tag = None)
str_list = jieba.lcut('李小福是创新办主任也是云计算方面的专家')
print('添加之后:', str_list)
# 使用jieba.del_word()删除
# 如果词组过多可以使用jieba.load_userdict()加载用户自定义的词典
未添加之前: ['李小福', '是', '创新', '办', '主任', '也', '是', '云', '计算', '方面', '的', '专家']
添加之后: ['李小福', '是', '创新办', '主任', '也', '是', '云计算', '方面', '的', '专家']
用jieba.suggest_freq()可调节单个词语的司频,使其能(或不能)被分出来
str_list = jieba.cut('如果放到旧字典中将出错', HMM=False)
print('/'.join(str_list))
jieba.suggest_freq(('中', '将'), True)
str_list = jieba.cut('如果放到旧字典中将出错', HMM=False)
print('/'.join(str_list))
如果/放到/旧/字典/中将/出错
如果/放到/旧/字典/中/将/出错
关健词提取
基于TF-IDF 算法的关键词抽取
TF-IDF 简单点说 比如‘的’,‘地’,‘得’这些词在分析语意时毫无意义,每个段中会出现很多次,如果在整个文本中也会出现多次,那么就会降低这些词的权重
jieba.analyse.extract_tags()
- sentence 要提取的文本
- topK 返回多少个权重最大的关键词 (默认值为20)
- withWeight 是否同时返回关键词的权重 (默认值为False)
- allowPOS 是否仅包括指定词性的词,如动词,名词等 (默认值为空)
# 对西游记进行关健词提取
import jieba.analyse as analyse
lines = open(u'西游记.txt').read()
print(' '.join(analyse.extract_tags(lines, topK=20, withWeight=False, allowPOS=())))
Building prefix dict from the default dictionary ...
Loading model from cache /var/folders/lm/g1tl9_317k38bh6pdrrg_2nr0000gn/T/jieba.cache
Loading model cost 0.581 seconds.
Prefix dict has been built succesfully.
行者 八戒 师父 三藏 大圣 唐僧 沙僧 菩萨 妖精 和尚 那怪 甚么 那里 长老 呆子 怎么 徒弟 不知 老孙 悟空
插图
# 雷音寺
from PIL import Image
from IPython.display import Image as IMG
path = 'lys.png'
display(Image.open(path))
lys.png
基于TextRank 算法的关键词抽取
TextRank 算法是一种用于文本的基于图的排序算法。其基本思想来源于谷歌的 PageRank算法通过把文本分割成若干组成单元(单词、句子)并建立图模型, 利用投票机制对文本中的重要成分进行排序, 仅利用单篇文档本身的信息即可实现关键词提取、文摘
lines = open(u'西游记.txt').read()
print(' '.join(analyse.textrank(lines, topK=20, withWeight=False, allowPOS=('ns','n','vn','v'))))
行者 师父 八戒 三藏 大圣 菩萨 不知 只见 妖精 长老 国王 呆子 徒弟 却说 悟空 小妖 不见 不能 不得 出来
词性标注
- 返回每个词的记性
import jieba.posseg as posseg
words = posseg.cut('我在学习自然语言处理')
for word , flag in words:
print('%s %s' % (word, flag))
我 r
在 p
学习 v
自然语言 l
处理 v