Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Penggantian dan Pembetulan Perkataan dengan NLTK dalam Python

Penggantian dan Pembetulan Perkataan dengan NLTK dalam Python

WBOY
WBOYasal
2024-08-02 05:23:58780semak imbas

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

Apabila kita bercakap tentang pemprosesan bahasa semula jadi (NLP), salah satu tugas yang paling penting ialah menggantikan dan membetulkan perkataan. Ini melibatkan teknik seperti stemming, lemmatization, pembetulan ejaan, dan penggantian perkataan berdasarkan sinonim dan antonim. Menggunakan teknik ini boleh meningkatkan kualiti analisis teks, sama ada untuk enjin carian, chatbots atau analisis sentimen. Mari terokai cara pustaka NLTK dalam Python membantu dengan tugasan ini.

Berpunca: Memotong Akhiran

Stemming ialah teknik yang membuang akhiran daripada perkataan, hanya meninggalkan akar. Sebagai contoh, perkataan "berlari" mempunyai akar "corr". Ini berguna untuk mengurangkan jumlah perkataan yang perlu diindeks oleh enjin carian.

Dalam NLTK, kita boleh menggunakan PorterStemmer untuk melakukan stemming. Jom lihat cara ia berfungsi:

from nltk.stem import PorterStemmer

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

Di sini, kita melihat bahawa stemming memotong akhiran dan hanya meninggalkan akar perkataan. Ini membantu anda kekal fokus pada makna utama perkataan, tanpa perlu risau tentang variasinya.

Lemmatisasi: Kembali ke Bentuk Asas

Lemmatisasi adalah serupa dengan berpunca, tetapi bukannya memotong akhiran, ia menukar perkataan itu kepada bentuk dasarnya, atau lemma. Sebagai contoh, "berlari" menjadi "lari". Ini lebih bijak sedikit daripada berpunca, kerana ia mengambil kira konteks perkataan.

Untuk melakukan lemmatisasi dalam NLTK, kami menggunakan 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

Dalam contoh ini, kami menggunakan fungsi lemmatize dan, untuk kata kerja, kami menentukan bahagian pertuturan (pos) sebagai 'v'. Ini membantu NLTK memahami konteks perkataan dengan lebih baik.

Ungkapan Biasa untuk Penggantian

Kadangkala, kami ingin menggantikan perkataan atau corak tertentu dalam teks. Untuk ini, ungkapan biasa (regex) sangat berguna. Contohnya, kita boleh menggunakan regex untuk mengembangkan pengecutan, seperti "tidak" kepada "tidak".

Berikut ialah cara kita boleh melakukannya dengan 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?

Dalam contoh ini, fungsi expand_contracoes menggunakan regex untuk mencari dan menggantikan perkataan yang dikontrak dalam teks.

Semak Ejaan dengan Enchant

Satu lagi tugas penting ialah pembetulan ejaan. Kadangkala teks mempunyai kesilapan menaip atau ejaan, dan membetulkannya adalah penting untuk analisis teks. Perpustakaan pyenchant sangat bagus untuk ini.

Pertama, kita perlu memasang pustaka pyenchant:

pip install pyenchant

Selepas itu, kita boleh menggunakan Enchant untuk membetulkan perkataan:

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

Jika perkataan itu salah, Enchant mencadangkan pembetulan.

Penggantian Sinonim

Menggantikan perkataan dengan sinonimnya boleh memperkayakan teks, mengelakkan pengulangan dan menambah baik gaya. Dengan WordNet, kita boleh mencari sinonim dengan mudah.

Begini cara kami boleh melakukannya:

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

Dalam contoh ini, fungsi replace_synonyms mengembalikan senarai sinonim untuk perkataan yang diberikan.

Menggantikan Antonim

Seperti sinonim, antonim juga berguna, terutamanya untuk tugasan seperti analisis sentimen. Kita boleh menggunakan WordNet untuk mencari antonim:

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

Fungsi ini mencari antonim untuk perkataan yang diberikan.

Aplikasi Praktikal

Jom lihat beberapa aplikasi praktikal teknik ini.

Analisis Sentimen

Analisis sentimen melibatkan penentuan kekutuban (positif, negatif atau neutral) teks. Penggantian perkataan boleh menambah baik analisis ini.

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

Penormalan teks melibatkan penukaran teks kepada bentuk yang konsisten. Ini mungkin termasuk membetulkan ejaan, mengalih keluar kata henti dan menggantikan sinonim.

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"
Carian Teks yang Diperbaiki

Dalam enjin carian, menggantikan sinonim boleh meningkatkan hasil carian dengan mencari dokumen yang menggunakan sinonim untuk kata kunci yang dicari.

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"

Kesimpulan

Dalam teks ini, kami meneroka pelbagai penggantian perkataan dan teknik pembetulan menggunakan perpustakaan NLTK dalam Python. Kami melihat cara melakukan stemming, lemmatization, menggunakan ungkapan biasa untuk menggantikan perkataan, pembetulan ejaan dengan Enchant dan menggantikan sinonim dan antonim dengan WordNet. Kami juga membincangkan aplikasi praktikal teknik ini dalam analisis sentimen, penormalan teks dan enjin carian.

Menggunakan teknik ini boleh meningkatkan kualiti analisis teks dengan ketara, menjadikan keputusan lebih tepat dan relevan. NLTK menawarkan rangkaian alat yang berkuasa untuk mereka yang bekerja dengan pemprosesan bahasa semula jadi dan memahami cara menggunakan alatan ini adalah penting untuk mana-mana projek NLP.

Atas ialah kandungan terperinci Penggantian dan Pembetulan Perkataan dengan NLTK dalam Python. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn