小言_互联网的博客

利用jieba实现分词、高频词统计、词性标注

250人阅读  评论(0)

小编学习nlp的起步阶段,今天利用python语言中的jieba包,实现了中文的分词、高频词统计、词性标注。我知道对于原理理解的重要性,迫不及待地把实现的过程记录在博客中,算法原理问题过后进行补充。


1、jieba分词

Jieba提供了三种分词模式:

  • 精确模式:视图将句子切分的最精确。
  • 全模式:把句子句子中,所有可以成词的词语都扫出来,速度快,但是不能解决歧义的问题。
  • 模糊模式:在精确模式的基础上,对长词再次进行切分,适合用于搜索引擎分词或者模糊查询。
import jieba
sent = "我们中出了一个叛徒"

seg_list = jieba.cut(sent,cut_all = False)
print("精确模式:","/".join(seg_list))

#output
精确模式:我们/中出//一个/叛徒          #=.=

2、高频词提取

高频词一般是指文档中出现频率较高的且非无用的词。这里解决一下两个问题:

  1. 对句子实现分词并且统计出现频率。
  2. 过滤掉频率较高且无用的词语或符号
def get_TF(words,topk = 5):
	
	tf_dic = {}
	for w in words:
		tf_dic[w] = tf_dic.get(w,0) + 1
	return sorted(tf_dic.items(),key = lambda x : x[1],reverse = True)[:topk]  #get top 10

def main():
	import glob
	import jieba
	import random
	stop_words = [',',"。","、","!","?","的","在","了","于"]
	sent = "中华人民共和国于1949年10月1日成立了,这一天我还没有出生,我出生于二十世纪九十年代,那时候,中华人民共和国已经经历了文化大革命、改革开放。我和我的祖国,一刻也不能分割。"
	split_words = list(x for x in jieba.cut(sent,cut_all = False) if x not in stop_words)
	tf = get_TF(split_words)
	print(tf)

main()

#output:
[('我',3),('中华人民共和国',2),('1949',1),('年',1),('10',1)]

3、词性标注

通俗的讲,词性标注就是标出句子中的每一个词的语法属性,这样可以良好的解决歧义问题。Jieba的词性标注同样是结合规则和统计的方式,具体为在词性标注的工程中,词典匹配和HMM共同作用。

import jieba.posseg  as psg

sent = '中文分词是文本处理不可或缺的一步!'

seg_list = psg.cut(sent)

print(' '.join(['{0}/{1}'.format(w,t) for w,t in seg_list]))

#output
中文/nz 分词/n 是/v 文本处理/n 不可或缺/l 的/uj 一步/m !/x

转载:https://blog.csdn.net/Mr_WangYC/article/details/101120673
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场