今天生成的数据中有很大一部分是非结构化的。非结构化数据包括社交媒体评论、浏览历史记录和客户反馈。您是否发现自己处于需要分析大量文本数据的情况,却不知道如何进行?Python 中的自然语言处理可以提供帮助。
本教程的目标是让您能够通过自然语言处理 (NLP) 的概念在 Python 中分析文本数据。您将首先学习如何将文本标记为更小的块,将单词标准化为其根形式,然后删除文档中的任何噪音,为进一步分析做好准备。
让我们开始吧!
先决条件
在本教程中,我们将使用 Python 的nltk
库对文本执行所有 NLP 操作。在编写本教程时,我们使用的是 3.4 版本的nltk
. 要安装库,您可以pip
在终端上使用命令:
<span style="background-color:#292d3e"><span style="color:#bfc7d5"><code class="language-python">pip install nltk<span style="color:#89ddff">==</span><span style="color:#f78c6c">3.4</span>
</code></span></span>
要检查系统中有哪个版本nltk
,可以将库导入 Python 解释器并检查版本:
<span style="background-color:#292d3e"><span style="color:#bfc7d5"><code class="language-python">import nltk
print<span style="color:#c792ea">(</span>nltk<span style="color:#c792ea">.</span>__version__<span style="color:#c792ea">)</span>
</code></span></span>
要执行nltk
本教程中的某些操作,您可能需要下载特定资源。我们将在需要时描述每个资源。
但是,如果您想避免在教程后面下载单个资源并立即获取它们,请运行以下命令:
<span style="background-color:#292d3e"><span style="color:#bfc7d5"><code class="language-bash">python -m nltk.downloader all
</code></span></span>
第 1 步:转换为代币
计算机系统本身无法在自然语言中找到意义。处理自然语言的第一步是将原始文本转换为标记。记号是连续字符的组合,具有一定的含义。由您决定如何将句子分解为标记。例如,一个简单的方法是用空格分割一个句子以将其分解为单个单词。
在 NLTK 库中,您可以使用该word_tokenize()
函数将字符串转换为标记。但是,您首先需要下载punkt
资源。在终端中运行以下命令:
<span style="background-color:#292d3e"><span style="color:#bfc7d5"><code class="language-python">nltk<span style="color:#c792ea">.</span>download<span style="color:#c792ea">(</span><span style="color:#c3e88d">'punkt'</span><span style="color:#c792ea">)</span>
</code></span></span>
接下来,您需要导入word_tokenize
fromnltk.tokenize
才能使用它:
<span style="background-color:#292d3e"><span style="color:#bfc7d5"><code class="language-python">from nltk<span style="color:#c792ea">.</span>tokenize import word_tokenize
print<span style="color:#c792ea">(</span>word_tokenize<span style="color:#c792ea">(</span><span style="color:#c3e88d">"Hi, this is a nice hotel."</span><span style="color:#c792ea">)</span><span style="color:#c792ea">)</span>
</code></span></span>
代码的输出如下:
<span style="background-color:#292d3e"><span style="color:#bfc7d5"><code class="language-bash"><span style="color:#c792ea">[</span><span style="color:#c3e88d">'Hi'</span>, <span style="color:#c3e88d">','</span>, <span style="color:#c3e88d">'this'</span>, <span style="color:#c3e88d">'is'</span>, <span style="color:#c3e88d">'a'</span>, <span style="color:#c3e88d">'nice'</span>, <span style="color:#c3e88d">'hotel'</span>, <span style="color:#c3e88d">'.'</span><span style="color:#c792ea">]</span>
</code></span></span>
您会注意到,word_tokenize
它不仅根据空格简单地拆分字符串,而且还将标点符号拆分为标记。如果您想在分析中保留标点符号,这取决于您。
第 2 步:将单词转换为其基本形式
在处理自然语言时,您经常会注意到同一个词有多种语法形式。例如,“go”、“going”和“gone”是同一个动词“go”的形式。
虽然项目的必要性可能要求您保留各种语法形式的单词,但让我们讨论一种将同一单词的各种语法形式转换为其基本形式的方法。您可以使用两种技术将单词转换为其基础。
第一种技术是词干。词干提取是一种从单词中删除词缀的简单算法。NLTK中有多种词干提取算法可供使用。我们将在本教程中使用 Porter 算法。
我们首先PorterStemmer
从nltk.stem.porter
. 接下来,我们将词干分析器初始化为stemmer
变量,然后使用该.stem()
方法找到一个单词的基本形式:
<span style="background-color:#292d3e"><span style="color:#bfc7d5"><code class="language-python">from nltk<span style="color:#c792ea">.</span>stem<span style="color:#c792ea">.</span