Python 中的自然语言处理入门

今天生成的数据中有很大一部分是非结构化的 。非结构化数据包括社交媒体评论、浏览历史记录和客户反馈 。您是否发现自己处于需要分析大量文本数据的情况,却不知道如何继续?Python 中的自然语言处理可以提供帮助 。
本教程的目标是让您能够通过自然语言处理 (NLP) 的概念在 Python 中分析文本数据 。您将首先学习如何将文本标记为更小的块,将单词规范化为其根形式,然后去除文档中的任何噪音,为进一步分析做好准备 。
让我们开始吧!
先决条件在本教程中,我们将使用 Python 的nltk库对文本执行所有 NLP 操作 。在撰写本教程时,我们使用的是 3.4 版的nltk. 要安装库,您可以pip在终端上使用命令:
pip install nltk==3.4要检查系统中的版本nltk,您可以将库导入 Python 解释器并检查版本:
import nltkprint(nltk.__version__)要执行nltk本教程中的某些操作,您可能需要下载特定资源 。我们将在需要时描述每个资源 。
但是,如果您想避免在本教程后面下载单个资源并立即获取它们,请运行以下命令:
python -m nltk.downloader all第 1 步:转换为代币计算机系统本身无法在自然语言中找到意义 。处理自然语言的第一步是将原始文本转换为标记 。甲令牌是连续字符的组合,具有一定的意义 。由您决定如何将句子分解为标记 。例如,一个简单的方法是用空格分割一个句子,将其分解为单个单词 。
在 NLTK 库中,您可以使用该word_tokenize()函数将字符串转换为标记 。但是,您首先需要下载punkt资源 。在终端中运行以下命令:
nltk.download('punkt')接下来,您需要导入word_tokenizefromnltk.tokenize才能使用它:
from nltk.tokenize import word_tokenizeprint(word_tokenize("Hi, this is a nice hotel."))代码的输出如下:
['Hi', ',', 'this', 'is', 'a', 'nice', 'hotel', '.']您会注意到,word_tokenize它不仅仅基于空格拆分字符串,还将标点符号拆分为标记 。如果您想在分析中保留标点符号,这取决于您 。
第 2 步:将单词转换为其基本形式在处理自然语言时,您经常会注意到同一个词有多种语法形式 。例如,“go”、“going”和“gone”是同一个动词“go”的形式 。
虽然您的项目的必要性可能要求您保留各种语法形式的单词,但让我们讨论一种将同一单词的各种语法形式转换为其基本形式的方法 。有两种技术可用于将单词转换为其基词 。
第一种技术是词干 。Stemming是一种简单的算法,可以从单词中删除词缀 。有多种词干提取算法可用于 NLTK 。我们将在本教程中使用 Porter 算法 。
我们首先PorterStemmer从nltk.stem.porter. 接下来,我们将词干分析器初始化为stemmer变量,然后使用该.stem()方法查找单词的基本形式:
from nltk.stem.porter import PorterStemmer stemmer = PorterStemmer()print(stemmer.stem("going"))上面代码的输出是go. 如果您针对上述其他形式的“go”运行词干分析器,您会注意到词干分析器返回相同的基本形式“go” 。然而,由于词干提取只是一种基于去除词缀的简单算法,当词在语言中不太常用时,它会失败 。
例如,当您在单词“constitutes”上尝试词干分析时,它给出了一个不直观的结果:
print(stemmer.stem("constitutes"))你会注意到输出是“constitut” 。
这个问题可以通过使用更复杂的方法来解决,以在给定的上下文中找到单词的基本形式 。该过程称为词形还原 。词形还原根据文本的上下文和词汇对单词进行规范化 。在 NLTK 中,您可以使用WordNetLemmatizer类对句子进行词形还原 。
首先,您需要wordnet从 Python 终端中的 NLTK 下载器下载资源:
nltk.download('wordnet')下载后,您需要导入WordNetLemmatizer该类并对其进行初始化:
from nltk.stem.wordnet import WordNetLemmatizer lem = WordNetLemmatizer()要使用 lemmatizer,请使用.lemmatize()方法 。它需要两个参数:单词和上下文 。在我们的示例中,我们将使用“v”作为上下文 。在查看该.lemmatize()方法的输出后,让我们进一步探索上下文:
print(lem.lemmatize('constitutes', 'v'))您会注意到该.lemmatize()方法正确地将单词“constitutes”转换为其基本形式“constitute” 。您还会注意到词形还原比词干提取花费的时间更长,因为算法更复杂 。


推荐阅读