老是在说什么考研高频词汇,今天就让数据自己说说哪些是高频词汇。
原始数据 http://pan.baidu.com/s/1jHUFKHK
正则表达式
匹配一个字母以上的单词,过滤掉其他信息,如汉字,标点等。
\b[a-zA-Z][a-zA-Z]+\b
读取数据
用readlines按行读取与处理,用re的finall找到所有匹配的信息,返回一个列表。用join方法以空格作为分隔符把列表的全部元素合成字符串。每行的结果汇总到字符串new_data中。
f = open("English.txt", 'r')
new_data = ''
for line in f.readlines():
pure_line = ' '.join(re.findall(r'\b[a-zA-Z][a-zA-Z]+\b', line)) # 匹配1个字母以上的单词,列表转为字符串
new_data = new_data + ' ' + pure_line.lower() # 全部小写,字符串合并
f.close()
排除
创建一个脏词列表,遍历列表,用replace方法排除这些大量出现且熟悉的单词。
dirty_words = ['and', 'or', 'but', 'still', 'yet', 'so', 'since', 'then', 'now',
'before', 'after', 'next', 'as', 'which', 'than',
'not', 'yes', 'no',
'an', 'the',
'here', 'there','that', 'this',
'we', 'us', 'our', 'you', 'your', 'he', 'his', 'she', 'her', 'they','them', 'their', 'it', 'its',
'am', 'are', 'is', 'was', 'were', 'be', 'being', 'been', 'can',
'do', 'does', 'did', 'have', 'has', 'had',
'go', 'goes', 'went', 'going', 'gone',
'in', 'on', 'with', 'by', 'for', 'at', 'about', 'under', 'of', 'into', 'to', 'from',
'will', 'should', 'shall', 'would',
'where', 'when', 'who', 'what', 'how'
]
for word in dirty_words:
new_data = new_data.replace(' '+word+' ', ' ') # 排除脏词
词频统计
用split方法分割得到的字符串为列表,使用collections的Counter实现词频统计。
word_counter = collections.Counter(new_data.split())
最后一共统计出了6375个单词,其中出现过一次以上的有3248个,考虑到单词的不同形式和部分错词,实际上应该只有两千多个,这些应该能算是核心高频词汇了
出现一次以上的单词汇总 https://pan.baidu.com/s/1i5DxbKh
完整代码
import re
import collections
dirty_words = ['and', 'or', 'but', 'still', 'yet', 'so', 'since', 'then', 'now',
'before', 'after', 'next', 'as', 'which', 'than',
'not', 'yes', 'no',
'an', 'the',
'here', 'there','that', 'this',
'we', 'us', 'our', 'you', 'your', 'he', 'his', 'she', 'her', 'they','them', 'their', 'it', 'its',
'am', 'are', 'is', 'was', 'were', 'be', 'being', 'been', 'can',
'do', 'does', 'did', 'have', 'has', 'had',
'go', 'goes', 'went', 'going', 'gone',
'in', 'on', 'with', 'by', 'for', 'at', 'about', 'under', 'of', 'into', 'to', 'from',
'will', 'should', 'shall', 'would',
'where', 'when', 'who', 'what', 'how'
]
f = open("English.txt", 'r')
new_data = ''
for line in f.readlines():
pure_line = ' '.join(re.findall(r'\b[a-zA-Z][a-zA-Z]+\b', line)) # 匹配1个字母以上的单词,列表转为字符串
new_data = new_data + ' ' + pure_line.lower() # 全部小写,字符串合并
f.close()
for word in dirty_words:
new_data = new_data.replace(' '+word+' ', ' ')
word_counter = collections.Counter(new_data.split())
print(word_counter)