Поиск орфографических ошибок слова в векторе символов с помощью R - обратного средства проверки орфографии

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

Однако бывают случаи, когда технические специалисты неправильно написали слово, и поэтому моя функция grepl() не улавливает, что фраза (хотя и с ошибкой) встречается в наблюдении. В идеале я хотел бы иметь возможность передавать каждое слово во фразе функции, которая возвращала бы несколько распространенных ошибок или опечаток в указанном слове. Существует ли такая функция R?

Благодаря этому я мог искать все возможные комбинации этих орфографических ошибок фразы в поле комментариев и выводить их в другой фрейм данных. Таким образом, я мог рассматривать каждый случай в отдельности, чтобы определить, действительно ли интересующее меня явление было описано техническим специалистом.

Я погуглил, но нашел только ссылки на фактические пакеты проверки орфографии для R. То, что я ищу, - это «обратная» проверка орфографии. Поскольку количество фраз, которые я ищу, относительно невелико, я реально мог бы проверить наличие орфографических ошибок вручную; Я просто подумал, что было бы неплохо иметь эту возможность встроенной в пакет R для будущих усилий по анализу текста.

Спасибо за уделенное время!


person Nick Evans    schedule 01.02.2013    source источник
comment
Я думаю, вы ищете приблизительные алгоритмы сопоставления строк, такие как agrep. Введите ?agrep в R.   -  person Arun    schedule 02.02.2013
comment
Я не думаю, что это поможет в данном конкретном случае, но пакет utils, поставляемый с R, имеет некоторую возможность проверки орфографии в виде aspell(). статья по этому поводу была в R Журнал несколько выпусков назад.   -  person Gavin Simpson    schedule 02.02.2013
comment
Я посмотрел на agrep, а также на формулировку расстояния Левенштейна, и похоже, что либо это, либо поиск на основе меры расстояния Дамерау-Левенштейна удовлетворит мои потребности. Я немного протестирую его и посмотрю, как он пойдет.   -  person Nick Evans    schedule 02.02.2013
comment
Проблема, которую я обнаружил, заключается в том, что сопоставление непредсказуемо. Я мог бы заставить этот метод работать для меня, хотя. Прямо сейчас функция agrep кажется чем-то вроде черного ящика, поскольку я не уверен на 100%, что она соответствует, а что нет. Я собираюсь написать функцию, которая возвращает все возможные буквенно-цифровые строки с заданным расстоянием, чтобы быть более уверенным.   -  person Nick Evans    schedule 02.02.2013


Ответы (1)


Как предложил Гэвин Симпсон, вы можете использовать aspell. Я предполагаю, что для этого вам нужно установить aspell. Во многих дистрибутивах Linux он установлен по умолчанию; Я не знаю о других системах или о том, установлена ​​ли она с R.

См. следующую функцию в качестве примера использования. Это зависит от ваших входных данных и того, что именно вы хотите сделать с результатом (например, исправить опечатку в первом предложении), которое вы не указали:

check_spelling <- function(text) {
  # Create a file with on each line one of the words we want to check
  text <- gsub("[,.]", "", text)
  text <- strsplit(text, " ", fixed=TRUE)[[1]]
  filename <- tempfile()
  writeLines(text, con = filename);
  # Check spelling of file using aspell
  result <- aspell(filename)
  # Extract list of suggestions from result
  suggestions <- result$Suggestions
  names(suggestions) <- result$Original
  unlink(filename)
  suggestions
}

> text <- "I am text mining a large database to create indicator variables which indicate the occurence of certain phrases in a comments field of an observation. The comments were entered by technicians, so the terms used are always consistent. "
> check_spelling(text)
$occurence
[1] "occurrence"   "occurrences"  "occurrence's"
person Jan van der Laan    schedule 09.02.2013
comment
Когда я пробую ваш пример на своем Mac, у меня появляется сообщение об ошибке, в котором говорится, что на моем компьютере нет подходящей программы проверки орфографии. Как я могу найти программу проверки орфографии? - person PAC; 19.06.2013
comment
@PAC Вам нужна программа проверки орфографии, поддерживающая интерфейс ispell, например aspell или hunspell. Поиск в Google «aspell» и «mac» дает несколько вариантов установки (например, dbader.org/blog/spell-checking-latex-documents-with-aspell). См. также journal.r-project.org/archive/ 2011-2/ - person Jan van der Laan; 20.06.2013