0

0

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

聖光之護

聖光之護

发布时间:2025-11-01 12:45:17

|

602人浏览过

|

来源于php中文网

原创

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

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

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

文本提取与初步观察

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

# 安装并加载必要的包
# install.packages("htm2txt")
library(htm2txt)

# 示例URL
url_example <- 'https://en.wikipedia.org/wiki/Alan_Turing'

# 提取文本
raw_text <- gettxt(url_example)

# 打印部分结果以观察噪音
# cat(substr(raw_text, 1, 1000))

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

基于字典的文本清洗策略

为了解决上述问题,一种有效的方法是采用基于字典的过滤。其核心思想是:只保留那些在标准英语字典中存在的词汇,从而过滤掉大部分非语言性的噪音、乱码或非标准词汇。这需要结合文本处理和自然语言处理(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)。分词是将文本拆分成单个词语或符号的过程。在分词时,我们可以选择移除标点符号和数字,以进一步简化文本。

一点PPT
一点PPT

一句话生成专业PPT,AI自动排版配图

下载
# 将原始文本转换为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 <- data.frame(text = sapply(tokens_filtered, as.character), stringsAsFactors = FALSE) %>%
  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)

# 目标网页URL
target_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 <- data.frame(
  doc_id = names(tokens_cleaned),
  text = sapply(tokens_cleaned, paste, collapse = " ") # 将tokens重新组合成字符串
) %>%
  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进行字典过滤,我们能够有效地从网页文章中提取出相对纯净、有意义的文本内容。这种方法提供了一个实用且易于实现的文本清洗流程,对于需要进行文本分析、主题建模或信息提取的用户来说,是一个非常有价值的工具。尽管存在一定的局限性,但它为后续的文本数据处理奠定了坚实的基础。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
js正则表达式
js正则表达式

php中文网为大家提供各种js正则表达式语法大全以及各种js正则表达式使用的方法,还有更多js正则表达式的相关文章、相关下载、相关课程,供大家免费下载体验。

531

2023.06.20

正则表达式不包含
正则表达式不包含

正则表达式,又称规则表达式,,是一种文本模式,包括普通字符和特殊字符,是计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串,通常被用来检索、替换那些符合某个模式的文本。php中文网给大家带来了有关正则表达式的相关教程以及文章,希望对大家能有所帮助。

258

2023.07.05

java正则表达式语法
java正则表达式语法

java正则表达式语法是一种模式匹配工具,它非常有用,可以在处理文本和字符串时快速地查找、替换、验证和提取特定的模式和数据。本专题提供java正则表达式语法的相关文章、下载和专题,供大家免费下载体验。

766

2023.07.05

java正则表达式匹配字符串
java正则表达式匹配字符串

在Java中,我们可以使用正则表达式来匹配字符串。本专题为大家带来java正则表达式匹配字符串的相关内容,帮助大家解决问题。

219

2023.08.11

正则表达式空格
正则表达式空格

正则表达式空格可以用“s”来表示,它是一个特殊的元字符,用于匹配任意空白字符,包括空格、制表符、换行符等。本专题为大家提供正则表达式相关的文章、下载、课程内容,供大家免费下载体验。

357

2023.08.31

Python爬虫获取数据的方法
Python爬虫获取数据的方法

Python爬虫可以通过请求库发送HTTP请求、解析库解析HTML、正则表达式提取数据,或使用数据抓取框架来获取数据。更多关于Python爬虫相关知识。详情阅读本专题下面的文章。php中文网欢迎大家前来学习。

293

2023.11.13

正则表达式空格如何表示
正则表达式空格如何表示

正则表达式空格可以用“s”来表示,它是一个特殊的元字符,用于匹配任意空白字符,包括空格、制表符、换行符等。想了解更多正则表达式空格怎么表示的内容,可以访问下面的文章。

245

2023.11.17

正则表达式中如何匹配数字
正则表达式中如何匹配数字

正则表达式中可以通过匹配单个数字、匹配多个数字、匹配固定长度的数字、匹配整数和小数、匹配负数和匹配科学计数法表示的数字的方法匹配数字。更多关于正则表达式的相关知识详情请看本专题下面的文章。php中文网欢迎大家前来学习。

547

2023.12.06

TypeScript类型系统进阶与大型前端项目实践
TypeScript类型系统进阶与大型前端项目实践

本专题围绕 TypeScript 在大型前端项目中的应用展开,深入讲解类型系统设计与工程化开发方法。内容包括泛型与高级类型、类型推断机制、声明文件编写、模块化结构设计以及代码规范管理。通过真实项目案例分析,帮助开发者构建类型安全、结构清晰、易维护的前端工程体系,提高团队协作效率与代码质量。

26

2026.03.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Sass 教程
Sass 教程

共14课时 | 0.9万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 3.6万人学习

CSS教程
CSS教程

共754课时 | 42.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号