在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