Einführung in die Tokenisierung und WordNet-Grundlagen mit Python und NLTK

PHPz
Freigeben: 2024-08-02 02:57:40
Original
709 Leute haben es durchsucht

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

Natürliche Sprachverarbeitung (NLP) ist ein faszinierendes Gebiet, das Linguistik und Informatik kombiniert, um menschliche Sprache zu verstehen, zu interpretieren und zu manipulieren. Eines der leistungsstärksten Tools hierfür ist das Natural Language Toolkit (NLTK) in Python. In diesem Text werden wir die Konzepte der Tokenisierung und die Verwendung von WordNet untersuchen, einer lexikalischen Basis für die englische Sprache, die in PLN weit verbreitet ist.

Was ist Tokenisierung?

Tokenisierung ist der Prozess der Aufteilung von Text in kleinere Einheiten, sogenannte Token. Diese Token können Wörter, Phrasen oder sogar einzelne Zeichen sein. Die Tokenisierung ist ein entscheidender Schritt in der Textverarbeitung, da sie es Algorithmen ermöglicht, Text effektiver zu verstehen und zu analysieren.

Denken Sie zum Beispiel an den Satz „Hallo Welt!“. Die Tokenisierung dieser Phrase kann zu drei Tokens führen: [„Hallo“, „“, „Welt“, „!“]. Diese Unterteilung ermöglicht die individuelle Analyse jedes Textteils und erleichtert Aufgaben wie Stimmungsanalyse, maschinelle Übersetzung und Erkennung benannter Entitäten.

In NLTK kann die Tokenisierung auf verschiedene Arten erfolgen. Sehen wir uns einige praktische Beispiele an.

Tokenisierung von Text in Sätzen

Das Aufteilen von Text in Sätze ist der erste Schritt bei vielen NLP-Aufgaben. NLTK macht dies mit der Funktion sent_tokenize einfach.

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)
Nach dem Login kopieren

Das Ergebnis wird sein:

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

Hier wurde der Text in drei Sätze unterteilt. Dies ist nützlich für eine detailliertere Analyse, bei der jeder Satz einzeln verarbeitet werden kann.

Sätze in Worte umwandeln

Nachdem der Text in Sätze unterteilt wurde, besteht der nächste Schritt normalerweise darin, diese Sätze in Wörter zu unterteilen. Hierzu wird die Funktion „word_tokenize“ von NLTK verwendet.

from nltk.tokenize import word_tokenize

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

Das Ergebnis wird sein:

['Olá', 'mundo', '!']
Nach dem Login kopieren

Jetzt haben wir jedes Wort und jedes Satzzeichen als separate Token. Dies ist wichtig für Aufgaben wie die Worthäufigkeitsanalyse, bei der wir zählen müssen, wie oft jedes Wort in einem Text vorkommt.

Verwendung regulärer Ausdrücke zur Tokenisierung

In manchen Fällen wünschen Sie sich möglicherweise eine stärker personalisierte Tokenisierung. Reguläre Ausdrücke (Regex) sind hierfür ein leistungsstarkes Werkzeug. NLTK stellt die RegexpTokenizer-Klasse zum Erstellen benutzerdefinierter Tokenizer bereit.

from nltk.tokenize import RegexpTokenizer

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

Das Ergebnis wird sein:

['Vamos', 'aprender', 'NLTK']
Nach dem Login kopieren

Hier verwenden wir einen regulären Ausdruck, der nur Wörter auswählt, die aus alphanumerischen Zeichen bestehen, und Interpunktion ignoriert.

Einführung in WordNet

WordNet ist eine lexikalische Datenbank, die Wörter in Synonymsätze, sogenannte Synsets, gruppiert, kurze und allgemeine Definitionen bereitstellt und verschiedene semantische Beziehungen zwischen diesen Wörtern aufzeichnet. In NLTK wird WordNet verwendet, um unter anderem Synonyme, Antonyme, Hyponyme und Hypernyme zu finden.

Um WordNet verwenden zu können, müssen wir das Wordnet-Modul von NLTK importieren.

from nltk.corpus import wordnet
Nach dem Login kopieren

Suche nach Synsets

Ein Synset oder eine Menge von Synonymen ist eine Gruppe von Wörtern, die dieselbe Bedeutung haben. Um nach den Synsets eines Wortes zu suchen, verwenden wir die Funktion synsets.

sinonimos = wordnet.synsets("dog")
print(sinonimos)
Nach dem Login kopieren

Das Ergebnis ist eine Liste von Synsets, die unterschiedliche Bedeutungen des Wortes „Hund“ darstellen.

[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')]
Nach dem Login kopieren

Jedes Synset wird durch einen Namen identifiziert, der das Wort, die Wortart (n für Substantiv, v für Verb usw.) und eine Zahl zur Unterscheidung verschiedener Bedeutungen enthält.

Definitionen und Beispiele

Wir können die Definition und Anwendungsbeispiele eines bestimmten Synsets erhalten.

sinonimo = wordnet.synset('dog.n.01')
print(sinonimo.definition())
print(sinonimo.examples())
Nach dem Login kopieren

Das Ergebnis wird sein:

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']
Nach dem Login kopieren

Dies gibt uns ein klares Verständnis für die Bedeutung und Verwendung von „Hund“ in diesem Zusammenhang.

Suche nach Synonymen und Antonymen

Um Synonyme und Antonyme eines Wortes zu finden, können wir Synset-Lemmas untersuchen.

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))
Nach dem Login kopieren

Das Ergebnis ist eine Liste mit Synonymen und Antonymen für das Wort „gut“.

{'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'}
Nach dem Login kopieren

Berechnung der semantischen Ähnlichkeit

Mit WordNet können Sie auch die semantische Ähnlichkeit zwischen Wörtern berechnen. Die Ähnlichkeit basiert auf dem Abstand zwischen Synsets im Hyponym-/Hyperonym-Diagramm.

from nltk.corpus import wordnet

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

Das Ergebnis ist ein Ähnlichkeitswert zwischen 0 und 1.

0.8571428571428571
Nach dem Login kopieren

Dieser Wert zeigt an, dass „Hund“ und „Katze“ semantisch ziemlich ähnlich sind.

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)
Nach dem Login kopieren

O resultado será:

['Olá', 'mundo', 'lugar', 'bonito']
Nach dem Login kopieren

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)
Nach dem Login kopieren

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)
Nach dem Login kopieren

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.

Das obige ist der detaillierte Inhalt vonEinführung in die Tokenisierung und WordNet-Grundlagen mit Python und NLTK. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:dev.to
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage