在Quantida中使用较小的语料库文本作为变量构建语料库

问题描述

我是初学者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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...