写一个程序,分析一个文本文件中各个词出现的频率,并且把频率最高的10个词打印出来。文本文件大约是30KB~300KB大小。

本文介绍了一个使用Python进行文本分析的具体案例,包括读取文件、去除停用词、分词及统计词频等步骤,并展示了如何优化停用词列表的加载过程以提升程序效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、解决思路

     1、读取一个 txt 文本文件;

     2、去掉停用词;

     3、分词

     4、统计文件里面每个词出现的次数;

     5、进行排序,打印出频率最高的10个词。

二、编程语言:python;

三、测试文本:2.txt    大小:45.6 KB (45,582 字节)

四、程序代码, 放在rj1.py文件下

# -*- coding:utf-8 -*-

import jieba
import sys
import jieba.analyse
from time import time
from operator import itemgetter

a = open('2.txt', 'r')
ss = a.read()
ss = ss.replace('\n','').replace(' ', '').replace('\t', '')
a.close()
stopwords = {}.fromkeys(['的', '在','我们','我','你们','你','和','这样','与','是','需要','可以','将','到','为','中',',','。','!','、',';',':','“','”','(',')','1','2','3','4','5','6','7','8','9','0','-',''])
segs = jieba.cut(ss,cut_all=False)
final = ''
for seg in segs:
    seg = seg.encode('utf-8')
    if seg not in stopwords:
            final += seg
jieba.analyse.extract_tags(ss,20)
ff = jieba.cut(final,cut_all=False)
words = "/".join(ff)
#print words

def test():
    iList = 10
    count = {}
    for word in words.split("/"):
        if count.has_key(word):
            count[word] = count[word] + 1
        else:
            count[word] = 1
    aa = sorted(count.iteritems( ), key=itemgetter(1), reverse=True)[0:iList]
    for a in aa:  
        print a[0],a[1]

# 调用
if __name__ == '__main__':
    t1 = time()
    test()
    print time()-t1


五、运行结果如下:

其中耗时:0.00376510620117秒。


其中耗时:0.00376510620117秒。

六、 改进

最开始我是把需要去掉的停用词一起写到python程序代码里了,后来我发现如果需要去掉的停用词很多,

那么就会影响程序的性能,于是我将需要去掉的停用词全部放在一个txt文本里面,并命名为zidian.txt。

改进后的代码如下, 放在rj2.py文件下:

# -*- coding:utf-8 -*-

import jieba
import sys
import jieba.analyse
from time import time
from operator import itemgetter

a = open('2.txt', 'r')
ss = a.read()
ss = ss.replace('\n','').replace(' ', '').replace('\t', '')
a.close()
b = open('zidian.txt', 'r')
stopwords = b.read()
b.close()
segs = jieba.cut(ss,cut_all=False)
final = ''
for seg in segs:
    seg = seg.encode('utf-8')
    if seg not in stopwords:
            final += seg
jieba.analyse.extract_tags(ss,20)
ff = jieba.cut(final,cut_all=False)
words = "/".join(ff)
#print words

def test():
    iList = 10
    count = {}
    for word in words.split("/"):
        if count.has_key(word):
            count[word] = count[word] + 1
        else:
            count[word] = 1
    aa = sorted(count.iteritems( ), key=itemgetter(1), reverse=True)[0:iList]
    for a in aa:
       print a[0],a[1]


if __name__ == '__main__':
    t1 = time()
    test()
    print time()-t1


运行结果如下:


其中耗时:0.0037579536438

        发现确实比改进前的程序耗时要少一些。特别说明的是,代码中我所用的分词是从网上下的"结巴"中文分词,网站是:http://www.oschina.net/p/jieba ,由于我暂时没有找到python性能测试工具,所以就没做性能测试,很抱歉!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值