当前位置: 首页 > news >正文

R语言非结构化文本挖掘入门指南

文本挖掘(Text Mining),也称为文本分析(Text Analytics),是从非结构化文本数据中提取有意义的见解。全球约80%的数据是非结构化的。本篇博客将探讨文本挖掘和网络爬取的关键概念及基于R的实用技术。

什么是文本挖掘?

文本挖掘利用计算技术从非结构化文本源(如书籍、报告、文章、博客和社交媒体帖子)中提取结构化信息。它能够自动化地从海量数据集中发现知识,实现文本摘要和分析。

关键点:

  • 非结构化文本:自由格式的数据(如电子邮件、社交媒体、文档)
  • 目标:提取高质量的结构化信息进行分析
  • 应用:情感分析、主题建模、信息检索

使用R的tm包提取文本

R语言中的tm(text mining)包是一个强大的文本挖掘工具,其核心数据结构是语料库(corpus)——文本文档的集合。语料库支持批量处理多个文档。

语料库类型:

  • VCorpus(易失性语料库):临时存储在内存中,R会话结束时删除
  • PCorpus(永久性语料库):存储在外部,跨会话持久化

预定义数据源:

  • DirSource:从目录读取文本
  • VectorSource:处理向量中的文本
  • DataframeSource:处理类似数据框的结构

示例:使用VectorSource创建语料库

以下代码从文本字符串向量创建易失性语料库并检查其内容。

library(tm)
texts <- c("Hi!", "Welcome to My Blog!", "Blog1, 2, 3.....")
mytext <- VectorSource(texts)
mycorpus <- VCorpus(mytext)
inspect(mycorpus)
as.character(mycorpus[[1]])

说明:

  • inspect(mycorpus) 打印VCorpus对象的结构和元数据。此例中显示VCorpus包含3个文档,每个都是长度分别为3、19和16的PlainTextDocument
  • as.character(mycorpus[[2]]) 将语料库中的第二个文档转换为字符向量。此例中返回"Welcome to My Blog!"。[[]]用于访问R列表中的元素,由于语料库本质上是文档列表,因此这是访问单个文档的方式
<<VCorpus>>
Metadata:  corpus specific: 0, document level (indexed): 0
Content:  documents: 3[[1]]
<<PlainTextDocument>>
Metadata:  7
Content:  chars: 3[[2]]
<<PlainTextDocument>>
Metadata:  7
Content:  chars: 19[[3]]
<<PlainTextDocument>>
Metadata:  7
Content:  chars: 16

网络爬取文本数据

网络爬取从网站检索数据,通常需要解析HTML以提取相关内容。readLines()httrXMLrvest等工具简化了这一过程。

挑战:

  • 网络数据通常嵌入在复杂的HTML结构中
  • 需要解析以隔离有用文本

技术与工具:

  • readLines():从URL读取原始文本
  • httr::GET():以编程方式获取网页内容
  • XML::htmlParse():解析HTML,使用XPath提取特定元素
  • rvest::read_html():读取和解析HTML,使用CSS选择器进行目标爬取

示例:使用rvest进行网页爬取

rvest是一个R包,专为网页爬取设计,可以轻松从HTML和XML网页中提取数据。它是tidyverse生态系统的一部分,对熟悉R的tidyverse语法的用户特别友好。

rvest中的关键函数:

  • read_html():从URL或字符串读取和解析HTML内容
    • 示例:page <- read_html(“https://example.com”)
  • html_nodes():使用CSS选择器提取HTML元素
    • 示例:titles <- html_nodes(page, “h1”)
  • html_text():从HTML节点提取文本内容
    • 示例:text_content <- html_text(titles)
  • html_attr():从HTML元素提取属性(如href、src等)
    • 示例:links <- html_attr(links, “href”)

以下代码使用HTML选择器从网页中抓取特定元素:

library(rvest)
url <- "https://zlu.me/teach"
page <- read_html(url)
nodes <- html_nodes(page, "h2")
texts <- html_text(nodes)
print(texts)
[1] ""          "Teach@zlu" "留学辅导" 

爬取结构化数据

以下是从教学网站提取课程分类的示例:

library(rvest)
library(purrr)# 从教学页面爬取课程分类
url <- "https://zlu.me/teach"
page <- read_html(url)# 提取所有部分标题(h3元素)
headers <- html_nodes(page, 'h3') %>% html_text() %>%keep(~nchar(.) > 0)  # 移除空字符串# 打印标题
cat("页面上的部分:\n")
walk(headers, ~cat("- ", ., "\n"))# 提取课程分类
categories <- html_nodes(page, 'h4') %>% html_text() %>%keep(~nchar(.) > 0)  # 移除空字符串# 打印课程分类
cat("\n课程分类:\n")
walk(categories, ~cat("- ", ., "\n"))

部分结果:

页面上的部分:
-  Recent Posts 
-  About Me 
-  Popular Courses 
-  Student Success 
-  University Courses 
-  FAQs 
-  Book a Session 
-  Introduction 
-  About Me 
-  Popular Courses 
-  Course Categories 
-  Student Testimonials 
-  Frequently Asked Questions 
-  简介 
-  详细介绍 
-  Popular Courses 
-  课程分类 
-  学生评价或成功案例 
-  常见问题解答(FAQ)课程分类:
-  Machine Learning 
-  Artificial Intelligence 
-  Data Analysis 
-  Databases 
-  Python Programming 
-  CS Core 
-  Advanced Topics 
-  Machine Learning 
-  Artificial Intelligence 
-  Data Analysis 
-  Databases 
-  Python Programming 
-  CS Core 
-  Advanced Topics 

结论

文本挖掘和网络爬虫技术能够从非结构化数据中提取有价值的洞察。R语言中的tm包简化了文本提取过程,而rvesthttr等工具则实现了高效的网络爬虫功能。通过结合这些技术,您可以有效地处理和分析海量的文本数据。

祝大家周末愉快!

http://www.xdnf.cn/news/1036315.html

相关文章:

  • tcp, udp , 与 select .
  • 创客匠人:AI重构知识IP定位与变现效率新范式
  • 多态取代条件表达式举例
  • 【Photoshop】使用置换将字体和背景融为一体
  • flask JWT 认证
  • 了解Redis的使用
  • 【AS32系列MCU调试教程】性能优化:Eclipse环境下AS32芯片调试效率提升
  • CSS预编译语言less
  • 键盘按键枚举 Key 说明文档
  • iOS swiftUI的实用举例
  • 人工智能学习15-Numpy-花式索引和索引技巧
  • linux常用基础命令_新
  • Java 数据类型选择题
  • 使用大模型预测短暂性脑缺血发作(TIA)的全流程系统技术方案大纲
  • Python Flask 框架学习笔记
  • Linux操作系统之运维常用命令
  • 华为OD机试_2025 B卷_字符串分割(Python,100分)(附详细解题思路)
  • aflplusplus:开源的模糊测试工具!全参数详细教程!Kali Linux教程!(四)
  • 22 - PSA模块
  • 解惑1、为何大容量电容滤低频,小容量电容滤高频
  • 数据库资源帖
  • 同旺科技 USB TO SPI / I2C适配器(专业版)--EEPROM读写——A
  • 代码随想录算法训练营day4
  • (15)python+ selenium自动化测试 - 回顾2
  • 采用微服务的预期收益是什么?我们如何衡量成功?
  • 大IPD之——学习华为市场洞察,为战略找到方向(四)
  • FastGPT实战:从0搭建AI知识库与MCP AI Agent系统
  • Java求职者面试题解析:Spring、Spring Boot、MyBatis框架与源码原理
  • SpringBoot自动化部署实战指南
  • 【Photoshop】使用内容识别去除水印文字