在 r 中的值内过滤 n 个字符

filtering for n char inside a value in r

我正在进行情绪分析,但我需要在每条推文中按 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 但没用

我们可以使用正则表达式来匹配具有 1 到 3 字符的单词并将其替换为空白 ("")

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

注意:'df' 是 vector 而不是 data.frame/tbl_df。因此 tidyverse 方法与 filter 将不起作用

对于情绪分析,按预定 nchar() 过滤可能有点粗糙。我建议您查看 the tidytext library,这将使您能够将有意义的文本单元(例如单词)标记为整洁的数据结构。

在您的情况下,您可以将每个单词转换为一个标记并重塑数据框,以便每个标记(或单词)位于单独的行中。然后你可以很容易地过滤掉文章和其他不相关的东西。例如:

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