我想使用大型外部词典(格式如下面的 txt 变量所示)对波兰语文本进行词形还原。我并不幸运,无法使用流行的文本挖掘包来选择波兰语。答案https://stackoverflow.com/a/45790325/3480717 https://stackoverflow.com/a/45790325/3480717作者:@DmitriySelivanov 可以很好地处理简单的文本向量。 (我还从字典和语料库中删除了波兰语变音符号。)该函数适用于文本向量。
不幸的是,它不适用于 tm 生成的语料库格式。让我粘贴 Dmitriy 的代码:
library(hashmap)
library(data.table)
txt =
"Abadan Abadanem
Abadan Abadanie
Abadan Abadanowi
Abadan Abadanu
abadańczyk abadańczycy
abadańczyk abadańczykach
abadańczyk abadańczykami
"
dt = fread(txt, header = F, col.names = c("lemma", "word"))
lemma_hm = hashmap(dt$word, dt$lemma)
lemma_hm[["Abadanu"]]
#"Abadan"
lemma_tokenizer = function(x, lemma_hashmap,
tokenizer = text2vec::word_tokenizer) {
tokens_list = tokenizer(x)
for(i in seq_along(tokens_list)) {
tokens = tokens_list[[i]]
replacements = lemma_hashmap[[tokens]]
ind = !is.na(replacements)
tokens_list[[i]][ind] = replacements[ind]
}
tokens_list
}
texts = c("Abadanowi abadańczykach OutOfVocabulary",
"abadańczyk Abadan OutOfVocabulary")
lemma_tokenizer(texts, lemma_hm)
#[[1]]
#[1] "Abadan" "abadańczyk" "OutOfVocabulary"
#[[2]]
#[1] "abadańczyk" "Abadan" "OutOfVocabulary"
现在我想将其应用于 tm 语料库“docs”这是我将在 tm 生成的语料库上与 tm 包一起使用的示例语法。
docs <- tm_map(docs, function(x) lemma_tokenizer(x, lemma_hashmap="lemma_hm"))
我尝试过的另一种语法:
LemmaTokenizer <- function(x) lemma_tokenizer(x, lemma_hashmap="lemma_hm")
docsTDM <-
DocumentTermMatrix(docs, control = list(wordLengths = c(4, 25), tokenize=LemmaTokenizer))
它向我抛出一个错误:
Error in lemma_hashmap[[tokens]] :
attempt to select more than one element in vectorIndex
该函数适用于文本向量,但不适用于 tm 语料库。提前感谢您的建议(如果不能与 tm 一起使用,甚至可以将此功能与其他文本挖掘包一起使用)。