Неверный ввод пакета R tm в utf8towcs - PullRequest
27 голосов
/ 09 марта 2012

Я пытаюсь использовать пакет tm в R для выполнения анализа текста. Я связал следующее:

require(tm)
dataSet <- Corpus(DirSource('tmp/'))
dataSet <- tm_map(dataSet, tolower)
Error in FUN(X[[6L]], ...) : invalid input 'RT @noXforU Erneut riesiger (Alt-)�lteppich im Golf von Mexiko (#pics vom Freitag) http://bit.ly/bw1hvU http://bit.ly/9R7JCf #oilspill #bp' in 'utf8towcs'

Проблема в том, что некоторые символы недопустимы. Я хотел бы исключить недопустимые символы из анализа либо из R, либо до импорта файлов для обработки.

Я попытался с помощью iconv преобразовать все файлы в utf-8 и исключить все, что не может быть преобразовано в это, следующим образом:

find . -type f -exec iconv -t utf-8 "{}" -c -o tmpConverted/"{}" \; 

как указано здесь Пакетное преобразование файлов latin-1 в utf-8 с помощью iconv

Но я все еще получаю ту же ошибку.

Буду признателен за любую помощь.

Ответы [ 13 ]

1 голос
/ 22 марта 2012

Если можно игнорировать неверные входные данные, вы можете использовать обработку ошибок R.Например:

  dataSet <- Corpus(DirSource('tmp/'))
  dataSet <- tm_map(dataSet, function(data) {
     #ERROR HANDLING
     possibleError <- tryCatch(
         tolower(data),
         error=function(e) e
     )

     # if(!inherits(possibleError, "error")){
     #   REAL WORK. Could do more work on your data here,
     #   because you know the input is valid.
     #   useful(data); fun(data); good(data);
     # }
  }) 

Здесь есть еще один пример: http://gastonsanchez.wordpress.com/2012/05/29/catching-errors-when-using-tolower/

0 голосов
/ 06 февраля 2018

Мне удалось это исправить, преобразовав данные обратно в простой текстовый формат, используя эту строку кода

corpus <- tm_map(corpus, PlainTextDocument)

спасибо пользователю https://stackoverflow.com/users/4386239/paul-gowder

за его ответ здесь

https://stackoverflow.com/a/29529990/815677

0 голосов
/ 27 августа 2015

Решение Чеда не работает для меня.Я встроил это в функцию, и она выдавала ошибку о iconv, нуждающемся в векторном вводе.Итак, я решил сделать преобразование до создания корпуса.

myCleanedText <- sapply(myText, function(x) iconv(enc2utf8(x), sub = "byte"))
...