r - 使用 readtext 和 quanteda 制作语料库的正确方法是什么?
问题描述
我需要一些帮助。我正在尝试使用 quanteda 包制作一些语料库样本,但它没有按预期工作。
library(quanteda)
library(readtext)
news <- corpus(readtext('./final/en_US/en_US.news.txt', dvsep = ' '))
#Yeah, it's from Coursera
然后我尝试从整个语料库中抽取样本:
set.seed(362)
newsSample <- corpus_sample(news, size = 5000)
R-studio 告诉我,它不能采样大于总体的样本,但我确信总体远大于大小,文件大约有 77k 行。还有一件事,在readtext之后,我得到了 1 obs 的矩阵。2个变量。第二个 var 是文件中的整个文本。
我究竟做错了什么?
解决方案
readtext
用于读取单个文档时,语料库中只有 1个文档。文档中可能有 77k 行,但它仅来自 1 个文档,而不是 77k 文档。如果您检查结果,readtext
您将在 doc_id 列中仅看到 1 个值,并且所有文本都将位于文本列的单个单元格中。请参阅下面示例中的差异。
library(readtext)
library(quanteda)
DATA_DIR <- system.file("extdata/", package = "readtext")
rt2 <- readtext(paste0(DATA_DIR, "/txt/EU_manifestos/EU_euro_2004_de_PSE.txt"),
docvarsfrom = "filenames",
docvarnames = c("unit", "context", "year", "language", "party"),
encoding = "LATIN1")
rt2
readtext object consisting of 1 document and 5 docvars.
# Description: df[,7] [1 x 7]
doc_id text unit context year language party
<chr> <chr> <chr> <chr> <int> <chr> <chr>
1 EU_euro_2004_de_PSE.txt "\"PES · PSE \"..." EU euro 2004 de PSE
my_corp <- corpus(rt2)
Corpus consisting of 1 document and 5 docvars.
EU_euro_2004_de_PSE.txt :
"PES · PSE · SPE European Parliament rue Wiertz B 1047 Brusse..."
和
rl1 <- readLines(paste0(DATA_DIR, "/txt/EU_manifestos/EU_euro_2004_de_PSE.txt"))
my_corp_rl1 <- corpus(rl1)
my_corp_rl1
Corpus consisting of 100 documents.
text1 :
"PES · PSE · SPE European Parliament rue Wiertz B 1047 Brusse..."
text2 :
""
text3 :
"GEMEINSAM WERDEN WIR STÄRKER Fünf Verpflichtungen für die nä..."
text4 :
"Manifest der Sozialdemokratischen Partei Europas für die Wah..."
text5 :
"PARTY OF EUROPEAN SOCIALISTS · Tel +32 2 284 29 76 · Fax +32..."
text6 :
""
[ reached max_ndoc ... 94 more documents ]
使用readLines
然后语料库,将创建一个包含 100 个文档的语料库,但这些只是刚刚读入的行,这不是语料库的正确定义。
corpus_sample
对语料库中的文档进行采样。因此,如果您有 100 个文档,那么corpus_sample(my_corpus, 50)
将采样 50 个不同的文档。
你需要检查你需要做什么样的采样,文件或特征。如果是功能,则需要使用dfm_sample
with margin = "features"
。有关更多信息,请参阅 quanteda 中的帮助。如果您需要在文本清理、删除停用词等之后进行采样。
推荐阅读
- c++ - 为什么我们不能使用 `std::multiset` 和自定义比较 lambda 作为 `std::map` 的值?
- python - 使用 gitignore 分离开发和生产环境
- javascript - 如何让我的网站和 UWP JavaScript 应用访问同一个数据库?
- go - 发送前调整图像大小
- discord.js - Discord JS - 获取 dm 机器人用户的昵称
- flutter - Flutter - 如何修复在页面加载时未加载的动态小部件?
- javascript - 递增 id++ 并保存新的递增值,以便可以再次调用和递增
- unity3d - 生成规模从 0 到 1 的游戏对象的正确方法
- c++ - 如何将 bool 值保存到 void* 指向的内存位置?
- android - 哪一个是firebase数据库的有效设计?