POS-Tagging mit NLTK und Chunking in NLP [BEISPIELE]

POS-Tagging

POS-Tagging (Parts of Speech Tagging) ist ein Prozess, bei dem die Wörter im Textformat für einen bestimmten Teil einer Rede basierend auf ihrer Definition und ihrem Kontext markiert werden. Es ist dafür verantwortlich, Texte in einer Sprache zu lesen und jedem Wort ein bestimmtes Zeichen (Wortarten) zuzuordnen. Es wird auch als grammatikalisches Tagging bezeichnet.

Lernen wir anhand eines NLTK-Part-of-Speech-Beispiels:

Eingang: Alles, was uns erlaubt.

Ausgang: [('Alles', NN),('to', TO), ('permit', VB), ('us', PRP)]

Schritte im POS-Tagging-Beispiel

  • Text tokenisieren (word_tokenize)
  • Wenden Sie pos_tag auf den obigen Schritt an, der nltk.pos_tag(tokenize_text) ist.

Beispiele für NLTK-POS-Tags sind wie folgt:

Abkürzung Bedeutung
CC koordinierende Konjunktion
CD Kardinalziffer
DT Bestimmer
EX dort existenziell
FW Fremdwort
IN Präposition/untergeordnete Konjunktion
JJ Dieses NLTK-POS-Tag ist ein Adjektiv (groß)
JJR Adjektiv, Komparativ (größer)
JJS Adjektiv, Superlativ (am größten)
LS Listenmarkt
MD modal (könnte, wird)
NN Substantiv, Singular (Katze, Baum)
NNS Substantiv Plural (Schreibtische)
NNP Eigenname, Singular (sarah)
NNPS Eigenname, Plural (Inder oder Amerikaner)
PDT Vorherbestimmter (alle, beide, die Hälfte)
POS Possessivende (Elternteil)
PRP Personalpronomen (ihr, sie selbst, er, sich selbst)
PRP$ Possessivpronomen (sie, sein, mein, mein, unser)
RB Adverb (gelegentlich, schnell)
RBR Adverb, Komparativ (größer)
RBS Adverb, Superlativ (am größten)
RP Teilchen (ungefähr)
TO unendliche Markierung (bis)
UH Zwischenruf (Auf Wiedersehen)
VB Verb (fragen)
GBV Verb Gerundium (urteilen)
VBD Verb im Präteritum (gefleht)
VBN Verb Partizip Perfekt (wiedervereinigt)
VBP Verb, Präsens, nicht 3. Person Singular (Umbruch)
VBZ Verb, Präsens mit 3. Person Singular (Basen)
WDT WH-Bestimmender (das, was)
WP wh- Pronomen (wer)
WRB wh- Adverb (wie)

Die obige NLTK-POS-Tag-Liste enthält alle NLTK-POS-Tags. Der NLTK POS-Tagger wird verwendet, um jedem Wort des Satzes grammatikalische Informationen zuzuordnen. Das Installieren, Importieren und Herunterladen aller Pakete von POS NLTK ist abgeschlossen.

Was ist Chunking im NLP?

Chunking In NLP ist Chunking ein Prozess, bei dem kleine Informationseinheiten in große Einheiten gruppiert werden. Chunking wird hauptsächlich dazu verwendet, Gruppen von „Nominalphrasen“ zu erstellen. Es wird verwendet, um dem Satz Struktur zu verleihen, indem POS-Tagging in Kombination mit regulären Ausdrücken verwendet wird. Die resultierende Gruppe von Wörtern wird „Chunks“ genannt. Es wird auch als Shallow Parsing bezeichnet.

Bei der flachen Analyse gibt es maximal eine Ebene zwischen Wurzeln und Blättern, während die tiefe Analyse mehr als eine Ebene umfasst. Flaches Parsing wird auch als leichtes Parsing oder Chunking bezeichnet.

Regeln für das Chunking

Es gibt keine vordefinierten Regeln, sondern Sie können diese je nach Bedarf und Anforderung kombinieren.

Beispielsweise müssen Sie Substantiv, Verb (Vergangenheitsform), Adjektiv und koordinierende Verbindungsstelle aus dem Satz markieren. Sie können die Regel wie folgt verwenden

Chunk:{ * * * ?}

Die folgende Tabelle zeigt, was die verschiedenen Symbole bedeuten:

Name des Symbols Beschreibung
. Beliebiges Zeichen außer neuer Zeile
* Kombiniere 0 oder mehr Wiederholungen
? Kombiniere 0 oder 1 Wiederholungen

Lassen Sie uns nun den Code schreiben, um die Regel besser zu verstehen

from nltk import pos_tag
from nltk import RegexpParser
text ="learn php from guru99 and make study easy".split()
print("After Split:",text)
tokens_tag = pos_tag(text)
print("After Token:",tokens_tag)
patterns= """mychunk:{<NN.?>*<VBD.?>*<JJ.?>*<CC>?}"""
chunker = RegexpParser(patterns)
print("After Regex:",chunker)
output = chunker.parse(tokens_tag)
print("After Chunking",output)

Ausgang:

After Split: ['learn', 'php', 'from', 'guru99', 'and', 'make', 'study', 'easy']
After Token: [('learn', 'JJ'), ('php', 'NN'), ('from', 'IN'), ('guru99', 'NN'), ('and', 'CC'), ('make', 'VB'), ('study', 'NN'), ('easy', 'JJ')]
After Regex: chunk.RegexpParser with 1 stages:
RegexpChunkParser with 1 rules:
       <ChunkRule: '<NN.?>*<VBD.?>*<JJ.?>*<CC>?'>
After Chunking (S
  (mychunk learn/JJ)
  (mychunk php/NN)
  from/IN
  (mychunk guru99/NN and/CC)
  make/VB
  (mychunk study/NN easy/JJ))

Die Schlussfolgerung aus der obigen Wortart-Kennzeichnung Python Beispiel: „make“ ist ein Verb, das nicht in der Regel enthalten ist und daher nicht als mychunk gekennzeichnet ist.

Anwendungsfall Chunking

Chunking wird zur Entitätserkennung verwendet. Eine Entität ist der Teil des Satzes, durch den die Maschine den Wert für eine Absicht erhält.

Example: 
Temperature of New York. 
Here Temperature is the intention and New York is an entity. 

Mit anderen Worten: Beim Chunking werden Teilmengen von Token ausgewählt. Bitte befolgen Sie den folgenden Code, um zu verstehen, wie Chunking zur Auswahl der Token verwendet wird. In diesem Beispiel sehen Sie die Grafik, die einem Teil einer Nominalphrase entspricht. Zum besseren Verständnis schreiben wir den Code und zeichnen das Diagramm.

Code zur Demonstration des Anwendungsfalls

 import nltk
text = "learn php from guru99"
tokens = nltk.word_tokenize(text)
print(tokens)
tag = nltk.pos_tag(tokens)
print(tag)
grammar = "NP: {<DT>?<JJ>*<NN>}"
cp  =nltk.RegexpParser(grammar)
result = cp.parse(tag)
print(result)
result.draw()    # It will draw the pattern graphically which can be seen in Noun Phrase chunking 

Ausgang:

['learn', 'php', 'from', 'guru99']  -- These are the tokens
[('learn', 'JJ'), ('php', 'NN'), ('from', 'IN'), ('guru99', 'NN')]   -- These are the pos_tag
(S (NP learn/JJ php/NN) from/IN (NP guru99/NN))        -- Noun Phrase Chunking

Graph

Nominalphrasen-Chunking-Diagramm
Nominalphrasen-Chunking-Diagramm

Aus der Grafik können wir schließen, dass „learn“ und „guru99“ zwei verschiedene Token sind, aber als Nominalphrase kategorisiert werden, während das Token „from“ nicht zur Nominalphrase gehört.

Chunking wird verwendet, um verschiedene Token in denselben Chunk zu kategorisieren. Das Ergebnis hängt von der ausgewählten Grammatik ab. Weiteres Chunking NLTK wird zum Markieren von Mustern und zum Erkunden von Textkorpora verwendet.

POS-TAGS ZÄHLEN

Wir haben verschiedene besprochen pos_tag im vorherigen Abschnitt. In diesem speziellen Tutorial lernen Sie, wie Sie diese Tags zählen. Das Zählen von Tags ist für die Textklassifizierung sowie für die Vorbereitung der Funktionen für die auf natürlicher Sprache basierenden Operationen von entscheidender Bedeutung. Ich werde mit Ihnen den Ansatz besprechen, den guru99 bei der Vorbereitung des Codes verfolgt hat, und auch die Ausgabe besprechen. Ich hoffe, das wird Ihnen helfen.

So zählen Sie Tags:

Hier schreiben wir zuerst Arbeitscode und dann verschiedene Schritte, um den Code zu erklären.

from collections import Counter
import nltk
text = "Guru99 is one of the best sites to learn WEB, SAP, Ethical Hacking and much more online."
lower_case = text.lower()
tokens = nltk.word_tokenize(lower_case)
tags = nltk.pos_tag(tokens)
counts = Counter( tag for word,  tag in tags)
print(counts)

Ausgang:

Counter({'NN': 5, ',': 2, 'TO': 1, 'CC': 1, 'VBZ': 1, 'NNS': 1, 'CD': 1, '.': 1 , 'DT': 1, 'JJS': 1, 'JJ': 1, 'JJR': 1, 'IN': 1, 'VB': 1, 'RB': 1})

Ausarbeitung des Codes

POS-TAGS ZÄHLEN

  1. Um die Tags zu zählen, können Sie das Paket Counter aus dem Modul der Sammlung verwenden. Ein Counter ist eine Dictionary-Unterklasse, die nach dem Prinzip der Schlüssel-Wert-Operation arbeitet. Es handelt sich um eine ungeordnete Sammlung, in der Elemente als Dictionary-Schlüssel gespeichert werden, während die Anzahl ihr Wert ist.
  2. Importieren Sie nltk, das Module zur Tokenisierung des Textes enthält.
  3. Schreiben Sie den Text, dessen pos_tag Sie zählen möchten.
  4. Einige Wörter werden in Großbuchstaben und andere in Kleinbuchstaben geschrieben. Daher empfiehlt es sich, alle Wörter in Kleinbuchstaben umzuwandeln, bevor Sie die Tokenisierung anwenden.
  5. Leiten Sie die Wörter von nltk über word_tokenize weiter.
  6. Berechnen Sie den pos_tag jedes Tokens
    Output = [('guru99', 'NN'), ('is', 'VBZ'), ('one', 'CD'), ('of', 'IN'), ('the', 'DT'), ('best', 'JJS'), ('site', 'NN'), ('to', 'TO'), ('learn', 'VB'), ('web', 'NN'), (',', ','), ('sap', 'NN'), (',', ','), ('ethical', 'JJ'), ('hacking', 'NN'), ('and', 'CC'), ('much', 'RB'), ('more', 'JJR'), ('online', 'JJ')]
  7. Jetzt kommt die Rolle des Wörterbuchzählers. Wir haben Codezeile 1 importiert. Wörter sind der Schlüssel und Tags sind der Wert und der Zähler zählt die Gesamtzahl aller im Text vorhandenen Tags.

Häufigkeitsverteilung

Unter Häufigkeitsverteilung versteht man die Häufigkeit, mit der ein Ergebnis eines Experiments auftritt. Es wird verwendet, um die Häufigkeit jedes in einem Dokument vorkommenden Wortes zu ermitteln. Es benutzt FreqDistclass und definiert durch die nltk.probabilty Modul.

Eine Häufigkeitsverteilung wird normalerweise durch Zählen der Stichproben wiederholter Durchführung des Experiments erstellt. Die Anzahl der Zählungen wird jedes Mal um eins erhöht. Z.B

freq_dist = FreqDist()

für das Token im Dokument:

freq_dist.inc(token.type())

Wir können für jedes Wort überprüfen, wie oft es in einem bestimmten Dokument vorkommt. Z.B

  1. Zählmethode: freq_dist.count('and')Dieser Ausdruck gibt den Wert zurück, wie oft 'und' aufgetreten ist. Es wird als Zählmethode bezeichnet.
  2. Frequenzmethode: freq_dist.freq('and')Dieser Ausdruck gibt die Häufigkeit einer bestimmten Probe zurück.

Wir werden ein kleines Programm schreiben und seine Funktionsweise im Detail erklären. Wir werden einen Text schreiben und die Häufigkeitsverteilung jedes Wortes im Text berechnen.

import nltk
a = "Guru99 is the site where you can find the best tutorials for Software Testing     Tutorial, SAP Course for Beginners. Java Tutorial for Beginners and much more. Please     visit the site guru99.com and much more."
words = nltk.tokenize.word_tokenize(a)
fd = nltk.FreqDist(words)
fd.plot()

Häufigkeitsverteilung

Erklärung des Codes:

  1. Importieren Sie das NLTK-Modul.
  2. Schreiben Sie den Text, dessen Wortverteilung Sie ermitteln müssen.
  3. Tokenisieren Sie jedes Wort im Text, der als Eingabe für das FreqDist-Modul des NLTK dient.
  4. Wenden Sie jedes Wort in Form einer Liste auf nlk.FreqDist an
  5. Zeichnen Sie die Wörter im Diagramm mit plot()

Bitte visualisieren Sie die Grafik, um den geschriebenen Text besser zu verstehen

Häufigkeitsverteilung jedes Wortes im Diagramm

Häufigkeitsverteilung jedes Wortes im Diagramm

HINWEIS: Sie müssen Matplotlib installiert haben, um das obige Diagramm anzuzeigen

Beachten Sie die Grafik oben. Es entspricht dem Zählen des Vorkommens jedes Wortes im Text. Es hilft beim Studium von Texten und darüber hinaus bei der Umsetzung textbasierter sentimentaler Analysen. Kurz gesagt kann man schlussfolgern, dass nltk über ein Modul zum Zählen des Vorkommens jedes Wortes im Text verfügt, das bei der Erstellung der Statistiken natürlicher Sprachmerkmale hilft. Es spielt eine wichtige Rolle bei der Suche nach Schlüsselwörtern im Text. Sie können den Text auch mit Bibliotheken wie extract oder PyPDF2 aus dem PDF extrahieren und den Text an nlk.FreqDist weiterleiten.

Der Schlüsselbegriff ist „Tokenisieren“. Nach dem Tokenisieren wird für jedes Wort in einem bestimmten Absatz oder Textdokument geprüft, wie oft es vorkommt. Sie benötigen hierfür nicht das NLTK-Toolkit. Sie können dies auch mit Ihren eigenen Python-Programmierkenntnissen tun. Das NLTK-Toolkit bietet nur einen gebrauchsfertigen Code für die verschiedenen Vorgänge.

Das Zählen jedes einzelnen Wortes ist möglicherweise nicht sehr nützlich. Stattdessen sollte man sich auf Kollokationen und Bigrams konzentrieren, bei denen viele Wörter in einem Paar vorkommen. Diese Paare identifizieren nützliche Schlüsselwörter zur Verbesserung natürlicher Sprachmerkmale, die der Maschine zugeführt werden können. Einzelheiten hierzu finden Sie weiter unten.

Kollokationen: Bigramme und Trigramme

Was sind Kollokationen?

Kollokationen sind Wortpaare, die in einem Dokument häufig zusammen vorkommen. Sie wird anhand der Anzahl der zusammen vorkommenden Paare zur Gesamtwortzahl des Dokuments berechnet.

Betrachten Sie das elektromagnetische Spektrum mit Wörtern wie ultraviolette Strahlen, Infrarotstrahlen.

Die Wörter Ultraviolett und Strahlen werden nicht einzeln verwendet und können daher als Kollokation behandelt werden. Ein weiteres Beispiel ist der CT-Scan. Wir sagen CT und Scan nicht getrennt und werden daher auch als Kollokation behandelt.

Wir können sagen, dass das Finden von Kollokationen die Berechnung der Häufigkeit von Wörtern und ihres Auftretens im Kontext anderer Wörter erfordert. Diese spezifischen Wortsammlungen müssen gefiltert werden, um nützliche Inhaltsbegriffe beizubehalten. Jedes Gramm Wörter kann dann anhand eines Assoziationsmaßes bewertet werden, um die relative Wahrscheinlichkeit zu bestimmen, dass es sich bei jedem Ingram um eine Kollokation handelt.

Kollokation kann in zwei Typen eingeteilt werden:

  • Bigrams cKombination aus zwei Wörtern
  • TrigrammeKombination aus drei Wörtern

Bigramme und Trigramme bieten aussagekräftigere und nützlichere Funktionen für die Phase der Merkmalsextraktion. Diese sind besonders nützlich bei textbasierten sentimentalen Analysen.

Bigrams-Beispielcode

import nltk

text = "Guru99 is a totally new kind of learning experience."
Tokens = nltk.word_tokenize(text)
output = list(nltk.bigrams(Tokens))
print(output)

Ausgang:

[('Guru99', 'is'), ('is', 'totally'), ('totally', 'new'), ('new', 'kind'), ('kind', 'of'), ('of', 'learning'), ('learning', 'experience'), ('experience', '.')]

Beispielcode für Trigramme

Manchmal ist es für die statistische Analyse und Häufigkeitszählung wichtig, ein Paar aus drei Wörtern im Satz zu sehen. Dies spielt wiederum eine entscheidende Rolle bei der Formung NLP (Funktionen zur Verarbeitung natürlicher Sprache) sowie textbasierte sentimentale Vorhersage.

Der gleiche Code wird zur Berechnung der Trigramme ausgeführt.

import nltk
text = “Guru99 is a totally new kind of learning experience.”
Tokens = nltk.word_tokenize(text)
output = list(nltk.trigrams(Tokens))
print(output)

Ausgang:

[('Guru99', 'is', 'totally'), ('is', 'totally', 'new'), ('totally', 'new', 'kind'), ('new', 'kind', 'of'), ('kind', 'of', 'learning'), ('of', 'learning', 'experience'), ('learning', 'experience', '.')]   

Sätze markieren

Das Markieren eines Satzes im weiteren Sinne bezieht sich auf das Hinzufügen von Bezeichnungen des Verbs, Substantivs usw. durch den Kontext des Satzes. Die Identifizierung von POS-Tags ist ein komplizierter Prozess. Daher ist eine generische Kennzeichnung von POS manuell nicht möglich, da einige Wörter je nach Satzstruktur unterschiedliche (mehrdeutige) Bedeutungen haben können. Die Konvertierung von Text in Listenform ist ein wichtiger Schritt vor dem Markieren, da jedes Wort in der Liste in einer Schleife durchlaufen und für ein bestimmtes Tag gezählt wird. Bitte sehen Sie sich den folgenden Code an, um ihn besser zu verstehen

import nltk
text = "Hello Guru99, You have to build a very good site, and I love visiting your site."
sentence = nltk.sent_tokenize(text)
for sent in sentence:
	 print(nltk.pos_tag(nltk.word_tokenize(sent)))

Ausgang:

[('Hallo', 'NNP'), ('Guru99', 'NNP'), (',', ','), ('Sie', 'PRP'), ('haben', 'VBP') , ('build', 'VBN'), ('a', 'DT'), ('very', 'RB'), ('good', 'JJ'), ('site', 'NN') , ('und', 'CC'), ('Ich', 'PRP'), ('liebe', 'VBP'), ('besucht', 'VBG'), ('dein', 'PRP$' ), ('site', 'NN'), ('.', '.')]

Sätze markieren

Code-Erklärung:

  1. Code zum Importieren von nltk (Natural Language Toolkit, das Untermodule wie Satz-Tokenisierung und Wort-Tokenisierung enthält.)
  2. Text, dessen Tags gedruckt werden sollen.
  3. Satz-Tokenisierung
  4. Es wird eine For-Schleife implementiert, bei der Wörter aus Sätzen tokenisiert werden und das Tag jedes Wortes als Ausgabe ausgegeben wird.

In Corpus gibt es zwei Arten von POS-Taggern:

  • Regelbasiert
  • Stochastische POS-Tagger

1. Regelbasierter POS-Tagger: Bei Wörtern mit mehrdeutiger Bedeutung wird ein regelbasierter Ansatz auf der Grundlage kontextbezogener Informationen angewendet. Dies geschieht durch Überprüfen oder Analysieren der Bedeutung des vorhergehenden oder des folgenden Wortes. Informationen werden aus der Umgebung des Wortes oder innerhalb des Wortes analysiert. Daher werden Wörter nach den grammatikalischen Regeln einer bestimmten Sprache wie Groß- und Kleinschreibung und Zeichensetzung gekennzeichnet. Beispiel: Brill's Tagger.

2. Stochastischer POS-Tagger: Bei dieser Methode kommen unterschiedliche Ansätze wie Häufigkeit oder Wahrscheinlichkeit zur Anwendung. Wenn ein Wort im Trainingssatz größtenteils mit einem bestimmten Tag versehen ist, wird ihm im Testsatz dieser bestimmte Tag zugewiesen. Das Wort-Tag ist nicht nur von seinem eigenen Tag abhängig, sondern auch vom vorherigen Tag. Diese Methode ist nicht immer genau. Eine andere Möglichkeit besteht darin, die Wahrscheinlichkeit des Auftretens eines bestimmten Tags in einem Satz zu berechnen. Somit wird das endgültige Tag berechnet, indem die höchste Wahrscheinlichkeit eines Wortes mit einem bestimmten Tag überprüft wird.

POS-Tagging mit dem Hidden-Markov-Modell

Tagging-Probleme können auch mit HMM modelliert werden. Es behandelt Eingabetokens als beobachtbare Sequenzen, während Tags als verborgene Zustände betrachtet werden und das Ziel darin besteht, die verborgene Zustandssequenz zu bestimmen. Zum Beispiel x = x1,x2,…………,Xn wobei x eine Folge von Token während ist y = y1,y2,y3,y4………ynist die versteckte Sequenz.

Wie funktioniert das Hidden-Markov-Modell (HMM)?

HMM verwendet die Join-Verteilung P(x, y), wobei x die Eingabesequenz/Token-Sequenz und y die Tag-Sequenz ist.

Die Tag-Sequenz für x ist argmaxy1….ynp(x1,x2,….xn,y1,y2,y3,…..). Wir haben Tags aus dem Text kategorisiert, aber Statistiken dieser Tags sind von entscheidender Bedeutung. Der nächste Teil besteht also darin, diese Tags für statistische Untersuchungen zu zählen.

Zusammenfassung

  • POS-Tagging NLTK ist ein Prozess, bei dem die Wörter im Textformat für einen bestimmten Teil einer Rede basierend auf ihrer Definition und ihrem Kontext markiert werden.
  • Einige NLTK-POS-Tagging-Beispiele sind: CC, CD, EX, JJ, MD, NNP, PDT, PRP$, TO usw.
  • Der POS-Tagger wird verwendet, um jedem Wort des Satzes grammatikalische Informationen zuzuordnen. Das Installieren, Importieren und Herunterladen aller Pakete des Part of Speech-Taggings mit NLTK ist abgeschlossen.
  • Beim Chunking handelt es sich im NLP um einen Prozess, bei dem kleine Informationseinheiten in große Einheiten gruppiert werden.
  • Es gibt keine vordefinierten Regeln, sondern Sie können diese je nach Bedarf und Anforderung kombinieren.
  • Chunking wird zur Entitätserkennung verwendet. Eine Entität ist der Teil des Satzes, durch den die Maschine den Wert für eine Absicht erhält.
  • Chunking wird verwendet, um verschiedene Token in denselben Chunk zu kategorisieren.