Вот решение, использующее другой текстовый пакет, который позволяет вам формировать выражения из нескольких слов либо из статистически обнаруженных словосочетаний, либо просто путем формирования всех биграмм. Пакет называется quanteda.
library(quanteda)
packageVersion("quanteda")
## [1] ‘0.9.5.14’
Во-первых, метод обнаружения верхних 1500 словосочетаний биграмм и замены этих словосочетаний в текстах их версиями с одним маркером (объединенными символом "_"
). Здесь я использую встроенный в пакет тексты инаугурационной речи президента США.
### for just the top 1500 collocations
# detect the collocations
colls <- collocations(inaugCorpus, n = 1500, size = 2)
# remove collocations containing stopwords
colls <- removeFeatures(colls, stopwords("SMART"))
## Removed 1,224 (81.6%) of 1,500 collocations containing one of 570 stopwords.
# replace the phrases with single-token versions
inaugCorpusColl2 <- phrasetotoken(inaugCorpus, colls)
# create the document-feature matrix
inaugColl2dfm <- dfm(inaugCorpusColl2, ignoredFeatures = stopwords("SMART"))
## Creating a dfm from a corpus ...
## ... lowercasing
## ... tokenizing
## ... indexing documents: 57 documents
## ... indexing features: 9,741 feature types
## ... removed 430 features, from 570 supplied (glob) feature types
## ... complete.
## ... created a 57 x 9311 sparse dfm
## Elapsed time: 0.163 seconds.
# plot the wordcloud
set.seed(1000)
png("~/Desktop/wcloud1.png", width = 800, height = 800)
plot(inaugColl2dfm["2013-Obama", ], min.freq = 2, random.order = FALSE,
colors = sample(colors()[2:128]))
dev.off()
Это приводит к следующему сюжету. Обратите внимание на сочетания, такие как «задача_поколения» и «товарищи_американцы».
Версия, сформированная со всеми биграммами, проще, но дает огромное количество низкочастотных функций биграмм. Для слова «облако» я выбрал больший набор текстов, а не только обращение Обамы в 2013 году.
### version with all bi-grams
inaugbigramsDfm <- dfm(inaugCorpusColl2, ngrams = 2, ignoredFeatures = stopwords("SMART"))
## Creating a dfm from a corpus ...
## ... lowercasing
## ... tokenizing
## ... indexing documents: 57 documents
## ... removed 54,200 features, from 570 supplied (glob) feature types
## ... indexing features: 64,108 feature types
## ... created a 57 x 9908 sparse dfm
## ... complete.
## Elapsed time: 3.254 seconds.
# plot the bigram wordcloud - more texts because for a single speech,
# almost none occur more than once
png("~/Desktop/wcloud2.png", width = 800, height = 800)
plot(inaugbigramsDfm[40:57, ], min.freq = 2, random.order = FALSE,
colors = sample(colors()[2:128]))
dev.off()
Это дает:
person
Ken Benoit
schedule
11.04.2016