R tm / qdap - 根据术语获取文档

时间:2014-06-09 09:31:30

标签: r tm qdap

我试图弄清楚如何根据他们可能包含的术语来识别文档(在这种情况下是推文)。

假设我有这个数据框(df),它由Twitter用户的屏幕名称列表和他们的推文之一组成。

> df
     ScreenName tweet                         
[1,] "Guy A"    "one random tweet"            
[2,] "Guy B"    "another random tweet"        
[3,] "Guy C"    "a third random piece of text"

好吧,在这个数据框架中,我想得到包含某个术语的推文 - 推文" - 以及提取那些到新数据框(df2) )像这样:

> df2
     ScreenName tweet                 
[1,] "Guy A"    "one random tweet"    
[2,] "Guy B"    "another random tweet"

我认为必须有办法使用tm或qdap包来完成它。但是找不到任何东西,所以最终得到了这个烂摊子;

清理语料库后,我转换为termDocumentMatrix

tdm <- TermDocumentMatrix(corpus, control=list(minWordLength=1))

然后我在术语文档矩阵的哪一行中确定我感兴趣的术语是

t <- as.vector(tdm[term,])

子集 - 如果多次提到术语

t.df <- as.data.frame(t)
t.sub <- subset(t.df, t >= 1)

获取文件编号(行号)

t.n <- as.numeric(rownames(t.sub))

创建新数据框,其中t.tw - 仅包括提及term和t.o的推文 - 其他推文

t.tw <- tw[t.n,]
t.o <- tw[!1:nrow(tw) %in% t.n, ]

感谢您的帮助。

如果上面可怕的代码冒犯了任何有成就的R用户,那就道歉了。

1 个答案:

答案 0 :(得分:0)

我会留在此基础并使用grep函数(如果您已经有data.frame),并使用以下行:

df[grep("tweet", df$tweet), ]

这与您的数据完全相符:

df <- read.table(text='ScreenName tweet                         
"Guy A"    "one random tweet"            
"Guy B"    "another random tweet"        
"Guy C"    "a third random piece of text"', header=TRUE)

df[grep("tweet", df$tweet), ]

##   ScreenName                tweet
## 1      Guy A     one random tweet
## 2      Guy B another random tweet