根据引理

时间:2018-04-07 12:26:56

标签: r text-mining quanteda udpipe

我正在用R进行文本挖掘,我得到一个“问题”我想解决... 为了在语料库中查找包含最多给定单词或表达式的报告,我使用kwic包中的quanteda函数,如下所示:

result <- kwic (corp2,c(phrase("trous oblongs")))

其中corp2是语料库。 trous oblongs是法语,是复数形式。但是当我这样做时,我只会得到包含复数表达式的报告。我还想考虑单数形式trou oblong的出现(反之亦然,如果我最初输入代码trou oblong,也得到复数形式。)

我知道udpipe包,感谢其udpipe_annotate函数:https://www.rdocumentation.org/packages/udpipe/versions/0.3/topics/udpipe_annotate,能够提取文本中单词的引理。

所以我想知道udpipe是否有一个函数可以设法查找语料库中具有相同引理的单词的所有出现,或者是否可以使用kwic执行此操作

提前致谢

2 个答案:

答案 0 :(得分:2)

Quanteda有tokens_wordstem()使用SnoballC的词干分析器:

toks <- tokens(corp2)
toks_stem <- tokens_wordstem(toks, "french")
kwic(toks_stem, phrase("trous oblong"))

或者,您也可以使用*通配符搜索词干:

toks <- tokens(corp2)
kwic(toks, phrase("trou* oblong*"))

答案 1 :(得分:0)

如果你想坚持使用udpipe框架,你可以使用txt_nextgramtxt_recode_ngram,或者如果你的2个术语不相互关联但你仍想找到它,则使用依赖项解析结果

library(udpipe)
library(data.table)
txt <- c("Les trous sont oblongs.", 
         "Les trous oblongs du systeme de montage des deux parties permettent un reglage facile et un alignement precis.")

## Annotate with udpipe to tokenise, obtain pos tags, lemmas, dependency parsing output
udmodel <- udpipe_download_model("french-sequoia", udpipe_model_repo = "bnosac/udpipe.models.ud")
udmodel <- udpipe_load_model(udmodel$file_model)
x <- udpipe_annotate(udmodel, txt)
x <- as.data.table(x)

## Situation 1: words are following one another
x <- x[, lemma_bigram := txt_nextgram(lemma, n = 2, sep = " "), by = list(doc_id, paragraph_id, sentence_id)]
subset(x, lemma_bigram %in% c("trous oblong"))

## Situation 2: words are not following one another - use dependency parsing results
x <- merge(x, 
           x[, c("doc_id", "paragraph_id", "sentence_id", "token_id", "token", "lemma", "upos", "xpos"), with = FALSE], 
           by.x = c("doc_id", "paragraph_id", "sentence_id", "head_token_id"),
           by.y = c("doc_id", "paragraph_id", "sentence_id", "token_id"),
           all.x = TRUE, all.y = FALSE, 
           suffixes = c("", "_parent"),
           sort = FALSE)
subset(x, lemma_bigram %in% c("trous oblong") | (lemma %in% "trous" & lemma_parent %in% "oblong"))

如果要将关键字重新编码为1个字词(仅涵盖情况1):

x$term <- txt_recode_ngram(x$lemma, compound = "trous oblong", ngram = 2, sep = " ")