Создание функции для удаления только определенного слова из списка (R) - PullRequest
0 голосов
/ 10 октября 2018

У меня есть список с нежелательными словами (на испанском), которые не имеют смысла, но они также присутствуют в другом.Я просто хочу удалить его, когда они являются термином, а не когда они являются частью другого слова.

Например: «la» - испанская статья, но если я использую функцию, чтобы удалить его, такжеразбит на два слова полезный термин, такой как «отношение» (что означает отношение)

Мой первый выбор - создание функции для удаления этого термина.list, а затем с помощью фильтра внутри df

nousar <- c("rt", "pero", "para"...)
new df %>% bdtidy %>%
 filter(!tweet $in$ nousar))

Но всегда результатом является удаление всех этих слов и разбиение терминов на два слова, что делает мой анализ бесполезным.Спасибо.

Ответы [ 2 ]

0 голосов
/ 10 октября 2018

Вы можете токенизировать слова.То есть извлекать отдельные слова.Как только они извлечены, вы можете проверить токены на совпадения и удалить их.Здесь вам может помочь пакет stringr

#sample text
text <- "hola, me llamo struggles. El package 'stringr' puede resolver la pregunta."

#normalize text by making everything lowercase
lower_text <- stringr::str_to_lower(text)

#split text at anything that isn't a number or a letter
tokens <- stringr::str_split(lower_text, "[^[:alnum:]]+")

#create a list of stop words
stop_words <- c('la', 'las', 'el', 'ellos')

#remove words that are in the stop words vector
tokens[[1]][!tokens[[1]] %in% stop_words]

Поскольку вы, вероятно, будете делать это с большим количеством твитов, я предлагаю вам также взглянуть на пакет tidytext и прочитать учебникhttps://www.tidytextmining.com/

df <- data.frame(
  tweet = text,
  tweet_id = 1234,
  user = 'struggles',
  stringsAsFactors = F
)

twitter_tokens <- tidytext::unnest_tokens(df, word, tweet)

clean_twitter_tokens <- dplyr::filter(twitter_tokens, !word %in% stop_words)

, и это даст вам что-то вроде

  tweet_id      user      word
1     1234 struggles      hola
2     1234 struggles        me
3     1234 struggles     llamo
4     1234 struggles struggles
5     1234 struggles   package
6     1234 struggles   stringr
7     1234 struggles     puede
8     1234 struggles  resolver
9     1234 struggles  pregunta

И если вы хотите объединить его в одном предложении, то следующее вернет его:

lean_twitter_tokens %>%
  dplyr::group_by(tweet_id, user) %>%
  dplyr::summarize(tweet = stringr::str_c(word, collapse = ' '))

давая вам

  tweet_id user      tweet                                                          
     <dbl> <chr>     <chr>                                                          
1     1234 struggles hola me llamo struggles package stringr puede resolver pregunta
0 голосов
/ 10 октября 2018

Одним из способов удаления отдельных слов из строки является добавление слов к пробелам, как в следующем примере:

# sample input
x <- c("Get rid of la but not lala")
# pattern with spaces flanking target word
y <- gsub(" la ", " ", x)
# output
> y
[1] "Get rid of but not lala"
...