提问人:Vasily A 提问时间:3/13/2023 更新时间:3/13/2023 访问量:47
R 文本挖掘中的标准工具:文本清理、单一化等 [已关闭]
Standard tools in R text mining: text cleanup, singularize, etc [closed]
问:
我想从一本书中构建一个词云,并认为它一定是文本挖掘中最基本的原始任务之一,所有可用的工具都是现成的等等。但是当我尝试使用我在软件包中找到的示例时,我遇到了一些问题,让我认为应该有一些更好的解决方案。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:
似乎没有正确完成工作,因为一些 Unicode 符号(破折号、引号)仍然存在。我也尝试过,然后它可以正确识别破折号,但是删除它们会合并单词。所以第一个问题 - 有没有比 ?
好的,我通过手动替换无法识别的Unicode符号来解决此问题:removePunctuation()
ucp=TRUE
tm::removePunctuation()
kant_text %<>% gsub('[—”]',' - ',.)
问题 2:词频表仍然包含停用词,例如 , , - 为什么它们还在这里?
是的,我可以手动删除它们,但我仍然不明白为什么它们没有被 删除。the
but
for
removeWords()
问题 3:我不需要在这里进行完整的词干提取,但我想将同一个单词的复数/单数形式一起计算在一起。我找到了带有功能的包,然后意识到它只能替换单独提供的单个单词,即不能作为连续文本的一部分。我想手动将文本拆分为单词,然后将其粘贴回去,如下所示: - 但结果非常慢。出于词云的目的,我可以简单地替换频率表中的单词并重新计算频率 - 但是,例如,如果我想计算单词的共现次数 - 在这种情况下,你们会使用什么?pluralize
singularize()
kant_text %>% strsplit(split= ' ', fixed = T) %>% singularize() %>% paste0()
答: 暂无答案
评论