gpt4 book ai didi

r - Quanteda:用字典中的引理替换标记的最快方法?

转载 作者:行者123 更新时间:2023-12-04 17:48:49 24 4
gpt4 key购买 nike

是否有比 R quanteda::tokens_lookup() 更快的替代方法?

我使用“quanteda”R 包中的 tokens() 来标记包含 2000 个文档的数据框。每份文件为 50 - 600 字。这在我的 PC(Microsoft R Open 3.4.1,Intel MKL(使用 2 个内核))上需要几秒钟。

我有一个字典对象,由近 600 000 个单词 (TERMS) 及其对应的词条 (PARENT) 的数据框组成。有 80 000 个不同的引理。

我使用 tokens_lookup() 将标记列表中的元素替换为在字典中找到的词元。但这至少需要 1.5 小时。 这个函数对于我的问题来说太慢了。有没有更快的方法,同时还能得到一个 token 列表?

我想直接转换标记列表,以便在使用字典后生成 ngram。如果我只想要 onegram,我可以通过将文档特征矩阵与字典连接起来轻松地做到这一点。

我怎样才能更快地做到这一点?将标记列表转换为数据框、与字典连接、转换回有序标记列表?

示例代码如下:

library(quanteda)
myText <- c("the man runs home", "our men ran to work")
myDF <- data.frame(myText)
myDF$myText <- as.character(myDF$myText)

tokens <- tokens(myDF$myText, what = "word",
remove_numbers = TRUE, remove_punct = TRUE,
remove_symbols = TRUE, remove_hyphens = TRUE)
tokens
# tokens from 2 documents.
# text1 :
# [1] "the" "man" "runs" "home"
#
# text2 :
# [1] "our" "men" "ran" "to" "work"

term <- c("man", "men", "woman", "women", "run", "runs", "ran")
lemma <- c("human", "human", "human", "humen", "run", "run", "run")
dict_df <- data.frame(TERM=term, LEMMA=lemma)
dict_df
# TERM LEMMA
# 1 man human
# 2 men human
# 3 woman human
# 4 women humen
# 5 run run
# 6 runs run
# 7 ran run

dict_list <- list( "human" = c("man", "men", "woman", "women") , "run" = c("run", "runs", "ran"))
dict <- quanteda::dictionary(dict_list)
dict
# Dictionary object with 2 key entries.
# - human:
# - man, men, woman, women
# - run:
# - run, runs, ran

tokens_lemma <- tokens_lookup(tokens, dictionary=dict, exclusive = FALSE, capkeys = FALSE)
tokens_lemma
#tokens from 2 documents.
# text1 :
# [1] "the" "human" "run" "home"
#
# text2 :
# [1] "our" "human" "run" "to" "work"

tokens_ngrams <- tokens_ngrams(tokens_lemma, n = 1:2)
tokens_ngrams
#tokens from 2 documents.
# text1 :
# [1] "the" "human" "run" "home" "the_human" "human_run" "run_home"
#
# text2 :
# [1] "our" "human" "run" "to" "work" "our_human" "human_run" "run_to" "to_work"

最佳答案

我没有引理列表来对自己进行基准测试,但这是隐藏标记类型的最快方法。请尝试让我知道需要多长时间(应该在几秒钟内完成)。

tokens_convert <- function(x, from, to) {
type <- attr(x, 'types')
type_new <- to[match(type, from)]
type_new <- ifelse(is.na(type_new), type, type_new)
attr(x, 'types') <- type_new
quanteda:::tokens_recompile(x)
}

tokens_convert(tokens, dict_df$TERM, dict_df$LEMMA)

关于r - Quanteda:用字典中的引理替换标记的最快方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46731429/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com