做hacker.org上面的题目时,遇到了一个题目需要对RFC3280种长度为9的单词进行计数,并找出这些单词中出现次数最多的那个:Didactic Byte

RFC3280文档有7000多行,靠人工是数不出来的,解决这种是就得编程了,而且很明显,在处理此类问题时脚本式比较方便的,果断选择python

先是将题意理解错了,理解为出现次数最多的九个字母, 然后等到程序运行好提交答案时才发现不对,唉,真是汗颜

既然程序写出来了,还是将其贴出来吧

文档中字母频率计数:

  1. # find the occurence of single letter from a document
  2. #import fileinput
  3.  
  4. test = ""
  5. dicts = {}
  6.  
  7. # read content from a document
  8. # we could use readline,readlines etc.
  9. # also we could use fileinput.input(filename)
  10.  
  11. text = open('RFC3280.txt')
  12. for line in text.readlines():
  13. test += line.lower().replace(" ","")
  14.  
  15. # use dictionary to store the occurence and it's letter
  16. for i in xrange(97,123):
  17. letter = chr(i)
  18. count = test.count(chr(i))
  19. #print "the accounts of %c is %d " % (letter,count)
  20. dicts.setdefault(letter,count)
  21.  
  22. # sort the dict by values,here I used a lambda expression
  23. # to sort by keys:
  24. # sorted_dict = sorted(dicts.iteritems(),key = lambda d:d[0])
  25.  
  26. sorted_dict = sorted(dicts.iteritems(),key = lambda d:d[1],reverse = True)
  27. print sorted_dict

代码挺短的,注释也很详细,可以看出来脚本语言在处理这种事情上确实是比较方便

下面再看看,从文档中获取指定长度的单词的出现频率,并对其进行排序

  1. # this script is used to find all 9-letter word from specific document
  2. # after find them, pick the most commom one from them
  3. # as I used dictionary to store them, I can not output the one I want seperately
  4. # the dictionary object is difference from list or an array,it store it's key:value rondomly
  5.  
  6. test = ""
  7. storage = []
  8. dicts = {}
  9. word_length = 9
  10.  
  11. # read content from a document
  12. # as python script read lines from the document,it may contains '\n'
  13. # at the end of a sentence,there followed a '.',we also need a handle with tring.replace function
  14.  
  15. text = open('RFC3280.txt')
  16. for line in text.readlines():
  17. test += line.lower().replace('\n','').replace('.','')
  18.  
  19. # convert a string to a list
  20. lists = test.split(' ')
  21.  
  22. # choose theses words which it's length is word_length,here is 9
  23. for i in xrange(0,len(lists)):
  24. if len(lists[i])==word_length:
  25. storage.append(lists[i])
  26.  
  27. #print storage
  28. #print len(storage)
  29.  
  30. # now use dictionary.setdefault to add elements to dictionary
  31. for n in xrange(0,len(storage)):
  32. word = storage[n]
  33. count = storage.count(word)
  34. dicts.setdefault(word,count)
  35.  
  36. # sort the dictionary order by vaules
  37. sorted_dict = sorted(dicts.iteritems(),key = lambda d:d[1],reverse = True)
  38. print sorted_dict

两段代码,实现的思路上差不多,都是从文件读取内容存入一个字符串中,这里是按行读取,所以要对字符串拼接。存入字符串后还需要进行一下处理,因为原文文本中有大量

的空格、换行符,其次句末的'.'也会被当作单词的一部分,还好这里要处理的符号不多,不然恐怕就要劳驾正则表达式了。然后将其转换为list(列表)对象,list有count属性可

直接对元素计数。由于需要知道每个元素出现的次数,我是用dictionary(字典)对象存储“键=>值”对,这里使用setdefault属性进行元素添加。注意到代码中使用了lambda

表达式,如果对lambda表达式不太熟悉建议还是查阅一下资料,遗憾的是一段时间没用python,我对这些知识点也没太大映像了,手头也没用相应资料(manual很好,有时候想查到某个比较细小的东西时会不太方便, 如果有安装bpython可能会方便很多),可参考:

使用 lambda 函数

细品lambda函数

python:lambda function

官方文档:内建类型

python字典的应用

dict、list、string常用用法

上面两段代码可以得出想要的结果,但在阅读体验上一大堆字典元素打印在一起还是需要改进的,今后会对其进行整理。

最后在贴上部分测试文件的内容,这里直接读取文件是因为python脚本和该文本文件处于同一目录下

  1.   This memo profiles the X.509 v3 certificate and X.509 v2 Certificate
  2. Revocation List (CRL) for use in the Internet. An overview of this
  3. approach and model are provided as an introduction. The X.509 v3
  4. certificate format is described in detail, with additional
  5. information regarding the format and semantics of Internet name
  6. forms. Standard certificate extensions are described and two
  7. Internet-specific extensions are defined. A set of required
  8. certificate extensions is specified. The X.509 v2 CRL format is
  9. described in detail, and required extensions are defined. An
  10. algorithm for X.509 certification path validation is described. An
  11. ASN.1 module and examples are provided in the appendices.

使用Python对文档单词进行计数的更多相关文章

  1. python统计文档中词频

    python统计文档中词频的小程序 python版本2.7 效果如下: 程序如下,测试文件与完整程序在我的github中 #统计空格数与单词数 本函数只返回了空格数 需要的可以自己返回多个值 def ...

  2. 如何在命令行模式下查看Python帮助文档---dir、help、__doc__

    如何在命令行模式下查看Python帮助文档---dir.help.__doc__ 1.dir函数式可以查看对象的属性,使用方法很简单,举str类型为例,在Python命令窗口输入 dir(str) 即 ...

  3. 在命令行模式下查看Python帮助文档---dir、help、__doc__

    在命令行模式下查看Python帮助文档---dir.help.__doc__   1.dir函数式可以查看对象的属性,使用方法很简单,举str类型为例,在Python命令窗口输入 dir(str) 即 ...

  4. Python帮助文档中Iteration iterator iterable 的理解

    iteration这个单词,是循环,迭代的意思.也就是说,一次又一次地重复做某件事,叫做iteration.所以很多语言里面,循环的循环变量叫i,就是因为这个iteration. iteration指 ...

  5. sphinx:python项目文档自动生成

    Sphinx: 发音: DJ音标发音: [sfiŋks] KK音标发音: [sfɪŋks] 单词本身释义: an ancient imaginary creature with a lion's bo ...

  6. 三言两语聊Python模块–文档测试模块doctest

    doctest是属于测试模块里的一种,对注释文档里的示例进行检测. 给出一个例子: splitter.pydef split(line, types=None, delimiter=None): &q ...

  7. python 本地文档查看

    本地安装Python文档本地查看,在命令行中运行: python -m pydoc -p 1234 在浏览器中访问如下链接,就可以访问到本地文档: http://localhost:1234/ 本地文 ...

  8. 使用Sphinx生成本地的Python帮助文档

    第一步:安装Sphinx 首先我们需要安装Sphinx,如果已经安装了Anaconda,那么只需要使用如下命令即可安装,关于其中的参数 -c anaconda,可以在链接[1]中查看: conda i ...

  9. Python asyncio文档阅读摘要

    文档地址:https://docs.python.org/3/library/asyncio.html 文档第一句话说得很明白,asyncio是单线程并发,这种event loop架构是很多新型异步并 ...

随机推荐

  1. Spring MVC 学习总结(一)——MVC概要与环境配置

    一.MVC概要 MVC是模型(Model).视图(View).控制器(Controller)的简写,是一种软件设计规范,用一种将业务逻辑.数据.显示分离的方法组织代码,MVC主要作用是降低了视图与业务 ...

  2. ASP.NET MVC路由解析

    继续往下看<ASP.NET MVC5框架揭秘>. ASP.NET系统通过注册路由和现有的物理文件路径发生映射.而对于ASP.NET MVC来说,请求的是某个Controller中的具体的A ...

  3. 机器学习&数据挖掘笔记_14(GMM-HMM语音识别简单理解)

    为了对GMM-HMM在语音识别上的应用有个宏观认识,花了些时间读了下HTK(用htk完成简单的孤立词识别)的部分源码,对该算法总算有了点大概认识,达到了预期我想要的.不得不说,网络上关于语音识别的通俗 ...

  4. Web 前端开发人员和设计师必读精华文章【系列二十六】

    <Web 前端开发精华文章推荐>2014年第5期(总第26期)和大家见面了.梦想天空博客关注 前端开发 技术,分享各类能够提升网站用户体验的优秀 jQuery 插件,展示前沿的 HTML5 ...

  5. S Gallery – 很有特色的响应式 jQuery 相册插件

    S Gallery 是一款响应式的 jQuery 相册插件.使用了 HTML5 全屏 API 以及 CSS3 动画 和 CSS3 转换,所以只能在支持这些功能的浏览器中使用. 这款插件它有一个特色功能 ...

  6. Windows Azure Platform Introduction (11) 了解Org ID、Windows Azure订阅、账户

    <Windows Azure Platform 系列文章目录> 了解和掌握Windows Azure相关的基础知识是非常重要的. 问题1:什么叫做Org ID Org ID是Azure C ...

  7. angularjs中的页面访问权限设置

    11月在赶一个项目,这阵子比较忙,挤挤时间更一篇博客吧,如标题所述说说在ng中页面访问权限控制的问题,水平有限各位看官见谅: 在以往的项目中,前后端常见的配合方式是前端提供页面和ui加一点DuangD ...

  8. char类型的说明

    CREATE TABLE [dbo].[CharTest]( ) NULL, ) NULL, ) NULL, ) NULL ) insert into dbo.CharTest ( Char, Var ...

  9. C#骏鹏自动售货机接口

    MachineJP类: 第1部分:串口初始化,串口数据读写 using System; using System.Collections.Generic; using System.IO.Ports; ...

  10. Dapper小型ORM的使用(随便吐槽下公司)

    近来公司又有新项目要做,之前做项目用过蛮多ORM,包括ef,NetTiers,ServiceStack.OrmLite等ROM,每种ORM都有一定的坑(或者说是使用者的问题吧~~).用来用去都觉的有一 ...