Как получить список всех слов с корнем вместе с его исходной формой после создания основы документа в R

Я пытаюсь получить список всех стеблей слов вместе с их исходной формой.

вот пример

library(tm)
text <- c("Very Impressed with the shipping time, it arrived a few days earlier than expected", "it was very helpful","It was a wonderful experience")
corpus<-Corpus(VectorSource(text))
corpus<-tm_map(corpus,stemDocument)

Я ищу такой ответ во фрейме данных

 orginal_word   stemmed 
 Impressed      Impress 
 shipping        ship
 very            veri
 helpful         help
 wonderful       wonder
 experience      experi

person Shruthi S R    schedule 21.09.2017    source источник


Ответы (2)


Это немного эффективнее, чем ответ @jazzurro:

library("corpus")
text <- c("Very Impressed with the shipping time, it arrived a few days earlier than expected", "it was very helpful","It was a wonderful experience")
word <- text_types(text, collapse = TRUE, drop = stopwords_en, drop_punct = TRUE)
stem <- SnowballC::wordStem(word, "english")
data.frame(word, stem)

Результат:

         word    stem
1     arrived   arriv
2        days     day
3     earlier earlier
4    expected  expect
5  experience  experi
6     helpful    help
7   impressed impress
8    shipping    ship
9        time    time 
10  wonderful  wonder

(Функция text_types также принимает объекты tm Корпуса, если это важно для вас.)

person Patrick Perry    schedule 22.09.2017

Это может быть чем-то полезным для вас. В пакете SnowballC есть функция с именем wordStem(). Используя его, вы можете сделать следующее. Поскольку я использую unnest_tokens() в пакете tidytext, я сначала создал фрейм данных. Функция разбивает слова и создает набор данных длинного формата. Кажется, вы хотите удалить стоп-слова, поэтому я использовал filter(). Последний шаг является решающим для вас. Я использовал wordStem() в пакете SnowballC для извлечения основы слов, оставшихся в данных. Результат может быть не совсем таким, как вы хотите. Но я надеюсь, что это поможет вам в некоторой степени.

library(dplyr)
library(tidytext)
library(SnowballC)

mydf <- data_frame(id = 1:length(text),
                   text = text)

data(stop_words)

mydf %>%
unnest_tokens(input = text, output = word) %>%
filter(!word %in% stop_words$word) %>%
mutate(stem = wordStem(word))

#      id       word    stem
#   <int>      <chr>   <chr>
# 1     1  impressed impress
# 2     1   shipping    ship
# 3     1       time    time
# 4     1    arrived   arriv
# 5     1       days     dai
# 6     1    earlier earlier
# 7     1   expected  expect
# 8     2    helpful    help
# 9     3  wonderful  wonder
#10     3 experience  experi
person jazzurro    schedule 21.09.2017
comment
Вероятно, должно быть wordStem(word, "english"), если вы не хотите использовать стеммер Porter. - person Patrick Perry; 22.09.2017