Quanteda将FCM输出转换为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列中包含“功能”,然后在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个功能的数据框吗?