2015-05-24 4 views
-1

Я построил корпус в R с помощью пакета tm. Я хочу изменить границы частот и сохранить только слова, которые повторяются не менее 4 раз во всем документе. После этого мне нужно создать матрицу документов на основе этих условий.Ошибка при использовании функции termFreq в R

«Данные» - матрица 45k на 2. Первый столбец - «Текст», который включает в среднем по 10 слов в каждой строке. Второй столбец - «Код», который содержит 5-значный код для каждой строки.

Почти 15 тыс. Слов в тексте повторяются один или два раза. Я хочу удалить их, а затем построить документ-матрицу.

Вот код, который я попробовал:

MyCorpus <- Corpus(VectorSource(Data$Text)) 
MyCorpus <- tm_map(MyCorpus , removeWords, stopwords('english')) 
MyCorpus <- tm_map(MyCorpus , stripWhitespace) 
MyCorpus <- termFreq(MyCorpus , control = list(local = c(4, Inf))) 

Но я столкнулся с этой ошибкой в ​​строке 4:

Ошибка: наследует (док, "ТекстовыйДокумент") не ИСТИНА

Что должны Я делаю?

+1

Ожидается, что вы предоставите образцы данных своими сообщениями. У нас нет доступа к «данным» и он может мало помочь. Прочитав это, вы начнете задавать вопросы таким образом, чтобы получить качественные ответы: http://stackoverflow.com/help/how-to-ask –

+0

@TylerRinker Я объяснил структуру данных. Надеюсь, это полезно. – user36729

+0

Используя пакет @TylerRinker, qdap, вы пробовали что-то вроде freq_terms (Data $ Text, top = 20, at.least = 4, stopwords = Top200Words) # работает с текстовым вектором – lawyeR

ответ

1

termFreq предназначен для использования на документе, а не в корпусе. Если вы хотите, чтобы фильтровать по частоте при построении DocumentTermMatrix, вы используете функцию DocumentTermMatrix

DTM <- DocumentTermMatrix(MyCorpus , control = list(bounds=list(global = c(4, Inf)))) 

Вот пример ...

library(tm) 

Data<-data.frame(Text=c("aaa bbb aaa ddd","bbb aaa aaa bbb ccc","bbb aaa aaa bbb ddd", "aaa bbb ddd")) 

MyCorpus <- Corpus(VectorSource(Data$Text)) 
MyCorpus <- tm_map(MyCorpus , removeWords, stopwords('english')) 
MyCorpus <- tm_map(MyCorpus , stripWhitespace) 
DTM <- DocumentTermMatrix(MyCorpus , control = list(bounds = list(global=c(2, Inf)))) 

inspect(DTM) 

# <<DocumentTermMatrix (documents: 4, terms: 3)>> 
# Non-/sparse entries: 11/1 
# Sparsity   : 8% 
# Maximal term length: 3 
# Weighting   : term frequency (tf) 

#  Terms 
# Docs aaa bbb ddd 
# 1 2 1 1 
# 2 2 2 0 
# 3 2 2 1 
# 4 1 1 1 

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

Смежные вопросы