NLP任务中的文本预处理步骤、工具和示例

本文涉及的产品
NLP自然语言处理_高级版,每接口累计50万次
NLP自然语言处理_基础版,每接口每天50万次
NLP 自学习平台,3个模型定制额度 1个月
简介: NLP任务中的文本预处理步骤、工具和示例

数据是新的石油,文本是我们需要更深入钻探的油井。文本数据无处不在,在实际使用之前,我们必须对其进行预处理,以使其适合我们的需求。对于数据也是如此,我们必须清理和预处理数据以符合我们的目的。这篇文章将包括一些简单的方法来清洗和预处理文本数据以进行文本分析任务。

我们将在Covid-19 Twitter数据集上对该方法进行建模。这种方法有3个主要组成部分:

首先,我们要清理和过滤所有非英语的推文/文本,因为我们希望数据保持一致。

其次,我们为复杂的文本数据创建一个简化的版本。

最后,我们将文本向量化并保存其嵌入以供将来分析。

640.jpg

第1部分:清理和过滤文本

首先,为了简化文本,我们要将文本标准化为仅为英文字符。此函数将删除所有非英语字符。

defclean_non_english(txt):
txt=re.sub(r'\W+', ' ', txt)
txt=txt.lower()
txt=txt.replace("[^a-zA-Z]", " ")
word_tokens=word_tokenize(txt)
filtered_word= [wforwinword_tokensifall(ord(c) <128forcinw)]
filtered_word= [w+" "forwinfiltered_word]
return"".join(filtered_word)

我们甚至可以通过删除停止词来做得更好。停词是出现在英语句子中对意思没有多大帮助的常见词。我们将使用nltk包来过滤stopwords。由于我们的主要任务是使用word cloud将tweet的主题可视化,所以这一步需要避免使用“the,”“a,”等常见单词。但是,如果你的任务需要完整的句子结构,比如下一个单词预测或语法检查,你可以跳过这一步。

importnltknltk.download('punkt') #onetimeexecutionnltk.download('stopwords')
fromnltk.corpusimportstopwordsstop_words=set(stopwords.words('english'))defclean_text(english_txt):
try:
word_tokens=word_tokenize(english_txt)
filtered_word= [wforwinword_tokensifnotwinstop_words]
filtered_word= [w+" "forwinfiltered_word]
return"".join(filtered_word)
except:
returnnp.nan

对于tweets,在清理之前我们需要考虑一个特殊的特性:提及@。您的数据可能具有这样的特殊特性(也可能没有),这是具体情况,而不是普遍要求。因此,在盲目地清理和预处理数据之前,要充分了解您的数据!

defget_mention(txt):
mention= []
foriintxt.split(" "):
iflen(i) >0andi[0] =="@":
mention.append(i)
return"".join([mention[i] +", "ifi!=len(mention) -1elsemention[i] foriinrange(len(mention))]

以前,我们清理非英文字符。现在,我们删除非英语文本(语义上)。Langdetect是一个python包,它允许检查文本的语言。它是谷歌的语言检测库从Java到Python的直接端移植。

fromlangdetectimportdetectdefdetect_lang(txt):
try:
returndetect(txt)
except:
returnnp.nan

然后我们过滤掉所有不是“en”语言的列。

第2部分:简化复杂的数据

对于数值数据,良好的处理方法是缩放,标准化和规范化。此资源有助于理解并将这些方法应用于您的数据。在本文的讨论范围内,由于其他资源在此方面做得很好,因此我将不做进一步讨论。

对于分类数据,有许多方法。两种名义上的方法是标签编码器(为每个标签分配一个不同的编号)和一种热编码(以0和1的向量表示)。有关这些分类值的方法的更多详细信息,请参见此处。与我提到的这两种资源相比,此资源非常丰富,具有更多类型的编码。

这篇文章将介绍一些减少数据特别是位置数据复杂性的方法。在我的数据集中,有一列位置,带有作者的地址。但是,由于这些原始数据过于混乱和复杂(具有城市,县,州,国家/地区),因此我无法对其进行太多分析。因此,我们可以将文本标准化,并将其缩小到“国家”级别。处理位置数据的程序包是geopy。它可以识别正确的地址并将这些位置重新格式化为标准格式。然后,您可以选择保留所需的任何信息。对我来说,国家,国家足够体面。

fromgeopy.geocodersimportNominatimgeolocator=Nominatim(user_agent="twitter")defget_nation(txt):
try:
location=geolocator.geocode(txt)
x=location.address.split(",")[-1]
returnxexcept:
returnnp.nan

第3部分:向量化和嵌入

文本向量化将文本转换为值的向量以表示其含义。早些时候,我们有一种热编码方法,其向量的大小与我们的词汇量相同,在出现文本的任何地方都为1,在其他地方为0。如今,我们拥有更高级的方法,例如spacy,GloVe甚至bert嵌入。对于本项目的范围,我将向您介绍python和Jupiter笔记本中的GloVe。

首先,我们下载嵌入向量。您可以在此处手动下载或直接在笔记本中进行下载。

!wget http://nlp.stanford.edu/data/glove.6B.zip

!unzip glove*.zip

然后,我们创建一个向量矢量化每个数据点的函数。句子是每个单词的平均表示。对于空句子,我们将其默认为零向量。

defvectorize(value, word_embeddings, dim=100):
sentences=value.to_list()
sentence_vectors= []
foriinsentences:
iflen(i) !=0:
v=sum([word_embeddings.get(w, np.zeros((dim,))) forwini.split()])/(len(i.split())+0.001)
else:
v=np.zeros((dim,))
sentence_vectors.append(v)
sentence_vectors=np.array(sentence_vectors)
returnsentence_vectors

最后,我们对整个数据集进行矢量化处理,并将矢量化的numpy数组另存为文件,因此我们不必在每次运行代码时都再次进行此过程。矢量化版本将以.npy文件的形式保存为numpy数组。Numpy包方便存储和处理海量数组数据。

作为我的个人标准做法,我尝试将每个部分之后的所有数据保存为单独的文件,以评估数据并更灵活地更改代码。

defvectorize_data(data=data, value='english_text', dim=100):
#Extractwordvectorsword_embeddings= {}
f=open('glove.6B.{}d.txt'.format(str(dim)), encoding='utf-8')
forlineinf:
values=line.split()
word=values[0]
coefs=np.asarray(values[1:], dtype='float32')
word_embeddings[word] =coefsf.close()   text_vec=vectorize(data[value], word_embeddings, dim)
np.save("vectorized_{}.npy".format(str(dim)), text_vec)
print("Done. Data:", text_vec.shape)
returnTrue

总结

数据预处理,特别是文本预处理,可能是一个非常麻烦的过程。机器学习工程师工作流程的很大一部分将用于这些清理和格式化数据(如果您的数据已经完全清理好了,那么,幸运的是,对于所有实现这一目标的工程师来说,他们都感到很荣幸)。

这篇文章中的所有代码都是非常抽象的,可以应用于许多数据项目(您只需更改列名,所有代码都可以正常工作)。在笔记本中,我还添加了异常功能来处理故障情况,以确保您的代码不会在中途崩溃。我希望它对您的项目有帮助,就像对我的帮助一样。

最后,所有的代码可以在这里找到:https://github.com/viethoangtranduong/covid19-tweets


目录
相关文章
|
2月前
|
数据采集 自然语言处理 机器人
如何使用生成器来提高自然语言处理任务的性能?
如何使用生成器来提高自然语言处理任务的性能?
|
25天前
|
机器学习/深度学习 自然语言处理 知识图谱
GraphRAG在自然语言处理中的应用:从问答系统到文本生成
【10月更文挑战第28天】作为一名自然语言处理(NLP)和图神经网络(GNN)的研究者,我一直在探索如何将GraphRAG(Graph Retrieval-Augmented Generation)模型应用于各种NLP任务。GraphRAG结合了图检索和序列生成技术,能够有效地处理复杂的语言理解和生成任务。本文将从个人角度出发,探讨GraphRAG在构建问答系统、文本摘要、情感分析和自动文本生成等任务中的具体方法和案例研究。
52 5
|
27天前
|
自然语言处理 Python
如何使用自然语言处理库`nltk`进行文本的基本处理
这段Python代码展示了如何使用`nltk`库进行文本的基本处理,包括分词和词频统计。首先需要安装`nltk`库,然后通过`word_tokenize`方法将文本拆分为单词,并使用`FreqDist`类统计每个单词的出现频率。运行代码后,会输出每个词的出现次数,帮助理解文本的结构和常用词。
|
2月前
|
自然语言处理 算法 数据挖掘
探讨如何利用Python中的NLP工具,从被动收集到主动分析文本数据的过程
【10月更文挑战第11天】本文介绍了自然语言处理(NLP)在文本分析中的应用,从被动收集到主动分析的过程。通过Python代码示例,详细展示了文本预处理、特征提取、情感分析和主题建模等关键技术,帮助读者理解如何有效利用NLP工具进行文本数据分析。
51 2
|
2月前
|
机器学习/深度学习 存储 自然语言处理
从理论到实践:如何使用长短期记忆网络(LSTM)改善自然语言处理任务
【10月更文挑战第7天】随着深度学习技术的发展,循环神经网络(RNNs)及其变体,特别是长短期记忆网络(LSTMs),已经成为处理序列数据的强大工具。在自然语言处理(NLP)领域,LSTM因其能够捕捉文本中的长期依赖关系而变得尤为重要。本文将介绍LSTM的基本原理,并通过具体的代码示例来展示如何在实际的NLP任务中应用LSTM。
94 4
|
2月前
|
机器学习/深度学习 自然语言处理 算法
自然语言处理 (NLP) 的 5 个步骤
自然语言处理 (NLP) 的 5 个步骤
56 0
自然语言处理 (NLP) 的 5 个步骤
|
4月前
|
自然语言处理 算法 数据可视化
NLP-基于bertopic工具的新闻文本分析与挖掘
这篇文章介绍了如何使用Bertopic工具进行新闻文本分析与挖掘,包括安装Bertopic库、加载和预处理数据集、建立并训练主题模型、评估模型性能、分类新闻标题、调优聚类结果的详细步骤和方法。
NLP-基于bertopic工具的新闻文本分析与挖掘
|
2月前
|
自然语言处理
【NLP自然语言处理】文本特征处理与数据增强
【NLP自然语言处理】文本特征处理与数据增强
|
4月前
|
机器学习/深度学习 人工智能 自然语言处理
【自然语言处理】python之人工智能应用篇——文本生成技术
文本生成是指使用自然语言处理技术,基于给定的上下文或主题自动生成人类可读的文本。这种技术可以应用于各种领域,如自动写作、聊天机器人、新闻生成、广告文案创作等。
121 8
|
4月前
|
机器学习/深度学习 存储 人工智能
自然语言处理 Paddle NLP - 检索式文本问答-理论
自然语言处理 Paddle NLP - 检索式文本问答-理论
30 1