使用R语言从网页文章中提取并清洗文本教程

使用R语言从网页文章中提取并清洗文本教程

本教程旨在解决使用r语言从网页文章中提取文本时遇到的“噪音”问题。我们将介绍如何利用`htm2txt`包进行初步文本抓取,并结合`quanteda`和`qdapdictionaries`包,通过字典过滤的方法,有效去除无关字符和非标准词汇,从而获得更纯净、有意义的文章内容。文章将详细阐述从网页抓取到文本清洗的完整流程,并提供r代码示例及注意事项。

在进行网络数据抓取时,尤其是在处理新闻文章或维基百科页面等富文本内容时,直接提取的文本往往包含大量非文章核心内容的“噪音”,例如导航链接、版权声明、广告词、页面标识符等。尽管htm2txt包的gettxt()函数能够高效地将HTML页面转换为纯文本,但它通常无法区分这些有用与无用的信息。为了获得更精确、更具分析价值的文本数据,我们需要进一步的清洗和过滤。

文本提取与初步观察

首先,我们使用htm2txt包来从指定URL提取文本。这个包能够将HTML内容转换为可读的纯文本格式。

# 安装并加载必要的包# install.packages("htm2txt")library(htm2txt)# 示例URLurl_example <- 'https://en.wikipedia.org/wiki/Alan_Turing'# 提取文本raw_text <- gettxt(url_example)# 打印部分结果以观察噪音# cat(substr(raw_text, 1, 1000))

通过gettxt()函数,我们可以快速获取网页的文本内容。然而,正如问题描述中指出的,这些文本中会混杂着如p. 40/03Bn• ^ a或identifiersn• Articles with GND identifiersn•这类与文章主题无关的字符或短语。

基于字典的文本清洗策略

为了解决上述问题,一种有效的方法是采用基于字典的过滤。其核心思想是:只保留那些在标准英语字典中存在的词汇,从而过滤掉大部分非语言性的噪音、乱码或非标准词汇。这需要结合文本处理和自然语言处理(NLP)相关的R包。

我们将使用以下包:

tidyverse:提供数据处理的便利工具集。quanteda:一个强大的NLP包,用于文本的语料库创建、分词和特征选择。qdapDictionaries:提供了一个包含大量英语词汇的字典。

1. 加载所需库与字典

首先,确保所有必要的库都已安装并加载。同时,加载qdapDictionaries包中的DICTIONARY数据集,它包含了标准的英语词汇列表。

# 安装并加载必要的包# install.packages(c("tidyverse", "quanteda", "qdapDictionaries"))library(tidyverse)library(htm2txt)library(quanteda)library(qdapDictionaries)# 加载字典数据data(DICTIONARY)

2. 文本转换为语料库并分词

接下来,我们将从网页提取的原始文本转换为quanteda的语料库(corpus)对象,然后进行分词(tokenization)。分词是将文本拆分成单个词语或符号的过程。在分词时,我们可以选择移除标点符号和数字,以进一步简化文本。

# 将原始文本转换为quanteda语料库text_corpus <- corpus(raw_text)# 分词,移除标点和数字tokens_raw <- tokens(text_corpus, remove_punct = TRUE, remove_numbers = TRUE)

3. 基于字典过滤词汇

这是文本清洗的关键步骤。我们使用tokens_select()函数,结合qdapDictionaries::DICTIONARY$word作为白名单,只保留那些出现在字典中的词汇。

# 使用字典过滤词汇# DICTIONARY$word 包含了标准的英语词汇列表tokens_filtered <- tokens_select(tokens_raw, DICTIONARY$word)

经过这一步,大部分非英文词汇、乱码以及一些非标准文本(如页面标识符中的字母组合)将被移除。

4. 统计词频(可选但常用)

为了更好地理解清洗后的文本内容,我们可以将过滤后的词汇转换为数据框,并统计每个词的出现频率。这有助于我们了解文章的核心主题和关键词。

# 将过滤后的tokens转换为数据框,并计算词频word_frequencies %  unnest(text) %>% # 将列表中的tokens展开为行  rename(word = text) %>%  mutate(word = tolower(word)) %>% # 转换为小写  group_by(word) %>%  summarise(frequency = n()) %>% # 计算词频  arrange(desc(frequency)) # 按频率降序排列

完整代码示例:

将上述步骤整合到一起,形成一个完整的文本提取与清洗流程:

# 确保所有必要的包已安装并加载# install.packages(c("tidyverse", "htm2txt", "quanteda", "qdapDictionaries"))library(tidyverse)library(htm2txt)library(quanteda)library(qdapDictionaries)# 加载字典数据data(DICTIONARY)# 目标网页URLtarget_url <- 'https://en.wikipedia.org/wiki/Alan_Turing' # 示例URL# 1. 从网页提取原始文本raw_text_content <- gettxt(target_url)# 2. 将原始文本转换为quanteda语料库text_corpus <- corpus(raw_text_content)# 3. 分词,并移除标点符号和数字tokens_processed <- tokens(text_corpus, remove_punct = TRUE, remove_numbers = TRUE)# 4. 使用字典过滤词汇,只保留标准英语词汇# DICTIONARY$word 是qdapDictionaries包提供的标准英语词汇列表tokens_cleaned <- tokens_select(tokens_processed, DICTIONARY$word)# 5. 将清洗后的tokens转换为数据框,并计算词频# 注意:quanteda的tokens对象在转换为数据框时需要一些处理# 这里的处理方式是先转换为字符向量,再通过unnest展开cleaned_word_frequencies %  unnest_tokens(word, text) %>% # 再次分词,将每个词作为一行  mutate(word = tolower(word)) %>% # 转换为小写  group_by(word) %>%  summarise(frequency = n()) %>% # 计算词频  arrange(desc(frequency)) # 按频率降序排列# 打印清洗后的词频前几行head(cleaned_word_frequencies)# 也可以直接查看清洗后的tokens# print(tokens_cleaned)

注意事项与局限性

字典的完整性: qdapDictionaries::DICTIONARY是一个通用的英语字典,它可能不包含所有领域特定的术语、专有名词(如人名、地名)或新创造的词汇。因此,使用此方法可能会过滤掉一些在文章中确实有意义但不在字典中的词。同形异义词: 某些在导航链接中出现的词汇(例如“Jump to navigation”中的“Jump”和“navigation”)本身是标准英语词汇,因此不会被字典过滤掉。这表明字典过滤并非万无一失,仍可能残留少量与文章主题无关的词。语言依赖性: 此方法严格依赖于英语字典。如果需要处理其他语言的文本,则需要找到相应语言的字典。性能考量: 对于非常大的文本语料库,分词和字典过滤可能会消耗一定的计算资源。替代方案: 对于更复杂的噪音(例如需要识别文章主体内容与侧边栏、页脚等),可能需要结合更高级的技术,如HTML结构分析(XPath/CSS选择器)、机器学习模型(如内容分类器)或自定义正则表达式规则。

总结

通过结合htm2txt进行初步文本提取,并利用quanteda和qdapDictionaries进行字典过滤,我们能够有效地从网页文章中提取出相对纯净、有意义的文本内容。这种方法提供了一个实用且易于实现的文本清洗流程,对于需要进行文本分析、主题建模或信息提取的用户来说,是一个非常有价值的工具。尽管存在一定的局限性,但它为后续的文本数据处理奠定了坚实的基础。

以上就是使用R语言从网页文章中提取并清洗文本教程的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1590905.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
JavaScript中如何正确更新多个相同内容的HTML元素
上一篇 2025年12月23日 06:22:04
CSS动态高度管理:max(100%, fit-content)替代方案与实践
下一篇 2025年12月23日 06:22:10

相关推荐

  • win10怎么恢复成经典的windows照片查看器_Win10恢复传统照片查看器方法

    可通过注册表文件导入、手动编辑注册表或使用批处理命令三种方法恢复Windows 10中经典的Windows照片查看器功能,操作后右键图片选择该查看器并设为默认即可正常使用。 如果您发现Windows 10系统中默认的图片查看工具不再是您习惯使用的经典Windows照片查看器,可以通过修改系统设置或注…

    2026年8月26日
    000
  • Word怎么设置悬挂缩进_Word段落悬挂缩进排版技巧

    通过标尺拖动、段落对话框设置或修改样式可实现Word中首行左对齐其余行右缩进的悬挂缩进效果,适用于参考文献等排版场景。 如果您在使用Word编辑文档时希望实现段落中首行保持左对齐,而其余行向右缩进的效果,可以通过设置悬挂缩进来实现。这种排版方式常用于参考文献、项目列表等需要突出首行内容的场景。 本文…

    2026年8月26日
    100
  • PHP数据更新怎么实现_PHPMySQL数据更新操作方法指南

    答案:使用预处理语句可有效防止SQL注入。通过将SQL结构与数据分离,数据库先解析语句结构,再绑定用户输入作为纯值处理,避免其被当作代码执行,从而杜绝注入风险,是安全更新数据的核心方法。 PHP更新MySQL数据,核心在于构建正确的SQL UPDATE语句,并借助mysqli或PDO这类数据库扩展安…

    2026年8月26日
    000
  • VSCode字体颜色怎么调_VSCode编辑器语法高亮和主题色自定义教程

    调整VSCode字体颜色需通过修改主题或编辑settings.json文件,核心是利用workbench.colorCustomizations和editor.tokenColorCustomizations配置项,结合Developer: Inspect Editor Tokens and Sco…

    2026年8月26日
    200
  • MySQL怎样正确使用事务处理 事务隔离级别与并发控制实践

    MySQL怎样正确使用事务处理 事务隔离级别与并发控制实践MySQL怎样正确使用事务处理 事务隔离级别与并发控制实践MySQL怎样正确使用事务处理 事务隔离级别与并发控制实践MySQL怎样正确使用事务处理 事务隔离级别与并发控制实践

    正确使用mysql事务需确保acid特性,通过start transaction开启事务,commit提交或rollback回滚操作,避免部分执行导致数据不一致;2. 事务隔离级别有四种:read uncommitted允许脏读,极少使用;read committed解决脏读但存在不可重复读,适用于…

    2026年8月26日 用户投稿
    000
  • win8自带截图工具怎么用 win8系统自带截图工具使用技巧

    如果您需要在Windows 8系统中截取屏幕画面,但不确定如何操作,可以使用系统自带的截图工具来完成。以下是多种使用方法和技巧: 本文运行环境:联想ThinkPad T14,Windows 8.1。 一、通过开始菜单启动截图工具 此方法适用于所有用户,通过系统搜索功能定位“截图工具”应用,适合不熟悉…

    2026年8月26日
    000
  • 抖音平台优惠是扣商家的吗?抖音平台优惠是扣商家的吗是真的吗

    随着互联网的快速发展,抖音平台已经成为人们生活中不可或缺的一部分。抖音平台上的各种优惠活动层出不穷,吸引着无数消费者。在这些优惠背后,是否真的如商家所愿,让利给消费者呢?今天,我们就来聊聊抖音平台优惠是否扣商家的这个问题。 一、抖音平台优惠的来源 1. 平台补贴:抖音平台为了吸引商家入驻和消费者使用…

    2026年8月26日
    100
  • Listen1界面如何自定义_Listen1界面自定义的详细设置方法

    Listen1支持个性化设置以提升使用体验。首先可切换深色或浅色主题,减少视觉疲劳;其次调整播放列表排序方式及启用卡片式布局,优化浏览效率;接着通过快捷方式管理自定义工具栏功能图标;再通过数据源管理隐藏不常用音乐平台标签;最后设置默认搜索平台以提高检索速度。 如果您希望让Listen1音乐播放器界面…

    2026年8月26日
    000
  • [cmd]Windows下创建符号链接使用命令mklink

    mklink命令在windows系统中用于创建符号链接,属于cmd的内置命令。我们可以通过打开命令提示符来查看mklink的具体用法和语法说明。首先点击“搜索”图标 12,输入“cmd”或“命令提示符”,然后选择“以管理员身份运行”启动命令行工具。接着输入 mklink 并回车,即可显示该命令的详细…

    2026年8月26日
    000
  • 惠普无线网卡驱动怎么安装 一招解决驱动问题

    惠普无线网卡驱动怎么安装 一招解决驱动问题惠普无线网卡驱动怎么安装 一招解决驱动问题惠普无线网卡驱动怎么安装 一招解决驱动问题惠普无线网卡驱动怎么安装 一招解决驱动问题

    在使用惠普(hp)笔记本电脑时,不少用户会遇到无法连接无线网络的问题,其中最常见的原因就是无线网卡驱动未安装或出现异常。尤其是在重装系统后,驱动丢失的情况更为普遍。那么,该如何安装惠普无线网卡驱动呢?下面将介绍几种简单有效的安装方式。 一、无线网卡驱动是什么? 无线网卡驱动相当于操作系统与无线网卡之…

    2026年8月26日 用户投稿
    000
  • Java中jmap的作用 解析堆转储

    Java中jmap的作用 解析堆转储Java中jmap的作用 解析堆转储Java中jmap的作用 解析堆转储Java中jmap的作用 解析堆转储

    jmap通过命令jmap -dump:live,format=b,file=文件名.hprof 进程id生成堆转储文件,具体步骤为:1.使用jps获取java进程id;2.执行带live参数的jmap命令以仅导出存活对象,减少文件体积;3.通过分析工具如eclipse mat、visualvm或ap…

    2026年8月26日 用户投稿
    000
  • 内存 Bank 与 Rank 对性能的潜在影响分析

    内存性能受Bank与Rank共同影响,Bank提升内部并发效率,多Bank可降低访问冲突;Rank决定物理组织与容量,多Rank增加带宽但提高信号负载。二者协同作用于延迟与吞吐,合理搭配可优化系统性能。 内存的性能不仅取决于频率和时序,还受到内部架构设计的影响,其中 Bank 和 Rank 是两个关…

    2026年8月26日
    000
  • 电脑主机内存频率与时序详解,帮助用户了解内存性能指标及调整方法

    电脑主机内存频率与时序详解,帮助用户了解内存性能指标及调整方法电脑主机内存频率与时序详解,帮助用户了解内存性能指标及调整方法电脑主机内存频率与时序详解,帮助用户了解内存性能指标及调整方法电脑主机内存频率与时序详解,帮助用户了解内存性能指标及调整方法

    内存性能要看频率与时序的平衡。频率决定数据传输速度上限,但实际表现受时序影响,高频内存若时序过松,延迟可能与低频内存相近;选择内存应先看主板支持频率,搭配合适cpu平台,同频选cl值更低的产品;时序以cl值为核心,数值越低延迟越小,游戏场景更受益于低时序,而多任务处理则更依赖高频带来的带宽优势;调整…

    2026年8月26日 用户投稿
    000
  • iPhone16如何设置返回导航键

    一、打开设置界面 在手机主屏上找到标有“设置”的应用图标,轻触进入。这里是管理iPhone各项功能的核心区域。 二、进入系统管理菜单 在设置列表中向下滑动,定位到“系统”选项并点击进入。该菜单集中了与设备基础操作相关的配置功能。 三、查找导航功能设置 在“系统”页面中,寻找名为“导航”的功能入口。该…

    2026年8月26日
    000
  • 如何举报抖音用户成功率高?抖音怎样举报才能100%成功

    在如今这个信息爆炸的时代,抖音已经成为许多人生活中不可或缺的一部分。随着用户数量的激增,一些不良信息、违规内容也混杂其中。为了维护一个健康、积极的网络环境,了解如何举报抖音用户变得尤为重要。本文将为你详细解析如何提高举报成功率,让你轻松应对各类违规行为。 一、了解举报机制 在开始举报之前,我们需要先…

    2026年8月26日
    000
  • 缓存(Cache)驱动配置与使用技巧

    配置和使用缓存的步骤如下:1.选择合适的缓存驱动,如redis、ehcache或memcached。2.配置缓存策略,包括设置ttl、淘汰策略(如lru、lfu)和缓存容量。3.在实际应用中,设置缓存时使用setex方法指定有效期,避免数据过期。4.处理缓存穿透和雪崩问题,设置空值或随机ttl。5.…

    2026年8月26日
    000
  • Java中堆内存和栈内存的区别及内存管理机制

    Java中堆内存和栈内存的区别及内存管理机制Java中堆内存和栈内存的区别及内存管理机制Java中堆内存和栈内存的区别及内存管理机制Java中堆内存和栈内存的区别及内存管理机制

    堆内存用于存储对象实例,栈内存用于方法调用和局部变量。1. 堆内存由垃圾回收器管理,线程共享,生命周期长,适合存储动态分配的对象;2. 栈内存自动管理,线程私有,生命周期短,适合存储局部变量和方法调用帧;3. 区分两者是为了优化内存管理和性能;4. 堆溢出可通过分析内存泄漏、优化代码、增加堆内存等解…

    2026年8月26日 用户投稿
    100
  • 电脑主机启动不起来怎么回事 五种解决方法

    电脑主机启动不起来怎么回事 五种解决方法电脑主机启动不起来怎么回事 五种解决方法电脑主机启动不起来怎么回事 五种解决方法电脑主机启动不起来怎么回事 五种解决方法

    电脑按下电源键后毫无反应或无法正常启动,确实让人感到困扰。那么,电脑主机无法启动的原因究竟是什么?本文将为你梳理常见的故障表现,深入分析可能原因,并提供五种实用的解决方法,助你快速排查问题,恢复电脑正常使用。 一、电脑主机无法启动的常见现象 “无法启动”这一问题在实际中可能表现为多种情况,主要包括:…

    2026年8月26日 用户投稿
    200
  • 人体工学键盘与垂直鼠标对长期使用舒适度的改善

    人体工学键盘与垂直鼠标通过优化手部姿态缓解办公族和程序员的腕臂肩颈疲劳。1. 分体式键盘减少手腕偏转,保持前臂中立位;2. 垂直鼠标使手心朝内,降低桡尺关节压力;3. 二者协同使用可统一工作角度,配合正确坐姿有效预防慢性劳损。 长时间使用电脑的人群,尤其是办公族和程序员,常面临手腕、前臂甚至肩颈的疲…

    2026年8月26日
    000
  • 多服务器环境下Session共享方案

    多服务器环境下需要session共享以确保用户体验的连贯性和数据的一致性。实现方案包括:1) 使用redis或memcached进行集中式session管理,优点是高效处理大规模数据,但增加了系统复杂性和单点故障风险;2) 使用session复制,通过服务器间同步session数据,优点是无需额外存…

    2026年8月26日
    000

发表回复

登录后才能评论
关注微信