利用Python进行文本预处理的过程(英文)

文本清理的主要目标是什么?

数据质量改进:文本数据通常包含错误、不一致和不相关的内容。清理有助于确保数据准确、可靠和一致。

降噪:文本数据中的噪声可能包括特殊字符、HTML 标签、标点符号和其他对分析或建模目标无益的元素。清洁可以消除或减少这种噪音。

标准化:文本清理通常包括标准化文本,例如将所有文本转换为小写,以确保一致性并防止与案例相关的问题影响分析或建模。

标记化:标记化是文本清理的关键部分。它涉及将文本分解为单独的单词或标记,从而使分析或处理文本数据变得更加容易。

停用词删除:停用词是诸如“the”、“and”或“in”之类的常见单词,在文本清理过程中经常被删除,因为它们对许多任务来说没有重要意义。

词干提取和词形还原:这些技术将单词简化为其词根形式,有助于对相似的单词进行分组。词干提取和词形还原对于文本分析任务特别有用,其中单词变体应被视为同一个单词。

处理缺失数据:文本数据可能包含缺失值或不完整的句子。文本清理可能涉及填充缺失数据或解决不完整文本的策略。

重复数据删除:删除重复或接近重复的文本条目对于确保数据完整性并防止分析或建模中的偏差至关重要。

处理嘈杂的文本:嘈杂的文本数据可能包括拼写错误、缩写或非标准语言用法。文本清理策略有助于减轻此类噪音的影响。

文本清理是任何文本分析或 NLP 项目中的关键步骤。清洗后的文本数据的质量直接影响后续分析或建模任务的准确性和有效性。因此,理解和应用适当的文本清理技术对于从文本数据中获取有意义的见解至关重要。

1、删除HTML标签和特殊字符

HTML 标签和特殊字符在基于 Web 的文本数据中很常见。删除这些元素对于确保文本的可读性和可分析性至关重要。正则表达式可用于识别和消除 HTML 标签,而标点符号、符号或表情符号等特殊字符可被删除或替换为空格。

import re
def remove_heml_tags(text):
    clean_text = re.sub(r'[^a-zA-Z0-9\s]','',text)
    return clean_text
def remove_special_characters(text):
    clean_text = re.sub(r'[^a-zA-Z0-9\s]','',text)
    return clean_text

2. 标记化

标记化是将文本分割成单个单词或标记的过程。这是大多数文本分析任务的基本步骤。标记化将文本分解为其组成部分,并促进单词的计数和分析。

3、大小写转换

def str_lower(text):
    return text.lower()

4、删除停用词(可以使用停用词表,然后遍历删除)

from nltk.tokenize import word_tokenize
def tokenize_text(text):
    tokens = word_tokenize(text)
    return tokens

5、词干提取和词形还原

词干提取和词形还原是将单词还原为词根形式的技术,有助于对相似的单词进行分组。词干提取更具侵略性,可能会产生非字典单词,而词形还原则产生有效单词。

import nltk.stem.porter as pt
import nltk.stem.lancaster as lc
import nltk.stem.snowball as sb

def stem_text(tokens):
    # 波特词干提取器  (偏宽松)
    stemmer = pt.PorterStemmer()
    # 朗卡斯特词干提取器   (偏严格)
    stemmer = lc.LancasterStemmer()
    # 思诺博词干提取器   (偏中庸)
    stemmer = sb.SnowballStemmer(language='english')
    r = stemmer.stem(tokens) # 词干提取
    return r

words = ['table', 'probably', 'wolves', 
	'playing', 'is', 'the', 'beaches', 
	'grouded', 'dreamt', 'envision']
for word in words:
    print(stem_text(word))
import nltk.stem as ns
# 词性还原器
def lemmatizer_text(tokens):
    lemmatizer = ns.WordNetLemmatizer()
    n_lemm=lemmatizer.lemmatize(tokens, pos='n')
    v_lemm=lemmatizer.lemmatize(tokens, pos='v')
    return n_lemm,v_lemm

words = ['table', 'probably', 'wolves', 
	'playing', 'is', 'the', 'beaches', 
	'grouded', 'dreamt', 'envision']
for word in words:
    print(lemmatizer_text(word))

6、处理缺失数据

文本数据可能包含缺失值或不完整的句子。使用占位符填充缺失值或优雅地处理缺失数据等策略对于完整的管道至关重要。
这些基本的文本清理技术是更高级预处理步骤的构建块,并且是为分析、建模和其他自然语言处理任务准备文本数据的基础。选择应用哪种技术取决于文本数据的具体要求和特征以及分析或建模项目的目标。

7、删除重复文本

def remove_duplicates(texts):
    unique_texts = list(set(texts))
    return unique_texts

8、处理文本中的噪声

嘈杂的文本数据可能包括拼写错误、缩写、非标准语言用法和其他不规则行为。解决此类噪音对于确保文本分析的准确性至关重要。可以应用拼写检查、更正和针对特定噪声模式的自定义规则等技术。

from spellchecker import SpellChecker
from nltk.tokenize import word_tokenize

def correct_spelling(text):
    spell = SpellChecker()
    tokens = word_tokenize(text)
    corrected_tolens = [spell.correction(word) for word in tokens]
    corrected_text = ''.join(corrected_tolens)
    return corrected_text
correct_spelling('Heloo world, I love China!')

除了拼写检查和更正之外,还有其他几种处理嘈杂文本的策略:
正则表达式模式:制作正则表达式(regex)来识别、替换或删除嘈杂文本的特定模式。例如,您可以使用正则表达式来查找和更正标准日期格式、电子邮件地址或 URL。
自定义规则:定义自定义规则或字典来解决特定于域的噪音。例如,如果您正在处理医学文本,您可能会制定法规来规范医学缩写。
异常值检测:识别并标记明显偏离预期分布的文本数据,这可能表明异常值或错误。然后可以根据需要审查和纠正异常值。

import re
def clean_custom_patterns(text):
    '清理Email网址'
    clean_text = re.sub(r'\S+@\S+','[email]',text)
    return clean_text
clean_custom_patterns('XXXXX@qq.com')

9、处理编码问题

编码问题可能会导致文本处理过程中出现不可读的字符或错误。确保文本正确编码(例如,UTF-8)对于防止与字符编码相关的问题至关重要。

def fix_encoding(text):
    try:
        decoded_text = text.encode('utf-8').decode('utf-8')
    except UnicodeDecodeError:
        decoded_text = 'Encoding Error'
    return decoded_text

10、删除空白

def remove_whitespace(text):
    cleaned_text = ' '.join(text.split())
    return cleaned_text
remove_whitespace('   Hello world, I love China!   ')

11、处理数字数据

根据您的分析目标,您可能需要处理文本数据中的数字。选项包括将数字转换为单词(例如,“5”到“five”)或用占位符替换数字以专注于文本内容。

import inflect
def to_digit(digit):
    i = inflect.engine()
    if digit.isdigit():
        output = i.number_to_words(digit)
    else:
        output = digit
    return output
 
input_text = ["1","two","3"]
for word in input_text:
    print(to_digit(word))

12、处理文本语言识别

from langdetect import detect
def detec_language(text):
    try:
        language = detect(text)
    except:
        language = 'unknown'
    return language

s1 = "本篇博客主要介绍两款语言探测工具,用于区分文本到底是什么语言,"
s2 = 'We are pleased to introduce today a new technology – Record Matching –that automatically finds relevant historical records for every family tree on MyHerit'
s3 = "Javigator:Java代码导读及分析管理工具的设计"

s = [s1,s2,s3]
for language in s:
    print(detec_language(language))

13、处理不平衡数据

使用smote来平衡数据

from imblearn.over_sampling import SMOTE
def balance_text_data(X,y):
    smote = SMOTE(sampling_strategy='auto')
    X_resampled, y_resampled = smote.fit_resample(X,y)
    return X_resampled,y_resampled

14、处理文本长度变化

文本数据的长度通常会有所不同,极端的变化会影响文本分析算法的性能。根据您的分析目标,您可能需要规范文本长度。技术包括:
Padding:向较短的文本样本添加标记,使它们的长度与较长的样本相等。这通常用于文本分类等需要固定输入长度的任务。
文本摘要:通过生成简洁的摘要来减少较长文本的长度对于信息检索或摘要任务非常有用。

15、处理偏见和公平

在文本数据中,可能存在与性别、种族或其他敏感属性相关的偏见。解决这些偏见对于确保NLP应用的公平性至关重要。技术包括消除词嵌入偏差和使用重新加权损失函数来解决偏差。

def debias_word_embeddings(embeddings, gender_specific_words):
    # Implement a debiasing technique to reduce gender bias in word embedding
    pass

16、处理大文本语料库

数据流、批处理和并行化可用于高效地清理和处理大量文本数据。

from multiprocessing import Pool
def parallel_process_text(data, cleaning_function, num_workers):
    with Pool(num_workers) as pool:
        cleaned_data = pool.map(cleaning_function, data)
    return cleaned_data

17、处理多语言文本数据

文本数据可以是多语言的。处理多语言文本数据时,应用特定于语言的清理和预处理技术非常重要。spacy和NLTK等库支持多种语言,可用于对各种语言的文本进行分词、词形还原和清理。

18、使用特定领域的术语处理文本数据

文本数据通常包含医学、法律或者金融等专业领域的特定领域术语,考虑到领域知识来预处理此类文本数据至关重要,创建用于处理特定领域术语的自定义词典和规则可以提高文本数据的质量。

19、处理长文档的文本数据

长文档(例如研究论文或法律文档)由于其长度可能会给文本分析带来了挑战,文本摘要或文档分块等技术可以提取关键信息或将长文档分解为可管理的部分以进行分析:

from gensim.summarization import summarize
# 需要 pip install gensim==3.8.1,注意版本!!
def summarize_long_document(text, ratio=0.2):
    summary = summarize(text, ratio=ratio)
    return summary

20、处理带有时间参考的文本数据

包含时间引用(例如日期或者时间戳)的文本数据可能需要进行特殊处理。我们可以提取和标准化与时间相关的信息,将其转换为标准格式,或使用它创建时间序列数据以进行时间序列分析。

总结

这些先进的文本清理技术解决了不同文本数据场景中的特定挑战。技术的选择应由文本数据的特征和项目的目标决定。请记住,有效的文本清理是一个迭代过程,持续评估和调整清理管道对于保持数据质量并在文本分析和 NLP 工作中取得有意义的结果至关重要。
可用于文本清理的库有:

  • NLTK:NLTK是Python中用于自然语言处理的综合库。它提供了用于文本清理、标记化、词干提取、词形还原等的各种模块。
  • spacy:是一个强大的NLP库,提供高效的表计划、词形还原、词性标注和命名实体识别,以其速度和准确性而闻名。
  • TextBlob:是一个用于处理文本数据的简单库,它提供易于使用的文本清理、词性标注和情感分析功能。
  • re:正则表达式对于删除特殊字符、提取特定模式和清理文本数据非常有用。
  • DataWrangler:是斯坦福大学的一款工具,提供基于 Web 的界面,用于清理和转换杂乱的数据(包括文本)。它通过可视化方法提供交互式数据清理。
  • OpenNLP:Apache OpenNLP 是一个用于自然语言处理的开源库。它包括用于标记化、句子分割和词性标记的预训练模型和工具。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于springboot实现图书进销存管理系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现图书进销存管理系统演示 摘要 随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。本文介绍了图书进销存管理系统的开发全过程。通过分析图书进销存管理系统管理的不足,创建了一个计算机管理图书进销…

QML QtObject轻量级非可视化元素

QtObject 理论1. 父指针形式代指子类2. 自定义组件中定义一些私有属性 理论 QtObject类型是一个非常轻量级且非可视元素,它只包含objectName属性,其本质上是QObject。 用途一般是两个: 父指针形式代指子类;自定义组件中定义一些…

Java基于SpringBoot+Vue的蜗牛兼职网系统的研究与实现

博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇…

Python零基础从小白打怪升级中~~~~~~~多线程

线程安全和锁 一、全局解释器锁 首先需要明确的一点是GIL并不是Python的特性,它是在实现Python解析器(CPython)时所引入的一个概念。 GIL全称global interpreter lock,全局解释器锁。 每个线程在执行的时候都需要先获取GIL,保证同一时刻只…

MySQL(2024.4.17)

目录 1. 什么是MySQL的MVCC机制? 2. 如何理解InnoDB的Next-Key Lock机制? 3. 快照读和当前读的区别? 4. 如何在SQL语句中触发当前读? 5. MySQL默认的隔离级别是什么? 6. 如何避免在使用当前读时可能出现的死锁问…

Docker部署metahuman-stream数字人系统

metahuman-stream是基于ernerf模型的流式数字人,实现音视频同步对话。 metahuman-stream xtts-streaming-server srs 部署 srs # rtmpserver docker run -it -d \ -p 1935:1935 -p 1985:1985 -p 8080:8080 -p 8000:8000/udp -p 10080:10080/udp \ --name srs \ reg…

Postgresql源码(126)TupleStore使用场景与原理分析

相关 《Postgresql源码(125)游标恢复执行的原理分析》 《Postgresql游标使用介绍(cursor)》 总结 开源PG中使用tuple store来缓存tuple集,默认使用work_mem空间存放,超过可以落盘。在PL的returns setof场景…

基于51单片机的步进电机调速系统设计

基于51单片机的步进电机调速系统 (仿真+程序+原理图+设计报告) 功能介绍 具体功能: 1.按键可以控制电机正、反转,加、减速,停止; 2.一位7段数码管实时显示档位&#xf…

6个免费的伪原创工具,轻松生成原创文章

如今,内容创作已经成为许多人关注的焦点。然而,随之而来的是创作压力和时间成本的增加。为了解决这些问题,越来越多的人开始寻找一些伪原创工具来帮助他们生成原创文章,其中免费的伪原创工具成为了热门选择之一。这些免费的伪原创…

建都寿春的袁术兴亡史

三国(220年-280年)是中国历史上位于汉朝之后,晋朝之前的一段历史时期。这一个时期,先后出现了曹魏、蜀汉、东吴三个主要政权。袁术的地盘很小,为了在三国时期能够立足? 事实上,袁术巅峰时期的地盘并不小,而…

类和对象中-运算符重载

在C中,有些成员函数如果我们不去显示定义,编译器会自动生成 会自动生成的特殊函数: 他们不能定义为全局函数,必须是类成员员函数(特别是拷贝赋值重载) 下面介绍默认生成函数的作用,特点 构造 …

工作流JBPM流程图说明

文章目录 5☃️ 相关概念6 ☃️流程图说明6.0 ❄️❄️快速上手6.1 ❄️❄️活动Activity / 节点Node6.1.1 start 开始活动6.1.2 end 结束活动6.1.3 task 任务活动6.1.4 decision 判断活动6.1.5 fork/join 分支/聚合活动 6.2 ❄️❄️流转 Transition / 连线 (单向箭…

Python相关性分析

分析连续变量之间线性相关程度的强弱,并用适当的统计指标表示出来的过程称为相关分析。 可以直接绘制散点图,或者绘制散点图矩阵,或者计算相关系数来进行相关分析。 相关系数的计算如下所示: 示例数据: 计算百合酱蒸…

云服务器安装Mysql、MariaDB、Redis、tomcat、nginx

前置工作 进入根目录 cd / 都在/usr/local/src文件夹) 上传压缩包 rz 压缩包 Mysql 1.下载并安装MySQL官方的 Yum Repository wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm rpm -ivh mysql-community-release-el7-5.noarch.rpm yum…

lua 光速入门

文章目录 安装注释字符串变量逻辑运算条件判断循环函数Table (表)常用全局函数模块化 首先明确 lua 和 js Python一样是动态解释性语言,需要解释器执行。并且不同于 Python 的强类型与 js 的弱类型,它有点居中,倾向于强类型。 安装 下载解释…

美易官方:人民币国际支付占比升至近5%

随着全球金融市场的不断发展和数字化进程的加速,人民币的国际支付地位逐渐提升,成为备受瞩目的焦点。最近的数据显示,人民币在国际支付中的占比已经升至近5%,自11月以来已成为第四大交易货币。这一变化不仅反映了中国经济的崛起和…

Python 密码学实用指南(全)

原文:zh.annas-archive.org/md5/fe5e9f4d664790ea92fb33d78ca9108d 译者:飞龙 协议:CC BY-NC-SA 4.0 前言 密码学在保护关键系统和敏感信息方面有着悠久而重要的历史。本书将向您展示如何使用 Python 加密、评估、比较和攻击数据。总的来说&…

MDK stm32怎么生成bin文件

第一种 D:\Keil_v5\ARM\ac5.6\bin\fromelf.exe --bin -o ../../Output/atk_f407.bin ../../Output/atk_f407.axf 空格解析 D:\Keil_v5\ARM\ac5.6\bin\fromelf.exe一个空格--bin一个空格-o两个空格../../Output/atk_f407.bin ../../Output/atk_f407.axf (注意后…

Rose中UML类图详解及画法

一、UML简介 UML(Unified Modeling Language)是一种用于软件系统建模的标准化工具,它提供了一套统一的符号和语法,用于描述、设计、构建和交流软件系统的结构和行为。UML广泛应用于软件开发领域,被视为一种通用的建模语…

【C语言】qsort()函数排序及其模拟实现,万物皆可排!

🔥博客主页🔥:【 坊钰_CSDN博客 】 欢迎各位点赞👍评论✍收藏⭐ 目录 1. 函数介绍 2. qsort举例排列整型变量 3. qsort举例排列结构型变量 3.1 按名字排序 3.1.1 srtcmp函数 3.2 按年龄排序 4. qsort函数模拟实现(采用冒泡的…
最新文章