使用 Python NLTK 进行自然语言处理 (NLP)

2025年8月6日 | 阅读 9 分钟

自然语言处理 (NLP) 是人与机器能够以日常交流的常规人类语言进行交互的领域。

以前,我们习惯于使用高级语言进行通信,这些语言被转换为机器语言,以便机器能够理解。

自然语言处理包括文本到语音转换、语音到文本转换、Alexa、Siri、Google Assistant 等语音助手、语言翻译、聊天机器人等等。

Natural Language Processing (NLP) using Python NLTK

什么是 NLTK?

NLTK 被称为自然语言工具包。它是一个流行的用于自然语言处理的库,它有助于完成各种任务,例如文本处理库,并包含大量测试数据集。我们可以使用自然语言工具包执行各种任务,例如解析、分词等。

让我们继续了解 NLTK 的安装。我们将执行各种任务以更好地理解该主题。

NLTK 的安装

在终端或命令提示符中运行给定的命令来安装自然语言工具包。

现在下载附加资源,即数据集。

下载数据集

我们可以使用以下方法下载附加资源,例如数据集:

我们可以在 Python 脚本中运行此代码来下载所有 NLTK 数据集,我们只需要执行一次。

NLTK 的应用

Natural Language Processing (NLP) using Python NLTK

分词

将语法分解成小字符的过程称为分词。标记是指构成程序中代码的基本单位或最小元素。

NLTK 提供两种分词类型。让我们来了解一下。

1. 按词分词

在词语分词中,词语被认为是独立的最小有意义的单位。简单来说,句子被分解成几个词。

让我们通过一个例子来看看

示例

它将被分词为:

2. 按句子分词

在句子分词中,句子被认为是独立的最小有意义的单位。基本上,文本被分成两个或多个句子。让我们通过一个例子来看看

示例

它将被分词为:

移除停用词

移除停用词是一个过程,其中移除不必要、重复、不携带足够有价值信息且会降低模型性能和效率的词语。

例如:像“a”、“an”、“the”、“is”、“your”、“you're”等词语会被移除。

让我们看一个移除英语语言停用词的例子

示例

输出

['a', 'about', 'above', 'after', 'again', 'against', 'ain', 'all', 'am', 'an', 'and', 'any', 'are', 'aren', "aren't", 'as', 'at', 'be', 'because', 'been', 'before', 'being', 'below', 'between', 'both', 'but', 'by', 'can', 'couldn', "couldn't", 'd', 'did', 'didn', "didn't", 'do', 'does', 'doesn', "doesn't", 'doing', 'don', "don't", 'down', 'during', 'each', 'few', 'for', 'from', 'further', 'had', 'hadn', "hadn't", 'has', 'hasn', "hasn't", 'have', 'haven', "haven't", 'having', 'he', "he'd", "he'll", 'her', 'here', 'hers', 'herself', "he's", 'him', 'himself', 'his', 'how', 'i', "i'd", 'if', "i'll", "i'm", 'in', 'into', 'is', 'isn', "isn't", 'it', "it'd", "it'll", "it's", 'its', 'itself', "i've", 'just', 'll', 'm', 'ma', 'me', 'mightn', "mightn't", 'more', 'most', 'mustn', "mustn't", 'my', 'myself', 'needn', "needn't", 'no', 'nor', 'not', 'now', 'o', 'of', 'off', 'on', 'once', 'only', 'or', 'other', 'our', 'ours', 'ourselves', 'out', 'over', 'own', 're', 's', 'same', 'shan', "shan't", 'she', "she'd", "she'll", "she's", 'should', 'shouldn', "shouldn't", "should've", 'so', 'some', 'such', 't', 'than', 'that', "that'll", 'the', 'their', 'theirs', 'them', 'themselves', 'then', 'there', 'these', 'they', "they'd", "they'll", "they're", "they've", 'this', 'those', 'through', 'to', 'too', 'under', 'until', 'up', 've', 'very', 'was', 'wasn', "wasn't", 'we', "we'd", "we'll", "we're", 'were', 'weren', "weren't", "we've", 'what', 'when', 'where', 'which', 'while', 'who', 'whom', 'why', 'will', 'with', 'won', "won't", 'wouldn', "wouldn't", 'y', 'you', "you'd", "you'll", 'your', "you're", 'yours', 'yourself', 'yourselves', "you've"]

说明

我们在上面的例子中导入了 NLTK 库。然后,我们下载了停用词列表。nltk.corpus 是一个 Python 语句,用于访问自然语言处理中的各种资源。我们从 nltk.corpus 导入了停用词。

最后,打印了英语语言中所有可用的停用词列表。我们可以获取其他任何语言的停用词列表,例如:法语、德语和西班牙语。尝试通过将英语单词替换为任何其他语言来尝试一下!

词干提取和词形还原

让我们详细了解这些主题。

词干提取

在不知道任何上下文的情况下,识别与同一词根词非常相似的词语并对这些词语执行操作的过程称为词干提取。

简单来说,词干提取将单词转换为最基本或词根形式,并忽略前缀和后缀。让我们看一个词干提取的例子

示例

输出

['happi', 'play', 'play', 'play', 'bigger', 'quickli', 'deni']

说明

我们在上面的例子中导入了 NLTK 库。然后,我们从 nltk.stem 模块导入了 PorterStemmer 类。nltk.stem 模块提供了类和函数,有助于将单词处理成它们的词根词。

之后,我们定义了一个名为 clean_data_1 的单词列表。列表中使用的单词是根据我们的偏好随机选择的。然后我们应用了词干提取过程,该过程将提供词干数据,即我们列表中提供的单词的词根词。

最后一步,使用 print() 函数打印词干提取后的单词列表,该函数显示词干提取后的结果。

现在让我们开始词形还原。

词形还原

词形还原是将单词还原为其基本形式的过程。这种还原形式称为词元(lemma)。它使用词汇和语法规则来确保结果准确且有意义。它能产生准确的结果,只是有一个缺点:它通常比词干提取过程花费的时间更长。

让我们通过一个例子更准确地理解词形还原

示例

输出

['happiness', 'playing', 'played', 'bigger', 'quickly', 'denied']

说明

如您所见,我们在上面的例子中导入了 NLTK 库。下一步,我们从 nltk.stem 模块导入了名为 WordNetLemmatizer 的 Lemmatizer 类。

我们还从 nltk.corpus 导入了 wordnet 语料库,它提供了词形还原所需的词汇资源。

之后,我们使用 nltk.fucntion() 下载了 WordNet 数据,因为这对于识别单词的正确基本形式是必需的。它允许我们在单词列表上应用词形还原过程。

最后,我们定义了一个名为 clean_data_1 的单词列表,这些单词是随机的,并且是根据我们的偏好选择的。然后,我们使用 lemmatize() 方法初始化了词形还原过程。由于我们没有指定词性 (POS),默认的 POS 被用作名词。最后,使用 print() 函数打印词形还原后的单词列表,该函数显示词形还原后的结果。

词性标注

词性标注是一个为具有不同含义的相同或相似词语分配标签的过程。相同词语的不同含义可能是由于不同的上下文。

POS 标签是赋予相同词语的标签,这些词语根据上下文具有不同的含义。让我们通过一个例子来看词性标注 (POS)

示例

输出

[('Tpoint', 'NNP'), ('Tech', 'NNP'), ('is', 'VBZ'), ('an', 'DT'), ('amazing', 'JJ'), ('platform', 'NN'), ('to', 'TO'), ('learn', 'VB'), ('Machine', 'NNP'), ('Learning', 'NNP'), ('in', 'IN'), ('the', 'DT'), ('easiest', 'JJS'), ('way', 'NN'), ('.', '.')]

说明

在上面的例子中,我们导入了 pos_tag 和 word tokenizer 等必要的库。我们根据自己的喜好编写了一个示例文本;您可以选择您自己的文本。分词器将句子分解成几个单独的单词。

然后,在分词后的文本上实现 pos_tag,每个单词都被分配了其单独的标签。

命名实体识别 (NER)

命名实体识别 (NER),顾名思义,用于查找和识别关键信息,即可能扮演重要角色的重要文本,例如人名、地点、日期、组织等。

这是理解文本含义和上下文的关键步骤。

让我们通过一个例子来看命名实体识别的用法

示例

输出

(ORGANIZATION TpointTech/NNP)
  is/VBZ
  an/DT
  educational/JJ
  content/NN
  provider/NN
  website/NN
  that/WDT
  was/VBD
  founded/VBN
  in/IN
  2010/CD
  ./.)

说明

如您所见,我们在上面的例子中导入了 pos_tag、word tokenizer 和 ne_chunk 等必要的库。我们根据自己的喜好编写了一个示例文本;您可以选择您自己的文本。分词器将句子分解成几个单独的单词。

然后,在分词后的文本上实现 pos_tag,每个单词都被分配了其单独的标签。

最后,这些带有 POS 标签的词语被 ne_chunks 库处理以进行命名实体识别,并为我们提供了正确的输出。

结论

我们已经学到了几乎所有需要的东西来弄清楚 NLTK 库在自然语言处理中的概念。NLTK 库用于自然语言处理,它有助于完成各种任务,例如文本处理库,并包含大量测试数据集。我们可以使用自然语言工具包执行各种任务,例如解析、分词等。

我们学习了按句子和按词分词、移除停用词、词干提取、词形还原、词性标注 (POS) 和命名实体识别 (NER) 的概念。

常见问题解答 (FAQs)

1. NLP 中的 NLTK 是什么?

NLTK 被称为自然语言工具包。它是一个流行的用于自然语言处理的库,它有助于完成各种任务,例如文本处理库,并包含大量测试数据集。我们可以使用自然语言工具包执行各种任务,例如解析和分词。

2. NLTK 可以用于什么?

自然语言处理中的 NLTK 可用于

  • 分词
  • 移除停用词
  • 词干提取
  • 词形还原
  • 词性标注 (POS)
  • 命名实体识别 (NER)

3. 如何安装 NLTK?

可以使用 pip 安装 NLTK。您只需在终端或命令提示符中运行以下命令:

4. NLP 中的分词是什么?

将语法分解成小字符的过程称为分词。标记是指构成程序中代码的基本单位或最小元素。

NLTK 提供两种分词类型:按词分词和按句子分词。

5. 什么是词性 (POS) 标注?

词性标注是一个为具有不同含义的相同或相似词语分配标签的过程。相同词语的不同含义可能是由于不同的上下文。POS 标签是赋予相同词语的标签,这些词语根据上下文具有不同的含义。

6. 'NN'、'VBD'、'JJ' 等 POS 标签的含义是什么?

POS 标签的含义是:

  • NN - 名词
  • VBD - 动词(过去时)
  • JJ - 形容词
  • DT - 限定词
  • 有一个完整的 POS 标签列表。

7. 什么是命名实体识别?

命名实体识别 (NER),顾名思义,用于查找和识别关键信息,即可能扮演重要角色的重要文本,例如人名、地点、日期、组织等。


下一主题Python-docstrings