简介
文本通信已成为最常见的表达形式之一。我们每天都会发送电子邮件、短信、发推文,并更新我们的状态。因此,非结构化文本数据变得非常普遍,分析大量文本数据现在是理解人们思想的关键途径之一。
Twitter 上的推文帮助我们发现世界上的热门新闻话题。亚马逊上的评论帮助用户购买评分最高的产品。这些组织和结构化知识的例子代表了自然语言处理(NLP)任务。
NLP 是计算机科学的一个领域,专注于计算机和人类之间的交互。NLP 技术用于分析文本,为计算机理解人类语言提供了一种方式。NLP 应用的一些例子包括自动摘要、主题分割和情感分析。
本教程将介绍如何使用 Python 的自然语言工具包(NLTK)。
先决条件
在进行本教程之前,您应该已经安装了 Python 3,并在计算机上设置了本地编程环境。如果还没有安装,您可以按照适用于您操作系统的相应安装和设置指南进行设置。
为了充分利用本教程,您应该对 Python 编程语言有一定的了解。
步骤 1 — 导入 NLTK
在我们开始使用 Python 进行工作之前,让我们确保 NLTK 模块已安装。在命令行上,通过运行以下命令检查 NLTK 是否已安装:
python -c "import nltk"
如果 NLTK 已安装,此命令将顺利完成,没有错误。现在,让我们确保您已安装最新版本:
python -c "import nltk; print(nltk.__version__)"
您应该已安装版本 3.2.1,因为我们将使用需要此版本的 NLTK 的 Twitter 包。
如果 NLTK 未安装,您将收到错误消息:
Traceback (most recent call last): File "<string>", line 1, in <module> ImportError: No module named 'nltk'
错误消息表明 NLTK 未安装,因此请使用 pip
下载该库:
pip install nltk
接下来,我们将下载本教程中将要使用的数据和 NLTK 工具。
步骤 2 — 下载 NLTK 的数据和标注器
在本教程中,我们将使用可以通过 NLTK 下载的 Twitter 语料库。具体来说,我们将使用 NLTK 的 twitter_samples
语料库。让我们通过命令行下载语料库,如下所示:
python -m nltk.downloader twitter_samples
如果命令成功运行,您将收到以下输出:
[nltk_data] Downloading package twitter_samples to
[nltk_data] /Users/sammy/nltk_data...
[nltk_data] Unzipping corpora/twitter_samples.zip.
接下来,下载词性标注器(POS 标注器)。词性标注 是将文本中的单词标记为特定的词性标签(名词、动词、形容词、副词等)的过程。在本教程中,我们将具体使用 NLTK 的 averaged_perceptron_tagger
。平均感知器标注器使用感知器算法来预测给定单词最可能的词性标签。让我们下载标注器,如下所示:
python -m nltk.downloader averaged_perceptron_tagger
如果命令成功运行,您将收到以下输出:
[nltk_data] Downloading package averaged_perceptron_tagger to
[nltk_data] /Users/sammy/nltk_data...
[nltk_data] Unzipping taggers/averaged_perceptron_tagger.zip.
让我们再次确认语料库是否已正确下载。在您的终端中,打开 Python 交互环境:
python
在 Python 的交互环境中,导入 twitter_samples
语料库:
from nltk.corpus import twitter_samples
NLTK 的 twitter 语料库目前包含从 Twitter 流 API 检索的 20,000 条推文样本。完整的推文存储为以换行分隔的 JSON。我们可以使用 twitter_samples.fileids()
方法查看语料库中存在多少个 JSON 文件:
twitter_samples.fileids()
我们的输出将如下所示:
[u'negative_tweets.json', u'positive_tweets.json', u'tweets.20150430-223406.json']
使用这些文件 ID,我们可以返回推文字符串:
twitter_samples.strings('tweets.20150430-223406.json')
运行此命令将返回大量输出。通常会看起来像这样: