在tm
库中是否存在预构建函数,或者与之配合良好的函数?如何使用tm软件包计算R中的可读性
我现在的语料库装入TM,类似如下:
s1 <- "This is a long, informative document with real words and sentence structure: introduction to teaching third-graders to read. Vocabulary is key, as is a good book. Excellent authors can be hard to find."
s2 <- "This is a short jibberish lorem ipsum document. Selling anything to strangers and get money! Woody equal ask saw sir weeks aware decay. Entrance prospect removing we packages strictly is no smallest he. For hopes may chief get hours day rooms. Oh no turned behind polite piqued enough at. "
stuff <- rbind(s1,s2)
d <- Corpus(VectorSource(stuff[,1]))
我使用koRpus试过,但似乎傻在不同的包比我已经使用了一个retokenize。我也遇到了问题,它的返回对象的矢量化方式可以让我将结果重新合并为tm
。 (也就是说,由于错误,它通常会返回比我的收藏中的文档数量更多或更少的可读性分数。)
我明白我可以做一个天真的计算,将元音解析为音节,但想要更彻底的包照顾边缘情况已经(地址沉默e等)。
我的可读性分数是Flesch-Kincaid或Fry。
我原本试图d是我的100个文件的文集:
f <- function(x) tokenize(x, format="obj", lang='en')
g <- function(x) flesch.kincaid(x)
x <- foreach(i=1:length(d), .combine='c',.errorhandling='remove') %do% g(f(d[[i]]))
不幸的是,X返回少于100个文件,所以我不能用正确的文件关联的成功。 (这部分是我对R中的'foreach'和'lapply'的误解,但是我发现文本对象的结构足够困难,我无法适当地标记,应用flesch.kincaid,并且在合理的应用顺序中成功地检查错误声明。)
更新其他
两件事情我已经试过,试图将koRpus功能应用到TM对象...
参数传递到tm_map对象,使用默认分词器:
tm_map(d,flesch.kincaid,force.lang="en",tagger=tokenize)
定义一个标记生成器,通过在
f <- function(x) tokenize(x, format="obj", lang='en') tm_map(d,flesch.kincaid,force.lang="en",tagger=f)
这些返回的两个:
Error: Specified file cannot be found:
然后列出d [1]的全文。似乎找到了它?我应该怎么做才能正确传递函数?
更新2
这是我得到的错误,当我尝试koRpus功能直接与lapply映射:
> lapply(d,tokenize,lang="en")
Error: Unable to locate
Introduction to teaching third-graders to read. Vocabulary is key, as is a good book. Excellent authors can be hard to find.
这看起来像一个奇怪的错误---我几乎不认为这意味着它无法找到文本,但是在转储找到的文本之前,它找不到一些空白的错误代码(如'tokenizer')。
UPDATE 3
另一个问题与使用koRpus
重新标记是重新标记(相对于TM标记器)是极为缓慢的和输出其标记化进展到stdout。无论如何,我已经试过如下:
f <- function(x) capture.output(tokenize(x, format="obj", lang='en'),file=NULL)
g <- function(x) flesch.kincaid(x)
x <- foreach(i=1:length(d), .combine='c',.errorhandling='pass') %do% g(f(d[[i]]))
y <- unlist(sapply(x,slot,"Flesch.Kincaid")["age",])
我在这里的意图是将y
对象的上方回重新绑定到我的tm(d)
语料库作为元数据,meta(d, "F-KScore") <- y
。
不幸的是,应用到我的实际数据集,我得到错误信息:
Error in FUN(X[[1L]], ...) :
cannot get a slot ("Flesch.Kincaid") from an object of type "character"
我觉得我的实际语料库的一个元素必须是NA,或太长,别的东西望而却步---和由于嵌套功能化,我无法准确追踪它是哪一个。
所以,目前看起来好像没有预建的函数来读取与tm
库很好地匹配的分数。除非有人看到一个容易出错的解决方案,否则我可以将其纳入我的函数调用中,以处理无法标记某些显然是错误的,格式错误的文档?
不能使用与TM'tm_map'的'从koRpus flesh.kincaid'? – 2013-02-13 17:58:04
我似乎无法。它说:“错误:没有指定语言!”对于tm_map的'每一个变化(DD,flesch.kincaid)'我能想到的,如'tm_map(DD,flesch.kincaid, “恩”)'等 – Mittenchops 2013-02-13 18:01:18
所以,我咨询了另一个问题,SO(HTTP:/ /stackoverflow.com/questions/6827299/r-apply-function-with-multiple-parameters)关于如何将参数传递给嵌套函数。我尝试过'tm_map(d,flesch.kincaid,force.lang =“en”,tagger = tokenize)',但得到一个错误,它找不到“指定的文件”,然后输出文档1的内容。 – Mittenchops 2013-02-13 19:35:04