如何将文档中的某些单词提取到R中的数据框?

时间:2015-06-16 16:39:32

标签: r text-mining

编辑:可重复的例子(我希望我做对了):

我继续使用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

研究生记录结束

1 个答案:

答案 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

......等等。