使用Python对文档单词进行计数
做hacker.org上面的题目时,遇到了一个题目需要对RFC3280种长度为9的单词进行计数,并找出这些单词中出现次数最多的那个:Didactic Byte
RFC3280文档有7000多行,靠人工是数不出来的,解决这种是就得编程了,而且很明显,在处理此类问题时脚本式比较方便的,果断选择python
先是将题意理解错了,理解为出现次数最多的九个字母, 然后等到程序运行好提交答案时才发现不对,唉,真是汗颜
既然程序写出来了,还是将其贴出来吧
文档中字母频率计数:
# find the occurence of single letter from a document
#import fileinput test = ""
dicts = {} # read content from a document
# we could use readline,readlines etc.
# also we could use fileinput.input(filename) text = open('RFC3280.txt')
for line in text.readlines():
test += line.lower().replace(" ","") # use dictionary to store the occurence and it's letter
for i in xrange(97,123):
letter = chr(i)
count = test.count(chr(i))
#print "the accounts of %c is %d " % (letter,count)
dicts.setdefault(letter,count) # sort the dict by values,here I used a lambda expression
# to sort by keys:
# sorted_dict = sorted(dicts.iteritems(),key = lambda d:d[0]) sorted_dict = sorted(dicts.iteritems(),key = lambda d:d[1],reverse = True)
print sorted_dict
代码挺短的,注释也很详细,可以看出来脚本语言在处理这种事情上确实是比较方便
下面再看看,从文档中获取指定长度的单词的出现频率,并对其进行排序
# this script is used to find all 9-letter word from specific document
# after find them, pick the most commom one from them
# as I used dictionary to store them, I can not output the one I want seperately
# the dictionary object is difference from list or an array,it store it's key:value rondomly test = ""
storage = []
dicts = {}
word_length = 9 # read content from a document
# as python script read lines from the document,it may contains '\n'
# at the end of a sentence,there followed a '.',we also need a handle with tring.replace function text = open('RFC3280.txt')
for line in text.readlines():
test += line.lower().replace('\n','').replace('.','') # convert a string to a list
lists = test.split(' ') # choose theses words which it's length is word_length,here is 9
for i in xrange(0,len(lists)):
if len(lists[i])==word_length:
storage.append(lists[i]) #print storage
#print len(storage) # now use dictionary.setdefault to add elements to dictionary
for n in xrange(0,len(storage)):
word = storage[n]
count = storage.count(word)
dicts.setdefault(word,count) # sort the dictionary order by vaules
sorted_dict = sorted(dicts.iteritems(),key = lambda d:d[1],reverse = True)
print sorted_dict
两段代码,实现的思路上差不多,都是从文件读取内容存入一个字符串中,这里是按行读取,所以要对字符串拼接。存入字符串后还需要进行一下处理,因为原文文本中有大量
的空格、换行符,其次句末的'.'也会被当作单词的一部分,还好这里要处理的符号不多,不然恐怕就要劳驾正则表达式了。然后将其转换为list(列表)对象,list有count属性可
直接对元素计数。由于需要知道每个元素出现的次数,我是用dictionary(字典)对象存储“键=>值”对,这里使用setdefault属性进行元素添加。注意到代码中使用了lambda
表达式,如果对lambda表达式不太熟悉建议还是查阅一下资料,遗憾的是一段时间没用python,我对这些知识点也没太大映像了,手头也没用相应资料(manual很好,有时候想查到某个比较细小的东西时会不太方便, 如果有安装bpython可能会方便很多),可参考:
上面两段代码可以得出想要的结果,但在阅读体验上一大堆字典元素打印在一起还是需要改进的,今后会对其进行整理。
最后在贴上部分测试文件的内容,这里直接读取文件是因为python脚本和该文本文件处于同一目录下
This memo profiles the X.509 v3 certificate and X.509 v2 Certificate
Revocation List (CRL) for use in the Internet. An overview of this
approach and model are provided as an introduction. The X.509 v3
certificate format is described in detail, with additional
information regarding the format and semantics of Internet name
forms. Standard certificate extensions are described and two
Internet-specific extensions are defined. A set of required
certificate extensions is specified. The X.509 v2 CRL format is
described in detail, and required extensions are defined. An
algorithm for X.509 certification path validation is described. An
ASN.1 module and examples are provided in the appendices.
使用Python对文档单词进行计数的更多相关文章
- python统计文档中词频
python统计文档中词频的小程序 python版本2.7 效果如下: 程序如下,测试文件与完整程序在我的github中 #统计空格数与单词数 本函数只返回了空格数 需要的可以自己返回多个值 def ...
- 如何在命令行模式下查看Python帮助文档---dir、help、__doc__
如何在命令行模式下查看Python帮助文档---dir.help.__doc__ 1.dir函数式可以查看对象的属性,使用方法很简单,举str类型为例,在Python命令窗口输入 dir(str) 即 ...
- 在命令行模式下查看Python帮助文档---dir、help、__doc__
在命令行模式下查看Python帮助文档---dir.help.__doc__ 1.dir函数式可以查看对象的属性,使用方法很简单,举str类型为例,在Python命令窗口输入 dir(str) 即 ...
- Python帮助文档中Iteration iterator iterable 的理解
iteration这个单词,是循环,迭代的意思.也就是说,一次又一次地重复做某件事,叫做iteration.所以很多语言里面,循环的循环变量叫i,就是因为这个iteration. iteration指 ...
- sphinx:python项目文档自动生成
Sphinx: 发音: DJ音标发音: [sfiŋks] KK音标发音: [sfɪŋks] 单词本身释义: an ancient imaginary creature with a lion's bo ...
- 三言两语聊Python模块–文档测试模块doctest
doctest是属于测试模块里的一种,对注释文档里的示例进行检测. 给出一个例子: splitter.pydef split(line, types=None, delimiter=None): &q ...
- python 本地文档查看
本地安装Python文档本地查看,在命令行中运行: python -m pydoc -p 1234 在浏览器中访问如下链接,就可以访问到本地文档: http://localhost:1234/ 本地文 ...
- 使用Sphinx生成本地的Python帮助文档
第一步:安装Sphinx 首先我们需要安装Sphinx,如果已经安装了Anaconda,那么只需要使用如下命令即可安装,关于其中的参数 -c anaconda,可以在链接[1]中查看: conda i ...
- Python asyncio文档阅读摘要
文档地址:https://docs.python.org/3/library/asyncio.html 文档第一句话说得很明白,asyncio是单线程并发,这种event loop架构是很多新型异步并 ...
随机推荐
- tomcat 容器生命周期lifecycle
1.复习java的事件机制 java事件机制包括三个部分:事件.事件监听器.事件源. 事件:一般继承自java.util.EventObject类,封装了事件源对象及跟事件相关的信息. 事件监听器:实 ...
- 使用 CSS3 动画实现的 3D 图片过渡特效
这是一个基于 CSS3 动画实现的图片过渡效果,共有 Flip.Rotation.Multi-flip.Cube.Unfold 等6种效果,它们将证明 CSS3 Transform 和 Transit ...
- Apache+MySQL+PHP开发环境的搭建(一)
通过套件来安装和配置php开发环境. 1.所需软件:AppServ(因为是开源,任何网站都能下载) 安装本软件基本上就是下一步. 2.进行安装 选择一个盘安装该软件点击next继续: 根据自己的实际情 ...
- 定义通用的可通过lambda表达式树来获取属性信息
我们一般获取某个类型或对象的属性信息均采用以下几种方法: 一.通过类型来获取属性信息 var p= typeof(People).GetProperty("Age");//获取指定 ...
- 学习ASP.NET Web API框架揭秘之“HTTP方法重写”
最近在看老A的<ASP.NET Web API 框架揭秘>,这本书对于本人现阶段来说还是比较合适的(对于调用已经较为熟悉,用其开发过项目,但未深入理解过很多内容为何可以这样“调用”).看到 ...
- VMware中网络设置之Bridged
1.设置linux虚拟机Bridged模式. 2.查找网关地址:点击虚拟机工具栏编辑---Virtual Network Editor,选中VMnet0,然后在Bridged to 下拉框中选择可以本 ...
- C#基础03
学习集合的一些知识.集合:泛型集合,非泛型集合;ArrayList,Hashtable,List<T>,Dictionary<k,v>等,还有一些集合的常用方法. 一:集合的介 ...
- Dapper学习 - Dapper的基本用法(二) - 存储过程/函数
上一篇貌似少介绍了自定义函数和存储过程, 因为这两个也可以使用查询的方式来实现功能, 这一篇就补上 一.自定义函数的创建和调用 (mysql的) Delimiter $$ drop function ...
- Win10怎么输入法切换
按 windows 键+空格键,或者CTRL+Shift,或者只按 Shift,或者CTRL+空格 试试 方法/步骤1在桌面上点击[控制面板],进入控制面板后使用分类显示控制面板内的选项.然后在语言下 ...
- autofac 使用
var builder = new ContainerBuilder();var container = builder.Build(); var assemblies = new Directory ...