如何从r中的文本文件中提取文本的特定部分?

时间:2017-10-30 13:12:47

标签: r text-mining text-extraction stringr stringi

我有很多文本文件包含下面给出的文字。

  

\\论文:hep-th / 9201003

     

来自:DIJKGRAAF%IASSNS.BITNET@pucc.PRINCETON.EDU

     

日期:星期四,1月2日92:14 EST(54kb)

     

标题:交叉理论,可积层次和拓扑场理论

     

作者:Robbert Dijkgraaf

     

评论:73页,大多数数字都不包括在内。讲座给出了     Cargese暑期学校关于“量子场论中的新对称原理”     1991年7月16日至27日。

     

\\     在这些讲义中我们回顾了交集之间的各种关系   关于黎曼曲面模空间的理论,KdV的可积层次   类型,矩阵模型和拓扑量子场理论。我们解释一下   特别是为什么Kontsevich自然考虑的类型的矩阵积分   显示为与最小模型关联的tau函数。我们的出发点是   拓扑(p,1)模型的字符串方程的极其简单的形式,   所谓的Baker-Akhiezer功能由(通用的)Airy给出   功能。   \\

我有1992年至2003年的10个文件夹。每个文件夹包含数千个文件。每个文件都有上面给出的结构。我想提取每个文件的最后一部分并保存在新文件中。这部分是论文的摘要。每个文件都有不同的摘要。我已经为我的问题编写了以下代码但无法获得目标。

for(j in 1992:1992)
{
    dir.create(paste("C:\\Users\\Abdul Samad Alvi\\Desktop\\mydata\\",j, sep = ""))
    setwd(paste("C:\\Users\\Abdul Samad Alvi\\Desktop\\dataset\\",j, sep = ""))
    listoffile=list.files()
    for(i in 1:length(listoffile))
    {
        setwd(paste("C:\\Users\\Abdul Samad Alvi\\Desktop\\dataset\\",j, sep = ""))
        filetext=readLines(listoffile[i])
        newtext=unlist(strsplit(filetext,'\\\\'))[3]
        setwd(paste("C:\\Users\\Abdul Samad Alvi\\Desktop\\mydata\\",j, sep = ""))
        write.table(newtext,file = listoffile[i],sep = "")

    }
}

2 个答案:

答案 0 :(得分:0)

strsplit应该有帮助!

text <- "\\ Paper: hep-th/9201003 From: DIJKGRAAF%IASSNS.BITNET@pucc.PRINCETON.EDU Date: Thu, 2 Jan 92 14:06 EST (54kb) Title: Intersection Theory, Integrable Hierarchies and Topological Field Theory Authors: Robbert Dijkgraaf Comments: 73 pages, most figures are not included. Lectures given at the Cargese Summer School on `New Symmetry Principles in Quantum Field Theory,'
July 16-27, 1991. \\ In these lecture notes we review the various relations between intersection theory on the moduli space of Riemann surfaces, integrable hierarchies of KdV type, matrix models, and topological quantum field theories. We explain in particular why matrix integrals of the type considered by Kontsevich naturally appear as tau-functions associated to minimal models. Our starting point is the extremely simple form of the string equation for the topological (p,1) models, where the so-called Baker-Akhiezer function is given by a (generalized) Airy function. \\"


unlist(strsplit(text,'\\\\'))[3]

广义长度:

tail(unlist(strsplit(text,'\\\\')), 1)

答案 1 :(得分:0)

如果文字中的图案始终是一个空行,后跟\\,那么您可以像这样提取文本(假设your_text是单个字符串) :

library(stringr)
str_extract(string = your_text, pattern = "(?<=\n\\\\)(.*)(?=\\\\)")

这应该可以解决您正在努力解决的最大问题。

添加以回应评论:为了获得一个大字符串而不是字符串向量,您可以将paste0()与collapse参数一起使用:

filetext <- readLines("001.txt")
filetext <- paste0(filetext, collapse = " ")

之后,您可以应用答案开头所述的一般情况:

newtext <- str_extract(string = filetext, pattern = "(?<=\\s{2}\\\\\\\\)(.*)(?=\\\\\\\\)")