Quanteda:给定 n-1 个前身,如何获取 ngram 及其频率 words/types
Quanteda: how to get ngrams, and their frequences, given n-1 predecessor words/types
对于使用 ngrams 的下一个词预测,我需要找到给定 n-1 个前导词的所有 ngrams(及其频率)。
在 dfm 中,我看不到任何方法可以做到这一点,因此开始在 texstat_frequency (data.frame) 上手动实施它。
在 this page 中遇到一些我不清楚文档的方法后,我想知道是否有办法,只是我看不到它(也许是列出但未以某种方式描述的“[”方法之一我明白了)因此这个问题。
(隐含地可能错误地排除了使用我通常喜欢的正则表达式,因为偏见 运行 它们在数十万个字符串上可能太 slow/heavy)
按照评论中的建议查看 fcm() ,但我只能得到 ngrams 之后的 ngrams,就像下面的代码一样,这不是我问的,因为它只适用于
n = 2(并且需要将结果矩阵子集化为给定的 (n-1)gram)。
txt <- c("a b 1 2 3 a b 2 3 4 a b 3 4 5")
fcm(tokens(txt, ngram = 2), "window", window = 1, ordered = T)
Feature co-occurrence matrix of: 10 by 10 features.
10 x 10 sparse Matrix of class "fcm"
features
features a_b b_1 1_2 2_3 3_a b_2 3_4 4_a b_3 4_5
a_b 0 1 0 0 0 1 0 0 1 0
b_1 0 0 1 0 0 0 0 0 0 0
1_2 0 0 0 1 0 0 0 0 0 0
2_3 0 0 0 0 1 0 1 0 0 0
3_a 1 0 0 0 0 0 0 0 0 0
b_2 0 0 0 1 0 0 0 0 0 0
3_4 0 0 0 0 0 0 0 1 0 1
4_a 1 0 0 0 0 0 0 0 0 0
b_3 0 0 0 0 0 0 1 0 0 0
4_5 0 0 0 0 0 0 0 0 0 0
以上代码使用从 github 2018 年 8 月 20 日安装的 quanteda,其中应包含此问题
生成的 this fix
packageVersion("quanteda")
[1] ‘1.3.5’
包贡献者提供了示例代码 (here),展示了如何实现我所要求的,文本不是太大。我在此处重现该代码并进行了一些简化和注释,以使其尽可能易于理解
sample_code <- function() {
require(quanteda)
print(paste("based on","https://github.com/quanteda/quanteda/issues/1413#issuecomment-414795832"))
print("great package great support, thanks")
ngms <- tokens("a b 1 2 3 a b 2 3 4 a b 3 4 5", n = 2:5)
# get rid of tokens metadata not necessary for our UC
ngms_lst <- as.list(ngms)
ngms_unlst <- unlist(ngms_lst) # (named) character with _ sep. ngrams
# split in " "-separated pairs: "n-1 tokens", "nth token"
ngms_blank_sep <- stringi::stri_replace_last_fixed(ngms_unlst,"_", " ")
# list of character(2) ( (n-1)gram ,nth token )
tk2_lst <- tokens(ngms_blank_sep)
# --- end of tokens/ngrams pre-processing
# ordinary fcm
fcm_ord <- fcm(tk2_lst , ordered = TRUE)
fcm_ord[33:39, 1:6]
}
sample_code()
[1] "based on https://github.com/quanteda/quanteda/issues/1413#issuecomment-414795832"
[1] "great package great support, thanks"
Feature co-occurrence matrix of: 7 by 6 features.
7 x 6 sparse Matrix of class "fcm"
features
features a b 1 2 3 4
3_a_b_2 0 0 0 0 1 0
a_b_2_3 0 0 0 0 0 1
b_2_3_4 1 0 0 0 0 0
2_3_4_a 0 1 0 0 0 0
3_4_a_b 0 0 0 0 1 0
4_a_b_3 0 0 0 0 0 1
a_b_3_4 0 0 0 0 0 0
对于使用 ngrams 的下一个词预测,我需要找到给定 n-1 个前导词的所有 ngrams(及其频率)。
在 dfm 中,我看不到任何方法可以做到这一点,因此开始在 texstat_frequency (data.frame) 上手动实施它。
在 this page 中遇到一些我不清楚文档的方法后,我想知道是否有办法,只是我看不到它(也许是列出但未以某种方式描述的“[”方法之一我明白了)因此这个问题。
(隐含地可能错误地排除了使用我通常喜欢的正则表达式,因为偏见 运行 它们在数十万个字符串上可能太 slow/heavy)
按照评论中的建议查看 fcm() ,但我只能得到 ngrams 之后的 ngrams,就像下面的代码一样,这不是我问的,因为它只适用于 n = 2(并且需要将结果矩阵子集化为给定的 (n-1)gram)。
txt <- c("a b 1 2 3 a b 2 3 4 a b 3 4 5")
fcm(tokens(txt, ngram = 2), "window", window = 1, ordered = T)
Feature co-occurrence matrix of: 10 by 10 features.
10 x 10 sparse Matrix of class "fcm"
features
features a_b b_1 1_2 2_3 3_a b_2 3_4 4_a b_3 4_5
a_b 0 1 0 0 0 1 0 0 1 0
b_1 0 0 1 0 0 0 0 0 0 0
1_2 0 0 0 1 0 0 0 0 0 0
2_3 0 0 0 0 1 0 1 0 0 0
3_a 1 0 0 0 0 0 0 0 0 0
b_2 0 0 0 1 0 0 0 0 0 0
3_4 0 0 0 0 0 0 0 1 0 1
4_a 1 0 0 0 0 0 0 0 0 0
b_3 0 0 0 0 0 0 1 0 0 0
4_5 0 0 0 0 0 0 0 0 0 0
以上代码使用从 github 2018 年 8 月 20 日安装的 quanteda,其中应包含此问题
生成的 this fixpackageVersion("quanteda")
[1] ‘1.3.5’
包贡献者提供了示例代码 (here),展示了如何实现我所要求的,文本不是太大。我在此处重现该代码并进行了一些简化和注释,以使其尽可能易于理解
sample_code <- function() {
require(quanteda)
print(paste("based on","https://github.com/quanteda/quanteda/issues/1413#issuecomment-414795832"))
print("great package great support, thanks")
ngms <- tokens("a b 1 2 3 a b 2 3 4 a b 3 4 5", n = 2:5)
# get rid of tokens metadata not necessary for our UC
ngms_lst <- as.list(ngms)
ngms_unlst <- unlist(ngms_lst) # (named) character with _ sep. ngrams
# split in " "-separated pairs: "n-1 tokens", "nth token"
ngms_blank_sep <- stringi::stri_replace_last_fixed(ngms_unlst,"_", " ")
# list of character(2) ( (n-1)gram ,nth token )
tk2_lst <- tokens(ngms_blank_sep)
# --- end of tokens/ngrams pre-processing
# ordinary fcm
fcm_ord <- fcm(tk2_lst , ordered = TRUE)
fcm_ord[33:39, 1:6]
}
sample_code()
[1] "based on https://github.com/quanteda/quanteda/issues/1413#issuecomment-414795832"
[1] "great package great support, thanks"
Feature co-occurrence matrix of: 7 by 6 features.
7 x 6 sparse Matrix of class "fcm"
features
features a b 1 2 3 4
3_a_b_2 0 0 0 0 1 0
a_b_2_3 0 0 0 0 0 1
b_2_3_4 1 0 0 0 0 0
2_3_4_a 0 1 0 0 0 0
3_4_a_b 0 0 0 0 1 0
4_a_b_3 0 0 0 0 0 1
a_b_3_4 0 0 0 0 0 0