您的位置:首页 > 其它

统计所有'单词'出现的次数

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
print
(
'%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
print
(
'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
print
(
'%d\t%s'
%
(D[key],key))
28
sys.stdout
=
_stdout
29
30
EndTime
=
time.time()
31
print
(
'use
time :%s second'
%
(EndTime
-
StartTime))
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐