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

本文主要是介绍写一个程序,分析一个文本文件中各个词出现的频率,并且把频率最高的10个词打印出来。文本文件大约是30KB~300KB大小。,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、解决思路

     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个词打印出来。文本文件大约是30KB~300KB大小。的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1117835

相关文章

python获取指定名字的程序的文件路径的两种方法

《python获取指定名字的程序的文件路径的两种方法》本文主要介绍了python获取指定名字的程序的文件路径的两种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要... 最近在做项目,需要用到给定一个程序名字就可以自动获取到这个程序在Windows系统下的绝对路径,以下

SQL Server 查询数据库及数据文件大小的方法

《SQLServer查询数据库及数据文件大小的方法》文章介绍了查询数据库大小的SQL方法及存储过程实现,涵盖当前数据库、所有数据库的总大小及文件明细,本文结合实例代码给大家介绍的非常详细,感兴趣的... 目录1. 直接使用SQL1.1 查询当前数据库大小1.2 查询所有数据库的大小1.3 查询每个数据库的详

基于Python编写自动化邮件发送程序(进阶版)

《基于Python编写自动化邮件发送程序(进阶版)》在数字化时代,自动化邮件发送功能已成为企业和个人提升工作效率的重要工具,本文将使用Python编写一个简单的自动化邮件发送程序,希望对大家有所帮助... 目录理解SMTP协议基础配置开发环境构建邮件发送函数核心逻辑实现完整发送流程添加附件支持功能实现htm

C#控制台程序同步调用WebApi实现方式

《C#控制台程序同步调用WebApi实现方式》控制台程序作为Job时,需同步调用WebApi以确保获取返回结果后执行后续操作,否则会引发TaskCanceledException异常,同步处理可避免异... 目录同步调用WebApi方法Cls001类里面的写法总结控制台程序一般当作Job使用,有时候需要控制

Android 缓存日志Logcat导出与分析最佳实践

《Android缓存日志Logcat导出与分析最佳实践》本文全面介绍AndroidLogcat缓存日志的导出与分析方法,涵盖按进程、缓冲区类型及日志级别过滤,自动化工具使用,常见问题解决方案和最佳实... 目录android 缓存日志(Logcat)导出与分析全攻略为什么要导出缓存日志?按需过滤导出1. 按

Linux中的HTTPS协议原理分析

《Linux中的HTTPS协议原理分析》文章解释了HTTPS的必要性:HTTP明文传输易被篡改和劫持,HTTPS通过非对称加密协商对称密钥、CA证书认证和混合加密机制,有效防范中间人攻击,保障通信安全... 目录一、什么是加密和解密?二、为什么需要加密?三、常见的加密方式3.1 对称加密3.2非对称加密四、

MySQL中读写分离方案对比分析与选型建议

《MySQL中读写分离方案对比分析与选型建议》MySQL读写分离是提升数据库可用性和性能的常见手段,本文将围绕现实生产环境中常见的几种读写分离模式进行系统对比,希望对大家有所帮助... 目录一、问题背景介绍二、多种解决方案对比2.1 原生mysql主从复制2.2 Proxy层中间件:ProxySQL2.3

python使用Akshare与Streamlit实现股票估值分析教程(图文代码)

《python使用Akshare与Streamlit实现股票估值分析教程(图文代码)》入职测试中的一道题,要求:从Akshare下载某一个股票近十年的财务报表包括,资产负债表,利润表,现金流量表,保存... 目录一、前言二、核心知识点梳理1、Akshare数据获取2、Pandas数据处理3、Matplotl

python panda库从基础到高级操作分析

《pythonpanda库从基础到高级操作分析》本文介绍了Pandas库的核心功能,包括处理结构化数据的Series和DataFrame数据结构,数据读取、清洗、分组聚合、合并、时间序列分析及大数据... 目录1. Pandas 概述2. 基本操作:数据读取与查看3. 索引操作:精准定位数据4. Group

MySQL中EXISTS与IN用法使用与对比分析

《MySQL中EXISTS与IN用法使用与对比分析》在MySQL中,EXISTS和IN都用于子查询中根据另一个查询的结果来过滤主查询的记录,本文将基于工作原理、效率和应用场景进行全面对比... 目录一、基本用法详解1. IN 运算符2. EXISTS 运算符二、EXISTS 与 IN 的选择策略三、性能对比