使用 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 string

def 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 re

def remove_special_characters_numbers(text):
    # Regular expression to remove non-alphabetic characters and numbers
    return 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 re

def 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 re

def 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 re

def 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 TextBlob

def 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_tokenize

def 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 PorterStemmer

def 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 WordNetLemmatizer

def 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.mfbz.cn/a/80520.html

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

相关文章

智能电视与win10电脑后续无法实现DLNA屏幕共享

问题背景&#xff1a; 我用的是TCL电视&#xff0c;但是并不是最新&#xff0c;打开的方式是U盘->电脑&#xff0c;各位看自己情况&#xff0c;很多问题都大概率是智能电视问题。 情景假设&#xff1a; 假设你已经完成原先智能电视该有的步骤&#xff0c;通过DLNA&#xf…

前馈神经网络正则化例子

直接看代码&#xff1a; import torch import numpy as np import random from IPython import display from matplotlib import pyplot as plt import torchvision import torchvision.transforms as transforms mnist_train torchvision.datasets.MNIST(root…

链游再进化 Web3版CSGO来袭

过去几年&#xff0c;游戏开发者们一直希望借Web3这个价值流通网络&#xff0c;改造传统游戏的经济系统&#xff0c;将虚拟资产的掌管权交给用户&#xff0c;让资产自由地在市场流通。 Web3游戏发展史上&#xff0c;涌现过CryptoKitties、Axie Infinity两大爆款&#xff0c;但…

爬虫框架- feapder + 爬虫管理系统 - feaplat 的学习简记

文章目录 feapder 的使用feaplat 爬虫管理系统部署 feapder 的使用 feapder是一款上手简单&#xff0c;功能强大的Python爬虫框架 feapder 官方文档 文档写的很详细&#xff0c;可以直接上手。 基本命令&#xff1a; 创建爬虫项目 feapder create -p first-project创建爬虫 …

LRU算法源码实现

算法介绍&#xff1a; 最近最久未使用&#xff08;Least Recently Used LRU&#xff09;算法是⼀种缓存淘汰策略。该算法的思路是&#xff0c;将最近一段时间内最久未使用的页面置换出去。 升级版LRUK算法见 基于LRU-K算法设计本地缓存实现流量削峰https://blog.csdn.net/l…

Deep Learning With Pytorch - 最基本的感知机、贯序模型/分类、拟合

文章目录 如何利用pytorch创建一个简单的网络模型&#xff1f;Step1. 感知机&#xff0c;多层感知机&#xff08;MLP&#xff09;的基本结构Step2. 超平面 ω T ⋅ x b 0 \omega^{T}xb0 ωT⋅xb0 or ω T ⋅ x b \omega^{T}xb ωT⋅xb感知机函数 Step3. 利用感知机进行决策…

虚拟机问题

虚拟机无法识别USB设备 经排查为VMware USB Arbitration Service 没有启动,但是VMware USB Arbitration Service依赖于VMware Workstation Server启动 VMware USB Arbitration Service(VMUSBArbService)是由 VMware 虚拟化软件提供的一个服务,用于协调和管理主机系统上的…

Flink CDC系列之:基于 Flink CDC 构建 MySQL 和 Postgres 的 Streaming ETL

Flink CDC系列之&#xff1a;基于 Flink CDC 构建 MySQL 和 Postgres 的 Streaming ETL 一、技术路线二、MySQL数据库建表三、PostgreSQL数据库建表四、在 Flink SQL CLI 中使用 Flink DDL 创建表五、关联订单数据并且将其写入 Elasticsearch 中六、Kibana查看商品和物流信息的…

leetcode611. 有效三角形的个数(java)

有效三角形的个数 有效三角形的个数排序加二分排序 双指针 上期算法 有效三角形的个数 给定一个包含非负整数的数组 nums &#xff0c;返回其中可以组成三角形三条边的三元组个数。 示例 1: 输入: nums [2,2,3,4] 输出: 3 解释:有效的组合是: 2,3,4 (使用第一个 2) 2,3,4 (使…

如何修复损坏的DOC和DOCX格式Word文件?

我们日常办公中&#xff0c;经常用到Word文档。但是有时会遇到word文件损坏、无法打开的情况。这时该怎么办&#xff1f;接着往下看&#xff0c;小编在这里就给大家带来最简单的Word文件修复方法&#xff01; 很多时候DOC和DOCX Word文件会无缘无故的损坏无法打开&#xff0c;一…

【C++ 记忆站】引用

文章目录 一、引用概念二、引用特性1、引用在定义时必须初始化2、一个变量可以有多个引用3、引用一旦引用一个实体&#xff0c;再不能引用其他实体 三、常引用四、使用场景1、做参数1、输出型参数2、大对象传参 2、做返回值1、传值返回2、传引用返回 五、传值、传引用效率比较六…

【C语言】每日一题(找到所有数组中消失的数字)

找到所有数组中消失的数字&#xff0c;链接奉上。 这里简单说一下&#xff0c;因为还没有接触到动态内存&#xff0c;数据结构&#xff0c;所以知识有限&#xff0c;也是尽力而为&#xff0c;结合题库的评论区找到了适合我的解法&#xff0c;以后有机会&#xff0c;会补上各种…

图数据库_Neo4j中文版_Centos7.9安装Neo4j社区版3.5.9_基于jdk1.8---Neo4j图数据库工作笔记0012

由于我们在国内使用啊,具体还是要用中文版滴,找了好久这个neo4j,原来还是有中文版的, https://we-yun.com/doc/neo4j-chs/ 中文版下载地址在这里: 所有版本都在这里了,需要哪个自己去下载就可以了,要注意下载以后,参考: https://we-yun.com/blog/prod-56.html 在这个位置下载…

画质提升+带宽优化,小红书音视频团队端云结合超分落地实践

随着视频业务和短视频播放规模不断增长&#xff0c;小红书一直致力于研究&#xff1a;如何在保证提升用户体验质量的同时降低视频带宽成本&#xff1f; 在近日结束的音视频技术大会「LiveVideoStackCon 2023」上海站中&#xff0c;小红书音视频架构视频图像处理算法负责人剑寒向…

2023.8 - java - 对象和类

public class Dog {String breed;int size;String colour;int age;void eat() {}void run() {}void sleep(){}void name(){} } 一个类可以包含以下类型变量&#xff1a; 局部变量&#xff1a;在方法、构造方法或者语句块中定义的变量被称为局部变量。变量声明和初始化都是在方…

实现Java异步调用的高效方法

文章目录 为什么需要异步调用&#xff1f;Java中的异步编程方式1. 使用多线程2. 使用Java异步框架 异步调用的关键细节结论 &#x1f389;欢迎来到Java学习路线专栏~实现Java异步调用的高效方法 ☆* o(≧▽≦)o *☆嗨~我是IT陈寒&#x1f379;✨博客主页&#xff1a;IT陈寒的博…

LabVIEW开发最小化5G系统测试平台

LabVIEW开发最小化5G系统测试平台 由于具有大量存储能力和数据的应用程序的智能手机的激增&#xff0c;当前一代产品被迫提高其吞吐效率。正交频分复用由于其卓越的品质&#xff0c;如单抽头均衡和具有成本效益的实施&#xff0c;现在被广泛用作物理层技术。这些好处是以严格的…

Azure存储访问层

blob数据的热访问层&#xff0c;冷访问层和存档访问层 Azure Blob 存储是一种托管对象存储服务&#xff0c;可用于存储和访问大量非结构化数据&#xff0c;如文本和二进制数据。Azure Blob 存储提供了三个不同层级的访问方式&#xff0c;以适应不同数据的使用模式和成本效益需…

手把手教学——终端工具xshell与文件传输工具xftp使用步骤及详解

前言 xshell是一款常用于连接本地linux服务以及云服务器的终端远程连接工具&#xff0c;该款终端工具常搭配远程文件传输工具xftp一起使用&#xff0c;由于还有很多小伙伴还不知道这两款终端工具的使用流程及步骤&#xff0c;Darren洋在这里给小伙伴们进行详细讲解。 一、下载工…

proteus结合keil-arm编译器构建STM32单片机项目进行仿真

proteus是可以直接创建设计图和源码的&#xff0c;但是源码编译它需要借助keil-arm编译器&#xff0c;也就是我们安装keil-mdk之后自带的编译器。 下面给出一个完整的示例&#xff0c;主要是做一个LED灯闪烁的效果。 新建工程指定路径&#xff0c;Schematic,PCB layout都选择默…
最新文章