作者: Julia Silge, David Robinson<br/> 许可证: MIT
<!-- 徽章: 开始 --> <!-- 徽章: 结束 -->使用整洁数据原则可以使许多文本挖掘任务变得更简单、更有效,并与已广泛使用的工具保持一致。用于整洁数据框进行文本挖掘所需的大部分基础设施已经存在于像dplyr、broom、tidyr和ggplot2这样的包中。在这个包中,我们提供了函数和支持数据集,允许文本与整洁格式之间的转换,并在整洁工具和现有文本挖掘包之间无缝切换。查看我们的书以了解更多关于使用整洁数据原则进行文本挖掘的信息。
你可以从CRAN安装这个包:
install.packages("tidytext")
或者你可以使用remotes从GitHub安装开发版本:
library(remotes) install_github("juliasilge/tidytext")
unnest_tokens函数简·奥斯汀的小说可以如此整洁!让我们使用janeaustenr包中简·奥斯汀的6部完成并出版的小说的文本,并将它们转换为整洁格式。janeaustenr以每行一条记录的格式提供这些文本:
library(janeaustenr) library(dplyr) original_books <- austen_books() %>% group_by(book) %>% mutate(line = row_number()) %>% ungroup() original_books #> # A tibble: 73,422 × 3 #> text book line #> <chr> <fct> <int> #> 1 "SENSE AND SENSIBILITY" Sense & Sensibility 1 #> 2 "" Sense & Sensibility 2 #> 3 "by Jane Austen" Sense & Sensibility 3 #> 4 "" Sense & Sensibility 4 #> 5 "(1811)" Sense & Sensibility 5 #> 6 "" Sense & Sensibility 6 #> 7 "" Sense & Sensibility 7 #> 8 "" Sense & Sensibility 8 #> 9 "" Sense & Sensibility 9 #> 10 "CHAPTER 1" Sense & Sensibility 10 #> # ℹ 73,412 more rows
要将其作为整洁数据集处理,我们需要将其重构为每行一个标记的格式。unnest_tokens()函数是将包含文本列的数据框转换为每行一个标记格式的方法:
library(tidytext) tidy_books <- original_books %>% unnest_tokens(word, text)
tidy_books
#> # 一个 tibble: 725,055 × 3
#> book line word
#> <fct> <int> <chr>
#> 1 理智与情感 1 理智
#> 2 理智与情感 1 与
#> 3 理智与情感 1 情感
#> 4 理智与情感 3 作者
#> 5 理智与情感 3 简
#> 6 理智与情感 3 奥斯汀
#> 7 理智与情感 5 1811
#> 8 理智与情感 10 第
#> 9 理智与情感 10 1
#> 10 理智与情感 13 这
#> # ℹ 还有725,045行
这个函数使用tokenizers包将每行分割成单词。默认的分词是按词进行的,但其他选项包括字符、n-gram、句子、行、段落,或者根据正则表达式模式进行分割。
现在数据采用了每行一个单词的格式,我们可以用tidyverse工具如dplyr来操作它。我们可以通过anti_join()来移除停用词(可以通过get_stopwords()函数获取)。
tidy_books <- tidy_books %>% anti_join(get_stopwords())
我们还可以使用count()来找出所有书籍中最常见的词。
tidy_books %>% count(word, sort = TRUE) #> # 一个 tibble: 14,375 × 2 #> word n #> <chr> <int> #> 1 先生 3015 #> 2 夫人 2446 #> 3 必须 2071 #> 4 说 2041 #> 5 很多 1935 #> 6 小姐 1855 #> 7 一个 1831 #> 8 很好 1523 #> 9 每个 1456 #> 10 认为 1440 #> # ℹ 还有14,365行
情感分析可以通过内连接来实现。通过get_sentiments()函数可以获得三种情感词典。让我们看看每部小说中情感是如何变化的。我们用Bing词典为每个单词找到一个情感得分,然后计算每部小说定义部分中正面和负面词的数量。
library(tidyr) get_sentiments("bing") #> # 一个 tibble: 6,786 × 2 #> word sentiment #> <chr> <chr> #> 1 两面派 负面 #> 2 异常 负面 #> 3 废除 负面 #> 4 可恶的 负面 #> 5 可恶地 负面 #> 6 憎恶 负面 #> 7 可憎之物 负面 #> 8 流产 负面 #> 9 已流产 负面 #> 10 流产 负面 #> # ℹ 还有6,776行 janeaustensentiment <- tidy_books %>% inner_join(get_sentiments("bing"), by = "word", relationship = "many-to-many") %>% count(book, index = line %/% 80, sentiment) %>% pivot_wider(names_from = sentiment, values_from = n, values_fill = 0) %>% mutate(sentiment = positive - negative) janeaustensentiment #> # 一个 tibble: 920 × 5 #> book index negative positive sentiment #> <fct> <dbl> <int> <int> <int> #> 1 理智与情感 0 16 32 16 #> 2 理智与情感 1 19 53 34 #> 3 理智与情感 2 12 31 19 #> 4 理智与情感 3 15 31 16 #> 5 理智与情感 4 16 34 18 #> 6 理 智与情感 5 16 51 35 #> 7 理智与情感 6 24 40 16 #> 8 理智与情感 7 23 51 28 #> 9 理智与情感 8 30 40 10 #> 10 理智与情感 9 15 19 4 #> # ℹ 还有910行
现在我们可以绘制每部小说情节轨迹中的这些情感得分。
<img src="https://yellow-cdn.veclightyear.com/0a4dffa0/bc102dfc-0734-4375-913d-a7964170f80c.png" alt="简·奥斯汀六部已出版小说轨迹中的情感得分" width="100%" />library(ggplot2) ggplot(janeaustensentiment, aes(index, sentiment, fill = book)) + geom_col(show.legend = FALSE) + facet_wrap(vars(book), ncol = 2, scales = "free_x")
更多使用整洁数据框进行文本挖掘的例子,请参见tidytext的说明文档。
一些现有的文本挖掘数据集采用DocumentTermMatrix类(来自tm包)的形式。例如,考虑topicmodels数据集中2246篇美联社文章的语料库。
library(tm) data("AssociatedPress", package = "topicmodels") AssociatedPress #> <<DocumentTermMatrix (documents: 2246, terms: 10473)>> #> 非稀疏/稀疏条目: 302031/23220327 #> 稀疏度 : 99% #> 最大词长: 18 #> 权重 : 词频 (tf)
如果我们想用整洁工具分析这个数据,我们首先需要使用tidy()函数将其转换为每行一个词条的数据框。(关于tidy动词的更多信息,请参见broom包)。
tidy(AssociatedPress) #> # A tibble: 302,031 × 3 #> document term count #> <int> <chr> <dbl> #> 1 1 adding 1 #> 2 1 adult 2 #> 3 1 ago 1 #> 4 1 alcohol 1 #> 5 1 allegedly 1 #> 6 1 allen 1 #> 7 1 apparently 2 #> 8 1 appeared 1 #> 9 1 arrested 1 #> 10 1 assault 1 #> # ℹ 还有302,021行
我们可以找出最消极的文档:
ap_sentiments <- tidy(AssociatedPress) %>% inner_join(get_sentiments("bing"), by = c(term = "word")) %>% count(document, sentiment, wt = count) %>% pivot_wider(names_from = sentiment, values_from = n, values_fill = 0) %>% mutate(sentiment = positive - negative) %>% arrange(sentiment)
或者我们可以将奥斯汀和AP数据集连接起来,比较每个词的频率:
comparison <- tidy(AssociatedPress) %>% count(word = term) %>% rename(AP = n) %>% inner_join(count(tidy_books, word)) %>% rename(Austen = n) %>% mutate(AP = AP / sum(AP), Austen = Austen / sum(Austen)) comparison #> # A tibble: 4,730 × 3 #> word AP Austen #> <chr> <dbl> <dbl> #> 1 abandoned 0.000170 0.00000493 #> 2 abide 0.0000291 0.0000197 #> 3 abilities 0.0000291 0.000143 #> 4 ability 0.000238 0.0000148 #> 5 able 0.000664 0.00151 #> 6 abroad 0.000194 0.000178 #> 7 abrupt 0.0000291 0.0000247 #> 8 absence 0.0000776 0.000547 #> 9 absent 0.0000436 0.000247 #> 10 absolute 0.0000533 0.000128 #> # ℹ 还有4,720行 library(scales) ggplot(comparison, aes(AP, Austen)) + geom_point(alpha = 0.5) + geom_text(aes(label = word), check_overlap = TRUE, vjust = 1, hjust = 1) + scale_x_log10(labels = percent_format()) + scale_y_log10(labels = percent_format()) + geom_abline(color = "red")
<img src="https://yellow-cdn.veclightyear.com/0a4dffa0/6bcacba0-5d3d-46a1-879f-be3722ec89c1.png" alt="简·奥斯汀与美联社新闻文章中词频的散点图。一些词如"cried"只在简·奥斯汀作品中常见,一些词如"national"只在美联社文章中常见,而一些词如"time"在两者中都很常见。" width="100%" />
关于使用整洁数据原则处理其他文本挖掘包中的对象的更多示例,请参见关于文档词条矩阵转换的说明文档。
本项目发布时附带贡献者行为准则。参与本项目即表示您同意遵守其条款。欢迎提供反馈、错误报告(和修复!)以及功能请求;请在此处提交问题或寻求支持。


AI一键生成PPT,就用博思AIPPT!
博思AIPPT,新一代的AI生成PPT平台,支持智能生成PPT、AI美化PPT、文本&链接生成PPT、导入Word/PDF/Markdown文档生成PPT等,内置海量精美PPT模板,涵盖商务、教育、科技等不同风格,同时针对每个页面提供多种版式,一键自适应切换,完美适配各种办公场景。


AI赋能电商视觉革命,一站式智能商拍平台
潮际好麦深耕服装行业,是国内AI试衣效果最好的软件。使用先进AIGC能力为电商卖家批量提供优质的、低成本的商拍图。合作品牌有Shein、Lazada、安踏、百丽等65个国内外头部品牌,以及国内10万+淘宝、天猫、京东等主流平台的品牌商家,为卖家节省将近85%的出图成本,提升约3倍出图效率,让品牌能够快速上架。


企业专属的AI法律顾问
iTerms是法大大集团旗下法律子品牌,基于最先进的 大语言模型(LLM)、专业的法律知识库和强大的智能体架构,帮助企业扫清合规障碍,筑牢风控防线,成为您企业专属的AI法律顾问。


稳定高效的流量提升解决方案,助力品牌曝光
稳定高效的流量提升解决方案,助力品牌曝光


最新版Sora2模型免费使用,一键生成无水印视频
最新版Sora2模型免费使用,一键生成无水印视频


实时语音翻译/同声传译工具
Transly是一个多场景的AI大语言模型驱动的同声传译、专业翻译助手,它拥有超精准的音频识别翻译能力,几乎零延迟的使用体验和支持多国语言可以让你带它走遍全球,无论你是留学生、商务人士、韩剧美剧爱好者,还是出国游玩、多国会议、跨国追星等等,都可以满足你所有需要同传的场景需求,线上线下通用,扫除语言障碍,让全世界的语言交流不再有国界。


选题、配图、成文,一站式创作,让内容运营更高效
讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。


AI辅助编程,代码自动修复
Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交 付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。


最强AI数据分析助手
小浣熊家族Raccoon,您的AI智能助手,致力于通过先进的人工 智能技术,为用户提供高效、便捷的智能服务。无论是日常咨询还是专业问题解答,小浣熊都能以快速、准确的响应满足您的需求,让您的生活更加智能便捷。


像人一样思考的AI智能体
imini 是一款超级AI智能体,能根据人类指令,自主思考、自主完成、并且交付结果的AI智能体。
最新AI工具、AI资讯
独家AI资源、AI项目落地

微信扫一扫关注公众号