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

Remplacement et correction de mots avec NLTK en Python

WBOY
Libérer: 2024-08-02 05:23:58
original
850 Les gens l'ont consulté

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
Copier après la connexion

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
Copier après la connexion

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?
Copier après la connexion

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
Copier après la connexion

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)}")
Copier après la connexion

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'}
Copier après la connexion

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'}
Copier après la connexion

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)
Copier après la connexion
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"
Copier après la connexion
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"
Copier après la connexion

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!

source:dev.to
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal