使用 Chi2 和 Quanteda 进行特征提取
Feature extraction using Chi2 with Quanteda
我有一个具有这种结构的数据框 df :
Rank Review
5 good film
8 very good film
..
然后我尝试使用 quanteda 包创建一个 DocumentTermMatris :
mydfm <- dfm(df$Review, remove = stopwords("english"), stem = TRUE)
我想知道如何用文档计算每个特征(术语)的 CHi2 值,以便根据 Chi2 值提取最佳特征
你能帮我解决这个问题吗?
编辑:
head(mydfm[, 5:10])
Document-feature matrix of: 63,023 documents, 6 features (92.3% sparse).
(showing first 6 documents and first 6 features)
> head(mydfm[, 5:10])
Document-feature matrix of: 63,023 documents, 6 features (92.3% sparse).
(showing first 6 documents and first 6 features)
features
docs bon accueil conseillèr efficac écout répond
text1 0 0 0 0 0 0
text2 1 1 1 1 1 1
text3 0 0 0 0 0 0
text4 0 0 0 0 0 0
text5 0 0 1 0 0 0
text6 0 0 0 0 1 0
...
text60300 0 0 1 1 1 1
这里有我的 dfm 矩阵,然后我创建了我的 tf-idf 矩阵:
tfidf <- tfidf(mydfm)[, 5:10]
我想确定这些特征和文档之间的 chi2 值(这里我有 60300 个文档):
textstat_keyness(mydfm, target = 2)
但是,由于我有 60300 个目标,我不知道如何自动执行此操作。
我在 Quanteda 手册中看到 dfm 函数中的 groups 选项可能会解决这个问题,但我不知道该怎么做。 :(
编辑 2:
排名回顾
10总是好的
1部好电影
3 正常
这里我尝试使用 dfm 对文档进行分组:
mydfm <- dfm(Review, remove = stopwords("english"), stem = TRUE, groups = Rank)
但是无法对文档进行分组
你能帮我解决这个问题吗
谢谢
参见?textstat_keyness
。默认度量是卡方。您可以更改 target
参数以针对所有其他频率设置特定文档的频率。例如
textstat_keyness(mydfm, target = 1)
第一个文档与所有其他文档的频率对比,或者
textstat_keyness(mydfm, target = 2)
第二次对所有其他人,等等
如果你想比较文档分组的频率类别,你需要在 dfm()
中使用 groups =
选项来获取提供的变量或在 docvars 中使用 on。请参阅 ?textstat_keyness
中的示例。
我有一个具有这种结构的数据框 df :
Rank Review
5 good film
8 very good film
..
然后我尝试使用 quanteda 包创建一个 DocumentTermMatris :
mydfm <- dfm(df$Review, remove = stopwords("english"), stem = TRUE)
我想知道如何用文档计算每个特征(术语)的 CHi2 值,以便根据 Chi2 值提取最佳特征
你能帮我解决这个问题吗?
编辑:
head(mydfm[, 5:10])
Document-feature matrix of: 63,023 documents, 6 features (92.3% sparse).
(showing first 6 documents and first 6 features)
> head(mydfm[, 5:10])
Document-feature matrix of: 63,023 documents, 6 features (92.3% sparse).
(showing first 6 documents and first 6 features)
features
docs bon accueil conseillèr efficac écout répond
text1 0 0 0 0 0 0
text2 1 1 1 1 1 1
text3 0 0 0 0 0 0
text4 0 0 0 0 0 0
text5 0 0 1 0 0 0
text6 0 0 0 0 1 0
...
text60300 0 0 1 1 1 1
这里有我的 dfm 矩阵,然后我创建了我的 tf-idf 矩阵:
tfidf <- tfidf(mydfm)[, 5:10]
我想确定这些特征和文档之间的 chi2 值(这里我有 60300 个文档):
textstat_keyness(mydfm, target = 2)
但是,由于我有 60300 个目标,我不知道如何自动执行此操作。 我在 Quanteda 手册中看到 dfm 函数中的 groups 选项可能会解决这个问题,但我不知道该怎么做。 :(
编辑 2:
排名回顾 10总是好的 1部好电影 3 正常
这里我尝试使用 dfm 对文档进行分组:
mydfm <- dfm(Review, remove = stopwords("english"), stem = TRUE, groups = Rank)
但是无法对文档进行分组
你能帮我解决这个问题吗
谢谢
参见?textstat_keyness
。默认度量是卡方。您可以更改 target
参数以针对所有其他频率设置特定文档的频率。例如
textstat_keyness(mydfm, target = 1)
第一个文档与所有其他文档的频率对比,或者
textstat_keyness(mydfm, target = 2)
第二次对所有其他人,等等
如果你想比较文档分组的频率类别,你需要在 dfm()
中使用 groups =
选项来获取提供的变量或在 docvars 中使用 on。请参阅 ?textstat_keyness
中的示例。