库中是否有为此预先构建的功能tm
,或者可以很好地使用它?
我当前的语料库被加载到 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,但在与我已经使用的不同的包中重新标记似乎很愚蠢。我也遇到了矢量化它的返回对象的问题,这种方式允许我将结果重新合并到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
这是我尝试使用 lapply 直接映射 koRpus 函数时遇到的错误:
> 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') .
更新 3
使用重新标记的另一个问题koRpus
是重新标记(与 tm 标记器相比)非常慢,并将其标记化进度输出到标准输出。无论如何,我尝试了以下方法:
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
图书馆很好地配合的乐谱。除非有人看到一个简单的错误捕获解决方案,否则我可以将其夹在我的函数调用中以处理无法标记一些明显错误、格式错误的文档?