自然语言处理基础:文本预处理

自然语言处理NLP)是计算机科学、语言学和人工智能的交叉领域,它使计算机能够理解、解释和操作人类语言。这个领域的起源可以追溯到20世纪50年代,当时艾伦·图灵首次设计了图灵测试,该测试旨在通过计算机解释和生成自然语言的能力来确定其是否真正智能。从那时起,NLP领域经历了大量的研究和发展,如今已成为人工智能中最受欢迎和最有前景的领域之一。

NLP的两个主要部分

NLP包含两个主要部分:数据预处理和算法开发。本文旨在帮助开始使用NLP,并提供处理文本数据所需的基本概念和工具。将主要关注NLP中最重要且最基础的部分——文本预处理

文本预处理的步骤

数据预处理是任何机器学习模型中最关键的步骤。原始数据的清洗和预处理的质量直接影响模型的性能。在NLP中,第一步就是文本处理,涉及以下预处理步骤:

  • 小写转换
  • 分词
  • 标点符号移除
  • 停用词去除
  • 词干提取
  • 词元还原

小写转换是将文本数据转换为小写的过程。这一步骤的必要性在于,计算机会将不同大小写的相同单词视为不同的实体。例如,‘Girl’和‘girl’在计算机看来是两个不同的单词。为了解决这个问题,需要将所有单词转换为小写,以保持文本的一致性。

sentence = "This text is used to demonstrate Text Preprocessing in NLP." sentence = sentence.lower() print(sentence)

输出结果为:

this text is used to demonstrate text preprocessing in nlp.

分词是将段落分解为更小的单位,如句子或单词,每个单位被视为一个单独的标记。分词的基本原理是通过分析构成段落的较小单位或标记来理解文本的含义。将使用Python的NLTK库来实现分词。NLTK是用于文本预处理的自然语言工具包。

import nltk nltk.download('punkt')

接下来,将输入一个段落并将其分词成句子。结果存储在变量‘sentences’中,包含段落的每个句子。列表的长度给出了段落中句子的总数。

import nltk paragraph="Linguistics is the scientific study of language. It encompasses the analysis of every aspect of language, as well as the methods for studying and modeling them. The traditional areas of linguistic analysis include phonetics, phonology, morphology, syntax, semantics, and pragmatics." sentences = nltk.sent_tokenize(paragraph.lower()) print("-------------------------------------") print(sentences) print("-------------------------------------") print(len(sentences))

同样,也可以将段落分词成单词。结果是一个名为‘words’的列表,包含段落中的每个单词。列表的长度给出了段落中单词的总数。

words = nltk.word_tokenize(paragraph.lower()) print(words) print(len(words))

注意:在这里,标点符号也被当作单独的单词考虑。

接下来,需要从单词列表中移除标点符号。首先,展示原始的单词列表。然后,可以通过排除任何非字母数字元素来轻松地从单词列表中移除所有标点符号。

new_words = [word for word in words if word.isalnum()]

是否注意到,某些单词在任何语言中出现的频率都非常高,无论写什么内容?这些单词就是停用词!停用词是任何语言中频繁出现的单词集合,但它们不会给句子增加太多含义。这些是构成任何语言语法的常见单词。每种语言都有自己的停用词集合。例如,一些英语停用词包括“the”、“he”、“him”、“his”、“her”、“herself”等。

from nltk.corpus import stopwords nltk.download('stopwords')

完成此操作后,可以通过使用以下命令并传递语言名称作为参数来显示任何语言的停用词。

print(stopwords.words("english"))

这些是所有英语停用词。也可以通过简单地更改参数来获取其他语言的停用词。尝试一下将“Spanish”或“French”作为参数传递!由于这些停用词不会给句子的整体含义增加太多价值,可以轻松地从文本数据中移除这些单词。这有助于通过消除不必要的信息来降低维度。

WordSet = [] for word in new_words: if word not in set(stopwords.words("english")): WordSet.append(word) print(WordSet) print(len(WordSet))

输出结果为:

24

观察到所有停用词都已成功从单词集合中移除。在打印新单词列表的长度时,发现长度现在是24,远小于原始单词列表的长度49。这表明可以通过移除停用词有效地降低文本数据集的维度,而不会丢失任何重要信息。在处理大型文本数据集时,这变得非常有用。

那么,词干提取是什么意思呢?顾名思义,词干提取是将单词简化为其根词或词元的过程。移除单词的词缀,只留下根形式或词元。例如,单词“connecting”、“connect”、“connection”、“connects”都被简化为根形式“connect”。单词“studying”、“studies”、“study”都被简化为“studi”。让看看如何实现这一点。

from nltk.stem import PorterStemmer ps = PorterStemmer() WordSetStem = [] for word in WordSet: WordSetStem.append(ps.stem(word)) print(WordSetStem)
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485