【问题标题】:Running a korPus text-mining function across multiple text files in R在 R 中跨多个文本文件运行 korPus 文本挖掘功能
【发布时间】:2015-01-30 09:04:02
【问题描述】:

我想在一堆txt 文件上运行库korPus 中的两个R 函数。首先,我想tokenizetreetag 这些文本,然后在输出上运行MTLD 并将结果保存在单个文档中。我正在尝试使用lapplyfor 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 无法以这种格式读取它们。我想我必须把它们分开。
  • 再次使用lapplylapply(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


【解决方案1】:

使用lapply

filenames <- list.files(pattern="*.txt")
text.tagged <- lapply(filenames, function(x) treetag(x, treetagger="manual", lang="en",
                                                     TT.options=list(path=filepath, preset="en")))

text.tagged[1]

【讨论】:

    猜你喜欢
    • 2013-08-02
    • 2014-05-18
    • 2014-02-22
    • 2011-12-17
    • 1970-01-01
    • 2020-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多