[英]Find words in a corpus based on lemma
我正在用R进行文本挖掘,但是我得到一个“问题”,我想解决...为了在语料库中找到包含最多给定单词或表达式的报告,我使用了来自quanteda
包的kwic
函数,如下所示:
result <- kwic (corp2,c(phrase("trous oblongs")))
其中corp2
是语料库。 trous oblongs
是法文,是复数。 但是,当我这样做时,我只会得到包含以复数形式表示的报告。 我还要考虑到单数形式的出现次数trou oblong
(反之亦然,如果我最初把代码trou oblong
,获得复数也)。
我知道udpipe
软件包,得益于它的udpipe_annotate
函数: https : udpipe_annotate
,它能够提取文本中单词的引理。
所以我想知道udpipe
是否具有可以找到语料库中具有相同引理的单词的所有出现的函数,或者是否可以用kwic
做到这kwic
。
提前致谢
Quanteda具有使用SnoballC的词干分析器的tokens_wordstem()
:
toks <- tokens(corp2)
toks_stem <- tokens_wordstem(toks, "french")
kwic(toks_stem, phrase("trous oblong"))
另外,您也可以使用*通配符来搜索词干:
toks <- tokens(corp2)
kwic(toks, phrase("trou* oblong*"))
如果您想坚持使用udpipe框架,则可以将txt_nextgram
与txt_recode_ngram
使用,或者如果您的两个词不是紧随txt_recode_ngram
但仍希望找到它,则可以使用依赖项解析结果。
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 = " ")
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.