R - 文本分析 - 误导性结果
R - Text Analysis - Misleading results
我正在对银行客户关于抵押贷款的评论进行一些文本分析,我发现有几件事我确实理解。
1) 在不应用词干词和检查 TDM 维度的情况下清理数据后,术语数 (2173) 小于文档数 (2373)(这是在删除停用词之前,作为 TDM a 1 克)。
2) 另外,我想检查对 TDM 进行分词的二元组词频 (rowSums(Matrix))。问题是,例如,我得到的重复次数最多的结果是 2 个单词 "Proble miss"。由于这个分组已经很奇怪了,我去了数据集 "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")
Q1:在某些情况下,您最终得到的条款可能少于文档。
首先你使用的是vectorsource;文件的数量是你的 txt 中的矢量数量。这并不能真正代表文件的数量。带有 space 的矢量将被视为文档。其次,您要删除停用词。如果你的文本中有很多这样的词,很多词就会消失。最后,TermDocumentMatrix
默认删除所有小于 3 的词。因此,如果在删除停用词后还剩下任何小词,这些词也会被删除。您可以通过在创建 TermDocumentMatrix
/ DocumentTermMatrix
.
时调整选项 wordLengths
来进行调整
# 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
的组合。这可能会导致您无法很快找到一个词。最好的办法是查找以 prob 开头的每个单词。 "proble" 据我所知,不是正确的词干。 qdap 和 tm 也不会在您未指定的情况下进行任何词干提取。
你的custom_stops也有误。所有停用词都是小写的,并且您指定您的文本应该是小写的。所以你的 custom_stops 也应该是小写的。 "bank" 而不是 "Bank".
我正在对银行客户关于抵押贷款的评论进行一些文本分析,我发现有几件事我确实理解。
1) 在不应用词干词和检查 TDM 维度的情况下清理数据后,术语数 (2173) 小于文档数 (2373)(这是在删除停用词之前,作为 TDM a 1 克)。
2) 另外,我想检查对 TDM 进行分词的二元组词频 (rowSums(Matrix))。问题是,例如,我得到的重复次数最多的结果是 2 个单词 "Proble miss"。由于这个分组已经很奇怪了,我去了数据集 "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")
Q1:在某些情况下,您最终得到的条款可能少于文档。
首先你使用的是vectorsource;文件的数量是你的 txt 中的矢量数量。这并不能真正代表文件的数量。带有 space 的矢量将被视为文档。其次,您要删除停用词。如果你的文本中有很多这样的词,很多词就会消失。最后,TermDocumentMatrix
默认删除所有小于 3 的词。因此,如果在删除停用词后还剩下任何小词,这些词也会被删除。您可以通过在创建 TermDocumentMatrix
/ DocumentTermMatrix
.
wordLengths
来进行调整
# 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
的组合。这可能会导致您无法很快找到一个词。最好的办法是查找以 prob 开头的每个单词。 "proble" 据我所知,不是正确的词干。 qdap 和 tm 也不会在您未指定的情况下进行任何词干提取。
你的custom_stops也有误。所有停用词都是小写的,并且您指定您的文本应该是小写的。所以你的 custom_stops 也应该是小写的。 "bank" 而不是 "Bank".