R-文本分析-误导性结果

R-文本分析-误导性结果,r,text-mining,tm,text-analysis,qdap,R,Text Mining,Tm,Text Analysis,Qdap,我正在对银行客户有关抵押贷款的评论进行文本分析,我发现有几件事我确实理解 1在没有应用词干字和检查TDM尺寸的情况下清理数据后,术语2173的数量小于文档2373的数量。这是在删除停止字之前,TDM为1克 2此外,我还想检查标记TDM的bi gram的2字频率rowSumsMatrix。问题是,例如,我得到的重复次数最多的结果是2个单词的Proble miss。因为这个分组已经很奇怪了,所以我去了数据集Control+F,试图找到,但我找不到。问题:似乎代码中有些词是如何词干的,怎么可能呢?从前

我正在对银行客户有关抵押贷款的评论进行文本分析,我发现有几件事我确实理解

1在没有应用词干字和检查TDM尺寸的情况下清理数据后,术语2173的数量小于文档2373的数量。这是在删除停止字之前,TDM为1克

2此外,我还想检查标记TDM的bi gram的2字频率rowSumsMatrix。问题是,例如,我得到的重复次数最多的结果是2个单词的Proble miss。因为这个分组已经很奇怪了,所以我去了数据集Control+F,试图找到,但我找不到。问题:似乎代码中有些词是如何词干的,怎么可能呢?从前25个bi单词中,这一个似乎是唯一的词干。这难道不应该只创建始终在一起的双图吗

{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}

问题1:在某些情况下,您可能会得到比文档更少的条款

首先,您使用的是矢量源;文档数是txt中的向量数。这并不能真正代表文件的数量。带有空格的向量将被视为文档。其次,您正在删除停止词。如果在你的文本中有很多这样的词,很多词就会消失。最后,默认情况下,TermDocumentMatrix将删除所有小于3的单词。因此,如果在删除停止字后还剩下任何小字,这些小字也将被删除。您可以通过在创建TermDocumentMatrix/DocumentTermMatrix时调整选项WordLength来调整此设置

问题2:没有示例文档,这有点像猜测

可能是函数replace_number、replace_construction、replace_缩写、removeparcing和stripWhitespace的组合。这可能会导致一个你不能很快找到的单词。最好的办法是查找以prob开头的每个单词。就我所见,proble不是一个正确的阀杆。此外,qdap和tm不会在没有指定的情况下进行任何词干分析


您的自定义设置也有错误。所有stopwords都是小写的,并且您指定文本应该是小写的。因此,您的自定义_停止也应该是小写的。银行而不是银行。

欢迎使用SO!这个社区有一些建议,遵循这些建议将帮助您对您的问题获得一个好的答案。特别是,最好提供一个最小、完整且可验证的示例。对于特定于R的MVCE有很好的建议,具体来说,您的数据是什么样子的?使用dputheadmy_df将您的数据从R中取出并保存到SO中。非Base-R函数在哪里定义?e、 我在哪里可以找到replace_缩写?它在一个包裹里吗?最后,您应该关注给您带来麻烦的代码部分-42行代码对我们来说太多了,无法深入研究。谢谢,祝你好运!谢谢@DanY!!对不起,我不经常评论,所以没有太多的练习!我已经添加了样本的外观。如果您对函数有疑问,它们主要来自TM软件包。谢谢@phiver!问题1:我有限的理解是1个vertor=1个文档。如果一个向量中有一个空格,那么它算是一个文档,这是什么意思。?问题2:我只是想澄清一下,我没有做任何词干分析。如果这有助于澄清更多,我已经用proble完成了control+F,而这不在数据集中。这就是为什么我对proble小姐的出现感到奇怪。关于银行的好电话:@Robbie,试试这个密码文本嘿@priver,对不起,文本是什么?整个专栏都有评论吗?Q2-我只查找了“小姐”一词,但找不到它本身,例如,是的,就是“小姐”…谢谢@Robbie,在示例中,注释文本只是单词text。没别的了。
> 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")
# wordlengths starting at length 1, default is 3
TermDocumentMatrix(corpus, control=list(wordLengths=c(1, Inf)))