我正在做情绪分析,但我需要在每条推文中按 n 个字符过滤。我的意思是:
df <- c("the most beauty", "the most ugly", "you are beauty")
Library(dplyr)
df %>%
filter((n char >3) %in% df)
我期待这样的结果:"最美"、"丑陋"、"美">
我试过$str_detect
但没用
我们可以使用正则表达式来匹配字符从 1 到 3 的单词并将其替换为空白 (""
(
gsub("\s*\b[^ ]{1,3}\b\s*", "", df)
#[1] "most beauty" "most ugly" "beauty"
注意:"df"是vector
而不是data.frame/tbl_df
。 因此,带有filter
的tidyverse
方法将不起作用
对于情绪分析,按预定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