Есть ли в библиотеке 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
. (А именно, из-за ошибок он часто возвращал больше или меньше оценок читабельности, чем количество документов в моей коллекции.)
Я понимаю, что мог бы выполнить наивный расчет, анализируя гласные как слоги, но мне нужен более тщательный пакет, который уже позаботится о крайних случаях (адрес молчаливых е и т. Д.).
Мои предпочтения по удобочитаемости - Флеш-Кинкейд или Фрай.
То, что я пробовал изначально, где 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 документов, поэтому я не могу связать успехи с правильным документом. (Отчасти это является моим неправильным пониманием «foreach» и «lapply» в R, но я обнаружил, что структура текстового объекта достаточно сложна, и я не мог надлежащим образом токенизировать, применять 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') перед сбросом обнаруженного текста .
ОБНОВЛЕНИЕ 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
. Если кто-то не увидит простое решение для поиска ошибок, я мог бы вставить свои вызовы функций, чтобы справиться с неспособностью токенизировать некоторые явно ошибочные, уродливые документы?
flesh.kincaid
от koRpus сtm_map
от tm? - person Tyler Rinker   schedule 13.02.2013tm_map(dd,flesch.kincaid)
, таких какtm_map(dd,flesch.kincaid, "en")
и т. д. - person Mittenchops   schedule 13.02.2013tm_map(d,flesch.kincaid,force.lang="en",tagger=tokenize)
, но получаю сообщение об ошибке, что указанный файл не может найти, а затем выводит содержимое документа 1. - person Mittenchops   schedule 13.02.2013