在R中的tidytext中使用unnest_tokens()保留标点符号

8

我在R中使用tidytext包进行n-gram分析。

由于我正在分析推文,我希望保留@和#以捕获提及、转发和标签。然而,unnest_tokens函数会自动删除所有标点符号并将文本转换为小写。

我发现unnest_tokens有一个选项可以使用正则表达式来清理文本,即token='regex'。因此,我可以自定义它清理文本的方式。但是,在n-gram分析中只能定义token='ngrams',因此它仅适用于unigram分析,而不适用于n-gram分析。

有没有办法防止unnest_tokens在n-gram分析中将文本转换为小写?


注意:unnest_tokens 利用 tokenizers 来完成其繁重的工作... 在该项目中,还有 tokenize_tweets.R - Shawn Mehan
查看源代码,tokenize_ngrams <- function(x, lowercase = TRUE, n = 3L, n_min = n, stopwords = character(), ngram_delim = " ", simplify = FALSE)。在 tokenize_ngrams 中肯定有一个选项可以不转换为小写。最坏的情况是打补丁。 - Shawn Mehan
感谢您的评论。我认为unnest_tokens使用tokenize_words来清洗文本:tokenize_words <- function(x, lowercase = TRUE, stopwords = NULL, **strip_punct = TRUE**, strip_numeric = FALSE, simplify = FALSE) {... 我将strip_punct = FALSE进行了更改,但仍然无法工作。 - JungHwan Yang
2个回答

1
tokenize_words的参数可在unnest_tokens函数调用中使用。因此,您可以直接将strip_punct = FALSE作为unnest_tokens的参数使用。
示例:
txt <- data.frame(text = "Arguments for `tokenize_words` are available within the `unnest_tokens` function call. So you can use `strip_punct = FALSE` directly as an argument for `unnest_tokens`. ", stringsAsFactors = F)
unnest_tokens(txt, palabras, "text", strip_punct =FALSE)

 palabras
 1         arguments
 1.1             for
 1.2               `
 1.3  tokenize_words
 1.4               `
 1.5             are
 1.6       available
 1.7          within
 1.8             the
 1.9               `
 1.10  unnest_tokens
 1.11              `
 1.12       function
 1.13           call
 1.14              .
 1.15             so
 #And some more, but you get the point. 

同时还提供:lowercase = FALSEstrip_numeric = TRUE 以更改默认的相反行为。

0
tidytext 版本 0.1.9 中,您现在可以选择对推文进行分词,如果您不想要小写,请使用选项 to_lower = FALSE
unnest_tokens(tweet_df, word, tweet_column, token = "tweets", to_lower = FALSE)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接