《三国演义》与结巴(jieba)的碰撞

导读:本篇文章讲解 《三国演义》与结巴(jieba)的碰撞,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

        前文Python 结巴(jieba)库之花拳绣腿结巴(jieba)为优秀的中文分词第三方库《三国演义》与结巴(jieba)的碰撞https://blog.csdn.net/iprobobo/article/details/122686102业已指出,结巴(jieba)为优秀的中文分词库,功能强大,今天就拿《三国演义》来小试牛刀。

        《三国演义》为中国文学史上的第一部章回小说,是历史演义小说的开山之作,中国古典四大名著之一。明清时期甚至有“第一才子书”之称。其描写了从东汉末年到西晋初年之间近百年的历史风云,诉说了魏、蜀、吴三国之间的政治和军事斗争等故事,塑造了一群叱咤风云的三国英雄人物。虽说英雄不问出处,但其出场秀还是值得研究一番的。

        二话不说,上代码:

import jieba

txt=open('三国演义.txt','r',encoding='utf-8').read()
words=jieba.lcut(txt)
count={}

for word in words:
    if len(word)==1:
        continue
    else:
        count[word]=count.get(word,0)+1

items=list(count.items())
items.sort(key=lambda x:x[1],reverse=True)

for i in range(15):
    word,count=items[i]
    print('{0:<10}{1:>5}'.format(word,count))

        运行结果:

《三国演义》与结巴(jieba)的碰撞

         可见结巴很聪明但也难免机械,还没有那么 AI,不能智能识别同一人物的不同身份和角色,还需要不断打磨(降噪)升级:

for word in words:
    if len(word)==1:
        continue
    elif word=='孔明' or word=='孔明曰':
        word='诸葛亮'
    elif word=='关公' or word=='云长':
        word='关羽'    
    elif word=='玄德' or word=='玄德曰':
        word='刘备'
    else:
        word=word
ex={'将军','却说','丞相','二人','不可','荆州','不能','如此','商议','如何',\
    '主公','军士','左右','军马','引兵','次日','大喜','天下','东吴','于是',\
    '今日','不敢','魏兵','陛下','一人','都督','人马','不知'}
for word in ex:
    del count[word]

        经过如此这般,新鲜出炉的十大英雄依次是: 

《三国演义》与结巴(jieba)的碰撞

          卧龙诸葛亮稳坐头把交椅,奸雄曹操屈居第三,周郎末席,是否符合您的心理预期呢☺


完整代码

import jieba

txt=open('三国演义.txt','r',encoding='utf-8').read()
words=jieba.lcut(txt)
counts={}

for word in words:
    if len(word)==1:
        continue
    elif word=='孔明' or word=='孔明曰':
        word='诸葛亮'
    elif word=='关公' or word=='云长':
        word='关羽'    
    elif word=='玄德' or word=='玄德曰':
        word='刘备'
    else:
        word=word
    counts[word]=counts.get(word,0)+1

ex={'将军','却说','丞相','二人','不可','荆州','不能','如此','商议','如何',\
    '主公','军士','左右','军马','引兵','次日','大喜','天下','东吴','于是',\
    '今日','不敢','魏兵','陛下','一人','都督','人马','不知'}
for word in ex:
    del counts[word]

items=list(counts.items())
items.sort(key=lambda x:x[1],reverse=True)

for i in range(10):
    word,count=items[i]
    print('{0:<10}{1:>5}'.format(word,count))

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/106963.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!