фильтрация для n символов внутри значения в r - PullRequest
0 голосов
/ 10 октября 2018

Я занимаюсь анализом настроений, но мне нужно фильтровать по n символов внутри каждого твита.Я имею в виду:

df <- c("the most beauty", "the most ugly", "you are beauty")
Library(dplyr)
df %>%
filter((n char >3) %in% df)

Я ожидаю такой результат, как: "Most Beauty", "Ugly", "Beauty"

Я пробовал с $str_detect, но бесполезно

Ответы [ 2 ]

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

Для анализа настроений фильтрация по заранее определенному nchar() может быть немного грубой.Я бы порекомендовал поискать библиотеку tidytext , которая позволит вам токенизировать значимые единицы текста, такие как слова, в аккуратную структуру данных.

В вашем случае вы можете конвертировать каждое словов токен и измените структуру данных так, чтобы каждый токен (или слово) находился в отдельной строке.Тогда вы можете легко отфильтровать статьи и другие несущественные вещи.Например:

library(dplyr)
library(tidytext)

df <- c("the most beauty", "the most ugly", "you are beauty")
text_df <- data_frame(line = 1:3, text = df)
text_df %>%
   unnest_tokens(word, text)

# A tibble: 9 x 2
   line word  
  <int> <chr> 
1     1 the   
2     1 most  
3     1 beauty
4     2 the   
5     2 most  
6     2 ugly  
7     3 you   
8     3 are   
9     3 beauty

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

remove_words <- c("the", "a", "you", "are")
text_df %>%
  unnest_tokens(word, text) %>% filter(!(word %in% remove_words))

# A tibble: 5 x 2
   line word  
  <int> <chr> 
1     1 most  
2     1 beauty
3     2 most  
4     2 ugly  
5     3 beauty

Токенизация позволяет легко вычислять оценки настроений для каждого твита путем суммирования оценок настроений длявсе слова в твите.Примеры можно найти здесь: https://www.tidytextmining.com/sentiment.html

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

Мы можем сделать это с помощью регулярного выражения, чтобы сопоставить слова, содержащие символы от 1 до 3, и заменить его пустым ("")

gsub("\\s*\\b[^ ]{1,3}\\b\\s*", "", df)
#[1] "most beauty" "most ugly"   "beauty"  

ПРИМЕЧАНИЕ. 'Df' - это vector ине data.frame/tbl_df.Так что tidyverse методы с filter не будут работать

...