使用 Python 进行自然语言处理第 3 部分:使用 Python 进行文本预处理

news2024/11/30 3:26:09

一、说明

        文本预处理涉及许多将文本转换为干净格式的任务,以供进一步处理或与机器学习模型一起使用。预处理文本所需的具体步骤取决于具体数据和您手头的自然语言处理任务。

        常见的预处理任务包括:

  • 文本规范化——将文本转换为标准表示形式,例如全部小写。
  • 删除停用词、标点符号、特殊单词或文本片段,例如井号标签、URL、表情符号、非 ASCII 字符等。
  • 词干提取——从文本单词中删除后缀
  • 词形化 - 将单词转化为它们的引理形式(引理是字典中存在的单词的形式)。
  • 拼写更正——更正任何拼写错误
  • 通过绘图进行探索性分析

        NLTK、SpaCy 等库提供内置的文本预处理功能。

二、文本预处理

2.1 文本预处理的好处

  • 降维:包含许多单词的文本文档可以表示为多维向量。文档的每个单词都是向量的维度之一。应用文本处理有助于删除对您所针对的实际 NLP 任务可能没有意义的单词,从而减少数据的维度,这反过来又有助于解决维数灾难问题并提高 NLP 任务的性能。

2.2 文本预处理

        下载到您的计算机并将其加载到 pandas 数据框中。如果使用 read_csv(),请使用编码 = 'latin-1'。数据集有很多列,我们只对这篇关于文本预处理的文章的原始推文列感兴趣。

# Read the dataset into a dataframe
import pandas as pd
train_data = pd.read_csv('Corona_NLP_train.csv',  encoding='latin-1')
train_data.head()

# Remove the columns not relevant to Text-Preprocessing Task
train_data = train_data.drop(['UserName', 'ScreenName', 'Location', 'TweetAt', 'Sentiment'], axis = 1)
train_data.columns

2.3 小写转换

#1. Case Conversion to Lower Case
train_data['OriginalTweet'] = train_data['OriginalTweet'].str.lower()
train_data.head()

2.4 删除停用词和标点符号

#Remove stop words and punctuation marks
#https://stackoverflow.com/questions/29523254/python-remove-stop-words-from-pandas-dataframe
import nltk
import string
from nltk.corpus import stopwords
stop_words = stopwords.words('english')
stopwordsandpunct = stop_words + list(string.punctuation)

train_data['OriginalTweet'] = train_data['OriginalTweet'].apply(lambda w:' '.join(w for w in w.split() if w not in stopwordsandpunct))
train_data['OriginalTweet']

2.5 删除 URL

# Remove URLs from all the tweets
import re
def remove_url(tweet):
    tweet = re.sub(r'\w+:\/{2}[\d\w-]+(\.[\d\w-]+)*(?:(?:\/[^\s/]*))*', '', tweet)
    return tweet

train_data['OriginalTweet'] = train_data['OriginalTweet'].apply(remove_url)
train_data['OriginalTweet'].head()

2.6 删除提及和井号标签

# remove mentions and hashtags
def remove_mentions_hashs(tweet):
    tweet = re.sub("@[A-Za-z0-9_]+","", tweet) #Remove mentions
    tweet = re.sub("#[A-Za-z0-9_]+","", tweet) #Remove hashtags
    return tweet

train_data['OriginalTweet'] = train_data['OriginalTweet'].apply(remove_mentions_hashs)
train_data['OriginalTweet'].head()

2.7 删除表情符号

# Removing emojis from tweets
# Source Credit: https://stackoverflow.com/a/49146722/330558
import re
def remove_emojis(tweet):
    pat = re.compile("["
                           u"\U0001F600-\U0001F64F"  # emoticons
                           u"\U0001F300-\U0001F5FF"  # symbols & pictographs
                           u"\U0001F680-\U0001F6FF"  # transport & map symbols
                           u"\U0001F1E0-\U0001F1FF"  # flags (iOS)
                           u"\U00002702-\U000027B0"
                           u"\U000024C2-\U0001F251"
                           "]+", flags=re.UNICODE)
    return pat.sub(r'', tweet)

train_data['OriginalTweet'] =train_data['OriginalTweet'].apply(remove_emojis)
train_data.head()

2.8 删除非 ASCII 字符

#https://docs.python.org/2/library/unicodedata.html#unicodedata.normalize
import unicodedata
def remove_nonascii(text):
    text = unicodedata.normalize('NFKD', text).encode('ascii', 'ignore').decode('utf-8', 'ignore')# apply compatibility decomposition
    return text
train_data['OriginalTweet'] = train_data['OriginalTweet'].apply(remove_nonascii)
train_data.head()

2.9 删除空字符串

import string
def remove_empty_strings1(tweet):
    tweet = re.sub(r"^\s+|\s+$", 'NaN', tweet)
    return tweet
train_data['OriginalTweet'] =train_data['OriginalTweet'].apply(remove_empty_strings1)

2.10 删除主题标签、URL 后删除所有包含 NaN 的行

train_data = train_data[train_data['OriginalTweet'] != 'NaN']

# Now resetting index of Data frame
train_data = train_data.reset_index(drop = True)

三、文本内容预处理

3.1 使用 TextBlob 进行拼写更正

# Spelling correction
import warnings
warnings.filterwarnings("ignore")
from textblob import TextBlob   
train_data['SpellCorrectedTweet'] = train_data['OriginalTweet'].apply(lambda x : str(TextBlob(x).correct()))
train_data.head()

3.2 使用 NLTK 的内置 Tokenizer 进行标记化

# Now we will perform tokenization
import nltk
from nltk import word_tokenize
tokenizer = nltk.tokenize.WhitespaceTokenizer()
def tokenize(text):
    return tokenizer.tokenize(text)

train_data['OriginalTweet'] = train_data['OriginalTweet'].apply(tokenize)
train_data['OriginalTweet'].head()

3.3 使用 NLTK 的 WordNetLemmatizer 进行词形还原

import nltk
tokenizer = nltk.tokenize.WhitespaceTokenizer()
lemmatizer = nltk.stem.WordNetLemmatizer()

def lemmatize(text):
    return [lemmatizer.lemmatize(w) for w in text]

train_data['OriginalTweet'] = train_data['OriginalTweet'].apply(lemmatize)
train_data.head()

3.4 使用 NLTK 的 PorterStemmer 进行词干提取

# Stemming
from nltk.stem import PorterStemmer
stemmer = PorterStemmer()

def stemming(text):
    return [stemmer.stem(w) for w in text]

train_data['OriginalTweet'] = train_data['OriginalTweet'].apply(stemming)
train_data.head()

3.5 计算推文中最常见的单词

# Counting most frequent words in tweets
#https://docs.python.org/3/library/itertools.html#itertools.chain
import itertools
import collections
all_tweets = list(train_data["OriginalTweet"])
all_tokens = list(itertools.chain(*all_tweets))
token_counts = collections.Counter(all_tokens)

# Print 10 most common words with their frequency
print(token_counts.most_common(10))

# Convert above words and frequencies to a dataframe
df = pd.DataFrame(token_counts.most_common(20), columns=['Token','Count'])
df.head()

# Plotting frequencies using Matplotlib barplot
import matplotlib.pyplot as plt
plt.rcParams["figure.figsize"] = (12,8)
df.sort_values(by = 'Count').plot.bar(x='Token', y='Count')
plt.title('Most Used Words')
plt.show()

四、总结

        本文总结出关于文本预处理的大多数处理方法。对于文本处理的实际过程,可以抽取某些过程进行整合处理。对于更加特殊的处理也可以特别处理。

        下一篇文章介绍文本表示技术:

使用 Python 进行自然语言处理第 4 部分:文本表示

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

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

相关文章

初识C语言·编译与链接

1 翻译环境和运行环境 C语言标准ANSI C 实现C语言代码的时候 一般需要经过两种环境,一是翻译环境,二是运行环境,计算机能识别的是二进制的指令,人写完代码后通过翻译环境,使代码变成计算机能读懂的可执行的机器指令&a…

伦敦金重点知识:控制亏损的方法

在很多人的预期中,伦敦金重点知识肯定是那些涉及市场分析的方法,那些方法能帮助投资者一把抓住交易机会,在市场中建立优势。但笔者要说的是,那些方法固然重要,但笔者认为还有更加重要的,那就是控制亏损。控…

大模型增量预训练新技巧:解决灾难性遗忘

大家好,目前不少开源模型在通用领域具有不错的效果,但由于缺乏领域数据,往往在一些垂直领域中表现不理想,这时就需要增量预训练和微调等方法来提高模型的领域能力。 但在领域数据增量预训练或微调时,很容易出现灾难性…

LLM大模型

LLM 学习链接 : 大语言模型 LLM行业背景和市场需求 大模型的涌现能力 大模型核心前沿 大模型应用范式和职业规划

大数据 - Spark系列《四》- Spark分布式运行原理

Spark系列文章: 大数据 - Spark系列《一》- 从Hadoop到Spark:大数据计算引擎的演进-CSDN博客 大数据 - Spark系列《二》- 关于Spark在Idea中的一些常用配置-CSDN博客 大数据 - Spark系列《三》- 加载各种数据源创建RDD-CSDN博客 目录 🍠…

200行C++代码写一个网络调试助手(TCP服务端TCP客户端)

前言 今天分享一个200行C代码写成的QT网络调试助手。 可以先看看效果 。 因为我不喜欢用QT Designer,因此我用的组件都是使用代码布局的,所以需要设计一下布局。 界面是参考的之前写的串口助手,就是把里面的逻辑改了改,因此外观…

关于网络面试题汇总

什么是TCP/IP五层模型?它们的作用是啥?基于TCP/IP实现的应用(层协议)有哪些? TCP/IP五层模型,从上向下分别是: 应用层:应用程序本身,应用层的作用是负责应用程序之间的…

比特币ETF广告战大爆发!

作者:秦晋 贝莱德主动发起广告攻势。 2月1日,据外媒Cryptoslate报道,贝莱德在提交给美国SEC的一份文件中显示,其提出一项在建筑物侧面投影比特币ETF广告计划。 据介绍,广告内容为:「IBIT」信号是一个以迈阿…

IP风险画像在企业网络安全中应用

随着企业数字化的不断深入,网络安全问题日益突显。IP风险画像作为一种综合性的网络安全工具,为企业提供了更全面的风险评估和防范手段。本文将结合一个实际案例,深入探讨IP风险画像在企业网络安全中的成功应用。 案例背景 一家大型金融机构…

VS2019 添加程序包

dotnet add package AlibabaCloud.SDK.Bailian20230601 来提示添加程序包 选择菜单栏 项目----管理NuGet程序包 输入程序包的名称,然后添加即可, 这只是给当前工程添加,并不是给VS添加,所以你打开新工程,需要使用的话…

详解WebRTC rtc::Thread实现

rtc::Thread介绍 rtc::Thread类不仅仅实现了线程这个执行器(比如posix底层调用pthread相关接口创建线程,管理线程等),还包括消息队列(message_queue)的实现,rtc::Thread启动后就作为一个永不停止的event l…

【图论】基环树

基环树其实并不是树,是指有n个点n条边的图,我们知道n个点n-1条边的连通图是树,再加一条边就会形成一个环,所以基环树中一定有一个环,长下面这样: 由基环树可以引申出基环内向树和基环外向树 基环内向树如…

【开源】WordPress一键崩溃宕机插件(整活娱乐)

插件介绍 可一键实现Wordpress崩溃宕机的整活向插件(请勿用于非法途径,仅供整活娱乐)。鼓励关注网站性能的提升,以提供更好的用户体验,提倡为用户提供良好体验和高效速度的原则。 介绍 长期以来,人们都在…

WordPress从入门到精通【安装部署】

初识WordPress WordPress,简称WP,其简称的由来是取英文单词“word”与“press”的首字母 WP中文官网 1WP主站(英文) 官方标称,已有43%的网站在使用WordPress WordPress亮点 WP使用PHP语言开发,兼容性极…

深度学习/自动驾驶数据集大集合(目标检测/图像分割/语义分割/图像分类/)

深度学习和自动驾驶技术的发展离不开高质量的数据集,这些数据集对于训练和验证各种自动驾驶算法和模型起着至关重要的作用。深度学习/自动驾驶数据集大集合是一项汇集了多种场景、多种数据类型的数据资源,旨在为深度学习和自动驾驶领域的研究者和从业者提…

设计模式-行为型模式(上)

行为型模式用于描述程序在运行时复杂的流程控制,即描述多个类或对象之间怎样相互协作共同完成单个对象都无法单独完成的任务,它涉及算法与对象间职责的分配。 行为型模式分为类行为模式和对象行为模式,前者采用继承机制来在类间分派行为&…

【服务器】RAID(独立磁盘冗余阵列)

RAID(独立磁盘冗余阵列) 一、RAID的介绍二、RAID的分类#2-1 RAID 02-2 RAID 1#2-3 RAID 32-4 RAID 52-5 RAID 62-6 RAID 10(先做镜像,再做条带化)2-7 RAID 01(先做条带,再做镜像)2-8 RAID比较 三、磁盘阵列…

CSDN文章导出工具

源码地址: github:https://github.com/lishuangquan1987/CSDNExportergitee:https://gitee.com/lishuangquan1987/csdnexporter 介绍 最近有CSDN博客导出来的需求,翻看了很多开源工具,都不能用或者不好用,于是决定自己做一个。…

机器学习6-逻辑回归

逻辑回归是机器学习中一种常用于二分类问题的监督学习算法。虽然名字中包含“回归”,但实际上它用于分类任务,特别是对于输出为两个类别的情况。逻辑回归通过使用 logistic 函数将输入映射到一个在0,1范围内的概率值,然后根据这个概率值进行分类。 以下是逻辑回归的基本概念…

线程池,定时器以及阻塞队列(生产者/消费者模型)

💓 博客主页:从零开始的-CodeNinja之路 ⏩ 收录专栏:线程池,定时器以及阻塞队列(生产者/消费者模型) 🎉欢迎大家点赞👍评论📝收藏⭐文章 实现线程池,定时器以及阻塞队列,生产者/消费者模型 线程池线程池…