将新文档添加到 R 语料库以查找唯一词
Add new document to R corpus to find unique words
我有一个演讲语料库,我想识别一种演讲中的独特词。
这就是我所做的,我从较大的语料库中提取了两个语料库。在脚本 EUP_control_corpus 和 IMF_control_corpus 中。我将 IMF_control_corpus 制作成一个文本文件,我想将其与 EUP_control_corpus 合并,然后通过使用 tf.idf 我想找出与 EUP 演讲相关的 IMF 演讲中哪些术语是唯一的。
但是,我卡在了添加(合并)语料库的部分。对我来说,这似乎应该很简单,所以我不明白为什么我在上面找不到任何东西。这么简单就没有人问过这个问题吗?
我尝试将两者都制作成 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 中的组函数可能有助于以另一种方式执行此操作,但我决定先 post 这个问题,因为已经搜索了几天了。
感谢您阅读这个问题。
这不是一个具有可重现示例的问题,因此很难提供正确答案。以下是一些建议:
创建一个名为 control
的新文档变量,它采用两个值之一,IMF
或 EU
。使用您之前在 corpus_subset()
命令中使用的条件来使用它。由此,您可以轻松创建一个将继续包含此 docvar 的 dfm,或者您可以使用 groups = "control"
参数 dfm()
来按此变量的值折叠计数。
使用docvars(thecorpus, "thevariable") <- newvalue
而不是寻址语料库对象的内部内容。该方法不稳定,因为我们可能随时更改语料库的内部内容。
我找到了解决办法。它可能不是最漂亮的,但它确实有效。
#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)
我有一个演讲语料库,我想识别一种演讲中的独特词。
这就是我所做的,我从较大的语料库中提取了两个语料库。在脚本 EUP_control_corpus 和 IMF_control_corpus 中。我将 IMF_control_corpus 制作成一个文本文件,我想将其与 EUP_control_corpus 合并,然后通过使用 tf.idf 我想找出与 EUP 演讲相关的 IMF 演讲中哪些术语是唯一的。
但是,我卡在了添加(合并)语料库的部分。对我来说,这似乎应该很简单,所以我不明白为什么我在上面找不到任何东西。这么简单就没有人问过这个问题吗?
我尝试将两者都制作成 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 中的组函数可能有助于以另一种方式执行此操作,但我决定先 post 这个问题,因为已经搜索了几天了。
感谢您阅读这个问题。
这不是一个具有可重现示例的问题,因此很难提供正确答案。以下是一些建议:
创建一个名为
control
的新文档变量,它采用两个值之一,IMF
或EU
。使用您之前在corpus_subset()
命令中使用的条件来使用它。由此,您可以轻松创建一个将继续包含此 docvar 的 dfm,或者您可以使用groups = "control"
参数dfm()
来按此变量的值折叠计数。使用
docvars(thecorpus, "thevariable") <- newvalue
而不是寻址语料库对象的内部内容。该方法不稳定,因为我们可能随时更改语料库的内部内容。
我找到了解决办法。它可能不是最漂亮的,但它确实有效。
#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)