秋天你好!
前段时间,各地的大学生英语四六级报名也陆续开放了,记得当时我报名的时候楞是从中午报到了下午才报名成功。可是报完名如何才能保证能顺利通过考试呢?
重中之重当然是词汇量,如果我们考试所遇到的单词都知道意思的话,那么顺利通过考试自然是水到渠成。而单词这么多,我们要在短时间内通过四六级,那就要重点记忆高频词汇。这里,我就和大家分享一下另类提取英语四六级高频词汇的方法。
Python去除中文字符
以近五年的英语六级真题为例:
首先,我们需要找到英语真题试卷,这个也很简单,随便去互联网上找就可以找到。
其次,因为试卷里面总会包含一些中文,而用R处理中文的方法我没有找到,所以我就先用python将中文去除。我们先将真题整理成txt格式放入一个文件夹中,我们之所以没有用docx等其他格式是因为这些格式不好处理。然后我们用了python的一个编辑器——pyCharm
#pip install pip -U
#pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
import re,os,zhon
#读取文件夹中的文件
path = "C:\\Users\\ASUS\\Desktop\\python四六级" #文件夹目录
files = os.listdir(path) #得到文件夹下的所有文件名称
txts = []
我们需要用到re,os,zhon三个库,可以用pip install()来安装库,如果我们设置了中国的镜像的话,那么库的安装就会很快啦,我们可以运行注释第一行将pip升级到最新版本,再运行第二行,python将默认在该镜像下载库。然后设置好我们文件所在的路径,并得到该路径下的所有文件名。
for file in files: #遍历文件夹
position = path+'\\'+ file #构造绝对路径,"\\",其中一个'\'为转义符
print(position)
with open(position, "r",encoding='utf-8') as f: #打开文件
data = f.read() #读取文件
txts.append(data)
txts = ','.join(txts)#转化为非数组类型
outStr = re.sub('[\u4e00-\u9fa5]', '', txts) #中文的编码范围\u4e00-\u9fa5
outStr = re.sub('[{}]'.format(punctuation),"",outStr) #去除常见中文符号
print(outStr)
newfile = "C:\\Users\\ASUS\\Desktop\\六级.txt" #结果导出到一个txt文件
data = open(newfile,'w',encoding="utf-8")
print(outStr,file=data)
先把文件读取进去,再re.sub将中文unicode编码替换掉,并保存到新建的文件中。
R分析词频及可视化
接下来,我们就要用R来处理数据啦
setwd("C:/Users/ASUS/Desktop/python四六级")
library(tm)
library(tidyverse)
library(SnowballC)
library(wordcloud)
library(wordcloud2)
library(RColorBrewer)
library(stringr)
先把路径设置好,再将要用到的包加载进去,没有安装包的小伙伴要用到install.package函数先安装包奥!
text <- toString(read.table('六级.txt',quote = "",
encoding = 'UTF-8',sep ='\t'))
# Load the data as a corpus
docs <- Corpus(VectorSource(text))
toSpace <- content_transformer(function (x , pattern ) gsub(pattern, " ", x))
docs <- tm_map(docs, toSpace, "\n")
docs <- tm_map(docs, toSpace, "\\\\")
# Convert the text to lower case
docs <- tm_map(docs, content_transformer(tolower))
# Remove numbers
docs <- tm_map(docs, removeNumbers)
# Remove english common stopwords
docs <- tm_map(docs, removeWords, stopwords("english"))
# Remove punctuations
docs <- tm_map(docs, removePunctuation)
# Eliminate extra white spaces
docs <- tm_map(docs, stripWhitespace)
# Text stemming
docs <- tm_map(docs, stemDocument)
dtm <- TermDocumentMatrix(docs)
m <- as.matrix(dtm)
v <- sort(rowSums(m),decreasing=TRUE)
d <- data.frame(word = names(v),freq=v)
head(d, 10)
接着把python处理好的文件读取入R中,然后直接跑代码就可以了。先要说明一下,这段代码基本上每运行一行都会报warning,但是并没有啥大事发生,所以不用慌张。代码的大概流程是先构建语料库,其中还将“\n”和“\”替换成空格。接下来将文本小写,去除数字,去除常见英语分词,去除标点,去除额外的空白,然后再转换一下变量格式就ok啦。不过有些地方还是非常疑惑的,很明显有些单词是不完整的,比如红框中的两单词就少了‘e’。目前我还不知道问题出在哪里,希望有人可以教我做事!
p <- d[d$freq>5&d$freq<100,]
wordcloud2(p,size = 0.1,fontFamily = 'TNM')
然后我取了单词出现频率在5到100之间的单词(频率非常高的单词一般都是常见词汇,大家都认识,频率太低的单词很有可能是乱码),大概2000个左右的单词。效果如图所示,很明显,其中还是存在问题的,需要改进的地方还很多。总结
我们的目标是找出英语四六级高频词汇,首先我们找到了英语真题试卷,并用python将中文字符去除,其次用R得出词频,并进行了可视化。
但是我们同样也遇到了一些问题,如分析过程中所出现的乱码我们应该怎么解决?词频所显示的单词不完整的原因是?
文本挖掘到此并未结束,在此基础上,我们还可以构建LDA模型,用机器学习的方法来进行更深入的探索。
最后,本文所用代码及英语四六级资料,后台回复“英语四六级”即可获取。
关于python的那一部分,我也放了几本书到公众号上了,点击免费电子书2021.10.1文末“阅读原文”,后台回复书名即可获取。
声明:来自繁尘的bio小本本,仅代表创作者观点。链接:https://eyangzhen.com/7854.html