R:标记 n-gram 但不去除标点符号

R: tokenize n-grams but not strip punctuations

我正在尝试对我的数据进行 n-gram 标记化(介于 1(最小值)和 3(最大值)之间)。应用此功能后,我可以看到它去除了一些相关的词,例如 [sad](我从表情符号转换而来的词)。

例如输入是:

当我应用 n-gram 标记器并评估它们的频率(由“_”分隔)时,sad 的输出显示如下(请记住,我只打印前 100 个 n-gram 和其他包含单词,但我想具体评估一下):

如何确保“[”在 n-gram 标记化过程中不被删除? (即为了变得[伤心])

这是我的代码,我使用的是 quanteda 包:

tokens= tokens_ngrams(tokens(textcleaning), n=1:3)

然后我创建了一个语料库对象,并通过术语文档矩阵构建了前 100 个 n-gram。

我稍微尝试了一下 - 我认为您应该将 [] 字符转换为独特的字母数字字符。似乎 {quanteda} 想以这种方式解析包含特殊字符或与特殊字符相邻的标记——而不是将它们视为“单词”本身的一部分。由于您对“[sad]”的概念是一个单词,因此要对其进行标记化,只需做一些将其与常规 "sad".

区分开来的事情即可

我使用 gsub 并分别搜索模式 "\[""\]"[ 是一个正则表达式特殊字符,因此您需要使用 两个 反斜杠对其进行转义。我用 "emoji" 替换第一个,用 "" 替换第二个,形成 "emojisad"

注意句子末尾的句号是如何处理的。你说你去掉了标点符号,但这种行为似乎是一个“功能”而不是错误。

library(quanteda, warn.conflicts = FALSE)
#> Package version: 2.1.2
#> Parallel computing: 2 of 8 threads used.
#> See https://quanteda.io for tutorials and examples.
#> 

test_string <- "I dislike lemons [sad]."

tokens_ngrams(tokens(gsub("\[", "emoji", gsub("\]", "", test_string))))
#> Tokens consisting of 1 document.
#> text1 :
#> [1] "I_dislike"       "dislike_lemons"  "lemons_emojisad" "emojisad_."

reprex package (v0.3.0)

于 2020-12-06 创建