自然语言处理中的词频分析

379 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第23天,点击查看活动详情

1.jieba库

1.1什么jiaba库?

中文分词,通俗来说,就是将一句(段)话按一定的规则(算法)拆分成词语、成语、单个文字。 中文分词是很多应用技术的前置技术,如搜索引擎、机器翻译、词性标注、相似度分析等,都是先对文本信息分词处理,再用分词结果来搜索、翻译、对比等。在Python中,最好用的中文分词库是jieba。用“结巴”给一个中文分词库命名,非常生动形象,同时还带有一种程序员式的幽默感。

1.2利用jieba库进行文段分词

例如将段落:

我想起花瓣试着掉落为你翘课的那一天花落的那一天教室的那一间我怎么看不见

进行分词处理。

image.png

import  jieba
jieba.setLogLevel(jieba.logging.INFO)
str='我想起花瓣试着掉落为你翘课的那一天花落的那一天教室的那一间我怎么看不见'
s=jieba.lcut(str)
print(s)

image.png 即得出我们想要的分词效果。其中注意使用lcut方法。

1.3词频统计

进行词频统计,可以得出一篇文章中出现最多的词,从而帮助人们进一步分析文本的主要逻辑。 我们对三国演义的词频进行统计

image.png

import jieba
jieba.setLogLevel(jieba.logging.INFO)
excludes={'将军','却说','二人','不可','不能','如此','荆州'}
txt=open('/data/workspace/myshixun/src/step3/sanguo1.txt','r',encoding='utf-8').read()
for ch in excludes:
    txt=txt.replace(ch,' ')
counts={}
words=jieba.lcut(txt)
for word in words:
    if len(word)==1:
        continue
    elif word=='孟德' or word=='丞相' or word=='孟德曰':
        reword='曹操'
    elif word=='诸葛亮' or word=='孔明曰':
        reword='孔明'
    elif word=='云长' or word=='关公':
        reword='关羽'
    elif word=='玄德' or word=='玄德曰':
        reword='刘备'
    else:
        reword=word
    counts[reword] = counts.get(reword,0) + 1
items=list(counts.items())
items.sort(key=lambda x:x[1],reverse=True)
for i in range(5):
    reword,count=items[i]
    print("{0:<10}{1:>5}".format(reword,count))

这里我们将高频但是无意义的词语都放入exclude中,从测试的过程中,我们发现,古人不仅有名字还有字号,比如刘备,字玄德。文章中出现刘备,玄德都是指刘备。同理其他人名。所以这里我们使用if else来进行判断转换。从而达到统计词频的效果。