从奶爸那里得经济学人的到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-低频词按词频乱序处理 ),需要的可以下载。