Quanteda 将 fcm 输出转换为 data.frame
Quanteda convert fcm output to data.frame
我正在尝试使用出色的 Quanteda 来查看新闻文章中术语的共现。
我可以找到与“美国”(美国)共现的特征如下:
ch14_corp <- corpus(data_14)
ch14_toks <- tokens(ch14_corp, remove_punct = TRUE) %>%
+ tokens_remove(ch_stop)
ch14_fcm <- fcm(ch14_toks, context = "window")
然后获取共同出现频率最高的特征
topfeatures(ch14_fcm["美国", ], n=50)
朝鲜 美国 日本 中国 韩国 问题 马 政府 国家 报道
881 804 555 552 297 288 270 254 253 243
奥 总统 称 战略 表示 韩 关系 政策 认为 进行
238 238 234 227 214 174 173 169 162 160
中 核 亚太 国家安全 经济 安全 局 世界 发言 国务院
157 153 148 137 136 136 136 135 132 129
美 国 访问 俄罗斯 军事 国际 官员 媒体 公民 人权
126 122 121 120 120 118 118 114 114 114
联合 一个 名 地区 安倍 平衡 导弹 国防 斯 克里
112 112 112 111 110 110 107 105 104 102
谁能告诉我如何将其转换为 'data.frame'?或 A 列中带有 'feature' 的 table,然后它与 B 列中的“美国”同时出现的次数?
我想另一种方法可能是不使用 'topfeatures' 而是只获取矩阵中包含与“美国”同时出现的所有项的行(或列?),然后根据它们同时出现的次数对它们进行排序?
我认为如果我按照以下方式进行操作是否可行?
df <- as.data.frame(t(mat_term)
colnames(df)[1] <- "Term"
colnames(df)[2] <- "Freq"
us_co <- df[order(-df$Freq),]
us_co[1:100,]
有人可以确认这是正确的吗?给我一个 co-occur 带有术语“美国”(美国)的前 100 个特征的数据框?
这或多或少是对的。这是我使用 built-in 示例的方法,您可以根据需要替换您的文本和不同的参数(例如 n
)。
注意 padding = TRUE
的使用:这会在标点符号或停用词被删除的 space 中留下空白,这样对于以前由删除的标记之一分隔的单词,邻近度不会膨胀.
library("quanteda")
## Package version: 2.1.1
ch14_corp <- head(data_corpus_inaugural)
ch14_toks <- tokens(ch14_corp, remove_punct = TRUE, padding = TRUE) %>%
tokens_remove(stopwords("en"), padding = TRUE) %>%
tokens_tolower()
ch14_fcm <- fcm(ch14_toks, context = "window")
topf <- topfeatures(ch14_fcm["united", ], n = 6)
data.frame(Term = names(topf), Freq = topf, row.names = NULL) %>%
dplyr::arrange(desc(Freq))
## Term Freq
## 1 states 8
## 2 government 3
## 3 constitution 3
## 4 instituted 1
## 5 enable 1
## 6 step 1
我正在尝试使用出色的 Quanteda 来查看新闻文章中术语的共现。
我可以找到与“美国”(美国)共现的特征如下:
ch14_corp <- corpus(data_14)
ch14_toks <- tokens(ch14_corp, remove_punct = TRUE) %>%
+ tokens_remove(ch_stop)
ch14_fcm <- fcm(ch14_toks, context = "window")
然后获取共同出现频率最高的特征
topfeatures(ch14_fcm["美国", ], n=50)
朝鲜 美国 日本 中国 韩国 问题 马 政府 国家 报道
881 804 555 552 297 288 270 254 253 243
奥 总统 称 战略 表示 韩 关系 政策 认为 进行
238 238 234 227 214 174 173 169 162 160
中 核 亚太 国家安全 经济 安全 局 世界 发言 国务院
157 153 148 137 136 136 136 135 132 129
美 国 访问 俄罗斯 军事 国际 官员 媒体 公民 人权
126 122 121 120 120 118 118 114 114 114
联合 一个 名 地区 安倍 平衡 导弹 国防 斯 克里
112 112 112 111 110 110 107 105 104 102
谁能告诉我如何将其转换为 'data.frame'?或 A 列中带有 'feature' 的 table,然后它与 B 列中的“美国”同时出现的次数?
我想另一种方法可能是不使用 'topfeatures' 而是只获取矩阵中包含与“美国”同时出现的所有项的行(或列?),然后根据它们同时出现的次数对它们进行排序?
我认为如果我按照以下方式进行操作是否可行?
df <- as.data.frame(t(mat_term)
colnames(df)[1] <- "Term"
colnames(df)[2] <- "Freq"
us_co <- df[order(-df$Freq),]
us_co[1:100,]
有人可以确认这是正确的吗?给我一个 co-occur 带有术语“美国”(美国)的前 100 个特征的数据框?
这或多或少是对的。这是我使用 built-in 示例的方法,您可以根据需要替换您的文本和不同的参数(例如 n
)。
注意 padding = TRUE
的使用:这会在标点符号或停用词被删除的 space 中留下空白,这样对于以前由删除的标记之一分隔的单词,邻近度不会膨胀.
library("quanteda")
## Package version: 2.1.1
ch14_corp <- head(data_corpus_inaugural)
ch14_toks <- tokens(ch14_corp, remove_punct = TRUE, padding = TRUE) %>%
tokens_remove(stopwords("en"), padding = TRUE) %>%
tokens_tolower()
ch14_fcm <- fcm(ch14_toks, context = "window")
topf <- topfeatures(ch14_fcm["united", ], n = 6)
data.frame(Term = names(topf), Freq = topf, row.names = NULL) %>%
dplyr::arrange(desc(Freq))
## Term Freq
## 1 states 8
## 2 government 3
## 3 constitution 3
## 4 instituted 1
## 5 enable 1
## 6 step 1