Verarbeitung natürlicher Sprache - Python
In diesem Kapitel lernen wir die Sprachverarbeitung mit Python kennen.
Die folgenden Funktionen unterscheiden Python von anderen Sprachen:
Python is interpreted - Wir müssen unser Python-Programm nicht kompilieren, bevor wir es ausführen, da der Interpreter Python zur Laufzeit verarbeitet.
Interactive - Wir können direkt mit dem Interpreter interagieren, um unsere Python-Programme zu schreiben.
Object-oriented - Python ist objektorientiert und erleichtert das Schreiben von Programmen in dieser Sprache, da mit Hilfe dieser Programmiertechnik Code in Objekten eingekapselt wird.
Beginner can easily learn - Python wird auch als Anfängersprache bezeichnet, da es sehr leicht zu verstehen ist und die Entwicklung einer Vielzahl von Anwendungen unterstützt.
Voraussetzungen
Die neueste Version von Python 3 ist Python 3.7.1 und ist für Windows, Mac OS und die meisten Varianten von Linux verfügbar.
Für Windows können wir unter dem Link www.python.org/downloads/windows/ Python herunterladen und installieren.
Für MAC OS können wir den Link www.python.org/downloads/mac-osx/ verwenden .
Im Falle von Linux verwenden verschiedene Linux-Varianten unterschiedliche Paketmanager für die Installation neuer Pakete.
Um beispielsweise Python 3 unter Ubuntu Linux zu installieren, können Sie den folgenden Befehl vom Terminal aus verwenden:
$sudo apt-get install python3-minimal
Um mehr über die Python-Programmierung zu erfahren, lesen Sie das grundlegende Tutorial zu Python 3 - Python 3
Erste Schritte mit NLTK
Wir werden die Python-Bibliothek NLTK (Natural Language Toolkit) für die Textanalyse in englischer Sprache verwenden. Das Natural Language Toolkit (NLTK) ist eine Sammlung von Python-Bibliotheken, die speziell zum Identifizieren und Kennzeichnen von Wortarten entwickelt wurden, die im Text natürlicher Sprache wie Englisch enthalten sind.
NLTK installieren
Bevor wir NLTK verwenden können, müssen wir es installieren. Mit Hilfe des folgenden Befehls können wir ihn in unserer Python-Umgebung installieren -
pip install nltk
Wenn wir Anaconda verwenden, kann mit dem folgenden Befehl ein Conda-Paket für NLTK erstellt werden:
conda install -c anaconda nltk
Herunterladen der NLTK-Daten
Nach der Installation von NLTK besteht eine weitere wichtige Aufgabe darin, die voreingestellten Textrepositorys herunterzuladen, damit sie problemlos verwendet werden können. Vorher müssen wir jedoch NLTK so importieren, wie wir jedes andere Python-Modul importieren. Der folgende Befehl hilft uns beim Importieren von NLTK -
import nltk
Laden Sie jetzt NLTK-Daten mit Hilfe des folgenden Befehls herunter:
nltk.download()
Es wird einige Zeit dauern, bis alle verfügbaren NLTK-Pakete installiert sind.
Andere notwendige Pakete
Einige andere Python-Pakete mögen gensim und patternsind auch sehr wichtig für die Textanalyse sowie für die Erstellung von Anwendungen zur Verarbeitung natürlicher Sprache mithilfe von NLTK. Die Pakete können wie unten gezeigt installiert werden -
gensim
gensim ist eine robuste semantische Modellierungsbibliothek, die für viele Anwendungen verwendet werden kann. Wir können es installieren, indem wir den folgenden Befehl ausführen:
pip install gensim
Muster
Es kann verwendet werden, um zu machen gensimPaket funktioniert richtig. Der folgende Befehl hilft bei der Installation von pattern -
pip install pattern
Tokenisierung
Tokenisierung kann als der Prozess des Aufteilens des angegebenen Textes in kleinere Einheiten definiert werden, die als Token bezeichnet werden. Wörter, Zahlen oder Satzzeichen können Token sein. Es kann auch als Wortsegmentierung bezeichnet werden.
Beispiel
Input - Bett und Stuhl sind Arten von Möbeln.
Wir haben verschiedene Pakete für die Tokenisierung, die von NLTK bereitgestellt werden. Wir können diese Pakete basierend auf unseren Anforderungen verwenden. Die Pakete und die Details ihrer Installation sind wie folgt:
Paket sent_tokenize
Mit diesem Paket kann der Eingabetext in Sätze unterteilt werden. Wir können es mit dem folgenden Befehl importieren:
from nltk.tokenize import sent_tokenize
word_tokenize-Paket
Dieses Paket kann verwendet werden, um den eingegebenen Text in Wörter zu unterteilen. Wir können es mit dem folgenden Befehl importieren:
from nltk.tokenize import word_tokenize
WordPunctTokenizer-Paket
Dieses Paket kann verwendet werden, um den eingegebenen Text in Wörter und Satzzeichen zu unterteilen. Wir können es mit dem folgenden Befehl importieren:
from nltk.tokenize import WordPuncttokenizer
Stemming
Aus grammatikalischen Gründen enthält die Sprache viele Variationen. Variationen in dem Sinne, dass die Sprache, sowohl Englisch als auch andere Sprachen, unterschiedliche Formen eines Wortes haben. Zum Beispiel mögen die Wörterdemocracy, democratic, und democratization. Für maschinelle Lernprojekte ist es sehr wichtig, dass Maschinen verstehen, dass diese verschiedenen Wörter wie oben dieselbe Grundform haben. Deshalb ist es sehr nützlich, die Grundformen der Wörter während der Analyse des Textes zu extrahieren.
Stemming ist ein heuristischer Prozess, der beim Extrahieren der Grundformen der Wörter durch Zerhacken ihrer Enden hilft.
Die verschiedenen Pakete für das Stemming, die vom NLTK-Modul bereitgestellt werden, lauten wie folgt:
PorterStemmer-Paket
Der Porter-Algorithmus wird von diesem Stemming-Paket verwendet, um die Grundform der Wörter zu extrahieren. Mit Hilfe des folgenden Befehls können wir dieses Paket importieren -
from nltk.stem.porter import PorterStemmer
Zum Beispiel, ‘write’ wäre die Ausgabe des Wortes ‘writing’ als Eingabe für diesen Stemmer angegeben.
LancasterStemmer-Paket
Der Lancaster-Algorithmus wird von diesem Stemming-Paket verwendet, um die Grundform der Wörter zu extrahieren. Mit Hilfe des folgenden Befehls können wir dieses Paket importieren -
from nltk.stem.lancaster import LancasterStemmer
Zum Beispiel, ‘writ’ wäre die Ausgabe des Wortes ‘writing’ als Eingabe für diesen Stemmer angegeben.
SnowballStemmer-Paket
Der Schneeball-Algorithmus wird von diesem Stemming-Paket verwendet, um die Grundform der Wörter zu extrahieren. Mit Hilfe des folgenden Befehls können wir dieses Paket importieren -
from nltk.stem.snowball import SnowballStemmer
Zum Beispiel, ‘write’ wäre die Ausgabe des Wortes ‘writing’ als Eingabe für diesen Stemmer angegeben.
Lemmatisierung
Es ist eine andere Möglichkeit, die Grundform von Wörtern zu extrahieren, die normalerweise darauf abzielt, Flexionsenden mithilfe von Vokabeln und morphologischen Analysen zu entfernen. Nach der Lemmatisierung heißt die Grundform eines Wortes Lemma.
Das NLTK-Modul bietet das folgende Paket für die Lemmatisierung:
WordNetLemmatizer-Paket
Dieses Paket extrahiert die Grundform des Wortes, je nachdem, ob es als Substantiv oder als Verb verwendet wird. Der folgende Befehl kann zum Importieren dieses Pakets verwendet werden:
from nltk.stem import WordNetLemmatizer
POS-Tags zählen - Chunking
Die Identifizierung von Wortarten (POS) und kurzen Phrasen kann mit Hilfe von Chunking erfolgen. Es ist einer der wichtigsten Prozesse in der Verarbeitung natürlicher Sprache. Da wir uns des Prozesses der Tokenisierung für die Erstellung von Token bewusst sind, besteht das Chunking tatsächlich darin, diese Token zu kennzeichnen. Mit anderen Worten, wir können sagen, dass wir die Struktur des Satzes mit Hilfe des Chunking-Prozesses erhalten können.
Beispiel
Im folgenden Beispiel implementieren wir das Nunk-Phrase-Chunking, eine Chunking-Kategorie, bei der die Nomen-Phrasen-Chunks im Satz mithilfe des NLTK-Python-Moduls gefunden werden.
Betrachten Sie die folgenden Schritte, um das Chunking von Nominalphrasen zu implementieren:
Step 1: Chunk grammar definition
In diesem Schritt müssen wir die Grammatik für das Chunking definieren. Es würde aus den Regeln bestehen, denen wir folgen müssen.
Step 2: Chunk parser creation
Als nächstes müssen wir einen Chunk-Parser erstellen. Es würde die Grammatik analysieren und die Ausgabe geben.
Step 3: The Output
In diesem Schritt erhalten wir die Ausgabe in einem Baumformat.
Ausführen des NLP-Skripts
Importieren Sie zunächst das NLTK-Paket -
import nltk
Jetzt müssen wir den Satz definieren.
Hier,
DT ist die Determinante
VBP ist das Verb
JJ ist das Adjektiv
IN ist die Präposition
NN ist das Substantiv
sentence = [("a", "DT"),("clever","JJ"),("fox","NN"),("was","VBP"),
("jumping","VBP"),("over","IN"),("the","DT"),("wall","NN")]
Als nächstes sollte die Grammatik in Form eines regulären Ausdrucks angegeben werden.
grammar = "NP:{<DT>?<JJ>*<NN>}"
Jetzt müssen wir einen Parser zum Parsen der Grammatik definieren.
parser_chunking = nltk.RegexpParser(grammar)
Jetzt analysiert der Parser den Satz wie folgt:
parser_chunking.parse(sentence)
Als nächstes wird die Ausgabe in der Variablen wie folgt sein: -
Output = parser_chunking.parse(sentence)
Der folgende Code hilft Ihnen nun, Ihre Ausgabe in Form eines Baums zu zeichnen.
output.draw()