R 文本挖掘中的标准工具:文本清理、单一化等 [已关闭]

Standard tools in R text mining: text cleanup, singularize, etc [closed]

提问人:Vasily A 提问时间:3/13/2023 更新时间:3/13/2023 访问量:47

问:


想改进这个问题吗?更新问题,使其仅通过编辑这篇文章来关注一个问题。

9个月前关闭。

我想从一本书中构建一个词云,并认为它一定是文本挖掘中最基本的原始任务之一,所有可用的工具都是现成的等等。但是当我尝试使用我在软件包中找到的示例时,我遇到了一些问题,让我认为应该有一些更好的解决方案。tm

library(tidyverse)
library(rvest)
library(data.table)

# Load and extract text of interest
kant_text <- 
  "https://www.gutenberg.org/files/4280/4280-h/4280-h.htm" %>% 
  read_html() %>% 
  html_text() %>% 
  gsub('.*(PREFACE TO THE FIRST EDITION.*)END OF THE PROJECT GUTENBERG EBOOK.*', '\\1', .)

# Build corpus
kant_docs <- kant_text %>%
  VectorSource() %>% 
  Corpus() %>%
  # cleanup 
  tm_map(removeNumbers) %>%
  tm_map(removePunctuation) %>%
  tm_map(stripWhitespace) 

kant_docs %<>% tm_map(removeWords, stopwords("english")) # slow step, ~2 min    

# Build frequency table    
dt.dtm <- kant_docs %>% 
  TermDocumentMatrix() %>% 
  as.matrix() %>% 
  rowSums() %>% 
  sort(decreasing=TRUE) %>%    
  data.table(word = names(.),freq=.)

View(dt.dtm)

看起来不错,但仔细观察会发现一些问题: 问题 1
freq
似乎没有正确完成工作,因为一些 Unicode 符号(破折号、引号)仍然存在。我也尝试过,然后它可以正确识别破折号,但是删除它们会合并单词。所以第一个问题 - 有没有比 ? 好的,我通过手动替换无法识别的Unicode符号来解决此问题:
removePunctuation()ucp=TRUEtm::removePunctuation()

kant_text %<>% gsub('[—”]',' - ',.)

问题 2:词频表仍然包含停用词,例如 , , - 为什么它们还在这里?
stop
是的,我可以手动删除它们,但我仍然不明白为什么它们没有被 删除。
thebutforremoveWords()

问题 3:我不需要在这里进行完整的词干提取,但我想将同一个单词的复数/单数形式一起计算在一起。我找到了带有功能的包,然后意识到它只能替换单独提供的单个单词,即不能作为连续文本的一部分。我想手动将文本拆分为单词,然后将其粘贴回去,如下所示: - 但结果非常慢。出于词云的目的,我可以简单地替换频率表中的单词并重新计算频率 - 但是,例如,如果我想计算单词的共现次数 - 在这种情况下,你们会使用什么?pluralizesingularize()kant_text %>% strsplit(split= ' ', fixed = T) %>% singularize() %>% paste0()

R 文本挖掘 TM

评论


答: 暂无答案