如何将文档中的某些单词提取到R中的数据帧中?
编辑:可复制的示例(我希望我做得对): 我继续使用如何将文档中的某些单词提取到R中的数据帧中?,r,text-mining,R,Text Mining,编辑:可复制的示例(我希望我做得对): 我继续使用as.character(docs[1])创建了一个字符串,以确保再现性: “列表(内容=c)(\”姓名:生日(MM/DD):打印日期:学生ID:机构ID:页码:\”,\“\”,\”我的姓名我的生日2015年6月16日N111111 002785 1/1\”,“\”,“我不想要的字符串,\”,“我不想要的更多东西”,“我不想要的东西”,“班级名称”,“我不想要的班级编号和部分”,“,“,”当前累计\“,\“\”,\“AHRS(不想要)\”,“12
as.character(docs[1])
创建了一个字符串,以确保再现性:
“列表(内容=c)(\”姓名:生日(MM/DD):打印日期:学生ID:机构ID:页码:\”,\“\”,\”我的姓名我的生日2015年6月16日N111111 002785 1/1\”,“\”,“我不想要的字符串,\”,“我不想要的更多东西”,“我不想要的东西”,“班级名称”,“我不想要的班级编号和部分”,“,“,”当前累计\“,\“\”,\“AHRS(不想要)\”,“12.012.0(不想要)\”,“EHRS(想要这个)\”,“12.012.0\”,“QHRS(不想要)\”,“12.012.0\”,“QPTS(不想要)\”,“不想要”,“45.900 45.900\”,“GPA\”,“3.825 3.825\”,“2015年春季”,“毕业记录表”,等等,“,”元记录表“,“,“毕业记录表”(author=NULL,datetimestamp=NULL,description=NULL,heading=NULL,id=\“非官方2015年6月拷贝2.pdf\”,语言=\“en\”,origin=NULL))“
我想从这个混乱中摆脱出来的只是ID号(本例中为N111111)、学期(2014年秋季和2015年春季)、EHR后的数字(12.0 12.0,各在其列中)和GPA后的数字(3.825 3.825,各在其列中)
我有来自学术成绩单的文本数据,需要放入数据框进行分析。我已将成绩单pdf转换为文本,但现在我需要数据框中的某些信息。具体而言,我需要以下列中的数据: 学生ID、秋季1当前学时、秋季1累计学时、秋季1当前GPA、春季1当前学时、春季1累计学时、春季1当前GPA、春季1累计GPA、夏季1当前学时、夏季1累计学时、夏季1当前GPA、夏季1累计GPA 等等,每学期学生都留在大学 学时数来自EHR,没有列出夏季课程的情况被视为0当前学时、0当前gpa,累积学时和gpa与之前的春季相同 到目前为止,我已经使用tm库将pdf转换为文本,并有以下示例成绩单:
docs这是我在文档看起来相似时使用的一种策略。如果文档完全相同,则可以跳过大部分grep(),使用直接引用(例如,txt[1])来找到要解析的信息的位置
提取策略:
- 使用
grep
标识目标行。使用锚定^
或$
效果很好
- 一旦确定了目标行,使用strsplit
将其分解为所需的元素。重复上一步
txt[1]
)或正则表达式(txt[grep(“GPA”,txt)]
)txt <- readLines(con=textConnection(
'Student Name MM/YY 06/16/2015 N11111111 002785 1 of 1
Name of University Beginning of Graduate Record
Fall 2014 Name of School Master of Science Major: Major
Name of Class 1 Name of Class 2 Name of Class 3 Name of Class 4
COURSE+SECTION 3.0 B+ COURSE+SECTION 3.0 A COURSE+SECTION 3.0 A COURSE+SECTION 3.0 A
Current Cumulative
AHRS 12.0 12.0
EHRS 12.0 12.0
QHRS 12.0 12.0
QPTS 45.900 45.900
GPA 3.825 3.825
Spring 2015
Name of School Master of Science Major: Major
Name of Class 1 Name of Class 2 Name of Class 3
COURSE+SECTION 2.0 A COURSE+SECTION 2.0 A COURSE+SECTION 2.0 A-
Name of Class 4 COURSE+SECTION 2.0 A
Name of Class 5
COURSE+SECTION 2.0 A-
Name of Class 6 COURSE+SECTION 4.0 A
Name of Class 7
COURSE+SECTION 3.0 B+
Name of Class 8
COURSE+SECTION
3.0 A
Current Cumulative
AHRS 20.0 32.0
EHRS 20.0 32.0
QHRS 20.0 32.0
QPTS 76.700 122.600
GPA 3.835 3.831
End of Graduate Record'))
txt您使用的是tm
软件包,但实际上我认为readLines
+grep
+strsplit
将是一个更合适的策略。无论哪种方式,您都需要为我们提供一个可复制的示例。我对这方面非常陌生,我刚刚尝试通过转换语料库文档来创建一个可复制的示例t转换为字符串。它比较混乱,但至少是可复制的,希望如此。如果这仍然不太正确,请道歉。as.character
对可复制性没有帮助;dput
会更好。谢谢!这基本上是有效的!一个问题,第一行id有效,但第二行返回我的列表().在做id和另一个问题时,有没有办法自动执行readLines函数,这样我就不必复制和粘贴每个文档?有几千个这样的文档,并且inspect(文档[2])是无效的文本参数1。grep(“^[N],id)
不返回任何内容。2.您应该将此作为一个单独的问题提问,并提供一个可复制的示例(虚拟数据可以)。
# trim of http://stackoverflow.com/questions/2261079/whitespace-in-r
trim <- function (x) gsub("^\\s+|\\s+$", "", x)
txt <- trim(txt)
# Drop empties
txt <- txt[txt != ""]
id <- strsplit(txt[1], " ")
id <- id[grep("^[N][0-9]",id)] # Starts with N followed by 0-9
gpa <- txt[grep("GPA",txt)]
gpa <- strsplit(gpa, " ")
gpa <- matrix(
as.numeric(
t(
as.data.frame(gpa)
)[1:2, 2:3]
),ncol = 2)