Natural Language Processing 简明教程
Natural Language Processing - Python
在本章中,我们将学习使用 Python 进行语言处理。
以下功能使 Python 与其他语言不同:
-
Python is interpreted − 在运行 Python 程序之前,无需对其进行编译,因为解释器在运行时处理 Python。
-
Interactive − 我们可以直接与解释器交互来编写 Python 程序。
-
Object-oriented − Python 本质上是面向对象的,它使用程序设计中的此技术将代码封装在对象中,因此用这种语言可以更轻松地编写程序。
-
Beginner can easily learn − Python 也被称为初学者语言,因为它非常容易理解,并且支持开发广泛的应用程序。
Prerequisites
Python 3 的最新版本是 Python 3.7.1,可用于 Windows、Mac OS 和大多数 Linux OS。
-
对于 Windows,我们可以转到链接 www.python.org/downloads/windows/ 下载并安装 Python。
-
对于 Mac OS,可以使用链接 www.python.org/downloads/mac-osx/ 。
-
对于 Linux,不同的 Linux 版本使用不同的软件包管理器来安装新软件包。例如,要在 Ubuntu Linux 上安装 Python 3,我们可以从终端使用以下命令:
$sudo apt-get install python3-minimal
为更深入地学习 Python 编程,请阅读 Python 3 基本教程 – Python 3
Getting Started with NLTK
我们将使用 Python 库 NLTK(自然语言工具包)对英语文本进行文本分析。自然语言工具包 (NLTK) 是一组 Python 库,专门设计用于识别和标记在自然语言(如英语)文本中找到的词性。
Downloading NLTK’s Data
安装 NLTK 之后,另一项重要任务是下载其预设文本存储库,以便可以轻松使用它。但是,在此之前,我们需要像导入其他任何 Python 模块一样导入 NLTK。以下命令将帮助我们导入 NLTK:
import nltk
现在,使用以下命令下载 NLTK 数据:
nltk.download()
安装所有可用的 NLTK 软件包需要一些时间。
Other Necessary Packages
其他一些 Python 软件包(如 gensim 和 pattern )对于文本分析以及通过使用 NLTK 构建自然语言处理应用程序也是非常必要的。软件包可以按如下所示安装:
Stemming
由于语法原因,语言包含很多变异。语言(包括英语和其他语言)的变异在于它们具有不同的单词形式。例如,像 democracy , democratic 和 democratization 这样的单词。对于机器学习项目而言,对于机器而言非常重要的是理解上面这样的这些不同的单词具有相同的词根。这就是在分析文本时提取单词词根非常有用的原因。
词干提取是一个启发式过程,它通过切断词尾来帮助提取单词的词根。
NLTK 模块提供的用于词干提取的不同包如下 -
PorterStemmer package
这个词干提取包使用波特算法来提取单词的词根。借助以下命令,我们可以导入这个包 -
from nltk.stem.porter import PorterStemmer
例如, ‘writing’ 输入到这个词干提取器后, ‘write’ 将是输出。
Counting POS Tags–Chunking
借助切分,我们可以识别词性(POS)和短语。这是自然语言处理中的重要过程之一。正如我们了解用于创建标记的标记化过程,切分实际上是对这些标记进行标记。换句话说,我们可以说我们可以借助切分过程获取句子的结构。
Running the NLP Script
首先从导入 NLTK 包开始 −
import nltk
现在,我们需要定义句子。
在此,
-
DT is the determinant
-
VBP is the verb
-
JJ is the adjective
-
IN is the preposition
-
NN is the noun
sentence = [("a", "DT"),("clever","JJ"),("fox","NN"),("was","VBP"),
("jumping","VBP"),("over","IN"),("the","DT"),("wall","NN")]
接下来,语法应以正则表达式的形式给出。
grammar = "NP:{<DT>?<JJ>*<NN>}"
现在,我们需要为解析语法定义一个解析器。
parser_chunking = nltk.RegexpParser(grammar)
现在,解析器将按如下方式解析句子 −
parser_chunking.parse(sentence)
接下来,输出将显示在变量中,如下所示:-
Output = parser_chunking.parse(sentence)
现在,以下代码将帮助你以树的形式绘制你的输出。
output.draw()