kouprianov: (Default)
2015-05-01 05:32 pm

Проблемы с R mallet

В продолжение вчерашних боев. При попытке засунуть коллекцию текстов под mallet выползала ошибка:

> mallet.instances <- mallet.import(text.ids, doc.text, "ru.txt", token.regexp = "[\\p{L}\\p{N}-]*\\p{L}+")
Error in .jcall("RJavaTools", "Ljava/lang/Object;", "invokeMethod", cl,  :
  java.lang.NoSuchMethodException: No suitable method for the given parameters

Решение нагуглилось внезапно после нескольких непонятно почему неудачных попыток. Оказалось, что id текстов и сами тексты должны иметь вид character. Каким образом его утрачивают вторые -- не ясно (как впрочем и то, зачем его должны иметь первые).

> mallet.instances <- mallet.import(as.character(text.ids), as.character(doc.text), "ru.txt", token.regexp = "[\\p{L}\\p{N}-]*\\p{L}+")
kouprianov: (Default)
2015-04-30 09:46 pm

Проблемы в R с tm_map, tolover, stemDocument, stemCompletion

Эта запись сделана для памяти и будет носить эзотерический характер. Чем дальше от старых добрых статистических методов, тем страшнее и тем меньше стандартизации. Забрел, с подачи Кирилла Маслинского, в область компьютерного анализа текстов. Довольно быстро выяснилось, что какие-то пакеты для обработки текстов написаны под более позднюю версию R, чем та, что стоит у меня на машине, за обновлением R потянулась необходимость обновления Java, за ними -- недокументированные причуды самих новых версий пакетов и т. д. и т. п.

Коротко говоря, чтобы не забыть:

(1) Для установки пакета mallet нужна библиотека, которой у меня не было, пришлось ставить (без нее не компилируется):

apt get install liblzma-dev

(2) В новой версии пакета tm иначе работает функция tolower (конвертация всех заглавных букв в строчные):

corpus<-tm_map(corpus, content_transformer(tolower))

если использовать старый способ работы с нею, то потом не работает стемминг (усечение слов до основы):

corpus<-tm_map(corpus, stemDocument)

Восстановление слов от основ до наиболее обычной по корпусу формы

corpus<-tm_map(corpus, stemCompletion, dictionary=corpus, type="prevalent")

(надобное, как я понимаю, в эстетических целях) пока не заработало и гугление никакого ответа пока не принесло.