【发布时间】:2015-01-30 09:04:02
【问题描述】:
我想在一堆txt 文件上运行库korPus 中的两个R 函数。首先,我想tokenize 或treetag 这些文本,然后在输出上运行MTLD 并将结果保存在单个文档中。我正在尝试使用lapply 或for loop 来做到这一点。这两个命令的基本语法很简单:
tokenized_1 <- tokenize("txt", lang="en")
MLTD(tokenized_1)
我尝试了以下方法
files <- list.files(path="path/to/dir", pattern="*.txt", full.names=T, recursive=FALSE)
tokenized<-(lapply(files, tokenize, lang='en'))
但是,这会将所有结果合并到一个文件中,而我想分别浏览所有文件。此外,它为MTLD 函数创建了一个无效类。
我从shell scripting 熟悉for loop,我认为这会做我想做的事,但是
for (i in files){tokenize(i, lang='en')}
什么都不做。我知道这是一种非常幼稚和简单化的方法,但我不是一个非常有经验的R 用户。
【问题讨论】:
-
“将所有结果合并到一个文件中”是什么意思?您的
lapply应该创建一个列表,其组成部分是单独标记每个文件的结果。 -
选词错误。你是对的,它并没有真正“合并”它们,而是创建一个包含所有输出的列表。但是,
MTLD无法以这种格式读取它们。我想我必须把它们分开。 -
再次使用
lapply:lapply(tokenized, MLTD)。 -
哈,没想到这么简单。谢谢!我的结果看起来像这样,它们位于不同的行
Total number of tokens: 6257 Total number of types: 1050 Measure of Textual Lexical Diversity MTLD: 53.53 Number of factors: 116.89 Factor size: 0.72 SD tokens/factor: 25.88 (all factors) 25.78 (complete factors only)你有什么建议如何说 grep only 包含MTLD:的行吗? -
我也解决了第二个问题。这就是我使用的并且有效:
sapply(lapply(results,slot,'MTLD'),'[',c('MTLD'))
标签: r for-loop tokenize lapply pos-tagger