R - Анализ текста - вводящие в заблуждение результаты - PullRequest
0 голосов
/ 10 сентября 2018

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

1) После очистки данных без применения слов Stemming Words и проверки размера TDM количество терминов (2173) меньше количества документов (2373) (это перед удалением стоп-слов и является TDM a 1- грамм).

2) Кроме того, я хотел проверить частоту в 2 слова (rowSums (Matrix)) биграммы, маркирующей TDM. Проблема в том, что, например, я получил в качестве самого повторного результата 2 слова «Проблема пропущена». Поскольку эта группировка уже была странной, я пошел к набору данных «Control + F», чтобы попытаться найти, и я не смог. Вопросы: кажется, что код какой-то, как эти слова, как это возможно, как это возможно? (Из 25 первых двух слов, это единственное слово, которое, кажется, связано). Разве это не должно создавать только би-граммы, которые всегда вместе?

{file_cleaning <-  replace_number(files$VERBATIM)
file_cleaning <-  replace_abbreviation(file_cleaning)
file_cleaning <-  replace_contraction(file_cleaning)
file_cleaning <- tolower(file_cleaning)
file_cleaning <- removePunctuation(file_cleaning)
file_cleaning[467]
file_cleaned <- stripWhitespace(file_cleaning)

custom_stops <- c("Bank")
file_cleaning_stops <- c(custom_stops, stopwords("en"))
file_cleaned_stopped<- removeWords(file_cleaning,file_cleaning_stops)

file_cleaned_corups<- VCorpus(VectorSource(file_cleaned))
file_cleaned_tdm <-TermDocumentMatrix(file_cleaned_corups)
dim(file_cleaned_tdm) # Number of terms <number of documents
file_cleaned_mx <- as.matrix(file_cleaned_tdm)

file_cleaned_corups<- VCorpus(VectorSource(file_cleaned_stopped))
file_cleaned_tdm <-TermDocumentMatrix(file_cleaned_corups)
file_cleaned_mx <- as.matrix(file_cleaned_tdm)

dim(file_cleaned_mx)
file_cleaned_mx[220:225, 475:478]

coffee_m <- as.matrix(coffee_tdm)

term_frequency <- rowSums(file_cleaned_mx)
term_frequency <- sort(term_frequency, decreasing = TRUE)
term_frequency[1:10]


BigramTokenizer <- function(x) NGramTokenizer(x, Weka_control(min = 2, max = 2))
bigram_dtm <- TermDocumentMatrix(file_cleaned_corups, control = list(tokenize = BigramTokenizer))
dim(bigram_dtm)

bigram_bi_mx <- as.matrix(bigram_dtm)
term_frequency <- rowSums(bigram_bi_mx)
term_frequency <- sort(term_frequency, decreasing = TRUE)
term_frequency[1:15]

freq_bigrams <- findFreqTerms(bigram_dtm, 25)
freq_bigrams}

Образец набора данных:

> dput(droplevels(head(files,4)))

structure(list(Score = c(10L, 10L, 10L, 7L), Comments = structure(c(4L,

3L, 1L, 2L), .Label = c("They are nice an quick. 3 years with them, and no issue.",

"Staff not very friendly.",

"I have to called them 3 times. They are very slow.",

"Quick and easy. High value."

), class = "factor")), row.names = c(NA, 4L), class = "data.frame")

1 Ответ

0 голосов
/ 10 сентября 2018

Q1: в некоторых ситуациях сроки могут быть меньше, чем в документах.

Сначала вы используете vectorsource; количество документов - это число векторов в вашем тексте. Это не совсем соответствует количеству документов. Вектор с пробелом будет считаться документом. Во-вторых, вы удаляете стоп-слова. Если в вашем тексте их много, многие слова исчезнут. Наконец, TermDocumentMatrix по умолчанию удаляет все слова меньше 3. Поэтому, если после удаления стоп-слов остались какие-то маленькие слова, они также будут удалены. Вы можете настроить это, настроив параметр wordLengths при создании TermDocumentMatrix / DocumentTermMatrix.

# wordlengths starting at length 1, default is 3
TermDocumentMatrix(corpus, control=list(wordLengths=c(1, Inf)))

Q2: без образца документа это немного догадка.

Вероятная комбинация функций replace_number, replace_contraction, replace_abbreviation, removePunctuation и stripWhitespace. Это может привести к слову, которое вы не можете найти очень быстро. Лучше всего искать каждое слово, начиная с проб. Насколько я понимаю, «проблема» не является правильной основой. Кроме того, qdap и tm не выполняют никаких действий без указания этого.

У вас также есть ошибка в ваших custom_stops. Все стоп-слова в нижнем регистре, и вы указали, что ваш текст должен быть в нижнем регистре. Так что ваши custom_stops также должны быть в нижнем регистре. «банк» вместо «банк».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...