利用一些码农Trick去搞一搞G和T的单词

根据自然语言处理中的Zipf统计定律,在自然语言的语料库里,一个单词出现的频率与它在频率表里的排名成反比。因此,我们有理由认为,可以根据这个频率表进行一下排序,以及purning。由于精力有限,没有足够时间和带宽去搜集统计英文语料,因此我从网上找到了《酷“艾”英语之美国语料库词频统计》,该表收录了Top 6w的单词,似乎有一定价值。我们可以认为,如果出现频率Top 6W都没有,那么这个词不认识(也就是从你的Language Model里面 Cut 掉)应该也没问题(或许有雾,或许考试就考生僻单词也说不定,但是从实用意义上讲是没错的)…… 于是,我又寻找了G和T的单词电子版,G我使用了再要你命3000,T我用的是不知名语料…… 然后按照 Top 6W 排序,直接扔掉不在列表中的,于是,5666 + 3000 - 若干 = 6662,去重和Cut off的效果还是很明显的…… 就这样,我有了一个按重要性排序的大小较小的词表。由于在merge的时候,代码没有处理和英文单词对应的中文,因此这比较麻烦…… 于是,我们寻找公开的词典API,企鹅公司难得作点好事…… 返回json,parse之……代码如下

「Update:企鹅公司关闭了dict.qq.com的这个免费接口,看看就好了……」

 require "json"
require "net/http" while word = gets do
word.chomp!
begin
str = Net::HTTP.get('dict.qq.com', '/dict?q=' + word)
tmp = JSON.parse(str)["local"][0]["des"]
puts word
tmp.each { |i|
print i["p"] if i["p"]
print i["d"] if i["d"]
puts
}
puts
rescue => err
p err
end
end

这是最后的结果,你敢死,我就敢埋……

由于单词是按照出现频率排序的,因此,从前往后背吧,能背多少是多少……

上一篇:java split函数应该注意的问题


下一篇:Hibernate 、继承关联映射