此处已回答了一个类似的问题,但是由于该问题的标题(和已接受的答案)没有明显的联系,因此我将向您展示这如何具体适用于您的问题。我还将在下面提供更多详细信息,以使用通配符作为后缀来实现您自己的基本词干分析器。
手动将词干映射到变形形式
最简单的方法是使用自定义字典,其中键是您的词干,值是屈折形式。tokens_lookup()
然后,您可以使用exclusive = FALSE, capkeys = FALSE
选项将变形项转换为其词干。
请注意,我对您的示例进行了一些修改以简化它,并纠正我认为的错误。
library("quanteda")
packageVersion("quanteda")
[1] ‘0.99.9’
# no need for the data.frame() call
myText <- c("ala ma kotka", "kasia ma pieska")
toks <- tokens(myText,
remove_numbers = TRUE, remove_punct = TRUE,
remove_symbols = TRUE, remove_hyphens = TRUE)
Origin <- c("kot", "kot", "pies", "pies")
Word <- c("kotek", "kotka", "piesek", "pieska")
然后我们创建字典,如下。从 quanteda v0.99.9 开始,具有相同键的值被合并,因此您可以有一个列表,将多个不同的变形形式映射到相同的键。在这里,我必须添加新值,因为在示例Word
中未找到原始向量中的变形形式myText
。
temp_list <- as.list(Word)
names(temp_list) <- Origin
(stem_dict <- dictionary(temp_list))
## Dictionary object with 2 key entries.
## - [kot]:
## - kotek, kotka
## - [pies]:
## - piesek, pieska
然后tokens_lookup()
发挥它的魔力。
tokens_lookup(toks, dictionary = stem_dict, exclusive = FALSE, capkeys = FALSE)
## tokens from 2 documents.
## text1 :
## [1] "ala" "ma" "kot"
##
## text2 :
## [1] "kasia" "ma" "pies"
通配符所有源于共同的根源
另一种方法是使用“glob”通配符实现您自己的词干分析器来表示您的Origin
向量的所有后缀,这(至少在这里)产生相同的结果:
temp_list <- lapply(unique(Origin), paste0, "*")
names(temp_list) <- unique(Origin)
(stem_dict2 <- dictionary(temp_list))
# Dictionary object with 2 key entries.
# - [kot]:
# - kot*
# - [pies]:
# - pies*
tokens_lookup(toks, dictionary = stem_dict, exclusive = FALSE, capkeys = FALSE)
## tokens from 2 documents.
## text1 :
## [1] "ala" "ma" "kot"
##
## text2 :
## [1] "kasia" "ma" "pies"