编辑:可重复的例子(我希望我做对了):
我继续使用as.character(docs[1])
来创建一个字符串,以便重现:
"list(list(content = c(\"Name: Birthdate (MM/DD): Print Date: Student ID: Institution ID: Page:\", \"\", \"MyName MyBirthday 06/16/2015 N1111111 002785 1 of 1\", \"\", \"A string I don't want\", \"\", \"More stuff I don't want\", \"Don't want\", \"\", \"Names of Classes\", \n\"\", \"Class numbers and sections that I don't want\", \"\", \"Current Cumulative\", \"\", \"AHRS (don't want)\", \"12.0 12.0 (no)\", \"\", \"EHRS (WANT THIS)\", \"12.0 12.0\", \"\", \"QHRS (no)\", \"12.0 12.0\", \"\", \"QPTS (no) \", \" (no) 45.900 45.900\", \"\", \"GPA\", \"3.825 3.825\", \"\", \"Spring 2015\", "etc", \"\", \"End of Graduate Record\", \"\", \"\\f\"), meta = list(author = NULL, datetimestamp = NULL, description = NULL, heading = NULL, id = \"Unofficial June 2015 copy 2.pdf\", language = \"en\", origin = NULL)))"
我想要的就是ID号(本例中为N1111111),学期(2014年秋季和2015年春季),EHRS之后的数字(12.0 12.0,每个都在自己的专栏中),以及GPA之后的数字(3.825 3.825,各自在其专栏中)。
我有来自学术成绩单的文本数据,需要将数据放入数据框进行分析。我已将成绩单pdf转换为文本,但现在我需要数据框中的某些信息。具体来说,我需要以下列中的数据:
学生证,秋季1当前时间,秋季1累积小时数,秋季1当前GPA,春季1当前时间,春季1累积小时数,春季1当前GPA,春季1累计GPA,夏季1当前时间,夏季1累计小时数,夏季1当前GPA,夏季1累积GPA
每个学期,学生都留在大学。小时数来自EHRS,没有列出夏季课程的情况被视为0当前小时,0当前gpa,累积小时数和gpa与之前的春天相同。
到目前为止,我已使用tm库将pdf转换为文本,并提供以下示例脚本:
docs <- Corpus(DirSource(cname), readerControl=list(reader=readPDF()))
inspect(docs[1])
学生姓名MM / YY 06/16/2015 N11111111 002785 1 of 1
大学毕业生记录的名称
2014年秋季学校名称 理学硕士专业:专业
第1类名称第2类名称第3类名称第4类名称
课程+第3.0节B +课程+第3.0节课程+第3.0节课程+第3.0节
当前累积
AHRS 12.0 12.0
电子病历 12.0 12.0
QHRS 12.0 12.0
QPTS 45.900 45.900
GPA 3.825 3.825
2015年春季
学校名称 理学硕士专业:专业
第1类名称第2类名称第3类名称
课程+第2.0节课程+第2.0节课程+第2.0节A -
第4课的名称课程+第2.0节A
第5类名称
课程+第2.0节A -
第6课的名称课程+第4.0节A
第7类名称
课程+第3.0节B +
第8类名称
COURSE + SECTION
3.0 A
当前累积
AHRS 20.0 32.0
电子病历 20.0 32.0
QHRS 20.0 32.0
QPTS 76.700 122.600
GPA 3.835 3.831
研究生记录结束
答案 0 :(得分:0)
这是我在文档看起来很相似时使用的策略。如果文件完全相同。您可以跳过大部分grep()并使用直接引用(即txt [1])到您要解析的信息的位置。
提取策略:
String result = String.valueOf(int_result);
for (int i=0; i< result.length(); i++) {
char c = result.charAt(i);
System.out.println("Digit " + i + " = " + c);
// And if you need this as an integer
int digit = Integer.parseInt(""+c);
}
标识目标行。使用锚点grep
或^
效果很好。 $
分解所需的元素。重复最后一步。strsplit
)或正则表达式(txt[1]
)。 readlines方法
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'))
搜索和解析:ID号
# 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 != ""]
搜索和解析:GPA
id <- strsplit(txt[1], " ")
id <- id[grep("^[N][0-9]",id)] # Starts with N followed by 0-9
......等等。