NLP 梳理03 — 停用词删除和规范化

news2025/4/25 0:43:07

一、说明

前文我们介绍了标点符号删除、文本的大小写统一,本文介绍英文文章的另一些删除内容,停用词删除。还有规范化处理。

二、什么是停用词,为什么删除它们?

2.1 停用词的定义

停用词是语言中的常用词,通常语义意义不大,但经常使用。英文中的例子包括 “the”、“is”、“in”、“and”、“to” 等。

2.2 为什么要删除停用词?

删除停用词,有以下考虑:

  • 1 从增强模型性能上考虑
    停用词可能会在分析中引入噪声。
    删除它们使模型能够专注于有意义的单词,从而提高准确性。
  • 2 降维目的
    停用词会添加不必要的标记,从而增加数据集的大小。
    通过删除非索引字,可以降低特征空间的维数,从而提高模型的效率。
example_text = "The cat is sitting in the garden."
important_words = ["cat", "sitting", "garden"]  # Stopwords removed

三、归一化技术简介

文本处理中的规范化是将文本转换为一致的标准格式以减少可变性的过程。

3.1 归一化技术

1 删除多余的空格
单词之间的多个空格可能会导致分析过程中出现问题。规范化会删除这些多余的空格。
2. 将文本转换为一致的格式

将文本小写可确保一致性。
替换缩写(例如,将 “don’t” 替换为 “do not”)。

3.2 标准化的重要性

维护数据的完整性。
减少由文本格式变化引起的歧义。

example_text = "  This is    an example   text! "
normalized_text = "this is an example text"

四、使用 NLTK、spaCy 或自定义列表删除停用词

4.1 使用 NLTK 删除非索引字

I:下载 NLTK 资源

import nltk  

# Download necessary NLTK resources  
nltk.download('stopwords')  
nltk.download('punkt')
II:文本处理
from nltk.corpus import stopwords  

text = "The quick brown fox jumps over the lazy dog."  
words = nltk.word_tokenize(text)  # Tokenize the input text  
stop_words = set(stopwords.words('english'))  # Get the set of English stopwords  

# Filter out stopwords from the tokenized words  
filtered_words = [word for word in words if word.lower() not in stop_words]  

print("Original:", words)  
print("Filtered:", filtered_words)

输出:

Original: [‘The’, ‘quick’, ‘brown’, ‘fox’, ‘jumps’, ‘over’, ‘the’, ‘lazy’, ‘dog’, ‘.’]
Filtered: [‘quick’, ‘brown’, ‘fox’, ‘jumps’, ‘lazy’, ‘dog’, ‘.’]

4.2.使用 spaCy 删除停用词

import spacy

nlp = spacy.load("en_core_web_sm")

text = "The quick brown fox jumps over the lazy dog."
doc = nlp(text)
filtered_words = [token.text for token in doc if not token.is_stop]

print("Original:", [token.text for token in doc])
print("Filtered:", filtered_words)

输出:

Original: [‘The’, ‘quick’, ‘brown’, ‘fox’, ‘jumps’, ‘over’, ‘the’, ‘lazy’, ‘dog’, ‘.’]
Filtered: [‘quick’, ‘brown’, ‘fox’, ‘jumps’, ‘lazy’, ‘dog’, ‘.’]
示例 1:在数据集中实施停用词删除并规范化文本
在自然语言处理 (NLP) 中,预处理对于在分析之前提高文本数据的质量至关重要。本教程重点介绍如何使用 Python 和 NLTK 库实现非索引字删除和文本规范化。

  1. 设置和导入
    首先,确保导入必要的库并下载所需的 NLTK 数据。
import re  
import nltk  
from nltk.corpus import stopwords  

# Download necessary NLTK resources  
nltk.download('stopwords')  
nltk.download('punkt')
  1. 文本清理功能
    定义一个函数,该函数对文本执行多个预处理步骤:转换为小写、删除标点符号、分词和筛选出非索引字。
import string
import nltk

def remove_punctuation(text):
    return "".join(char for char in text if char not in string.punctuation)

def clean_text(text, stop_words):
    # Convert to lowercase
    text = text.lower()

    # Remove punctuation 
    text = remove_punctuation(text)
    
    # Remove punctuation  
    # text = re.sub(r'[\W_]+', ' ', text)

    # Tokenize text
    words = nltk.word_tokenize(text)

    # Remove stopwords
    filtered_words = [word for word in words if word not in stop_words]

    return " ".join(filtered_words)

五、删除停用词并规范化文本示例(1)

使用 NLTK 设置英文停用词,并将清理功能应用于每个示例文本。打印清理后的结果以进行比较。

sample_texts = [  
    "The quick brown fox jumps over the lazy dog.",  
    "This is an example of text preprocessing!",  
    "Stopword removal and normalization are essential steps in NLP."  
]


stop_words = set(stopwords.words('english'))  

for text in sample_texts:  
    cleaned_text = clean_text(text, stop_words)  
    print("Original:", text)  
    print("Cleaned:", cleaned_text)  
    print()
  1. 输出
    当您运行上述代码时,您将看到原始文本及其清理后的版本,展示了停用词删除和文本规范化的有效性。
Original: The quick brown fox jumps over the lazy dog.
Cleaned: quick brown fox jumps lazy dog

Original: This is an example of text preprocessing!
Cleaned: example text preprocessing

Original: Stopword removal and normalization are essential steps in NLP.
Cleaned: stopword removal normalization essential steps nlp

结果分析
观察如何删除 “the”、“is” 和 “and” 等非索引字。
请注意规范化的影响,例如一致的小写和删除标点符号。

五、删除停用词并规范化文本示例(2)

示例 2:试验 spaCy 的 Property属性is_stop
利用 spaCy 的内置功能来识别非索引字,深入了解文本预处理。

  1. 设置
    在开始之前,请确保您已安装 spaCy 并下载了英语模型。您可以在终端中使用以下命令执行此作:
pip install spacy  
python -m spacy download en_core_web_sm

设置 spaCy 后,您可以导入库并加载英文模型:

import spacy  

# Load the English NLP model  
nlp = spacy.load("en_core_web_sm")
  1. 文本分析
    定义一个函数,该函数处理输入文本并利用 spaCy 的属性is_stop来标识非索引字和非非停用词。
def identify_stopwords(text):  
    # Process the input text with spaCy  
    doc = nlp(text)  
    stopwords = [token.text for token in doc if token.is_stop]  
    non_stopwords = [token.text for token in doc if not token.is_stop]  
    
    return stopwords, non_stopwords

接下来,创建一个要分析的示例句子列表:

sample_sentences = [  
    "The quick brown fox jumps over the lazy dog.",  
    "This is another example for testing purposes.",  
    "Natural Language Processing is fascinating and powerful."  
]  


# Analyze each sentence for stopwords  
for sentence in sample_sentences:  
    stopwords, non_stopwords = identify_stopwords(sentence)  
    print(f"Original Sentence: {sentence}")  
    print(f"Stopwords: {stopwords}")  
    print(f"Non-Stopwords: {non_stopwords}")  
    print()

示例输出
当您运行代码时,输出将显示原始句子以及识别的停用词和非停用词,从而深入了解其重要性。

Original Sentence: The quick brown fox jumps over the lazy dog.
Stopwords: ['The', 'over', 'the']
Non-Stopwords: ['quick', 'brown', 'fox', 'jumps', 'lazy', 'dog', '.']

Original Sentence: This is another example for testing purposes.
Stopwords: ['This', 'is', 'another', 'for']
Non-Stopwords: ['example', 'testing', 'purposes', '.']

Original Sentence: Natural Language Processing is fascinating and powerful.
Stopwords: ['is', 'and']
Non-Stopwords: ['Natural', 'Language', 'Processing', 'fascinating', 'powerful', '.']

六、删除停用词并规范化文本示例(3)

示例 3:使用 spaCy 进行分词和语言分析
此 Python 脚本演示了使用 spaCy(一个强大的语言分析库)进行自然语言处理 (NLP)。该脚本执行标记化并从给定句子中提取各种语言特征。

加载 spaCy 的英语语言模型
nlp = spacy.load(“en_core_web_sm”)
加载小型英语模型 (en_core_web_sm),该模型提供预先训练的单词嵌入、POS 标记、依赖项解析等。
2. 处理文本

doc = nlp(“Big Brother is watching…probably on his new OLED TV.”)
函数nlp()处理文本并创建一个包含结构化语言数据的对象Doc。
3. 迭代标记并提取特征(使用适当的表格显示打印)

from tabulate import tabulate  # Install via: pip install tabulate

# Prepare data for tabulation
data = []
headers = ["Token", "Lemma", "POS", "Tag", "Dep", "Shape", "Alpha", "Stopword"]

for token in doc:
    data.append([
        token.text, token.lemma_, token.pos_, token.tag_, token.dep_,
        token.shape_, token.is_alpha, token.is_stop
    ])

# Print as a table
print(tabulate(data, headers=headers, tablefmt="fancy_grid"))

输出:

在这里插入图片描述

循环迭代文本中的每个标记(单词或标点符号)并打印以下属性:

token.text→ 原词
token.lemma_→ 单词 (lemma) 的基本形式
token.pos_→ 词性 (POS)
token.tag_→ 详细的 POS 标签
token.dep_→ 与根词的依赖关系
token.shape_→ Word 形状(例如,“Xxxx”代表“Apple”)
token.is_alpha→ 令牌是字母 ( 还是TrueFalse)
token.is_stop→ 令牌是停用词 ( 或TrueFalse)

七、结论

本教程介绍了停用词删除和规范化在文本预处理中的重要性。使用 NLTK 和 spaCy 等库,我们实施了实用的解决方案来清理和准备 NLP 任务的文本。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2342039.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用若依二次开发商城系统-1:搭建若依运行环境

前言 若依框架有很多版本,这里使用的是springboot3vue3这样的一个前后端分离的版本。 一.操作步骤 1 下载springboot3版本的后端代码 后端springboot3的代码路径,https://gitee.com/y_project/RuoYi-Vue 需要注意我们要的是springboot3分支。 先用g…

HarmonyOS-ArkUI: 组件内转场(transition)

什么是组件内转场 组件内转场指的是组件在触发转场的时机所具备的动画效果。转场的时机指的是,组件元素发生变化的时候,具体为: 组件被添加组件被删除组件可见性发生变化-Visibility这些场景有时候单纯的让其消失,出现,平移有时候视觉效果会比较突兀。我们可以利用组件内…

MVVM框架详解:原理、实现与框架对比

文章目录 1. 引言2. MVVM的基本概念3. MVVM的原理与实现3.1 数据绑定原理3.2 命令模式实现 4. MVVM的优势与局限性4.1 优势4.2 局限性 5. 常见MVVM框架对比5.1 MVVM Light5.2 Prism5.3 Caliburn.Micro5.4 MvvmCross5.5 ReactiveUI 6. 实际应用示例7. 最佳实践与注意事项7.1 MVV…

opencv--图像处理

这里所说的图像处理并不是专业术语&#xff0c;而是值开发人员对图像的处理技术方法。 教程 菜鸟教程 书籍推介--<opencv4.5 计算机视觉开发实践 基于vc>.朱文伟 获取图像数据 三种方式&#xff1a; cv::VideoCapture&#xff1a; OpenCV 提供的视频捕获类&#xff0…

达梦官方管理工具 SQLark——全面支持达梦、Oracle、MySQL、PostgreSQL 数据库!

SQLark 是一款面向信创应用开发者的数据库开发和管理工具&#xff0c;用于快速查询、创建和管理不同类型的数据库系统&#xff0c;已支持达梦、Oracle、MySQL数据库&#xff1b;在最新的 V3.4 版本中&#xff0c;SQLark 新增了对 PostgreSQL 的支持&#xff0c;兼容 PostgreSQL…

解读大型语言模型:从Transformer架构到模型量化技术

一、生成式人工智能概述 生成式人工智能&#xff08;Generative Artificial Intelligence&#xff09;是一种先进的技术&#xff0c;能够生成多种类型的内容&#xff0c;包括文本、图像、音频以及合成数据等。其用户界面的便捷性极大地推动了其广泛应用&#xff0c;用户仅需在…

理解计算机系统_网络编程(1)

前言 以<深入理解计算机系统>(以下称“本书”)内容为基础&#xff0c;对程序的整个过程进行梳理。本书内容对整个计算机系统做了系统性导引,每部分内容都是单独的一门课.学习深度根据自己需要来定 引入 网络是计算机科学中非常重要的部分,笔者过去看过相关的内…

栈和队列学习记录

一、栈 1.栈的概念 操作受限的线性表-----栈&#xff1a;栈只允许在表的一端进行插入和删除操作&#xff0c;这一端被称为栈顶&#xff08;Top&#xff09;&#xff0c;另一端则是栈底&#xff08;Bottom&#xff09;。这种受限的操作方式使得栈遵循后进先出&#xff08;LIFO…

React SSR + Redux 导致的 Hydration 报错踩坑记录与修复方案

一条“Hydration failed”的错误&#xff0c;让我损失了半天时间 背景 我在用 Next.js App Router Redux 开发一个任务管理应用&#xff0c;一切顺利&#xff0c;直到打开了 SSR&#xff08;服务端渲染&#xff09;&#xff0c;突然看到这个令人头皮发麻的报错&#xff1a; …

轻量级景好鼠标录制器

景好鼠标录制器&#xff08;详情请戳 官网&#xff09;是一款免费无广的键鼠动作录制/循环回放工具&#xff0c;轻松自动化应对一些重复繁琐的操作任务&#xff0c;如来回切换窗口、文档同一相对位置的复制粘贴等场景&#xff0c;兼容Win XP - 11 。毕竟此款本身主打简约类型&a…

leetcode--两数之和 三数之和

1.两数之和 给你一个下标从 1 开始的整数数组 numbers &#xff0c;该数组已按 非递减顺序排列 &#xff0c;请你从数组中找出满足相加之和等于目标数 target 的两个数。如果设这两个数分别是 numbers[index1] 和 numbers[index2] &#xff0c;则 1 < index1 < index2 …

FFMPEG-视频解码-支持rtsp|rtmp|音视频文件(低延迟)

本人亲测解码显示对比延迟达到7到20毫秒之间浮动兼容播放音视频文件、拉流RTSP、RTMP等网络流 基于 Qt 和 FFmpeg 的视频解码播放器类,继承自 QThread,实现了视频流的解码、播放控制、帧同步和错误恢复等功能 工作流程初始化阶段: 用户设置URL和显示尺寸 调用play()启动线程解…

openEuler安装nvidia驱动【详细版】

注意&#xff1a;在 openEuler 24.03 LTS 系统中安装 NVIDIA 驱动&#xff08;RTX 3090&#xff09;需要禁用默认的 Nouveau 驱动并手动安装官方驱动。 一、准备工作 系统更新与依赖安装 更新系统并安装必要依赖包&#xff1a;sudo dnf update -y sudo dnf install gcc make k…

基于Python爬虫的豆瓣电影信息爬取(可以根据选择电影编号得到需要的电影信息)

# 豆瓣电影信息爬虫(展示效果如下图所示:) 这是一个功能强大的豆瓣电影信息爬虫程序,可以获取豆瓣电影 Top 250 的详细信息。 ## 功能特点 - 自动爬取豆瓣电影 Top 250 的所有电影信息 - 支持分页获取,每页 25 部电影,共 10 页 - 获取每部电影的详细信息,包括: - 标题…

基于PaddleOCR对图片中的excel进行识别并转换成word优化(二)

0、原图 一、优化地方 计算行的时候&#xff0c;采用概率分布去统计差值概率比较大的即为所要的值。 def find_common_difference(array):"""判断数组中每个元素的差值是否相等&#xff0c;并返回该差值:param array: 二维数组&#xff0c;其中每个元素是一个…

Nvidia显卡架构演进

1 简介 显示卡&#xff08;英语&#xff1a;Display Card&#xff09;简称显卡&#xff0c;也称图形卡&#xff08;Graphics Card&#xff09;&#xff0c;是个人电脑上以图形处理器&#xff08;GPU&#xff09;为核心的扩展卡&#xff0c;用途是提供中央处理器以外的微处理器帮…

STM32F407使用ESP8266实现阿里云OTA(上)

文章目录 前言一、阿里云OTA二、命令调试1.升级包上传2.OTA订阅和上报的主题3.命令调试4.具体效果三、所用到的工具和材料前言 在经过前面对ESP8266、SD卡、FLASH的了解之后,终于要进入我们的正题了,就是使用STM32和ESP8266实现阿里云的OTA。这一功能并不复杂,只是需要主要…

测试基础笔记第九天

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一、数据类型和约束1.数据类型2.约束3.主键4.不为空5.唯一6.默认值 二、数据库操作1.创建数据库2.使用数据库3.修改数据库4.删除数据库和查看所有数据库5.重点&…

Python爬虫与代理IP:高效抓取数据的实战指南

目录 一、基础概念解析 1.1 爬虫的工作原理 1.2 代理IP的作用 二、环境搭建与工具选择 2.1 Python库准备 2.2 代理IP选择技巧 三、实战步骤分解 3.1 基础版&#xff1a;单线程免费代理 3.2 进阶版&#xff1a;多线程付费代理池 3.3 终极版&#xff1a;Scrapy框架自动…

Unity 将Excel表格中的数据导入到Mysql数据表中

1.Mysql数据表users如下&#xff1a; 2.即将导入的Excel表格如下&#xff1a; 3.代码如下&#xff1a; using System; using System.Data; using System.IO; using Excel; using MySql.Data.MySqlClient; using UnityEngine; using UnityEditor;public class ImportExcel {// …