从TM包中取消发布Corpus给NA

时间:2018-05-17 16:32:24

标签: r tm

我有一个使用TM软件包创建的语料库,我已经应用了所有的转换,并准备将其转换回数据框。

当我使用

twit[[1]]$content

我可以看到我的数据。然而,当我尝试取消列表时,我的所有记录都获得了NA。

twitCln <- data.frame(text=unlist(sapply(twit, '[', "content")), stringsAsFactors=F)

关联的问题Loop through a tm corpus without losing corpus structure在唯一具有相同问题的答案之后进行了讨论,但似乎没有解决方案。

这是一些可重现的代码。

library(tm)
bbTwit <- as.data.frame(c("Text Line One!", "Text Line 2"), stringsAsFactors = F)
colnames(bbTwit) <- 'Contents'
bbTwit$doc_id <- row.names(bbTwit) 
twit <- bbTwit[c('doc_id','Contents')]
colnames(twit) <- c('doc_id','text')

twit <-Corpus(DataframeSource(data.frame(twit)))
twit <-tm_map(twit, removePunctuation)
twit <-tm_map(twit, stripWhitespace)

twit[[1]]$content

twitCln <- data.frame(text=unlist(sapply(twit, '[', "content")), stringsAsFactors=F)

预期输出将是具有2个观察值的数据帧,其中“文本行1”将是第一个记录而“文本行2”将是第二个。我得到的是对NA的两个观察

2 个答案:

答案 0 :(得分:1)

根据您对所需输出的描述,它听起来像你想要的

doc = lxml.etree.fromstring(testString)
found = doc.findall('channel/item/description')


for desc in found:
    if "FORBIDDENSTRING" in desc.text:
        desc.getparent().remove(desc)
mydf <- data.frame(unlist(twit)[1:(length(unlist(twit))-1)])

其中行/列名称当然可以使用content1 Text Line One content2 Text Line 2 设置为您喜欢的任何内容。

或者是一个简单的案例:

names()
rbind(twit[[1]]$content,
           twit[[2]]$content)

e.g。

[1,] "Text Line One"
[2,] "Text Line 2"
mydf <- data.frame(rbind(twit[[1]]$content,
                 twit[[2]]$content)
)
colnames(mydf) <- "Pretty Column"
mydf

答案 1 :(得分:1)

要获取内容,只需使用content()功能即可。例如

content(twit)
# [1] "Text Line One" "Text Line 2"

或将其放在data.frame

data.frame(text=content(twit))
#            text
# 1 Text Line One
# 2   Text Line 2