赞
踩
小编学习nlp的起步阶段,今天利用python语言中的jieba包,实现了中文的分词、高频词统计、词性标注。我知道对于原理理解的重要性,迫不及待地把实现的过程记录在博客中,算法原理问题过后进行补充。
Jieba提供了三种分词模式:
import jieba
sent = "我们中出了一个叛徒"
seg_list = jieba.cut(sent,cut_all = False)
print("精确模式:","/".join(seg_list))
#output
精确模式:我们/中出/了/一个/叛徒 #=.=
高频词一般是指文档中出现频率较高的且非无用的词。这里解决一下两个问题:
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)]
通俗的讲,词性标注就是标出句子中的每一个词的语法属性,这样可以良好的解决歧义问题。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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。