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 创建
我正在尝试对我的数据进行 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 创建