将句子分为R中的2个部分

时间:2014-11-28 14:59:24

标签: r

这是文本文件(20 txt文件)

在每个文本文件中

Suhas - 政治 教皇弗朗西斯突出了叙利亚和伊拉克难民的困境,并在对土耳其进行重要访问时开始谴责极端主义。

萨钦 - 体育 周五在澳门公开赛大奖赛金牌赛中击败中国队的韩力之后,卫冕冠军PV Sindhu继续保持良好表现并进入女子单打比赛的半决赛

Suhas - 政治 美国周五提出上诉,质疑世界贸易组织的裁决,该裁决称其未能使其肉类标签法与全球贸易规则保持一致。 萨钦 - 体育 在没有进球的四场比赛之后,孟买市足球俱乐部希望结束他们的目标干旱,并在周五在贾瓦哈拉尔尼赫鲁体育场接手德里迪纳摩队时重新获胜。

这将继续下去。

问题: 我们需要将所有Suhas数据复制到一个txt文件中,将Sachin数据复制到另一个txt文件中。我们需要将2个txt文件中的两个数据分开。

我已经展示了1 txt但需要做(20 txt文件)。我的意思是Suhas为20 txt,Sachin为20 txt。

需要您的帮助来构建R代码

2 个答案:

答案 0 :(得分:0)

在这里,我创建了两个以files开头的Sports,即Sports1.txtSports2.txt

files <- list.files(pattern='^Sports\\d')
files
#[1] "Sports1.txt" "Sports2.txt"
lst <- lapply(files, function(x) {x1 <- readLines(x)
                              x2 <- x1[x1!='']
                           indSuh <- grep("^Suhas", x2)
                          indSach <- grep("^Sach", x2)
                         list(x2[indSuh], x2[indSach])})


Map(function(i, x, y){nm2 <- paste(y, i, '.txt', sep='')
    lapply(seq_along(x), function(j) write.table(x[[j]],
               file=nm2[j]))},seq_along(lst), lst, list(nm1))

答案 1 :(得分:0)

以下是使用我维护的两个软件包的方法, qdap qdapTools 。我刚刚为 qdapTool loc_split添加了一个功能,可以很好地为此工作,但您需要开发版本。

首先让包开始使用:

 library(devtools)
 install_github("trinker/qdapTools")
 library(qdap); library(qdapTools)

现在代码:

## path of folder with txt files
fileloc <- "mydata"

## Read in Files
fls <- dir(fileloc)
input <- file.path(fileloc , fls[tools::file_ext(fls) == "txt"])
m <- unlist(lapply(input, readLines))

## Determine location of blank lines   
locs <- grep("^([a-zA-Z]+)\\s*-\\s*([a-zA-Z]+)$", m)

## split text on locations of group name with hyphen 
out1 <- loc_split(m, locs)

## extract the meta data
meta <- sapply(out1, "[", 1)

## create a data.frame of text and meta data
dat <- data.frame(
    setNames(colSplit(meta, "-"), c("group", "topic")),
    text = sapply(out1, function(x) unbag(x[-1])), 
    stringsAsFactors = FALSE
)

## split on the group variable (could do for topic or topic & group)
out2 <- split(dat[["text"]], dat[["group"]])

## Write out the lines using cat and the Map function
Map(function(x, y) {
    cat(paste(x, collapse="\n\n"), file=sprintf("%s.txt", y))
}, out2, names(out2))

请注意,这首先会生成一个数据框,其中包含有关每个文本的元数据:

    group     topic                                             text
1  Suhas   Politics Pope Francis has highlighted the plight of re...
2 Sachin     Sports Defending champion PV Sindhu continued her go...
3  Suhas   Politics The United States lodged an appeal on Friday ... 

因为这很有用。