您的位置:首页 > 编程语言 > Python开发

写一个程序,分析一个文本文件中各个词出现的频率,并且把频率最高的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性能测试工具,所以就没做性能测试,很抱歉!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python 编程语言
相关文章推荐