什么是 NLTK PUNKT?

读者大家好,在本文中我们将尝试了解 NLTK 中一个名为 PUNKT 的模块。NLTK(自然语言工具包)在Python中用于实现自然语言处理领域的程序。它包含用于各种目的的各种库,例如文本分类、解析、词干提取、标记化等。

另请阅读:使用 NLTK 在 Python 中进行标记化

什么是 PunktSentenceTokenizer?

在NLTK中,PUNKT是一种无监督的可训练模型,这意味着它可以在未标记的数据上进行训练(未用标识其特征、属性或类别的信息标记的数据被称为未标记数据。)

它通过使用无监督技术开发句子开头的单词、介词短语和缩写的模型,从文本生成句子列表。在不首先投入使用的情况下,它必须接受大量目标语言明文的训练。

在哪里使用 PunktSentenceTokenizer?

在自然语言处理领域的任何项目中,nltk 是使用的最重要的模块。现在,nltk确实具有广泛的功能,但有时为了提高效率并验证输出是否准确以及开发的模型考虑了所有案例场景,我们需要导入一些额外的模块。

例如,将长文本分割成句子,以下是提供的输入文本以及将输入分割成不同句子的任务。

We met Miss. Tanaya Das and Mr.Rohan Singh today. They are pursuing a B.tech degree in Data Science.

在作为先决条件的一部分开始使用该程序之前,请始终记住导入 nltk 模块并下载 punkt 包以避免错误。下面是导入相同内容的代码。

import nltk
nltk.download('punkt')
执行

输出:

['We met Miss.',
 'Tanaya Das and Mr.Rohan Singh today.',
 'They are pursuing a B.tech degree in Data Science.']

代码的输出是相关的,但不完全正确。这里 punkt 包成功识别了缩写“Mr.”。但没有意识到缩写“Miss”后面的句号并不是句子的结尾。

如前所述,该包的主要优点是它使用无监督算法,这意味着可以训练模型,从而使整体代码更加准确。

在语料库上训练 punkt 分词器

让我们尝试训练 punkt 句子标记器。首先为了训练,我们需要定义一个语料库。(包含用于自然语言处理的文本和语音数据的语料库可用于训练人工智能和机器学习系统。)

corpus = """
The word miss has multiple meanings thats the reason why its tricky for nlp to recognize it as a abbrevation.Miss. means to fail to hit something, to fail to meet something, or to feel sadness over the absence or loss of something. The word miss. has several other senses as a verb and a noun.
To miss. something is to fail to hit or strike something, as with an arrow miss. a target. If a runaway vehicle miss. a stop sign, then it doesn’t smash into it.
Real-life examples: If you throw a basketball to your friend and they don’t catch it, the ball miss. When a baseball player miss. a baseball with their bat, they try to hit the ball with the bat but fail to. A bowling ball that doesn’t knock down any pins has miss. them.
"""

一旦我们定义了相关语料库,我们就进一步使用punktTrainer()Punkt 句子边界检测中使用的学习参数,之后,我们使用“train”函数从给定文本中收集学习信息。如果 Finalize 设置为 True,它将选择句子边界检测的所有参数。如果 get params() 和 Finalize Training() 均未执行,则该过程将被推迟。如果 verbose 为 True,将列出检测到的缩写。

Syntax: train(train_text, verbose=False)
语料库
截图601

输出:

缩写:[2.0326]小姐
今天我们见到了 Tanaya Das 小姐和 Rohan Singh 先生。
他们正在攻读数据科学学士学位。

通过这种方式,我们成功地训练了模型来识别“Miss”这个词,并且不会将其后面的句号误解为句子的结尾。同样,我们可以定义语料库并训练无监督模型来学习其他缩写词、首字母缩略词等。这可以使用punktTrainer().

概括

自然语言处理是人工智能下理解人类语言的结构和含义的广阔领域。在Python中,我们使用nltk(自然语言工具包)来实现它。punkt 是 nltk 中的模块之一。Punkt 旨在以无监督的方式从语料库中学习与目标领域相关的参数,例如缩写、首字母缩写词列表等。

参考

https://www.nltk.org/api/nltk.tokenize.punkt.html

https://stackoverflow.com/questions/4576077/how-can-i-split-a-text-into-sentences