Maison  >  Article  >  développement back-end  >  Introduction à la tokenisation et aux bases de WordNet avec Python et NLTK

Introduction à la tokenisation et aux bases de WordNet avec Python et NLTK

PHPz
PHPzoriginal
2024-08-02 02:57:40663parcourir

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

Le traitement du langage naturel (PNL) est un domaine fascinant qui combine la linguistique et l'informatique pour comprendre, interpréter et manipuler le langage humain. L'un des outils les plus puissants à cet effet est le Natural Language Toolkit (NLTK) en Python. Dans ce texte, nous explorerons les concepts de tokenisation et l'utilisation de WordNet, une base lexicale de la langue anglaise, largement utilisée en PNL.

Qu’est-ce que la tokenisation ?

La tokenisation est le processus de division du texte en unités plus petites, appelées jetons. Ces jetons peuvent être des mots, des phrases ou même des caractères individuels. La tokenisation est une étape cruciale dans le traitement de texte car elle permet aux algorithmes de comprendre et d'analyser le texte plus efficacement.

Par exemple, considérons la phrase « Bonjour tout le monde ! ». La tokenisation de cette phrase peut donner lieu à trois jetons : ["Hello", "," "world", "!"]. Cette division permet à chaque partie du texte d'être analysée individuellement, facilitant des tâches telles que l'analyse des sentiments, la traduction automatique et la reconnaissance d'entités nommées.

Dans NLTK, la tokenisation peut être effectuée de plusieurs manières. Voyons quelques exemples pratiques.

Tokenisation du texte dans les phrases

Diviser le texte en phrases est la première étape de nombreuses tâches de PNL. NLTK facilite cela avec la fonction 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)

Le résultat sera :

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

Ici, le texte a été divisé en trois phrases. Ceci est utile pour une analyse plus détaillée, où chaque phrase peut être traitée individuellement.

Tokeniser des phrases en mots

Après avoir divisé le texte en phrases, l'étape suivante consiste généralement à diviser ces phrases en mots. La fonction word_tokenize de NLTK est utilisée pour cela.

from nltk.tokenize import word_tokenize

frase = "Olá mundo!"
palavras = word_tokenize(frase, language='portuguese')
print(palavras)

Le résultat sera :

['Olá', 'mundo', '!']

Maintenant, nous avons chaque mot et symbole de ponctuation sous forme de jetons distincts. Ceci est essentiel pour des tâches telles que l'analyse de la fréquence des mots, où nous devons compter combien de fois chaque mot apparaît dans un texte.

Utilisation d'expressions régulières pour la tokenisation

Dans certains cas, vous souhaiterez peut-être une tokenisation plus personnalisée. Les expressions régulières (regex) sont un outil puissant pour cela. NLTK fournit la classe RegexpTokenizer pour créer des tokenizers personnalisés.

from nltk.tokenize import RegexpTokenizer

tokenizer = RegexpTokenizer(r'\w+')
tokens = tokenizer.tokenize("Vamos aprender NLTK.")
print(tokens)

Le résultat sera :

['Vamos', 'aprender', 'NLTK']

Ici, nous utilisons une expression régulière qui sélectionne uniquement les mots composés de caractères alphanumériques, en ignorant la ponctuation.

Introduction à WordNet

WordNet est une base de données lexicale qui regroupe les mots en ensembles de synonymes appelés synsets, fournit des définitions courtes et générales et enregistre diverses relations sémantiques entre ces mots. Dans NLTK, WordNet est utilisé pour trouver des synonymes, des antonymes, des hyponymes et des hyperonymes, entre autres relations.

Pour utiliser WordNet, nous devons importer le module wordnet depuis NLTK.

from nltk.corpus import wordnet

Recherche de synsets

Un synset, ou ensemble de synonymes, est un groupe de mots qui partagent la même signification. Pour rechercher les synsets d'un mot, on utilise la fonction synsets.

sinonimos = wordnet.synsets("dog")
print(sinonimos)

Le résultat sera une liste de synsets qui représentent différentes significations du mot « chien ».

[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')]

Chaque synset est identifié par un nom qui comprend le mot, la partie du discours (n pour nom, v pour verbe, etc.) et un nombre qui distingue les différents sens.

Définitions et exemples

Nous pouvons obtenir la définition et des exemples d'utilisation d'un synset spécifique.

sinonimo = wordnet.synset('dog.n.01')
print(sinonimo.definition())
print(sinonimo.examples())

Le résultat sera :

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']

Cela nous donne une compréhension claire de la signification et de l'utilisation du mot « chien » dans ce contexte.

Recherche de synonymes et d'antonymes

Pour trouver des synonymes et des antonymes d'un mot, nous pouvons explorer les lemmes synset.

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))

Le résultat sera une liste de synonymes et d'antonymes pour le mot "bon".

{'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'}

Calcul de la similarité sémantique

WordNet vous permet également de calculer la similarité sémantique entre les mots. La similarité est basée sur la distance entre les synsets dans le graphique hyponyme/hyperonyme.

from nltk.corpus import wordnet

cachorro = wordnet.synset('dog.n.01')
gato = wordnet.synset('cat.n.01')
similaridade = cachorro.wup_similarity(gato)
print(similaridade)

Le résultat sera une valeur de similarité comprise entre 0 et 1.

0.8571428571428571

Cette valeur indique que "chien" et "chat" sont assez similaires sémantiquement.

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.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn