Maison  >  Article  >  développement back-end  >  Remplacement et correction de mots avec NLTK en Python

Remplacement et correction de mots avec NLTK en Python

WBOY
WBOYoriginal
2024-08-02 05:23:58780parcourir

Substituição e Correção de Palavras com NLTK em Python

Lorsque nous parlons de traitement du langage naturel (NLP), l'une des tâches les plus importantes consiste à remplacer et à corriger les mots. Cela implique des techniques telles que la radicalisation, la lemmatisation, la correction orthographique et le remplacement de mots basés sur des synonymes et des antonymes. L’utilisation de ces techniques peut grandement améliorer la qualité de l’analyse de texte, que ce soit pour les moteurs de recherche, les chatbots ou l’analyse des sentiments. Explorons comment la bibliothèque NLTK en Python aide dans ces tâches.

Racine : suffixes de coupe

Le stemming est une technique qui supprime les suffixes des mots, ne laissant que la racine. Par exemple, le mot « courir » a la racine « corr ». Ceci est utile pour réduire le nombre de mots qu'un moteur de recherche doit indexer.

En NLTK, nous pouvons utiliser PorterStemmer pour faire du stemming. Voyons comment ça marche :

from nltk.stem import PorterStemmer

stemmer = PorterStemmer()
print(stemmer.stem("correndo"))  # Saída: corr
print(stemmer.stem("correção"))  # Saída: correc

Ici, nous avons vu que le radical coupe les suffixes et ne laisse que la racine des mots. Cela vous aide à rester concentré sur le sens principal des mots, sans vous soucier de leurs variations.

Lemmatisation : retour à la forme de base

La lemmatisation est similaire à la radicalisation, mais au lieu de couper les suffixes, elle convertit le mot en sa forme de base, ou lemme. Par exemple, « courir » devient « courir ». C'est un peu plus intelligent que la radicalisation, car cela prend en compte le contexte du mot.

Pour faire de la lemmatisation en NLTK, nous utilisons WordNetLemmatizer :

from nltk.stem import WordNetLemmatizer

lemmatizer = WordNetLemmatizer()
print(lemmatizer.lemmatize("correndo", pos='v'))  # Saída: correr
print(lemmatizer.lemmatize("correções"))  # Saída: correção

Dans cet exemple, nous utilisons la fonction lemmatize et, pour les verbes, nous spécifions la partie du discours (pos) comme 'v'. Cela aide NLTK à mieux comprendre le contexte du mot.

Expressions régulières à remplacer

Parfois, nous souhaitons remplacer des mots ou des modèles spécifiques dans le texte. Pour cela, les expressions régulières (regex) sont très utiles. Par exemple, nous pouvons utiliser des expressions régulières pour étendre les contractions, comme « non » à « non ».

Voici comment procéder avec NLTK :

import re

texto = "Eu não posso ir à festa. Você não vai?"
expansoes = [("não", "não")]

def expandir_contracoes(texto, expansoes):
    for (contraido, expandido) in expansoes:
        texto = re.sub(r'\b' + contraido + r'\b', expandido, texto)
    return texto

print(expandir_contracoes(texto, expansoes))  # Saída: Eu não posso ir à festa. Você não vai?

Dans cet exemple, la fonction expand_contracoes utilise l'expression régulière pour rechercher et remplacer les mots contractés dans le texte.

Vérification orthographique avec Enchant

Une autre tâche importante est la correction orthographique. Parfois, les textes comportent des fautes de frappe ou d’orthographe, et leur correction est essentielle pour l’analyse du texte. La bibliothèque pyenchant est idéale pour cela.

Tout d'abord, nous devons installer la bibliothèque pyenchant :

pip install pyenchant

Ensuite, nous pouvons utiliser Enchant pour corriger les mots :

import enchant

d = enchant.Dict("pt_BR")
palavra = "corrigindo"
if d.check(palavra):
    print(f"{palavra} está correta")
else:
    print(f"{palavra} está incorreta, sugestões: {d.suggest(palavra)}")

Si le mot est incorrect, Enchant suggère des corrections.

Remplacement de synonyme

Remplacer les mots par leurs synonymes peut enrichir un texte, éviter les répétitions et améliorer le style. Avec WordNet, on peut trouver des synonymes facilement.

Voici comment procéder :

from nltk.corpus import wordnet

def substituir_sinonimos(palavra):
    sinonimos = []
    for syn in wordnet.synsets(palavra, lang='por'):
        for lemma in syn.lemmas():
            sinonimos.append(lemma.name())
    return set(sinonimos)

print(substituir_sinonimos("bom"))  # Saída: {'bom', 'legal', 'ótimo', 'excelente'}

Dans cet exemple, la fonction replace_synonyms renvoie une liste de synonymes pour le mot donné.

Remplacer les antonymes

Comme les synonymes, les antonymes sont également utiles, notamment pour des tâches telles que l'analyse des sentiments. Nous pouvons utiliser WordNet pour trouver des antonymes :

def substituir_antonimos(palavra):
    antonimos = []
    for syn in wordnet.synsets(palavra, lang='por'):
        for lemma in syn.lemmas():
            if lemma.antonyms():
                antonimos.append(lemma.antonyms()[0].name())
    return set(antonimos)

print(substituir_antonimos("bom"))  # Saída: {'mau', 'ruim'}

Cette fonction trouve des antonymes pour le mot donné.

Applications pratiques

Voyons quelques applications pratiques de ces techniques.

Analyse des sentiments

L'analyse des sentiments consiste à déterminer la polarité (positive, négative ou neutre) d'un texte. Le remplacement de mots peut améliorer cette analyse.

texto = "Eu adorei o filme, mas a comida estava ruim."
palavras = word_tokenize(texto, language='portuguese')
polaridade = 0

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

print("Polaridade do texto:", polaridade)  # Saída: Polaridade do texto: 0.25 (por exemplo)
Normalisation du texte

La normalisation du texte consiste à transformer le texte en une forme cohérente. Cela peut inclure la correction de l'orthographe, la suppression des mots vides et le remplacement des synonymes.

stopwords = set(stopwords.words('portuguese'))
texto = "A análise de textos é uma área fascinante do PLN."
palavras = word_tokenize(texto, language='portuguese')
palavras_filtradas = [w for w in palavras se não w in stopwords]

texto_normalizado = " ".join(palavras_filtradas)
print(texto_normalizado)  # Saída: "análise textos área fascinante PLN"
Recherche de texte améliorée

Dans les moteurs de recherche, le remplacement des synonymes peut améliorer les résultats de recherche en trouvant des documents qui utilisent des synonymes pour les mots-clés recherchés.

consulta = "bom filme"
consulta_expandidas = []

for palavra em consulta.split():
    sinonimos = substituir_sinonimos(palavra)
    consulta_expandidas.extend(sinonimos)

print("Consulta expandida:", " ".join(consulta_expandidas))  # Saída: "bom legal ótimo excelente filme"

Conclusion

Dans ce texte, nous explorons diverses techniques de remplacement et de correction de mots à l'aide de la bibliothèque NLTK en Python. Nous avons vu comment faire la radicalisation, la lemmatisation, utiliser des expressions régulières pour remplacer des mots, corriger l'orthographe avec Enchant et remplacer les synonymes et les antonymes avec WordNet. Nous discutons également des applications pratiques de ces techniques dans l'analyse des sentiments, la normalisation de texte et les moteurs de recherche.

L'utilisation de ces techniques peut améliorer considérablement la qualité de l'analyse de texte, rendant les résultats plus précis et pertinents. NLTK propose une gamme puissante d'outils pour ceux qui travaillent avec le traitement du langage naturel, et comprendre comment utiliser ces outils est essentiel pour tout projet NLP.

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