Python实现统计文本当中单词的数量,

  这是阿里巴巴2016年的一道面试题:

统计英文文章中单词出现的次数,并且输出出现次数的前10个单词

文本如下:

Accessing Text from the Web and from Disk




Electronic Books


A small sample of texts from Project Gutenberg appears in the NLTK corpus collection. However, you may be interested in analyzing other texts from Project Gutenberg. You can browse the catalog of 25,000 free online books at http://www.gutenberg.org/catalog/, and obtain a URL to an ASCII text file. Although 90% of the texts in Project Gutenberg are in English, it includes material in over 50 other languages, including Catalan, Chinese, Dutch, Finnish, French, German, Italian,

先简单的看了下文章,基本单词间的分隔都是空格,或者是逗号加空格

方法一

1、先打开文档,进行初步分析

def read_file():f=open('F:\\Python\\testfile\\test_3.txt')readline=f.readlines()word=[]#存储单词#得到文章的单词并且存入列表中:for line in readline:#因为原文中每个单词都是用空格 或者逗号加空格分开的,line=line.replace(',','')#除去逗号只要空格来分开单词line=line.strip()#除去左右的空格wo=line.split(' ')word.extend(wo)return word


2、简单的清理和排序

def clear_account(lists):#去除重复的值wokey={}wokey=wokey.fromkeys(lists)#此代码的意思为将lists的元素作为wokey的键值key#通过这个代码可以除去重复的列表元素word_1=list(wokey.keys())#然后统计单词出现的次数,并将它存入一个字典中for i in word_1:wokey[i]=lists.count(i)return wokey
3、对单词进行排序(因为我们存入的是一个字典,所以其实是对字典排序)

def sort_1(wokey):
#删除''字符del[wokey['']]#因为我发现字典中存在空元素,所以删去#排序,按values进行排序,如果是按key进行排序用sorted(wokey.items(),key=lambda d:d[0],reverse=True)wokey_1={}wokey_1=sorted(wokey.items(),key=lambda d:d[1],reverse=True)#得到的是一个列表,里面的元素为元组,所以再把他转化为字典,不过不转化也可以wokey_1=dict(wokey_1)return wokey_1
4、输出结果

def main(wokey_1):
#输出前10个i=0for x,y in wokey_1.items():if i<10:print('the word is "','{}'.format(x),'"',' and its amount is "','{}'.format(y),'"')i+=1continueelse:break

5、运行程序得出结果

main(sort_1(clear_account(read_file())))

运行截图:


本程序到这里就结束了、下面是整个程序代码:

#读入一个文本,并且统计文本中单词的出现次数,输出出现次数前10个单词def read_file():f=open('F:\\Python\\testfile\\test_3.txt')readline=f.readlines()word=[]#存储单词#得到文章的单词并且存入列表中:for line in readline:#因为原文中每个单词都是用空格 或者逗号加空格分开的,line=line.replace(',','')#除去逗号只要空格来分开单词line=line.strip()wo=line.split(' ')word.extend(wo)return word
def clear_account(lists):
#去除重复的值wokey={}wokey=wokey.fromkeys(lists)word_1=list(wokey.keys())#然后统计单词出现的次数,并将它存入一个字典中for i in word_1:wokey[i]=lists.count(i)return wokey
def sort_1(wokey):
#删除''字符del[wokey['']]#排序,按values进行排序,如果是按key进行排序用sorted(wokey.items(),key=lambda d:d[0],reverse=True)wokey_1={}wokey_1=sorted(wokey.items(),key=lambda d:d[1],reverse=True)wokey_1=dict(wokey_1)return wokey_1
def main(wokey_1):
#输出前10个i=0for x,y in wokey_1.items():if i<10:print('the word is "','{}'.format(x),'"',' and its amount is "','{}'.format(y),'"')i+=1continueelse:breakmain(sort_1(clear_account(read_file())))


不过值得注意的是,字典的排序很重要。

并且上面只给出了一种字典的排序,还有其他的排序比如:

a={'d':2,'f':4,'m':3}b=a.keys()
c=a.values()
d=zip(b,c)#这里的b,c可以交换位置,
#key在前面就是按key值排序,values在前就是按values排序
print(sorted(d,reverse=False))
更多的就只有同学们自己去了解了。。


方法二

下面的方法为Python Spark下的单词统计,这种方法不建议用在少量单词的计算上(spark为大数据集群计算平台,不做大数据的同学就别花时间去学了,还要下载spark,hadoop,和配环境

#coding:utf-8
import sys
from pyspark import SparkConf, SparkContext
try:conf = SparkConf().setMaster("local").setAppName("My App")sc = SparkContext(conf = conf)print("connect success")
except Exception as e:print("error",e)sys.exit(1)#计算每个键出现的次数与总值,可用于算均值
# try:
# 	lis=[("panda",0),("pink",3),("pirate",3),("panda",1),("pink",4),("panda",4)]
# 	rdd=sc.parallelize(lis)
# 	print(rdd.collect())
# 	key1=rdd.mapValues(lambda x: (x, 1))
# 	print(key1.collect())
# 	key2=key1.reduceByKey(lambda x, y: (x[0] + y[0], x[1] + y[1]))
# 	print(key2.collect())
try:lines=sc.textFile("F:/python/testfile/test_3_1.txt")words=lines.flatMap(lambda x: x.split(" "))print(words.collect())result=words.map(lambda x:(x,1)).reduceByKey(lambda x,y:x+y)print(result.collect())dict_1={}for word in result.collect():dict_1[word[0]]=word[1]print(dict_1)print("242343")list_2=sorted(dict_1.items(),key=lambda d:d[1],reverse=True)print(list_2)i=0for x in list_2:if i<10:print("word: ",x[0]," times: ",x[1])  i+=1  continue  else:  break  
except Exception as e:print(e)

单词统计的话,应该还有其他的方法,比如NLTK,(想了解自然语言处理的可以学一下)。

学无止境嘛!


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/38944.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

wordcount单词词频统计

单词出现的总次数 1、WordCount概述 WordCount算是大数据计算领域经典的入门案例&#xff0c;相当于Hello World。 虽然WordCount业务极其简单&#xff0c;但是希望能够通过案例感受背后MapReduce的执行流程和默认的行为机制&#xff0c;这 才是关键。 2、WordCount编程实现…

Python实现统计文本中各单词数量

Python实现统计文本中各单词数量 代码运行结果 代码 import strings not talk,not helo show me your code hello helo for i in s:变例s中的字符&#xff0c;如果属于标点符号则替换成空格if i in string.punctuation:s s.replace(i, ) # print(s) lst s.split() # s被空…

华为机试—统计单词个数(map)

输入n个单词&#xff0c;统计各个单词出现的个数 #include <iostream> #include <map> #include <string> using namespace std;int main() {map<string,int> k;string word;while(cin>>word)k[word];for(map<string,int>::iterator ik.be…

[云炬python3玩转机器学习] 5-7,8 多元线性回归正规解及其实现

08 实现我们自己的 Linear Regression import numpy as np import matplotlib.pyplot as plt from sklearn import datasets import datetime;print("Run by CYJ,",datetime.datetime.now()) Run by CYJ, 2022-01-20 20:06:04.130127 boston datasets.load_boston()…

手机号验证码登录的思路

引言 当前很多web端的应用登录方式主要分为以下几种&#xff1a; 账号密码登录手机号验证码登录扫码登录 这里我主要说一下我对于手机号验证码登录的思路&#xff0c;如果有遗漏或者差错的地方&#xff0c;请指正&#xff1b; 整体流程 大致流程如下&#xff1a; 大致就是…

手机验证码登录,账号登录结合

本项目基于腾讯外包框架&#xff08;wei框架&#xff09; 地址&#xff1a;https://github.com/twinh/wei/tree/master/docs/zh-CN#wei HTML页面&#xff1a; 【基于bootstrap前端框架】 头部&#xff1a;<ul id"js-reset-tabs" class"nav tab-underline…

手机号验证登录用例

手机号验证登录 1.手机号验证登录是我们现在比较常见的登录方式&#xff0c;下面分享一下基本的用例的编写。能帮助您是我的荣幸&#xff0c;不喜勿喷&#xff0c;谢谢&#xff01;

手机号验证码登录

登录入口 1.app 正常登录入口 2.app 网页登录&#xff0c;比如分享直播卡片时&#xff0c;进入直播间需要先进行登录 3.pc 登录 一&#xff0c;app常见的登录方式 1.手机号验证码登录 2.用户名密码登录 3.一键登录 二&#xff0c;手机验证码登录示意图 三&#xff0c;流…

chatgpt赋能python:Python代码的快捷键:让编程速度更加快速高效

Python代码的快捷键&#xff1a;让编程速度更加快速高效 Python是一种面向对象、直译式计算机程序设计语言&#xff0c;备受程序员喜爱。虽然Python本身已经趋于简洁易读&#xff0c;但使用Python代码编辑器的快捷键可以进一步提高编程效率&#xff0c;帮助合理利用时间。 为…

chatgpt赋能python:Python实现滚动小球

Python实现滚动小球 Python是一种高级编程语言&#xff0c;可以用于开发各种类型的应用程序。在此我们将介绍如何使用Python编写代码实现滚动小球。这个小球会在屏幕上滚动&#xff0c;给用户一个视觉效果。 实现滚动小球的Python代码 import pygameBLACK (0, 0, 0) WHITE …

流浪地球2的科学幻想与现实中的未来计算机科技

作为一个科幻迷、《三体》迷&#xff0c;从小时候第一次看《珊瑚岛上的死光》开始&#xff0c;一直期待一部国产科幻电影。等待了40余年&#xff0c;有生之年终于如愿以偿。 周末二刷了《流浪地球2》。丁老师认为这部科幻电影已经超越了1&#xff0c;以及原著&#xff0c;成为…

还在为投稿发愁吗?ICCVIT 2023,一个计算机、视觉与智能技术国际会议

◆ChatGPT热潮带来的行业革新大行其道&#xff0c;相关区块链、信息安全、视觉、机器学习....产业必将带来诸多变革。 本文为大家梳理了近期可投的4则EI检索的国际会议&#xff0c;均可推荐发表SCI&#xff0c;还有超多IEEE Fellow主讲&#xff0c;不仅涵盖计算机各个学科方向&…

不刷卡,不扫码,微信推出刷掌支付;Meta将再裁员6000人;AI“黑箱”被打开?谷歌找到大模型能力涌现机制|极客头条...

「极客头条」—— 技术人员的新闻圈&#xff01; CSDN 的读者朋友们早上好哇&#xff0c;「极客头条」来啦&#xff0c;快来看今天都有哪些值得我们技术人关注的重要新闻吧。 整理 | 梦依丹 出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09; 一分钟速览新闻点&#…

Chat-GPT有感

Chat-GPT有感 1、Chat-GPT是什么&#xff1f; ​ 2023年当红炸子鸡非Chat-GPT莫属&#xff0c;或许我们即将站在历史的开端、站在人工智能涌现的开端、站在科技百花齐放的开端&#xff0c;我也想问问Chat-GPT&#xff0c;它到底是什么呢&#xff1f; GPT全称为Generative Pre…

前端多语言开发,如何中英文切换

本文以vue为例&#xff1a; 在vue项目中配置两个js文件&#xff0c;一个中文一个英文 将main.js中引入配置好的文件 添加切换中英文的按钮 在methods中写入点击事件 js文件中&#xff0c;把需要的中英文分别写入 在需要的页面中写入 但需要注意的是&#xff0c;在标签中使用$t…

【TypeScript入门】了解TypeScript的工作流程

走进“前端的未来”TS——了解TS的工作流程 文章简介主要内容1 TypeScript工作流程1.1 图示简单解释1.2 理顺区分JS与其他语言 2 如何用TypeScript运行web2.1 为项目添加html文件2.2 用npm高效管理前端项目2.3 npm项目依赖 summary下期预告【基础入门】《前端的未来——TypeScr…

vue2实现中英文切换

简单的使用&#xff08;应用场景&#xff1a;少量几个页面的中英文切换&#xff09; 1、安装 vue-i18n依赖 yarn add vue-i18n 或者 npm install vue-i18n --save-dev 2、在src/components下新建文件夹language&#xff0c;并在文件夹language下新建zh.js及en.js 【src/compon…

vue实现中英文切换

简单的使用&#xff08;应用场景&#xff1a;15个以内页面的中英文切换&#xff09; 1、安装 vue-i18n依赖 yarn add vue-i18n 或者 npm install vue-i18n --save-dev 2、在src/components下新建文件夹language&#xff0c;并在文件夹language下新建zh.js及en.js 【src/co…

vue切换中英语言制作方法(Element+i18n的使用)

介绍&#xff1a; Vue I18n 是 Vue.js 的国际化插件。它可以轻松地将一些本地化功能集成到你的 Vue.js 应用程序中。 1、安装Element ui npm i element-ui -S2、全局引用Element ui 在 main.js 中写入以下内容&#xff1a; import Vue from vue; import ElementUI from elem…

vue3+antd 实现国际化 切换中英文

首先新建结构文件夹 1.下载i18n插件 npm install vue-i18n --save 2.配置i18n.js文件 import { createI18n} from vue-i18n import message from ./langs const localeData {legacy: true, // composition APIlocale: cn,messages: message, } const i18n createI18n(loca…