首页 后端开发 Python教程 使用 Python 和 NLTK 进行标记化和 WordNet 基础知识简介

使用 Python 和 NLTK 进行标记化和 WordNet 基础知识简介

Aug 02, 2024 am 02:57 AM

Introdução à Tokenização e Básicos do WordNet com Python e NLTK

自然语言处理(NLP)是一个令人着迷的领域,它结合了语言学和计算来理解、解释和操纵人类语言。最强大的工具之一是 Python 中的自然语言工具包 (NLTK)。在本文中,我们将探讨标记化的概念以及 WordNet(广泛用于 NLP 的英语词汇库)的使用。

什么是代币化?

标记化是将文本划分为更小的单元(称为标记)的过程。这些标记可以是单词、短语,甚至单个字符。标记化是文本处理中的关键步骤,因为它允许算法更有效地理解和分析文本。

例如,考虑短语“Hello, world!”。对该短语进行标记可以产生三个标记:[“Hello”、“、”“world”、“!”]。这种划分允许单独分析文本的每个部分,从而促进情感分析、机器翻译和命名实体识别等任务。

在 NLTK 中,标记化可以通过多种方式完成。让我们看一些实际例子。

对句子中的文本进行标记

将文本分成句子是许多 NLP 任务的第一步。 NLTK 通过 sent_tokenize 函数使这一切变得简单。

import nltk
from nltk.tokenize import sent_tokenize

texto = "Olá mundo! Bem-vindo ao tutorial de NLTK. Vamos aprender a tokenizar textos."
sentencas = sent_tokenize(texto, language='portuguese')
print(sentencas)
登录后复制

结果将是:

['Olá mundo!', 'Bem-vindo ao tutorial de NLTK.', 'Vamos aprender a tokenizar textos.']
登录后复制

这里,文本被分为三个句子。这对于更详细的分析很有用,每个句子都可以单独处理。

将句子标记为单词

将文本分割成句子后,下一步通常是将这些句子分割成单词。 NLTK 的 word_tokenize 函数就是用于此目的。

from nltk.tokenize import word_tokenize

frase = "Olá mundo!"
palavras = word_tokenize(frase, language='portuguese')
print(palavras)
登录后复制

结果将是:

['Olá', 'mundo', '!']
登录后复制

现在我们将每个单词和标点符号作为单独的标记。这对于词频分析等任务至关重要,我们需要计算每个单词在文本中出现的次数。

使用正则表达式进行标记化

在某些情况下,您可能需要更个性化的标记化。正则表达式(regex)是一个强大的工具。 NLTK 提供了 RegexpTokenizer 类来创建自定义标记生成器。

from nltk.tokenize import RegexpTokenizer

tokenizer = RegexpTokenizer(r'\w+')
tokens = tokenizer.tokenize("Vamos aprender NLTK.")
print(tokens)
登录后复制

结果将是:

['Vamos', 'aprender', 'NLTK']
登录后复制

在这里,我们使用正则表达式,仅选择由字母数字字符组成的单词,忽略标点符号。

WordNet 简介

WordNet 是一个词汇数据库,它将单词分组为同义词集(称为同义词集),提供简短且通用的定义,并记录这些单词之间的各种语义关系。在 NLTK 中,WordNet 用于查找同义词、反义词、下位词和上位词以及其他关系。

要使用WordNet,我们需要从NLTK导入wordnet模块。

from nltk.corpus import wordnet
登录后复制

搜索同义词集

同义词集或同义词集是一组具有相同含义的单词。要搜索单词的同义词集,我们使用 synsets.
函数

sinonimos = wordnet.synsets("dog")
print(sinonimos)
登录后复制

结果将是代表单词“dog”的不同含义的同义词集列表。

[Synset('dog.n.01'), Synset('frump.n.01'), Synset('dog.n.03'), Synset('cad.n.01'), Synset('frank.n.02'), Synset('pawl.n.01'), Synset('andiron.n.01')]
登录后复制

每个同义词集都由一个名称来标识,该名称包括单词、词性(n 表示名词,v 表示动词等)以及区分不同含义的数字。

定义和示例

我们可以获得特定同义词集的定义和使用示例。

sinonimo = wordnet.synset('dog.n.01')
print(sinonimo.definition())
print(sinonimo.examples())
登录后复制

结果将是:

a domesticated carnivorous mammal (Canis familiaris) that typically has a long snout, an acute sense of smell, non-retractile claws, and a barking, howling, or whining voice
['the dog barked all night']
登录后复制

这让我们清楚地理解了“狗”在这种情况下的含义和用法。

搜索同义词和反义词

要查找单词的同义词和反义词,我们可以探索同义词集引理。

sinonimos = []
antonimos = []

for syn in wordnet.synsets("good"):
    for lemma in syn.lemmas():
        sinonimos.append(lemma.name())
        if lemma.antonyms():
            antonimos.append(lemma.antonyms()[0].name())

print(set(sinonimos))
print(set(antonimos))
登录后复制

结果将是单词“good”的同义词和反义词列表。

{'skillful', 'proficient', 'practiced', 'unspoiled', 'goodness', 'good', 'dependable', 'sound', 'right', 'safe', 'respectable', 'effective', 'trade_good', 'adept', 'good', 'full', 'commodity', 'estimable', 'honorable', 'undecomposed', 'serious', 'secure', 'dear', 'ripe'}
{'evilness', 'evil', 'ill'}
登录后复制

计算语义相似度

WordNet 还允许您计算单词之间的语义相似度。相似度基于下位词/上位词图中同义词集之间的距离。

from nltk.corpus import wordnet

cachorro = wordnet.synset('dog.n.01')
gato = wordnet.synset('cat.n.01')
similaridade = cachorro.wup_similarity(gato)
print(similaridade)
登录后复制

结果将是 0 和 1 之间的相似度值。

0.8571428571428571
登录后复制

这个值表明“狗”和“猫”在语义上非常相似。

Filtrando Stopwords

Stopwords são palavras comuns que geralmente não adicionam muito significado ao texto, como "e", "a", "de". Remover essas palavras pode ajudar a focar nas partes mais importantes do texto. O NLTK fornece uma lista de stopwords para várias línguas.

from nltk.corpus import stopwords

stop_words = set(stopwords.words('portuguese'))
palavras = ["Olá", "mundo", "é", "um", "lugar", "bonito"]
palavras_filtradas = [w for w in palavras if not w in stop_words]
print(palavras_filtradas)
登录后复制

O resultado será:

['Olá', 'mundo', 'lugar', 'bonito']
登录后复制

Aqui, as stopwords foram removidas da lista original de palavras.

Aplicações Práticas

Análise de Sentimentos

A análise de sentimentos é uma aplicação comum de PLN onde o objetivo é determinar a opinião ou emoção expressa em um texto. Tokenização e o uso de WordNet são passos importantes nesse processo.

Primeiro, dividimos o texto em palavras e removemos as stopwords. Em seguida, podemos usar os synsets para entender melhor o contexto e a polaridade das palavras.

texto = "Eu amo programação em Python!"
palavras = word_tokenize(texto, language='portuguese')
palavras_filtradas = [w for w in palavras if not w in stop_words]

polaridade = 0
for palavra in palavras_filtradas:
    synsets = wordnet.synsets(palavra, lang='por')
    if synsets:
        for syn in synsets:
            polaridade += syn.pos_score() - syn.neg_score()

print("Polaridade do texto:", polaridade)
登录后复制

Nesse exemplo simplificado, estamos somando os scores positivos e negativos dos synsets das palavras filtradas para determinar a polaridade geral do texto.

Reconhecimento de Entidades Nomeadas

Outra aplicação é o reconhecimento de entidades nomeadas (NER), que identifica e classifica nomes de pessoas, organizações, locais, etc., em um texto.

import nltk
nltk.download('maxent_ne_chunker')
nltk.download('words')

frase = "Barack Obama foi o 44º presidente dos Estados Unidos."
palavras = word_tokenize(frase, language='portuguese')
tags = nltk.pos_tag(palavras)
entidades = nltk.ne_chunk(tags)
print(entidades)
登录后复制

O resultado será uma árvore que identifica "Barack Obama" como uma pessoa e "Estados Unidos" como um local.

Conclusão

Neste texto, exploramos os conceitos básicos de tokenização e uso do WordNet com a biblioteca NLTK em Python. Vimos como dividir textos em sentenças e palavras, como buscar sinônimos e antônimos, calcular similaridades semânticas, e aplicações práticas como análise de sentimentos e reconhecimento de entidades nomeadas. A NLTK é uma ferramenta poderosa para qualquer pessoa interessada em processamento de linguagem natural, oferecendo uma ampla gama de funcionalidades para transformar e analisar textos de forma eficaz.

以上是使用 Python 和 NLTK 进行标记化和 WordNet 基础知识简介的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

如何解决Linux终端中查看Python版本时遇到的权限问题? 如何解决Linux终端中查看Python版本时遇到的权限问题? Apr 01, 2025 pm 05:09 PM

Linux终端中查看Python版本时遇到权限问题的解决方法当你在Linux终端中尝试查看Python的版本时,输入python...

如何在使用 Fiddler Everywhere 进行中间人读取时避免被浏览器检测到? 如何在使用 Fiddler Everywhere 进行中间人读取时避免被浏览器检测到? Apr 02, 2025 am 07:15 AM

使用FiddlerEverywhere进行中间人读取时如何避免被检测到当你使用FiddlerEverywhere...

在Python中如何高效地将一个DataFrame的整列复制到另一个结构不同的DataFrame中? 在Python中如何高效地将一个DataFrame的整列复制到另一个结构不同的DataFrame中? Apr 01, 2025 pm 11:15 PM

在使用Python的pandas库时,如何在两个结构不同的DataFrame之间进行整列复制是一个常见的问题。假设我们有两个Dat...

Uvicorn是如何在没有serve_forever()的情况下持续监听HTTP请求的? Uvicorn是如何在没有serve_forever()的情况下持续监听HTTP请求的? Apr 01, 2025 pm 10:51 PM

Uvicorn是如何持续监听HTTP请求的?Uvicorn是一个基于ASGI的轻量级Web服务器,其核心功能之一便是监听HTTP请求并进�...

如何在10小时内通过项目和问题驱动的方式教计算机小白编程基础? 如何在10小时内通过项目和问题驱动的方式教计算机小白编程基础? Apr 02, 2025 am 07:18 AM

如何在10小时内教计算机小白编程基础?如果你只有10个小时来教计算机小白一些编程知识,你会选择教些什么�...

在Linux终端中使用python --version命令时如何解决权限问题? 在Linux终端中使用python --version命令时如何解决权限问题? Apr 02, 2025 am 06:36 AM

Linux终端中使用python...

如何绕过Investing.com的反爬虫机制获取新闻数据? 如何绕过Investing.com的反爬虫机制获取新闻数据? Apr 02, 2025 am 07:03 AM

攻克Investing.com的反爬虫策略许多人尝试爬取Investing.com(https://cn.investing.com/news/latest-news)的新闻数据时,常常�...

See all articles