将新文档添加到R语料库以查找唯一的单词

时间:2018-02-22 10:07:29

标签: r text-mining quanteda

我有一个演讲语料库,我想在一种演讲中识别出独特的单词。

这就是我所做的,我从较大的一个中提取了两个语料库。在脚本EUP_control_corpus和IMF_control_corpus中。我将IMF_control_corpus写入一个文本文件,我想与EUP_control_corpus结合,然后使用tf.idf我想找出哪些条款对于IMF演讲与EUP演讲有关。

但是,我仍然坚持添加(合并)语料库。对我而言,这似乎应该非常简单,所以我不明白为什么我找不到任何东西。是否这么简单,没有人问过这个问题?

我尝试将两者都放入dfm然后加入它们,或者将文本文件转回到语料库中以加入它们,但在这两种情况下,单个文本文件再次证明了大量的文档

  #Create date format
base_corpus$documents$int_date <- 
  as.Date( base_corpus$documents$date,  format = "%d-%m-%Y")
head(as.Date( base_corpus$documents$date,  format = "%d-%m-%Y"))


#Select pre-crisis EUP speeches for control group
EUP_control_corpus<- 
  corpus_subset(base_corpus, country == "European Parliament" & int_date < as.Date( '31-12-2012', format = "%d-%m-%Y"))
head(docnames(EUP_control_corpus), 50)
ndoc(EUP_control_corpus)


#Create dfm out of EUP corpus
EUP_control_dfm <- 
  dfm(EUP_control_corpus, tolower = TRUE, stem = FALSE)
ndoc(EUP_control_dfm)


#Select pre-crisis IMF speeches for control group
IMF_control_corpus<- 
  corpus_subset(base_corpus, country == "International Monetary Fund" & int_date < as.Date( '31-12-2012', format = "%d-%m-%Y"))
head(docnames(IMF_control_corpus), 50)
ndoc(IMF_control_corpus)


#Combine IMF_control_corpus into one text
IMF_control_text<-
  texts(corpus(texts(IMF_control_corpus, groups = "texts")))
IMF_control_dfm<-
  dfm(IMF_control_text)
ndoc(IMF_control_dfm)


#Add IMF_control_text to EUP_control_dfm
plus_dfm<-
  dfm(rbind(EUP_control_dfm, IMF_control_dfm))
ndoc((plus_dfm))


#Add IMF_control_text to EUP_control_corpus/ doesn't work, make text into single text corpus and then add?
total_control_corpus<-
  corpus(EUP_control_corpus, IMF_control_text)
ndoc(total_control_corpus)

我认为quanteda中的群组功能对于以另一种方式执行此操作可能很有用,但我决定首先将问题发布为已经搜索了几天。

感谢您阅读此问题。

2 个答案:

答案 0 :(得分:0)

这不是一个可重复的例子的问题,因此很难提供正确的答案。以下是一些建议:

  1. 创建一个名为control的新文档变量,该变量采用以下两个值IMFEU之一。使用先前使用corpus_subset()命令使用的条件来使用它。从那里,您可以轻松创建一个将继续包含此docvar的dfm,或者您可以使用groups = "control"参数dfm()来将计数按此变量的值折叠。

    < / LI>
  2. 使用docvars(thecorpus, "thevariable") <- newvalue而不是寻址语料库对象的内部内容。该方法不稳定,因为我们可能随时更改语料库的内部内容。

答案 1 :(得分:0)

我找到了解决方案。它可能不是最漂亮的,但它确实有效。

#Loop through the corpus and paste all documents into one document
temp <- IMF_control_corpus$documents$texts[1]

for(i in 2:337){
  temp <- paste(temp,IMF_control_corpus$documents$texts[i])
}

#Create corpus out of text and add docvars, make sure it looks the same as EUP_control_corpus
single_IMF_corpus <- corpus(temp)
single_IMF_corpus$documents$title      <- "IMF Text"
single_IMF_corpus$documents$date       <- "" 
single_IMF_corpus$documents$country    <- "International Monetary Fund"
single_IMF_corpus$documents$speaker    <- "IMF"
single_IMF_corpus$documents$length     <- ""
single_IMF_corpus$documents$language   <- "en"
single_IMF_corpus$documents$language2  <- "english"
single_IMF_corpus$documents$int_date   <- as.Date("", format = "%d-%m-%Y")


#Combine single_IMF_corpus and EUP_control_corpus
total_control_corpus<-
 c(EUP_control_corpus, single_IMF_corpus)
ndoc(total_control_corpus)
ndoc(EUP_control_corpus)