使用 Python 在 NLP 中进行文本预处理

一、说明

        自然语言处理 (NLP) 是人工智能 (AI) 和计算语言学的一个子领域,专注于使计算机能够理解、解释和生成人类语言。它涉及计算机和自然语言之间的交互,允许机器以对人类有意义和有用的方式处理分析和响应文本或口头数据。

二、重要术语

        NLP中使用的一些重要术语如下:

  1. 公文:在NLP中,文档是指单个文本单元,通常表示为段落,句子甚至单个单词。它是 NLP 任务中文本数据的基本构建块。例如,在包含客户评论的数据集中,每个单独的评论都被视为一个文档。
  2. 语料库: 语料库是为语言模型训练或分析而组装的文档集合。它是所研究语言或领域的代表性样本。例如,用于情绪分析的语料库可能包含从各种来源收集的数千条客户评论。
  3. 词汇:语料库的词汇是指整个文档集合中存在的独特单词集。它基本上表示在特定上下文中使用的单词。例如,医学文章语料库的词汇可能包括“疾病”、“治疗”和“症状”等词。
  4. 分割:分割是将文本块(例如段落)分解为单个句子的过程。正确的分割对于各种NLP任务至关重要,例如机器翻译或情感分析。例如,考虑文本:“我喜欢NLP。这太令人着迷了。分割会把它分成两句话:“我喜欢NLP”和“它很迷人”。
  5. 标记化:标记是将句子或文本分解为单个单词或子单词的过程,称为标记。每个令牌代表一个有意义的单元,它是 NLP 预处理的基本步骤。例如,句子“自然语言处理是惊人的!”将被标记化为以下标记:[“自然”,“语言”,“处理”,“是”,“惊人”,“!”]。
  6. 停用词:停用词是语言中经常出现的常见,对于 NLP 任务没有重要意义或信息。它们通常在预处理过程中被移除,以减少噪声并提高计算效率。英语中停用词的例子包括“the”、“and”、“is”等。
  7. 干提取:词干提取是一种用于通过删除后缀将单词简化为其基本形式或根形式的技术。目标是简化单词,以便将同一根词的变体视为相同。但是,词干提取可能并不总是产生有意义或有效的单词。例如,在词干提取后,单词“running”和“runs”都将简化为“run”。
  8. 形还原:形还原类似于词干提取,但通过将单词简化为其基本形式或字典形式(引理)更进一步。此过程可确保生成的单词具有有效的含义。例如,在词形还原之后,“运行”和“运行”都将被词形还原为“运行”。
  9. NER 标记:命名实体识别 (NER) 是对文本中特定实体(例如人名、地点、组织、日期等)进行识别和分类的过程。这些实体通常使用适当的标签进行标记,例如“人员”、“位置”、“组织”等。例如,在句子“Apple Inc.总部位于库比蒂诺”中,NER标记会将“Apple Inc.”标记为组织,将“Cupertino”标记为位置。
  10. POS 标记:性 (POS) 标记是为句子中的每个单词分配语法标签的过程,指示其句法角色和类别,例如名词、动词、形容词等。例如,在句子“她吃苹果”中,POS标签会将“她”标记为代词,将“吃”标记为动词,将“苹果”标记为名词。
  11. 块:分块涉及将句子中的相邻单词分组为有意义的单元,例如名词短语或动词短语。这些块表示句法单元,可以帮助进一步分析或理解句子的结构。例如,在句子“大猫坐在垫子上”中,分块会将“大猫”识别为名词短语,将“坐在垫子上”标识为动词短语。

三、文本预处理

        文本预处理是自然语言处理 (NLP) 中基本且必不可少的步骤。其主要目的是清理原始文本数据并将其转换为适合分析和预测建模的可呈现形式。以下是一些常见的文本预处理技术:

        小写是将所有文本转换为小写的过程。这是 NLP 中常见的预处理步骤,可确保一致性并避免与区分大小写相关的问题。Python 中小写过程的实现如下:

def lowercase_text(text):return text.lower()# Test the function
input_text = "The Quick Brown Fox JUMPS Over 2 Lazy Dogs."
output_text = lowercase_text(input_text)
print(output_text)

        在上面的代码中,该函数采用输入文本,并使用 Python 中可用于字符串的方法将其转换为小写。小写很有用,因为它有助于标准化文本数据并将同一单词的不同形式视为相同。例如,“Hello”、“hello”和“HELLO”在小写后都会转换为“hello”。这对于文本规范化和通过减少词汇量和以不区分大小写的方式处理单词来提高 NLP 模型的准确性至关重要。lowercase_text()lower()

        删除标点符号涉及从文本中删除所有标点符号(例如逗号、句点、感叹号)。标点符号删除通常作为文本预处理的一部分执行,以清理 NLP 任务的数据。

import stringdef remove_punctuations(text):translator = str.maketrans('', '', string.punctuation)return text.translate(translator)# Test the function
input_text = "Hello, my name is John! How are you?"
output_text = remove_punctuations(input_text)
print(output_text)

        在上面的代码中,我们使用函数从输入文本中删除所有标点符号。该函数使用模块中的常量来获取包含所有标点字符的字符串。然后,它使用该方法创建一个转换表,并从输入文本中删除标点符号表中的所有字符。remove_punctuations()string.punctuationstringstr.maketrans()translate()

        删除特殊字符和数字涉及从文本中删除任何非字母字符(例如符号、数字)。此步骤对于文本预处理非常有用,可以专注于文本内容,而不会干扰数字或其他非字母字符。

import redef remove_special_characters_numbers(text):# Regular expression to remove non-alphabetic characters and numbersreturn re.sub(r'[^a-zA-Z\s]', '', text)# Test the function
input_text = "Hello, my name is Saif Ali and my age is 25! I was born on 1997-01-10."
output_text = remove_special_characters_numbers(input_text)
print(output_text)

        在上面的代码中,我们使用函数从输入文本中删除所有特殊字符和数字。该函数使用(正则表达式)模块中的方法和正则表达式来匹配任何不是大写或小写字母或空格的字符。然后,它将这些字符替换为空字符串,有效地将它们从文本中删除。remove_special_characters_numbers()re.sub()rer'[^a-zA-Z\s]'

        在处理从网页或 HTML 文档中提取的文本数据时,删除 HTML 标记非常重要。HTML 标记对文本内容没有贡献,需要将其删除以进行进一步的文本分析。

import redef remove_html_tags(text):clean_text = re.sub(r'<.*?>', '', text)return clean_text# Test the function
input_text = "<p>Hello, <b>my name</b> is <i>John</i>!</p>"
output_text = remove_html_tags(input_text)
print(output_text)

        在上面的代码中,该函数使用正则表达式 () 从输入文本中删除所有 HTML 标记。正则表达式匹配以“<”开头,后跟任何字符 (“.*”)并以“>”结尾的任何模式。这将有效地删除任何 HTML 标记并保留文本内容。remove_html_tags()re.sub()r'<.*?>'

        在处理来自网页或社交媒体的文本数据时,删除 URL 是一个常见的预处理步骤,其中 URL 不会向文本分析添加任何有意义的信息。

import redef remove_urls(text):clean_text = re.sub(r'http\S+|www\S+', '', text)return clean_text# Test the function
input_text = "Check out my LinkedIn account: https://www.linkedin.com/in/imsaifali/"
output_text = remove_urls(input_text)
print(output_text)

        在上面的代码中,该函数使用正则表达式 () 从输入文本中删除任何 URL。正则表达式匹配任何以“http://”或“https://”开头的URL(http后跟非空格字符)或以“www”开头的URL。(www 后跟非空格字符)。这有效地从文本中删除了任何 URL。remove_urls()re.sub()r'http\S+|www\S+'\S+\S+

        删除多余空格是一个文本预处理步骤,涉及删除文本中单词之间的任何不必要或过多的空格。这可确保文本干净且一致。

import redef remove_extra_spaces(text):clean_text = re.sub(r'\s+', ' ', text)return clean_text.strip()# Test the function
input_text = "Hello    there,     how    are   you?"
output_text = remove_extra_spaces(input_text)
print(output_text)

        在上面的代码中,该函数使用正则表达式 () 删除一个或多个空格字符(空格、制表符、换行符)的任何序列,并将它们替换为单个空格。正则表达式匹配一个或多个空格字符。然后,该方法用于删除任何前导空格或尾随空格。remove_extra_spaces()re.sub()r'\s+'strip()

        扩展收缩是将单词的收缩形式(例如,“不要”,“不能”)转换为其完整形式(例如,“不要”,“不能”)的过程。此步骤对于标准化文本和避免 NLP 任务中的潜在歧义非常有用。

contraction_mapping = {"ain't": "is not","aren't": "are not","can't": "cannot","couldn't": "could not","didn't": "did not","doesn't": "does not","don't": "do not","hadn't": "had not","hasn't": "has not","haven't": "have not","he's": "he is","he'll": "he will","he'd": "he would","i've": "I have","i'll": "I will","i'd": "I would","i'm": "I am","isn't": "is not","it's": "it is","it'll": "it will","it'd": "it would","let's": "let us","mightn't": "might not","mustn't": "must not","shan't": "shall not","she's": "she is","she'll": "she will","she'd": "she would","shouldn't": "should not","that's": "that is","there's": "there is","they're": "they are","they've": "they have","they'll": "they will","they'd": "they would","we're": "we are","we've": "we have","we'll": "we will","we'd": "we would","weren't": "were not","what's": "what is","won't": "will not","wouldn't": "would not","you're": "you are","you've": "you have","you'll": "you will","you'd": "you would","isn't": "is not","it's": "it is","that's": "that is","there's": "there is","here's": "here is","who's": "who is","what's": "what is","where's": "where is","when's": "when is","why's": "why is","how's": "how is",
}def expand_contractions(text):words = text.split()expanded_words = [contraction_mapping[word.lower()] if word.lower() in contraction_mapping else word for word in words]return ' '.join(expanded_words)# Test the function
input_text = "I can't believe it's already Friday!"
output_text = expand_contractions(input_text)
print(output_text)

        在上面的代码中,我们使用函数来扩展输入文本中的收缩。该函数利用包含常见收缩及其完整形式的字典。它将输入文本拆分为单词,并检查每个单词(小写)是否存在于 .如果是这样,它将用其完整形式替换合同形式。expand_contractions()contraction_mappingcontraction_mapping

        文本更正涉及修复文本数据中的常见拼写错误或其他错误。拼写检查和更正对于提高 NLP 任务的文本数据质量至关重要。

        对于文本更正,我们将使用库,它为拼写检查和更正等文本处理任务提供了方便的界面。确保您已安装并安装。如果没有,请使用以下命令安装它们:TextBlobtextblobnltk

pip install textblob nltk

现在,让我们更正文本:

from textblob import TextBlobdef correct_text(text):blob = TextBlob(text)corrected_text = blob.correct()return str(corrected_text)# Test the function
input_text = "I am lerning NLP with Pyhton."
output_text = correct_text(input_text)
print(output_text)

        在上面的代码中,我们使用函数来更正输入文本。该函数使用库中的类从输入文本创建对象。然后将该方法应用于对象,该对象会自动执行拼写更正和其他文本更正。correct_text()TextBlobtextblobTextBlobcorrect()TextBlob

        标记化是将文本分解为单个单词或标记的过程。这是 NLP 中必不可少的预处理步骤,为进一步分析准备文本。我们将使用该库,它提供了各种标记化方法。确保您已安装。如果没有,请使用以下命令安装它:nltknltk

pip install nltk

        现在,让我们执行标记化:

import nltk
nltk.download('punkt')
from nltk.tokenize import word_tokenizedef tokenize_text(text):return word_tokenize(text)# Test the function
input_text = "The quick brown fox jumps over the lazy dog."
output_tokens = tokenize_text(input_text)
print(output_tokens)

        在上面的代码中,我们使用函数来标记输入文本。该函数利用模块中的方法将文本拆分为单个单词(标记)。tokenize_text()word_tokenize()nltk.tokenize

        停用词删除是一个文本预处理步骤,其中从文本中删除语义含义很少或没有语义的常用词(称为停用词),以减少干扰并专注于更有意义的单词。对于停用词删除,我们将使用该库,该库提供了各种语言的常见停用词列表。确保您已安装。如果没有,请使用以下命令安装它:nltknltk

pip install nltk

        现在,让我们执行停用词删除:

import nltk
nltk.download('punkt')
nltk.download('stopwords')
from nltk.corpus import stopwords
stop_words = set(stopwords.words('english'))def remove_stopwords(text):words = text.split()filtered_words = [word for word in words if word.lower() not in stop_words]return ' '.join(filtered_words)# Test the function
input_text = "The quick brown fox jumps over the lazy dog."
output_text = remove_stopwords(input_text)
print(output_text)

        在上面的代码中,我们使用函数从输入文本中删除停用词。该函数首先将文本拆分为单个单词,然后过滤掉从库中的语料库获取的英语停用词集中存在的单词。remove_stopwords()stopwordsnltk

        词干提取是一种文本预处理技术,旨在通过删除后缀将单词简化为其基本形式或根形式。这个过程有助于减少词汇量,并将同一单词的不同形式视为相同。对于词干分析,我们将使用该库,该库提供各种词干分析器,包括波特词干分析器。确保您已安装。如果没有,请使用以下命令安装它:nltknltk

pip install nltk

        现在,让我们执行词干提取:

import nltk
nltk.download('punkt')
from nltk.stem import PorterStemmerdef perform_stemming(text):stemmer = PorterStemmer()words = text.split()stemmed_words = [stemmer.stem(word) for word in words]return ' '.join(stemmed_words)# Test the function
input_text = "jumps jumping jumped"
output_text = perform_stemming(input_text)
print(output_text)

        在上面的代码中,我们使用函数将词干提取应用于输入文本。该函数利用了来自模块,这是一种广泛使用的词干提取算法。它将输入文本拆分为单个单词,对每个单词应用词干提取,然后将词干词干连接回单个字符串。perform_stemming()PorterStemmernltk.stem

        词形还原是一种文本预处理技术,它使用词汇和形态分析将单词简化为其基本形式或根形式(引理)。与词干提取不同,词形还原可确保生成的单词是语言中的有效单词。对于词形还原,我们将使用库,它提供了一个 WordNet 词形还原器。确保您已安装。如果没有,请使用以下命令安装它:nltknltk

pip install nltk

        现在,让我们执行词形还原:

import nltk
nltk.download('punkt')
nltk.download('wordnet')
from nltk.stem import WordNetLemmatizerdef perform_lemmatization(text):lemmatizer = WordNetLemmatizer()words = text.split()lemmatized_words = [lemmatizer.lemmatize(word) for word in words]return ' '.join(lemmatized_words)# Test the function
input_text = "jumps jumping jumped"
output_text = perform_lemmatization(input_text)
print(output_text)

        在上面的代码中,我们使用函数将词形还原应用于输入文本。该函数利用来自模块,该模块基于WordNet词汇数据库。它将输入文本拆分为单个单词,对每个单词应用词形还原,然后将词形还原的单词连接回单个字符串。perform_lemmatization()WordNetLemmatizernltk.stem

四、结论

        文本预处理是自然语言处理 (NLP) 中的关键步骤,涉及将原始文本数据转换为适合分析和建模的干净且规范化的格式。基本技术包括小写、标记化、删除特殊字符和数字、删除停用词、词干提取、词形还原、删除 HTML 标记、删除 URL、扩展收缩和使用 TextBlob 等工具进行文本更正。

        通过采用这些文本预处理技术,研究人员和从业者可以提高NLP任务的有效性,例如情感分析,信息检索,主题建模和文本分类。特定预处理步骤的选择可能会有所不同,具体取决于数据的性质和手头 NLP 应用程序的要求。高效的文本预处理在从文本数据中获得准确而有意义的见解方面起着至关重要的作用。

赛义夫·阿里

       

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot代理访问本地静态资源400 404

SpringBoot代理访问静态资源400 404 背景&#xff1a;pdf文件上传到linux服务器上&#xff0c;使用SpringBoot代理访问问题&#xff1a;访问过程中可能会出现400、404问题 前提&#xff1a;保证有文件&#xff0c;并且文件路径正确 SpringBoot如何配置静态资源代理&#xff0…

[python] Kmeans文本聚类算法+PAC降维+Matplotlib显示聚类图像

0 前言 本文主要讲述以下几点&#xff1a; 1.通过scikit-learn计算文本内容的tfidf并构造N*M矩阵(N个文档 M个特征词)&#xff1b; 2.调用scikit-learn中的K-means进行文本聚类&#xff1b; 3.使用PAC进行降维处理&#xff0c;每行文本表示成两维数据&…

8 种主流数据迁移工具技术选型

前言 最近有些小伙伴问我&#xff0c;ETL数据迁移工具该用哪些。 ETL(是Extract-Transform-Load的缩写&#xff0c;即数据抽取、转换、装载的过程)&#xff0c;对于企业应用来说&#xff0c;我们经常会遇到各种数据的处理、转换、迁移的场景。 今天特地给大家汇总了一些目前…

pdf怎么合并在一起?这几个合并方法了解一下

pdf怎么合并在一起&#xff1f;在日常工作、学习和生活中&#xff0c;我们常常会遇到需要将多个PDF文件合并成一个文件的情况。比如&#xff0c;在学术论文写作中&#xff0c;我们可能需要将多篇论文合并成一个文件进行打印和提交。在工作中&#xff0c;我们可能需要将多个报告…

STM32——SPI外设总线

SPI外设简介 STM32内部集成了硬件SPI收发电路&#xff0c;可以由硬件自动执行时钟生成、数据收发等功能&#xff0c;减轻CPU的负担 可配置8位/16位数据帧、高位先行/低位先行 时钟频率&#xff1a; fPCLK / (2, 4, 8, 16, 32, 64, 128, 256) 支持多主机模型、主或从操作 可…

耕地单目标语义分割实践——Pytorch网络过程实现理解

一、卷积操作 &#xff08;一&#xff09;普通卷积&#xff08;Convolution&#xff09; &#xff08;二&#xff09;空洞卷积&#xff08;Atrous Convolution&#xff09; 根据空洞卷积的定义&#xff0c;显然可以意识到空洞卷积可以提取到同一输入的不同尺度下的特征图&…

excel常见的数学函数篇2

一、数学函数 1、ABS(number)&#xff1a;返回数字的绝对值 语法&#xff1a;ABS(数字)&#xff1b;返回数字的绝对值&#xff1b;若引用单元格&#xff0c;把数字换为单元格地址即可 2、INT(number)&#xff1a;向小取整 语法&#xff1a;INT(数字)&#xff1b;若引用单元格…

Element Plus el-table 数据为空时自定义内容【默认为 No Data】

1. 通过 Table 属性设置 <div class"el-plus-table"><el-table empty-text"暂无数据" :data"tableData" style"width: 100%"><el-table-column prop"date" label"Date" width"180" /&g…

Python Opencv实践 - 图像仿射变换

import cv2 as cv import numpy as np import matplotlib.pyplot as pltimg cv.imread("../SampleImages/pomeranian.png", cv.IMREAD_COLOR) rows,cols img.shape[:2] print(img.shape[:2])#使用getAffineTransform来获得仿射变换的矩阵M #cv.getAffineTransform(…

Bingchat和ChatGPT主要区别

Bing Chat由chatgpt GPT-4技术提供支持&#xff0c;这是流行的ChatGPT的最新语言模型。Bing Chat通过更具交互性和上下文联动的响应来优化搜索引擎。它允许用户提出问题并获得更人性化、精确化或创造力的答案。用户还可以在答案末尾查看的参考来源。该工具可以充当个人研究、计…

大数据平台是什么意思?有什么用?一般包含哪些模块?

大数据时代&#xff0c;还有很多人不知道大数据平台是什么意思&#xff1f;有什么用&#xff1f;一般包含哪些模块&#xff1f;今天我们就一起来简单了解一下吧&#xff01;仅供参考哦&#xff01; 大数据平台是什么意思&#xff1f;有什么用&#xff1f;一般包含哪些模块&am…

Lnton羚通关于Optimization在【PyTorch】中的基础知识

OPTIMIZING MODEL PARAMETERS &#xff08;模型参数优化&#xff09; 现在我们有了模型和数据&#xff0c;是时候通过优化数据上的参数来训练了&#xff0c;验证和测试我们的模型。训练一个模型是一个迭代的过程&#xff0c;在每次迭代中&#xff0c;模型会对输出进行猜测&…

工程项目管理系统源码+功能清单+项目模块+spring cloud +spring boot em

​ 工程项目管理软件&#xff08;工程项目管理系统&#xff09;对建设工程项目管理组织建设、项目策划决策、规划设计、施工建设到竣工交付、总结评估、运维运营&#xff0c;全过程、全方位的对项目进行综合管理 工程项目各模块及其功能点清单 一、系统管理 1、数据字典&#…

衣服材质等整理(时常更新)

参考文章&图片来源 https://zhuanlan.zhihu.com/p/390341736 00. 天然纤维 01. 化学纤维 02. 聚酯纤维&#xff08;即&#xff0c;涤纶&#xff09; 一种由有机二元酸和二元醇通过化学缩聚制成的合成纤维。具有出色的抗皱性和保形性&#xff0c;所制衣物在穿着过程中不容…

解决git reset --soft HEAD^撤销commit时报错

今天在使用git回退功能的时候&#xff0c;遇到以下错误&#xff1a; 解决git reset --soft HEAD^撤销commit时报错 问题&#xff1a; 在进行完commit后&#xff0c;想要撤销该commit&#xff0c;于是使用了git reset --soft HEAD^命令&#xff0c;但是出现如下报错&#xff1…

android 12系统加上TTS引擎

系统层修改&#xff1a; 1.frameworks/base/packages/SettingsProvider/res/values/defaults.xml <string name"def_tts"></string> 2.frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java loadString…

206. 反转链表

给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5] 输出&#xff1a;[5,4,3,2,1]示例 2&#xff1a; 输入&#xff1a;head [1,2] 输出&#xff1a;[2,1]示例 3&#xff1a; 输入&a…

学习左耳听风栏目90天——第七天 7/90(学习左耳朵耗子的工匠精神,对技术的热爱)【每个程序员都该知道的事】

每个程序员都该知道的事 每个程序员都应该要读的书每个搞计算机专业的学生应有的知识LinkedIn 高效的代码复查技巧编程语言和代码质量的研究报告 每个程序员都应该要读的书 每个搞计算机专业的学生应有的知识 LinkedIn 高效的代码复查技巧 编程语言和代码质量的研究报告

MySQL中的锁机制

抛砖引玉&#xff1a;多个查询需要在同一时刻进行数据的修改&#xff0c;就会产生并发控制的问题。我们需要如何避免写个问题从而保证我们的数据库数据不会被破坏。 锁的概念 读锁是共享的互相不阻塞的。多个事务在听一时刻可以同时读取同一资源&#xff0c;而相互不干扰。 写…