自然语言处理NLP入门 -- 第二节预处理文本数据
在自然语言处理(NLP)中,数据的质量直接影响模型的表现。文本预处理的目标是清理和标准化文本数据,使其适合机器学习或深度学习模型处理。本章介绍几种常见的文本预处理方法,并通过 Python 代码进行示例。
2.1 文本清理
文本数据往往包含各种噪音,例如 HTML 标签、特殊字符、空格、数字等。清理文本可以提高模型的准确性。
常见的清理步骤
- 去除 HTML 标签
- 移除特殊字符(如
@#%$&) - 移除数字
- 统一大小写(通常转换为小写)
- 去除多余的空格
Python 示例
import re # 正则表达式库,用于文本匹配和替换text = "Hello, <b>world</b>! Visit us at https://example.com or call 123-456-7890."# 1. 去除HTML标签
text = re.sub(r'<.*?>', '', text)# 2. 去除特殊字符(保留字母和空格)
text = re.sub(r'[^a-zA-Z\s]', '', text)# 3. 转换为小写
text = text.lower()# 4. 去除多余空格
text = " ".join(text.split())print(text)
输出:
hello world visit us at httpsexamplecom or call
2.2 分词(Tokenization)
分词是将文本拆分成单个的单词或子词,是 NLP 任务的基础。
常见分词方法
- 按空格拆分(适用于英文)
- NLTK 分词(更精准)
- spaCy 分词(高效处理大规模数据)
Python 示例
import nltk # 自然语言处理库,提供分词、词性标注、停用词等功能
from nltk.tokenize import word_tokenize, sent_tokenize
import spacy # 现代 NLP 库,优化分词、词性标注等任务nltk.download('punkt_tab') # punkt_tab 是 NLTK 中的分词模型text = "Hello world! This is an NLP tutorial."# 1. 基础空格分词
tokens_space = text.split()
print("空格分词:", tokens_space)# 2. 使用 NLTK 进行分词
tokens_nltk = word_tokenize(text)
print("NLTK 分词:", tokens_nltk)# 3. 使用 spaCy 进行分词
nlp = spacy.load("en_core_web_sm") # 加载预训练的小型英文模型
doc = nlp(text)
tokens_spacy = [token.text for token in doc]
print("spaCy 分词:", tokens_spacy)
输出:
空格分词: ['Hello', 'world!', 'This', 'is', 'an', 'NLP', 'tutorial.']
NLTK 分词: ['Hello', 'world', '!', 'This', 'is', 'an', 'NLP', 'tutorial', '.']
spaCy 分词: ['Hello', 'world', '!', 'This', 'is', 'an', 'NLP', 'tutorial', '.']
注意:
- 空格分词简单但容易出错,如 “NLP tutorial.” 仍包含标点。
- NLTK 和 spaCy 处理得更精准,分离了标点符号。
2.3 词干提取(Stemming)和词形还原(Lemmatization)
在 NLP 任务中,单词的不同形式可能具有相同的含义,例如:
running和runbetter和good
词干提取和词形还原可以将单词标准化,从而提高模型的泛化能力。
词干提取(Stemming)
词干提取是基于规则的词形归一化方法,会粗暴地去掉单词的后缀。
from nltk.stem import PorterStemmer, SnowballStemmer # 词干提取工具stemmer = PorterStemmer() # PorterStemmer 是常用的词干提取方法
words = ["running", "flies", "easily", "studies"]stemmed_words = [stemmer.stem(word) for word in words]
print("Porter Stemmer:", stemmed_words)
输出:
Porter Stemmer: ['run', 'fli', 'easili', 'studi']
缺点:
flies变成了flieasily变成了easili- 可能导致含义丢失
词形还原(Lemmatization)
Lemmatization 通过查找词典将单词转换为其词根形式,更加精确。
from nltk.stem import WordNetLemmatizer
import nltknltk.download('wordnet') # 下载 WordNet 语料库lemmatizer = WordNetLemmatizer()
words = ["running", "flies", "easily", "studies", "better"]lemmatized_words = [lemmatizer.lemmatize(word, pos="v") for word in words]
print("Lemmatization:", lemmatized_words)
输出:
Lemmatization: ['run', 'fly', 'easily', 'study', 'better']
优点:
flies被正确地还原为flystudies被正确地还原为studybetter仍保持其正确形式
2.4 停用词(Stopwords)处理
停用词(Stopwords)是指在文本处理中不重要的高频词,如 is, the, and,可以去除以减少模型计算量。
Python 示例
from nltk import word_tokenize
from nltk.corpus import stopwords # NLTK 提供的停用词库
import nltk
nltk.download('stopwords') # 下载停用词列表text = "This is a simple NLP example demonstrating stopwords removal."words = word_tokenize(text)filtered_words = [word for word in words if word.lower() not in stopwords.words('english')]
print("去除停用词后:", filtered_words)
输出:
去除停用词后: ['simple', 'NLP', 'example', 'demonstrating', 'stopwords', 'removal', '.']
注意:
is,a,this被去掉NLP等关键词被保留
2.5 难点总结
- 分词的不同方法:空格分词 vs. NLTK vs. spaCy,适用于不同场景。
- 词干提取 vs. 词形还原:Stemming 可能会导致错误,而 Lemmatization 更精确但需要额外的词性信息。
- 停用词的处理:某些 NLP 任务(如情感分析)可能需要保留停用词。
2.6 课后练习
练习 1:文本清理
清理以下文本,去掉 HTML 标签、特殊字符、数字,并转换为小写:
text = "Visit our <b>website</b>: https://example.com!!! Call us at 987-654-3210."
练习 2:使用 spaCy 进行分词
使用 spaCy 对以下文本进行分词:
text = "Natural Language Processing is fun and useful!"
练习 3:词形还原
使用 Lemmatization 处理以下单词:
words = ["running", "mice", "better", "studying"]
练习 4:去除停用词
从以下文本中去除停用词:
text = "This is an example sentence demonstrating stopwords removal."
相关文章:
自然语言处理NLP入门 -- 第二节预处理文本数据
在自然语言处理(NLP)中,数据的质量直接影响模型的表现。文本预处理的目标是清理和标准化文本数据,使其适合机器学习或深度学习模型处理。本章介绍几种常见的文本预处理方法,并通过 Python 代码进行示例。 2.1 文本清理…...
02.10 TCP之文件传输
1.思维导图 2.作业 服务器代码: #include <stdio.h> #include <string.h> #include <unistd.h> #include <stdlib.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <pthread.h> …...
基于STM32的ADS1230驱动例程
自己在练手项目中用到了ADS1230,根据芯片手册自写的驱动代码,已测可用,希望对将要用到ADS1230芯片的人有所帮助。 芯片:STM32系列任意芯片、ADS1230 环境:使用STM32CubeMX配置引脚、KEIL 部分电路: 代码…...
Bro想要玩github api
Bro想要在vscode 和 rest client插件的帮助下,修改我的github个人信息 ### 先安装REST client插件 ### 文件名test-github.http ### bro需要自己在github develop setting 获得token ### ref link: https://docs.github.com/en/authentication/keeping-your-accoun…...
idea插件开发,如何获取idea设置的系统语言
手打不易,如果转摘,请注明出处! 注明原文:https://zhangxiaofan.blog.csdn.net/article/details/145578160 版本要求 大于 2024.3 错误用法 网上有的说使用:UIUtil com.intellij.util.ui.UIUtil 代码示例…...
怎麼使用靜態住宅IP進行多社媒帳號管理
隨著社交媒體平臺的多樣化,很多人發現一個社媒帳號已經無法滿足需求。以下是幾個常見場景: 企業需求:企業可能需要在不同平臺上運營多個品牌帳號,為每個市場地區單獨設立帳號。個人需求:一些自由職業者或內容創作者可…...
InfiniBand与IP over InfiniBand(IPOIB):实现高性能网络通信的底层机制
在现代高性能计算(HPC)和数据中心环境中,网络通信的效率和性能至关重要。InfiniBand(IB)作为一种高性能的串行计算机总线架构,以其低延迟、高带宽和高可靠性而广泛应用于集群计算和数据中心。IP over InfiniBand(IPOIB)则是在InfiniBand网络上实现IP协议的一种方式,它…...
掌握 PHP 单例模式:构建更高效的应用
在 PHP 应用开发中,资源的高效管理至关重要。单例模式是一种能够帮助我们实现这一目标的设计模式。本文将深入探讨单例模式的概念、工作原理以及在 PHP 项目中何时应该(或不应该)使用它。 什么是单例模式? 单例模式是一种设计模…...
实现限制同一个账号最多只能在3个客户端(有电脑、手机等)登录(附关键源码)
如上图,我的百度网盘已登录设备列表,有一个手机,2个windows客户端。手机设备有型号、最后登录时间、IP等。windows客户端信息有最后登录时间、操作系统类型、IP地址等。这些具体是如何实现的?下面分别给出android APP中采集手机信…...
Python入门全攻略(四)
函数 初识函数 函数:封装具有某种功能的代码块。 函数定义 使用def关键字来定义函数 # 定义函数 def 函数名(): 代码块 # 调用函数 函数名() 函数参数 def 函数名(形参) 代码块 # 调用 函数名(实参) 位置参数 按参数顺序传参 def func(a, b): print(a b)…...
Ubuntu 22.04 - OpenLDAP安装使用(服务器+LAM+客户端)
csdn你…怎么不自动保存了很崩溃啊啊啊啊,我记得发现没保存之后我又改了一遍然后保存了,怎么现在又没了啊啊啊啊,过了这么久我都不记得了啊啊啊啊啊 参考 在 Ubuntu 22.04|20.04|18.04 上安装 OpenLDAP 和 phpLDAPadmin 在 Ubuntu 22.04|20…...
Linux ARM64 将内核虚拟地址转化为物理地址
文章目录 前言一、通用方案1.1 kern_addr_valid1.2 __pa 二、ARM64架构2.1 AT S1E1R2.2 is_kernel_addr_vaild2.3 va2pa_helper 三、demo演示参考资料 前言 本文介绍一种通用的将内核虚拟地址转化为物理地址的方案以及一种适用于ARM64 将内核虚拟地址转化为物理地址的方案&…...
使用 Visual Studio Code (VS Code) 开发 Python 图形界面程序
安装Python、VS Code Documentation for Visual Studio Code Python Releases for Windows | Python.org 更新pip >python.exe -m pip install --upgrade pip Requirement already satisfied: pip in c:\users\xxx\appdata\local\programs\python\python312\lib\site-pa…...
图像处理篇---基本OpenMV图像处理
文章目录 前言1. 灰度化(Grayscale)2. 二值化(Thresholding)3. 掩膜(Mask)4. 腐蚀(Erosion)5. 膨胀(Dilation)6. 缩放(Scaling)7. 旋转…...
一文讲清springboot所有注解
Spring Boot 注释是提供有关 Spring 应用程序信息的元数据。 基于 Spring 构建,涵盖其所有功能, Spring Boot 因其生产就绪环境而迅速成为开发人员的最爱,它允许开发人员直接专注于逻辑,而无需配置和设置的麻烦。 Spring Boot 是一…...
pytest测试专题 - 1.1 运行pytest
<< 返回目录 1 pytest学习笔记 - 1.1 运行pytest 1.1 运行pyest 在命令行执行pytest --help usage: pytest [options] [file_or_dir] [file_or_dir] [...] ... ...1.1.1 pytest不携带参数 pytest不带参数时,会扫描当前目录下的所有目录、子目录中符合测试用…...
Java多线程——线程池的使用
线程饥饿死锁 在单线程的Executor中,如果任务A将任务B提交给同一个Executor,并且等待任务B的结果,就会引发死锁线程池中所有正在执行任务的线程由于等待其他仍处于工作队列中的任务而阻塞 执行时间较长的任务 执行时间较长的任务不仅会造成…...
NO.15十六届蓝桥杯备战|while循环|六道练习(C++)
while循环 while语法形式 while 语句的语法结构和 if 语句⾮常相似,但不同的是 while 是⽤来实现循环的, if 是⽆法实现循环的。 下⾯是 while 循环的语法形式: //形式1 while ( 表达式 )语句; //形式2 //如果循环体想包含更多的语句&a…...
DeepSeek 从入门到精通学习指南,2025清华大学《DeepSeek从入门到精通》正式发布104页pdf版超全解析
DeepSeek 是一款强大的 AI 搜索引擎,广泛应用于企业级数据检索和分析。无论您是初学者还是有经验的用户,掌握 DeepSeek 的使用都能为您的工作带来极大的便利。本文将从入门到精通,详细介绍如何学习和使用 DeepSeek。 链接: https://pan.baid…...
2025年SEO自动优化工具
随着2025年互联网的快速发展,越来越多的企业和个人意识到,拥有一个排名靠前的网站对于吸引客户、增加流量、提高转化率至关重要。而要想让自己的网站脱颖而出,获得更多曝光,最重要的一项工作就是进行SEO优化。传统的SEO优化方式通…...
基于Uniapp开发HarmonyOS 5.0旅游应用技术实践
一、技术选型背景 1.跨平台优势 Uniapp采用Vue.js框架,支持"一次开发,多端部署",可同步生成HarmonyOS、iOS、Android等多平台应用。 2.鸿蒙特性融合 HarmonyOS 5.0的分布式能力与原子化服务,为旅游应用带来…...
全球首个30米分辨率湿地数据集(2000—2022)
数据简介 今天我们分享的数据是全球30米分辨率湿地数据集,包含8种湿地亚类,该数据以0.5X0.5的瓦片存储,我们整理了所有属于中国的瓦片名称与其对应省份,方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...
最新SpringBoot+SpringCloud+Nacos微服务框架分享
文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的,根据Excel列的需求预估的工时直接打骨折,不要问我为什么,主要…...
什么是库存周转?如何用进销存系统提高库存周转率?
你可能听说过这样一句话: “利润不是赚出来的,是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业,很多企业看着销售不错,账上却没钱、利润也不见了,一翻库存才发现: 一堆卖不动的旧货…...
UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)
UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中,UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化…...
Docker 本地安装 mysql 数据库
Docker: Accelerated Container Application Development 下载对应操作系统版本的 docker ;并安装。 基础操作不再赘述。 打开 macOS 终端,开始 docker 安装mysql之旅 第一步 docker search mysql 》〉docker search mysql NAME DE…...
适应性Java用于现代 API:REST、GraphQL 和事件驱动
在快速发展的软件开发领域,REST、GraphQL 和事件驱动架构等新的 API 标准对于构建可扩展、高效的系统至关重要。Java 在现代 API 方面以其在企业应用中的稳定性而闻名,不断适应这些现代范式的需求。随着不断发展的生态系统,Java 在现代 API 方…...
Python 训练营打卡 Day 47
注意力热力图可视化 在day 46代码的基础上,对比不同卷积层热力图可视化的结果 import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms from torch.utils.data import DataLoader import matplotlib.pypl…...
MySQL的pymysql操作
本章是MySQL的最后一章,MySQL到此完结,下一站Hadoop!!! 这章很简单,完整代码在最后,详细讲解之前python课程里面也有,感兴趣的可以往前找一下 一、查询操作 我们需要打开pycharm …...
沙箱虚拟化技术虚拟机容器之间的关系详解
问题 沙箱、虚拟化、容器三者分开一一介绍的话我知道他们各自都是什么东西,但是如果把三者放在一起,它们之间到底什么关系?又有什么联系呢?我不是很明白!!! 就比如说: 沙箱&#…...
