问题描述
我是初学者r用户,我的项目需要一些帮助。
我想建立一个用于文本分析的量子语料库。我从许多网站上抓取了网页,从而获得了每个网站的数据框。我正在尝试做的是分析文本数据。我对了解这些网页的整体内容感兴趣,但是我也希望将单个网站作为变量选择,因为我想查看该级别是否有任何重大变化。我尝试为每个站点语料库分配一个不同的标签,然后将它们合并:
corp_site1
corp_site2
corp_site3
corp_tot
我不确定此消息的含义(我试图在Google上查找它却找不到任何东西),而且我不知道自己在做什么错。我还研究了docname和docvar,由于我没有定义站点名称的数据框级别元素,因此无法在我的情况下使用它们。
任何帮助将不胜感激!
解决方法
该错误是因为您有三个语料库对象,每个对象具有一个具有相同名称的文档。在 quanteda 中,文档名称必须唯一。
另一个问题是您试图将网站名称指定为“元数据”,该名称特定于语料库,而不是每个文档。 (Corpus元数据也必须采用命名列表的格式。)
一种更好的方法是在构造语料库之前合并数据。如果非文本数据位于data.frame中,则它将自动作为“ docvar”或文档级元数据字段导入。下面,我展示了一个示例,该示例使用了一些与您抓取的data.frame对象的结构相匹配的示例数据。
# create sample data
data_frame_site1 <- data.frame(
txt = "This is website one.",meta = "site1"
)
data_frame_site2 <- data.frame(
txt = "This is website two.",meta = "site2"
)
data_frame_site3 <- data.frame(
txt = "This is website three.",meta = "site3"
)
现在让我们创建一个对象。我这样做是在这里合并所有名为data_frame_*
的数据对象,因为如果有很多这样的对象,您会发现它更方便。
# puts all of your objects into one data.frame
all_df <- do.call(rbind,lapply(ls(pattern = "^data_frame_"),get))
all_df
## txt meta
## 1 This is website one. site1
## 2 This is website two. site2
## 3 This is website three. site3
使语料库变得容易,它将自动将meta
列作为文档变量导入。
# now make the corpus
library("quanteda")
## Package version: 2.1.2
corp <- corpus(all_df,text_field = "txt")
corp
## Corpus consisting of 3 documents and 1 docvar.
## text1 :
## "This is website one."
##
## text2 :
## "This is website two."
##
## text3 :
## "This is website three."
summary(corp)
## Corpus consisting of 3 documents,showing 3 documents:
##
## Text Types Tokens Sentences meta
## text1 5 5 1 site1
## text2 5 5 1 site2
## text3 5 5 1 site3