统计所有'单词'出现的次数
2013-05-27 16:54
507 查看
第一种用二叉树实现;第二种用字典实现;并进行了用时比较
使用't.txt'作为输入文件
总结:自我实现不如内置类型快
代码有点乱,没办法,要准备考6级了,弄这个是为了统计6级单词出现的频数,时间不太够,请各位观众海涵
1. [文件] py.py ~ 4KB 下载(0) 跳至 [1] [2] [全屏预览]
001 | #!/usr/bin/env python |
002 | # -*- coding: utf-8 -*- |
003 | #filename:.py |
004 |
005 | import os,sys,time |
006 | StartTime = time.time() |
007 |
008 | #屏蔽列表通过对输出的屏蔽形成形式上的remove |
009 | #之所以不直接删除是因为其代价太大 |
010 | _remove = [] |
011 | _Sum = 0 #总单词数 |
012 |
013 | #单词树 |
014 | class wtree: |
015 | #创建根节点 |
016 | def __init__( self ,word): |
017 | self .word = word |
018 | self .cont = 1 |
019 | self .left = None |
020 | self .right = None |
021 |
022 | #添加单词或计数 |
023 | def add( self ,word): |
024 | flag = cmp ( self .word,word) |
025 | if flag = = 1 : |
026 | #self.word>word |
027 | if self .left: |
028 | self .left.add(word) |
029 | else : |
030 | self .left = wtree(word) |
031 | if flag = = 0 : |
032 | #self.word==word |
033 | self .cont + = 1 |
034 | if flag = = - 1 : |
035 | #self.word<word |
036 | if self .right: |
037 | self .right.add(word) |
038 | else : |
039 | self .right = wtree(word) |
040 |
041 | #获取word出现的频数 |
042 | def getNum( self ,word): |
043 | Num = 0 |
044 | global _remove |
045 | if word in remove: #在屏蔽列表中 |
046 | return Num |
047 | flag = cmp ( self .word,word) |
048 | if flag = = 1 : |
049 | #self.word>word |
050 | if self .left: |
051 | Num = self .left.getNum(word) |
052 | if flag = = 0 : |
053 | #self.word==word |
054 | Num = self .cont |
055 | if flag = = - 1 : |
056 | #self.word<word |
057 | if self .right: |
058 | Num = self .right.getNum(word) |
059 | return Num |
060 |
061 | #打印元素 |
062 | def tprint( self ): |
063 | if self .left : |
064 | self .left.tprint() |
065 | global _remove |
066 | if self .word not in _remove: |
067 | ( '%d\t%s\n' % ( self .cont, self .word)) |
068 | if self .right: |
069 | self .right.tprint() |
070 |
071 | #重定向输出法输出到文件 |
072 | def out2txt( self , file ): |
073 | stdout = sys.stdout |
074 | sys.stdout = file |
075 | self .tprint() |
076 | sys.stdout = stdout |
077 | #单词树测试 |
078 | def WtreeTest(): |
079 | str = 'i am a programer 1 2 3 6 5 7 ' |
080 | list = str .split() |
081 | root = wtree( list [ 0 ]) |
082 | for it in list [ 1 :]: |
083 | root.add(it) |
084 | root.tprint() |
085 | #WtreeTest() |
086 |
087 | #为了保证不会因为文件过长不换行而截断单词以及去除无用符号进行文件格式化 |
088 | def geshihua(filename): |
089 | File = open (filename, 'r+' ) |
090 | cont = 0 #空格计数 |
091 | char = File .read( 2 ) |
092 | while char : #先假设每个字符2字节 |
093 | if char.isspace(): #如果是空白符号 |
094 | cont + = 1 |
095 | if cont > 20 : #20个单词为一行 |
096 | File .write( '\n' ) |
097 | cont = 0 |
098 | char = File .read( 2 ) |
099 | File .close() |
100 |
101 | #输入文件名 |
102 | if len (sys.argv) = = 2 : |
103 | filename = sys.argv[ 1 ] |
104 | geshihua(filename) |
105 | inputF = open (filename, 'r' ) |
106 | outF = open ( '单词统计.txt' , 'a' ) |
107 | root = wtree( 'root' ) |
108 | for str in inputF: |
109 | list = str .split() |
110 | for word in list : |
111 | root.add(word) |
112 | root.out2txt(outF) |
113 |
114 | def MainTest(filename): |
115 | geshihua(filename) |
116 | inputF = open (filename, 'r' ) |
117 | outF = open ( '单词统计.txt' , 'w+' ) |
118 | root = wtree( 'root' ) |
119 | for str in inputF: |
120 | list = str .split() |
121 | for word in list : |
122 | temp = word.lower() #忽略大小写 |
123 | if len (temp)> 1 : |
124 | root.add(temp) |
125 | root.out2txt(outF) |
126 | inputF.close() |
127 | MainTest( 't.txt' ) |
128 |
129 | EndTime = time.time() |
130 | ( 'use time :%s second' % (EndTime - StartTime)) |
2. [文件] pe.py ~ 808B 下载(0)
01 | #!/usr/bin/env python |
02 | # -*- coding: utf-8 -*- |
03 | #用内置类型字典完成单次统计功能 |
04 | import os,sys,time |
05 | StartTime = time.time() |
06 |
07 | filename = 't.txt' |
08 | inputF = open (filename, 'r' ) |
09 | outF = open ( '单词统计.txt' , 'w+' ) |
10 | D = {} #字典 |
11 | for line in inputF: |
12 | for str in line.split(): |
13 | if str .isalpha(): |
14 | str = str .lower() #忽略大小写 |
15 | if D: |
16 | if D.has_key( str ): |
17 | D[ str ] + = 1 |
18 | else : |
19 | D.update({ str : 1 }) |
20 | #print('update:%s'%str) |
21 | else : |
22 | D.update({ str : 1 }) |
23 | #print('update:%s'%str) |
24 | _stdout = sys.stdout |
25 | sys.stdout = outF |
26 | for key in D.iterkeys(): |
27 | ( '%d\t%s' % (D[key],key)) |
28 | sys.stdout = _stdout |
29 |
30 | EndTime = time.time() |
31 | ( 'use time :%s second' % (EndTime - StartTime)) |
相关文章推荐
- 统计字母'A'和 数字 出现的次数;
- 第十三周项目5-字符串的操作(统计字母 ' A ' 出现的次数)
- 如何统计输入中所有单词出现的次数?
- 第十三周项目5字符串操作统计字符'A'出现的次数
- java 正则表达式查找某段字符串中所有小写字母开头的单词并统计次数,按出现次数排序
- 设计相应的数据结构和算法,尽量高效的统计一片英文文章(总单词数目)里出现的所有英文单词, * 按照在文章中首次出现的顺序打印输出该单词和它的出现次数。
- C++从一个文件中统计所有出现过的单词,并按次数从大到小输出
- Scala 统计一个文件夹下面所有单词出现的次数
- 统计字母'A'出现的次数
- 统计输入中所有单词出现的次数(使用二叉查找树实现:递归和非递归)
- 统计一篇英文文章中所有的单词以及出现的次数
- scala统计一个文件夹下面所有文件的单词出现的总次数
- K&R_6.5用二叉树统计单词出现的次数
- c语言统计从文件读取的文章中所有单词的出现次数
- 统计字母'A'出现的次数
- 第13周项目5-字符串操作(2、统计'A'出现的次数)
- 第十四周 统计字母'A'出现的次数
- 给定一个非负整数n,统计1~n中所有数中1出现的次数
- 利用python内置函数,快速统计单词在文本中出现的次数
- N个任务掌握java系列之统计一篇文章中单词出现的次数