2016-05-30 2 views
3

У меня есть набор документов:Удаление игнорируемых слов из пользовательского корпуса в R

documents = c("She had toast for breakfast", 
"The coffee this morning was excellent", 
"For lunch let's all have pancakes", 
"Later in the day, there will be more talks", 
"The talks on the first day were great", 
"The second day should have good presentations too") 

В этом наборе документов, я хотел бы, чтобы удалить стоп-слова. Я уже удалили знаки препинания и преобразуются в нижний регистр, используя:

documents = tolower(documents) #make it lower case 
documents = gsub('[[:punct:]]', '', documents) #remove punctuation 

Сначала я преобразовать в объект Корпус:

documents <- Corpus(VectorSource(documents)) 

Затем я пытаюсь удалить стоп-слова:

documents = tm_map(documents, removeWords, stopwords('english')) #remove stopwords 

Но эта последняя строка приводит к следующей ошибке:

THE_P ROCESS_HAS_FORKED_AND_YOU_CANNOT_USE_THIS_COREFOUNDATION_FUNCTIONALITY___YOU_MUST_EXEC() для отладки.

Это предложение уже было указано here, но ответа не было получено. Что означает эта ошибка?

EDIT

Да, я использую пакет тм.

Вот выход sessionInfo():

R версия 3.0.2 (2013-09-25) Платформа: x86_64-яблочно-darwin10.8.0 (64-разрядная версия)

ответ

5

Когда я бегу в tm проблем, я часто в конечном итоге просто редактирование исходного текста.

Для удаления слов это немного неудобно, но вы можете вставить вместе регулярное выражение из списка заметок tm.

stopwords_regex = paste(stopwords('en'), collapse = '\\b|\\b') 
stopwords_regex = paste0('\\b', stopwords_regex, '\\b') 
documents = stringr::str_replace_all(documents, stopwords_regex, '') 

> documents 
[1] "  toast breakfast"    " coffee morning excellent"  
[3] " lunch lets pancakes"   "later day will talks"   
[5] " talks first day great"   " second day good presentations " 
+0

Большое спасибо за ваш ответ. Я получаю строку «ошибка должна быть атомным вектором», в строке с stringr :: str_replace_all. Есть идеи, как это решить? – StatsSorceress

+0

Aha! Просто ответил на мой вопрос: documents1 = paste (c (документы)) Вставьте эту строку непосредственно перед разделом stopwords_regex. Еще раз спасибо! – StatsSorceress

0

Может попробовать для использования функции tm_map для преобразования документа. Кажется, это работает в моем случае.

> documents = c("She had toast for breakfast", 
+ "The coffee this morning was excellent", 
+ "For lunch let's all have pancakes", 
+ "Later in the day, there will be more talks", 
+ "The talks on the first day were great", 
+ "The second day should have good presentations too") 
> library(tm) 
Loading required package: NLP 
> documents <- Corpus(VectorSource(documents)) 
> documents = tm_map(documents, content_transformer(tolower)) 
> documents = tm_map(documents, removePunctuation) 
> documents = tm_map(documents, removeWords, stopwords("english")) 
> documents 
<<VCorpus>> 
Metadata: corpus specific: 0, document level (indexed): 0 
Content: documents: 6 

Это дает

> documents[[1]]$content 
[1] " toast breakfast" 
> documents[[2]]$content 
[1] " coffee morning excellent" 
> documents[[3]]$content 
[1] " lunch lets pancakes" 
> documents[[4]]$content 
[1] "later day will talks" 
> documents[[5]]$content 
[1] " talks first day great" 
> documents[[6]]$content 
[1] " second day good presentations " 
+0

Спасибо Elyasin, но я уже использую пакет тм, и это tm_map (документы, removeWords, стоп-слова («english»)), которые бросают ошибку. – StatsSorceress

+0

Я знаю. Но посмотрите на мой ответ более внимательно. Я получил разумный результат, и команда была 'documents = tm_map (документы, content_transformer (tolower))' перед удалением знаков препинания и остановки. Попробуйте. – Elyasin

+0

Я снова посмотрел, и, похоже, я не могу использовать tm_map вообще. Иногда это не дает ошибок, и я могу удалить стоп-слова с помощью вашего метода, но в других случаях он выдает ту же ошибку («процесс разворачивается ...»). Раньше у меня никогда не было прерывистой ошибки. Есть идеи? – StatsSorceress

0

вы можете использовать quanteda пакет для удаления стоп-слова, но сначала убедитесь, что ваши слова являются лексемы, а затем использовать следующее:

library(quanteda) 
x<- tokens_select(x,stopwords(), selection=) 
Смежные вопросы