自然语言处理 - Python
在本章中,我们将学习使用 Python 进行语言处理。
以下功能使 Python 与其他语言不同 -
Python 是解释性的- 我们不需要在执行之前编译 Python 程序,因为解释器在运行时处理 Python。
交互式- 我们可以直接与解释器交互来编写我们的Python程序。
面向对象- Python本质上是面向对象的,它使这种语言更容易编写程序,因为在这种编程技术的帮助下,它将代码封装在对象中。
初学者可以轻松学习- Python 也被称为初学者语言,因为它非常容易理解,并且支持广泛的应用程序的开发。
先决条件
Python 3 发布的最新版本是 Python 3.7.1,可用于 Windows、Mac OS 和大多数 Linux 操作系统版本。
对于Windows,我们可以访问链接www.python.org/downloads/windows/下载并安装Python。
对于 MAC 操作系统,我们可以使用链接www.python.org/downloads/mac-osx/。
对于 Linux,不同版本的 Linux 使用不同的包管理器来安装新包。
例如,要在 Ubuntu Linux 上安装 Python 3,我们可以从终端使用以下命令 -
$sudo apt-get install python3-minimal
要了解有关 Python 编程的更多信息,请阅读 Python 3 基础教程 – Python 3
NLTK 入门
我们将使用 Python 库 NLTK(自然语言工具包)进行英语文本分析。自然语言工具包 (NLTK) 是 Python 库的集合,专门用于识别和标记自然语言(如英语)文本中的词性。
安装NLTK
在开始使用NLTK之前,我们需要安装它。借助以下命令,我们可以将其安装在 Python 环境中 -
pip install nltk
如果我们使用 Anaconda,则可以使用以下命令构建 NLTK 的 Conda 包 -
conda install -c anaconda nltk
下载NLTK的数据
安装NLTK后,另一个重要的任务是下载其预设的文本存储库,以便可以轻松使用。然而,在此之前我们需要像导入任何其他 Python 模块一样导入 NLTK。以下命令将帮助我们导入 NLTK -
import nltk
现在,借助以下命令下载 NLTK 数据 -
nltk.download()
安装 NLTK 的所有可用软件包将需要一些时间。
其他必要的套餐
其他一些 Python 包(如gensim和Pattern)对于文本分析以及使用 NLTK 构建自然语言处理应用程序也是非常必要的。可以按如下所示安装软件包 -
根西姆
gensim 是一个强大的语义建模库,可用于许多应用程序。我们可以通过以下命令安装它 -
pip install gensim
图案
它可以用来使gensim包正常工作。以下命令有助于安装模式 -
pip install pattern
代币化
标记化可以定义为将给定文本分解为称为标记的更小的单元的过程。单词、数字或标点符号都可以是标记。也可以称为分词。
例子
输入- 床和椅子是家具的类型。
我们有 NLTK 提供的不同的标记化包。我们可以根据我们的要求使用这些包。软件包及其安装详细信息如下 -
发送令牌包
该包可用于将输入文本分成句子。我们可以使用以下命令导入它 -
from nltk.tokenize import sent_tokenize
word_tokenize 包
该包可用于将输入文本划分为单词。我们可以使用以下命令导入它 -
from nltk.tokenize import word_tokenize
WordPunctTokenizer 包
该包可用于将输入文本分为单词和标点符号。我们可以使用以下命令导入它 -
from nltk.tokenize import WordPuncttokenizer
词干提取
由于语法原因,语言包含许多变体。语言的变体,英语和其他语言,都有不同的单词形式。例如,民主、民主、民主化等词语。对于机器学习项目,机器理解这些不同的单词(如上面的单词)具有相同的基本形式非常重要。这就是为什么在分析文本时提取单词的基本形式非常有用。
词干提取是一种启发式过程,有助于通过切掉单词的结尾来提取单词的基本形式。
NLTK 模块提供的不同的词干提取包如下 -
波特斯特默包
该词干提取包使用波特算法来提取单词的基本形式。在以下命令的帮助下,我们可以导入这个包 -
from nltk.stem.porter import PorterStemmer
例如,“write”将是作为该词干分析器的输入给出的单词“writing”的输出。
兰卡斯特词干包
该词干提取包使用兰卡斯特算法来提取单词的基本形式。在以下命令的帮助下,我们可以导入这个包 -
from nltk.stem.lancaster import LancasterStemmer
例如,“writ”将是作为该词干分析器的输入的单词“writing”的输出。
SnowballStemmer 包
该词干提取包使用 Snowball 算法来提取单词的基本形式。在以下命令的帮助下,我们可以导入这个包 -
from nltk.stem.snowball import SnowballStemmer
例如,“write”将是作为该词干分析器的输入给出的单词“writing”的输出。
词形还原
这是提取单词基本形式的另一种方法,通常旨在通过使用词汇和形态分析来消除屈折结尾。词形还原后,任何单词的基本形式称为词元。
NLTK 模块提供以下用于词形还原的包 -
WordNetLemmatizer 包
该包将根据单词是用作名词还是动词来提取单词的基本形式。可以使用以下命令导入此包 -
from nltk.stem import WordNetLemmatizer
POS 标签计数 – 分块
词性 (POS) 和短语的识别可以借助分块来完成。它是自然语言处理中的重要过程之一。正如我们了解创建令牌的令牌化过程一样,分块实际上是对这些令牌进行标记。换句话说,我们可以说我们可以借助分块过程来获得句子的结构。
例子
在下面的示例中,我们将使用 NLTK Python 模块实现名词短语分块,这是一种分块类别,可在句子中查找名词短语分块。
考虑以下步骤来实现名词短语分块 -
第 1 步:块语法定义
在此步骤中,我们需要定义分块语法。它将包含我们需要遵循的规则。
第 2 步:创建块解析器
接下来,我们需要创建一个块解析器。它将解析语法并给出输出。
第三步:输出
在此步骤中,我们将以树格式获得输出。
运行 NLP 脚本
首先导入 NLTK 包 -
import nltk
现在,我们需要定义这个句子。
这里,
DT是决定因素
VBP是动词
JJ是形容词
IN 是介词
NNN是名词
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()