问题描述
我正在尝试使用奇妙的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列中包含“功能”,然后在B列中与“美国”同时出现的表?
我想另一种方法可能是不使用“ topfeatures”,而只获取矩阵中具有与“美国”共同出现的所有术语的行(或列?),然后根据他们共发生多少次?
解决方法
或多或少是对的。这是我使用内置示例进行操作的方式,您可以根据需要替换文本和不同的参数(例如n
)。
请注意使用padding = TRUE
:这在删除标点符号或停用词的空间中留有空白,因此对于以前由已删除标记之一分隔的单词,其邻近区域不会膨胀。
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
,
我认为如果按照以下方式进行操作,会起作用吗?
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,]
有人可以确认这是正确的,给我一个与“美国”一词同时出现的前100个功能的数据框吗?