从奶爸那里得经济学人的到6个词频统计txt文件,因为要导入单词软件,所以用python整理了一下。
三个高频词的txt,简单的做了去重合并之后。处理低频词,粗略一看,发现由于词频过低,单词表排列像是字典一样,经常是同样字母开头的词连续十来个。
于是想把相同词频的打乱一下顺序,这里记录一下打乱过程。
一开始的想法是:既然是按照a-z排列的,从199词频降到20词频。应该是180组a-z的单词。所以如果后一个单词比前一个单词首字母的ascii值小,说明到下一词频了。按照这个原理写成下面代码试一下:
temp_arr,num = [],0
for i in range(len(words)):
temp_arr.append(words[i])
if i==len(words)-1 or ord(words[i][0])>ord(words[i+1][0]):
num+=1
print(num,len(temp_arr))
temp_arr=[]
1844 34
1845 12
1846 15
1847 1
1848 14
[Finished in 0.8s]
得到1800多组是什么鬼啊?打印一下最后几组看看:
……'unlit', 'uptown', 'unobtainable', 'walkover']
1847 1
['virago']
1848 14
['utilitarianism', 'voguish'……
看来词频表并不绝对按照a-z的顺序,偶有前后位置移动。改成ord(words[i][0])>ord(words[i+1][0])+10:忽略10个以内的字母表错位,再试试:
277 4
278 194
279 215
280 2
281 3
282 217
283 221
284 221
285 2
286 220
287 4
288 250
289 258
290 276
[Finished in 0.5s]
还有一些两三个单词一组,再打印出来看看
270 3
['abattoir', 'agora', 'yorktown']
271 217
272 221
273 221
274 2
['addax', 'wunderkind']
275 220
276 4
['additionally', 'academe', 'accoutrements', 'yolk']
277 250
278 258
279 276
[Finished in 0.6s]
哦,原来是字母表边界问题。如果忽略边界问题,我们统计能得到多少组?
174 217
175 221
176 221
177 220
178 250
179 258
180 276
[Finished in 0.6s]
Perfect! 就是180。说明思路还是对的。剩下的就是边界问题处理一下就行了,继续往下写。
temp_arr,all_arr = [],[]
for i in range(len(words)):
temp_arr.append(words[i])
if i==len(words)-1 or ord(words[i][0])>ord(words[i+1][0])+10:
if len(temp_arr)>5:
all_arr.append(temp_arr)
temp_arr=[]
else:
# 处理边界问题,单词重新分配到前面和后面一组里。
arr = []
for w in temp_arr:
if ord(w[0])>ord('m'):
all_arr[-1].append(w)
else:
arr.append(w)
temp_arr = arr
# 输出结果
total,words = 0,[]
for arr in all_arr:
total+=len(arr)
random.shuffle(arr) # 乱序处理
words+=arr
print(total)
print(len(words))
11890
11890
[Finished in 0.7s]
重整词频表完毕。
附上整理好的词频表(200+的高频表只做了去重处理,200-低频词按词频乱序处理 ),需要的可以下载。