文本挖掘——将文本拆分为单独的观察结果

Text Mining - Splitting Texts Into Individual Observations

我有一个唯一 ID 的数据集,每个 ID 对应一个句子。我想按词分解句子并删除停用词以清理数据以供进一步分析。

Example of dataset: 
ID  Sentence
1  The quick brown fox 
2  Feel free to be

Breaking up sentence: 
ID  Word 
1  The 
1  quick 
1  brown 
1  fox 
2  Feel 
2  free 
2  to 
2  be 

Removing the stopwords: 
ID  Word
1  quick 
1  brown 
1  fox 
2  Feel 
2  free

我已经在数据框中有了 ID 和句子。什么是分解文本的合适函数,包括删除每个单词后的标点符号(如果有),然后删除带有停用词的行。

  A=read.table(text="ID  Sentence
    1  'The quick brown fox' 
    2  'Feel free to be'",h=T,stringsAsFactors=F)


(dat=rev(stack(setNames(strsplit(A$Sentence," "),1:2))))

  ind values
1   1    The
2   1  quick
3   1  brown
4   1    fox
5   2   Feel
6   2   free
7   2     to
8   2     be


dat[-grep("The|to|be",dat$values),]
  ind values
2   1  quick
3   1  brown
4   1    fox
5   2   Feel
6   2   free

或者你可以这样做:

 dat[!dat$values%in%stop_words$word,TRUE),]

使用 tidytext 包,您可以执行以下操作。该包有停用词。您需要调用数据。然后,将 unnest_tokens() 应用于文本列。您需要指定两个名称。一个用于目标列,另一个用于输出中的新列。一旦你梳理了句子,你就可以对数据进行子集化。这里我使用了dplyr包中的filter()

library(dplyr)
library(tidytext)

foo <- data.frame(ID = c(1, 2),
                  Sentence = c("The quick brown fox", "Feel free to be"),
                  stringsAsFactors = FALSE)

data(stop_words)

unnest_tokens(foo, input = Sentence, output = word) %>%
filter(!word %in% stop_words$word)

  ID  word
1  1 quick
2  1 brown
3  1   fox
4  2  feel
5  2  free