R: Поиск частоты на термин Предупреждающее сообщение

Я пытаюсь найти частоту каждого термина в речи Мартина Лютера Кинга «У меня есть мечта». Я преобразовал все прописные буквы в строчные и удалил все стоп-слова. У меня есть текст в файле .txt, поэтому я не могу отобразить его здесь. Код, который читается в файле, приведен ниже:

 speech <- readLines(speech.txt)

Затем я успешно выполнил преобразование в нижний регистр и удаление стоп-слов и назвал это:

 clean.speech 

Теперь у меня возникли некоторые проблемы с поиском частоты за термин. Я создал корпус, проверил свой корпус и создал TermDocumentMatrix следующим образом:

 myCorpus <- Corpus(VectorSource(clean.speech))
 inspect(myCorpus)
 TDM <- TermDocumentMatrix(myCorpus)

Все в порядке до этого момента. Однако затем я написал следующий код и получил предупреждающее сообщение:

 m < as.matrix(TDM)

 Warning Message:
 "In m < as.matrix(TDM): longer object length is not a multiple of shorter  object length

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

 v <- sort(rowSums(m), decreasing = TRUE)
 d <- data.frame(word=names(v), freq=v)
 head(d, 15)

Моя цель - просто найти частоту терминов. Я искренне извиняюсь за этот вопрос, потому что я знаю, что этот вопрос часто задают. Я просто не понимаю, что нужно изменить в моем коде. Спасибо всем, я ценю это!


person mapleleaf    schedule 19.10.2015    source источник
comment
Попробуйте создать воспроизводимый пример. Теперь мы можем только догадываться, что пошло не так.   -  person phiver    schedule 20.10.2015
comment
Я не могу опубликовать ссылку напрямую, потому что это из моей учетной записи Blackboard через мой университет, для которого требуются учетные данные. Как только я открываю ссылку, я копирую весь текст в файл .txt. Я подумал, что этот вопрос был долгим, но спасибо за попытку! Я ценю его! :)   -  person mapleleaf    schedule 20.10.2015


Ответы (2)


Если ваша цель — просто найти частотность терминов, попробуйте это.

Во-первых, я помещаю речь «У меня есть мечта» в вектор символов:

# get the text of the speech from an HTML source, and extract the text
library(XML)
doc.html <- htmlTreeParse('http://www.analytictech.com/mb021/mlk.htm', useInternal = TRUE)
doc.text = unlist(xpathApply(doc.html, '//p', xmlValue))
doc.text = paste(doc.text, collapse = ' ')

Затем я создаю матрицу терминов документа в Quanteda, удаляя стоп-слова (и добавляя «будет», поскольку встроенный список английских стоп-слов Quanteda не включает этот термин). Оттуда topfeatures() дает вам наиболее часто встречающиеся термины и их количество.

library(quanteda)
# create a document-feature matrix
IHADdfm <- dfm(doc.text, ignoredFeatures = c("will", stopwords("english")), verbose = FALSE)
# 12 most frequent features
topfeatures(IHADdfm, 12)
## freedom      one     ring    dream      let      day    negro    today     able    every together    years 
##      13       12       12       11       10        9        8        7        7        7        6        5 
# a word cloud, if you wish
plot(IHADdfm, random.order = FALSE)

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

person Ken Benoit    schedule 23.10.2015

просто позвоните findFreqTerms(), например. как tm::findFreqTerms(TDM, lowfreq=2, highfreq = 5) .

(tm:: является необязательным - просто говорю, что это встроенная функция пакета tm)

person knb    schedule 22.10.2015