如何将文档中的某些单词提取到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)