写一个程序,分析一个文本文件中各个词出现的频率,并且把频率最高的10个词打印出来。文本文件大约是30KB~300KB大小。
2014-04-15 18:43
615 查看
一、解决思路
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
五、[b]运行结果[/b]如下:
其中耗时: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
[b]运行结果[/b]如下:
其中耗时:0.0037579536438
发现确实比改进前的程序耗时要少一些。特别说明的是,代码中我所用的分词是从网上下的"结巴"中文分词,网站是:http://www.oschina.net/p/jieba ,由于我暂时没有找到python性能测试工具,所以就没做性能测试,很抱歉!
相关文章推荐
- 写一个程序,分析一个文本文件中各个词出现的频率,并且把频率最高的10个词打印出来。文本文件大约是30KB~300KB大小
- 软件工程个人小程序:分析一个文本文件(英文文章)中各个词出现的频率,并且把频率最高的10个词打印出来
- 写一个程序,分析一个文本文件中各个词出现的频率,并把频率最高的10个词打印出来
- 写一个程序,分析一个文本文件(英文文章)中各个单词出现的频率,并且把频率最高的10词打印出来
- 分析一个文本文件(英文文章)中各个词出现的频率,并且把频率最高的10个词打印出来
- 编写一个程序,分析一个文本文件(英文文章)中各个词出现的频率,并把频率最高的10个词打印出来
- 软件工程设计:分析一个文本文件(英文文章)中各个词出现的频率,并且把频率最高的10个词打印出来。
- 分析一个文本文件中各个单词出现的频率,把频率最高的10个词打印出来
- 分析一个文本文件中各个单词出现的频率,把频率最高的10个词打印出来
- 统计一个大小为30kb~300kb的文本中各单词出现的频率,并输出前十个单词和进行程序性能分析
- 用java程序分析一个文本文件中各个词出现的频率,并把频率最高的十个单词打印出来(一般的冠词,虚词除外)
- 分析一个文本文件中各个单词出现的频率,把频率最高的10个词打印出来
- 编程实现:分析一个文本文件(英文文章)中各个词出现的频率,并把频率最高的前十个词打印出来
- 写一个程序分析文本文档(英文文章)中各个词出现的频率并把频率最高的10个词打印出来
- 分析一个文本文件中各个词出现的频率,并把频率最高的十个单词打印出来。
- 分析一个文档(英语文章)中各个词出现的频率,并打印频率最高的前10个。
- 分析文本文件中各单词出现的频率,并把频率最高的十个词打印出来
- javascript+Ajax实现统计文本(30Kb~300Kb)各词出现频率,并把前十打印出来
- 软件工程第一次作业:java实现分析一个文本文件中各个词出现的频率,并输出频率最高的10个词
- 统计文本中单词出现次数,打印出现次数最多的前10个.文本大小30KB~300KB