Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Pengenalan kepada Asas Tokenisasi dan WordNet dengan Python dan NLTK

Pengenalan kepada Asas Tokenisasi dan WordNet dengan Python dan NLTK

PHPz
PHPzasal
2024-08-02 02:57:40663semak imbas

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

Pemprosesan bahasa semula jadi (NLP) ialah bidang menarik yang menggabungkan linguistik dan pengkomputeran untuk memahami, mentafsir dan memanipulasi bahasa manusia. Salah satu alat yang paling berkuasa untuk ini ialah Natural Language Toolkit (NLTK) dalam Python. Dalam teks ini, kita akan meneroka konsep tokenisasi dan penggunaan WordNet, asas leksikal untuk bahasa Inggeris, yang digunakan secara meluas dalam PLN.

Apakah Tokenisasi?

Tokenisasi ialah proses membahagikan teks kepada unit yang lebih kecil, dipanggil token. Token ini boleh menjadi perkataan, frasa atau watak individu. Tokenisasi ialah langkah penting dalam pemprosesan teks kerana ia membolehkan algoritma memahami dan menganalisis teks dengan lebih berkesan.

Sebagai contoh, pertimbangkan frasa "Hello, dunia!". Tokenisasi frasa ini boleh menghasilkan tiga token: ["Hello", "," "world", "!"]. Bahagian ini membolehkan setiap bahagian teks dianalisis secara individu, memudahkan tugas seperti analisis sentimen, terjemahan mesin dan pengecaman entiti bernama.

Dalam NLTK, tokenisasi boleh dilakukan dalam beberapa cara. Mari lihat beberapa contoh praktikal.

Teks Tokenizing dalam Ayat

Membahagikan teks kepada ayat ialah langkah pertama dalam banyak tugasan NLP. NLTK memudahkan ini dengan fungsi 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)

Hasilnya ialah:

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

Di sini, teks itu dibahagikan kepada tiga ayat. Ini berguna untuk analisis yang lebih terperinci, di mana setiap ayat boleh diproses secara individu.

Tokenizing Ayat Menjadi Perkataan

Selepas membahagikan teks kepada ayat, langkah seterusnya biasanya membahagikan ayat ini kepada perkataan. Fungsi word_tokenize NLTK digunakan untuk ini.

from nltk.tokenize import word_tokenize

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

Hasilnya ialah:

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

Kini kami mempunyai setiap perkataan dan simbol tanda baca sebagai token berasingan. Ini penting untuk tugasan seperti analisis kekerapan perkataan, di mana kita perlu mengira bilangan kali setiap perkataan muncul dalam teks.

Menggunakan Ungkapan Biasa untuk Tokenisasi

Dalam sesetengah kes, anda mungkin mahukan tokenisasi yang lebih diperibadikan. Ungkapan biasa (regex) ialah alat yang berkuasa untuk ini. NLTK menyediakan kelas RegexpTokenizer untuk mencipta tokenizer tersuai.

from nltk.tokenize import RegexpTokenizer

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

Hasilnya ialah:

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

Di sini, kami menggunakan ungkapan biasa yang hanya memilih perkataan yang terdiri daripada aksara alfanumerik, mengabaikan tanda baca.

Pengenalan kepada WordNet

WordNet ialah pangkalan data leksikal yang mengumpulkan perkataan ke dalam set sinonim yang dipanggil synset, menyediakan takrifan ringkas dan umum serta merekodkan pelbagai hubungan semantik antara perkataan ini. Dalam NLTK, WordNet digunakan untuk mencari sinonim, antonim, hiponim dan hipernim, antara perhubungan lain.

Untuk menggunakan WordNet, kita perlu mengimport modul wordnet daripada NLTK.

from nltk.corpus import wordnet

Mencari Synset

Sinset, atau set sinonim, ialah sekumpulan perkataan yang berkongsi makna yang sama. Untuk mencari sintesis perkataan, kami menggunakan fungsi sintesis.

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

Hasilnya ialah senarai synset yang mewakili makna berbeza bagi perkataan "anjing".

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

Setiap synset dikenal pasti dengan nama yang merangkumi perkataan, bahagian pertuturan (n untuk kata nama, v untuk kata kerja, dll.), dan nombor yang membezakan deria yang berbeza.

Definisi dan Contoh

Kita boleh mendapatkan definisi dan contoh penggunaan bagi synset tertentu.

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

Hasilnya ialah:

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

Ini memberi kita pemahaman yang jelas tentang maksud dan penggunaan "anjing" dalam konteks ini.

Mencari Sinonim dan Antonim

Untuk mencari sinonim dan antonim perkataan, kita boleh meneroka lemma 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))

Hasilnya ialah senarai sinonim dan antonim untuk perkataan "baik".

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

Mengira Persamaan Semantik

WordNet juga membolehkan anda mengira persamaan semantik antara perkataan. Persamaan adalah berdasarkan jarak antara synset dalam graf hiponim/hiperonim.

from nltk.corpus import wordnet

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

Hasilnya ialah nilai persamaan antara 0 dan 1.

0.8571428571428571

Nilai ini menunjukkan bahawa "anjing" dan "kucing" adalah agak serupa dari segi semantik.

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.

Atas ialah kandungan terperinci Pengenalan kepada Asas Tokenisasi dan WordNet dengan Python dan NLTK. 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