Удалить фразу с апострофом в R для облака слов

Благодаря помощи этого сообщества я смог сделать несколько облаков слов из сценариев фильмов, и это становится все проще и проще. Кто-то попросил меня сняться в фильме «Пан», так что я нашел сценарий и поехал.

Проблема в том, что появилось несколько слов, которые я закодировал для удаления. Они выглядят как 'il, ve, 're и т. д. Обратите внимание на начальный апостроф.

Вот мой код:

text = readLines("C:/Users/MyName/Downloads/Pan.txt",encoding="UTF-8")

content2 = Corpus(VectorSource(text))
content2 = tm_map(content2, removeNumbers)
content2 = tm_map(content2, tolower)
content2 = tm_map(content2, removeWords, c("'il","'re","cont'd"))
content2 = tm_map(content2, removeWords, stopwords('english'))
content2 = tm_map(content2, removePunctuation)
content2 = tm_map(content2,PlainTextDocument)
wordcloud(content2, min.freq = 10, colors =  RColorBrewer::brewer.pal(6,"Spectral"),max.words=150)

Я безуспешно пытался найти 'il в Notepad ++, и функция R removeWords, похоже, тоже не заботится об этом. Я знаю, что для апострофов и других специальных символов иногда могут потребоваться специальные методы, но я застрял здесь. Любые идеи?

Вот источник скрипта, если интересно: http://pastebin.com/JiK3pF5f

Благодарю вас! Вот как сейчас выглядит облако слов. Если у вас есть какие-либо комментарии по стилю, я весь внимание.

введите здесь описание изображения


person user137698    schedule 13.06.2016    source источник


Ответы (2)


Это работает для вас? Я только что добавил удаление пробелов и не вижу, например. 'il

library(tm)
library(wordcloud)
text = readLines("~/Downloads/JiK3pF5f.txt", warn = F)
content2 = Corpus(VectorSource(text))
content2 = tm_map(content2, removeNumbers)
content2 = tm_map(content2, tolower)
content2 = tm_map(content2, removeWords, stopwords('english'))
content2 = tm_map(content2, removePunctuation)
content2 = tm_map(content2, trimws)
content2 = tm_map(content2, PlainTextDocument)

wordcloud(content2, min.freq = 10, colors = RColorBrewer::brewer.pal(6,"Spectral"),max.words=150)

Результат:

облако слов

person effel    schedule 13.06.2016
comment
Это может быть кодировка. Я удалил часть моего readLines() с параметром UTF-8 и заметил некоторые странные результаты. Кроме того, если я использую файл pastebin, как вы, и запускаю код, я заметил, что TM появляется вместо апострофа. - person user137698; 13.06.2016
comment
Интересно, я разместил изображение, которое я получаю. Можете ли вы найти в Корпусе пример 'il? - person effel; 13.06.2016
comment
Спасибо. Должен признаться, я не знаю, как искать в корпусе. Кажется, можно использовать функцию grep(), но это конкретная фраза. Я искал советы в SOF и Google, но пока не нашел пример, который я могу смоделировать. - person user137698; 13.06.2016

Вы пробовали gsub заменить эти символы? Например:

library(tm)
library(wordcloud)
text = readLines("~/Downloads/JiK3pF5f.txt", warn = F)

text=gsub("'re", '', text)

content2 = Corpus(VectorSource(text))
content2 = tm_map(content2, removeNumbers)
content2 = tm_map(content2, tolower)
content2 = tm_map(content2, removeWords, stopwords('english'))
content2 = tm_map(content2, removePunctuation)
content2 = tm_map(content2, trimws)
content2 = tm_map(content2, PlainTextDocument)

wordcloud(content2, min.freq = 10, colors = RColorBrewer::brewer.pal(6,"Spectral"),max.words=150)

Также вы можете попробовать с Quanteda: https://cran.r-project.org/web/packages/quanteda/vignettes/quickstart.html

Он также имеет немного лучшую производительность, чем tm

person Matias Thayer    schedule 13.06.2016
comment
Спасибо за ответ. Метод gsub мне не помог. Я не знаю почему. - person user137698; 13.06.2016