Erstellen Sie N-Gramme aus Text in Python

Olorunfemi Akinlua 16 Februar 2024
  1. Verwenden Sie die for-Schleife, um N-Gramme aus Text in Python zu erstellen
  2. Verwenden Sie nltk, um N-Gramme aus Text in Python zu erstellen
Erstellen Sie N-Gramme aus Text in Python

In der Computerlinguistik sind N-Gramme wichtig für die Sprachverarbeitung und die kontextuelle und semantische Analyse. Sie sind fortlaufende und aufeinanderfolgende Folgen von Wörtern, die aus einer Reihe von Token nebeneinander liegen.

Die beliebtesten sind Unigramme, Bigramme und Trigramme, und sie sind effektiv, und wo n>3, kann es Datenspärlichkeit geben.

In diesem Artikel wird erläutert, wie Sie N-Gramme in Python mithilfe von Funktionen und Bibliotheken erstellen.

Verwenden Sie die for-Schleife, um N-Gramme aus Text in Python zu erstellen

Wir können effektiv eine ngrams-Funktion erstellen, die den Text und den n-Wert nimmt, der eine Liste zurückgibt, die die N-Gramme enthält.

Um die Funktion zu erstellen, können wir den Text aufteilen und eine leere Liste (Ausgabe) erstellen, die die N-Gramme speichert. Wir verwenden die for-Schleife, um die splitInput-Liste zu durchlaufen und alle Elemente zu durchlaufen.

Die Wörter (Tokens) werden dann an die Ausgabe-Liste angehängt.

def ngrams(input, num):
    splitInput = input.split(" ")
    output = []
    for i in range(len(splitInput) - num + 1):
        output.append(splitInput[i : i + num])
    return output


text = "Welcome to the abode, and more importantly, our in-house exceptional cooking service which is close to the Burj Khalifa"
print(ngrams(text, 3))

Die Ausgabe des Codes

[['Welcome', 'to', 'the'], ['to', 'the', 'abode,'], ['the', 'abode,', 'and'], ['abode,', 'and', 'more'], ['and', 'more', 'importantly,'], ['more', 'importantly,', 'our'], ['importantly,', 'our', 'in-house'], ['our', 'in-house', 'exceptional'], ['in-house', 'exceptional', 'cooking'], ['exceptional', 'cooking', 'service'], ['cooking', 'service', 'which'], ['service', 'which', 'is'], ['which', 'is', 'close'], ['is', 'close', 'to'], ['close', 'to', 'the'], ['to', 'the', 'Burj'], ['the', 'Burj', 'Khalifa']]

Verwenden Sie nltk, um N-Gramme aus Text in Python zu erstellen

Die NLTK-Bibliothek ist ein Toolkit für natürliche Sprachen, das eine benutzerfreundliche Schnittstelle zu Ressourcen bietet, die unter anderem für die Textverarbeitung und Tokenisierung wichtig sind. Um nltk zu installieren, können wir den folgenden pip-Befehl verwenden.

pip install nltk

Um uns ein potenzielles Problem zu zeigen, verwenden wir die Methode word_tokenize(), die uns hilft, eine tokenisierte Kopie des Textes zu erstellen, den wir mit dem von NLTK empfohlenen Wort-Tokenizer übergeben, bevor wir mit dem Schreiben eines detaillierteren Codes fortfahren.

import nltk

text = "well the money has finally come"
tokens = nltk.word_tokenize(text)

Die Ausgabe des Codes:

Traceback (most recent call last):
  File "c:\Users\akinl\Documents\Python\SFTP\n-gram-two.py", line 4, in <module>
    tokens = nltk.word_tokenize(text)
  File "C:\Python310\lib\site-packages\nltk\tokenize\__init__.py", line 129, in word_tokenize
    sentences = [text] if preserve_line else sent_tokenize(text, language)
  File "C:\Python310\lib\site-packages\nltk\tokenize\__init__.py", line 106, in sent_tokenize
    tokenizer = load(f"tokenizers/punkt/{language}.pickle")
  File "C:\Python310\lib\site-packages\nltk\data.py", line 750, in load
    opened_resource = _open(resource_url)
  File "C:\Python310\lib\site-packages\nltk\data.py", line 876, in _open
    return find(path_, path + [""]).open()
  File "C:\Python310\lib\site-packages\nltk\data.py", line 583, in find
    raise LookupError(resource_not_found)
LookupError:
**********************************************************************
  Resource [93mpunkt[0m not found.
  Please use the NLTK Downloader to obtain the resource:

  [31m>>> import nltk
  >>> nltk.download('punkt')
  [0m
  For more information see: https://www.nltk.org/data.html

  Attempted to load [93mtokenizers/punkt/english.pickle[0m

  Searched in:
    - 'C:\\Users\\akinl/nltk_data'
    - 'C:\\Python310\\nltk_data'
    - 'C:\\Python310\\share\\nltk_data'
    - 'C:\\Python310\\lib\\nltk_data'
    - 'C:\\Users\\akinl\\AppData\\Roaming\\nltk_data'
    - 'C:\\nltk_data'
    - 'D:\\nltk_data'
    - 'E:\\nltk_data'
    - ''
**********************************************************************

Der Grund für die obige Fehlermeldung und das Problem ist, dass die NLTK-Bibliothek für einige Methoden bestimmte Daten benötigt und wir die Daten nicht heruntergeladen haben, insbesondere wenn dies Ihre erste Verwendung ist. Daher benötigen wir den NLTK-Downloader, um zwei Datenmodule herunterzuladen, punkt und averaged_perceptron_tagger.

Die Daten stehen beispielsweise bei Verwendung von Methoden wie words() zur Verfügung. Um die Daten herunterzuladen, benötigen wir die Methode download(), wenn wir sie durch unser Python-Skript ausführen müssen.

Sie könnten eine Python-Datei erstellen und den folgenden Code ausführen, um das Problem zu lösen.

import nltk

nltk.download("punkt")
nltk.download("averaged_perceptron_tagger")

Oder führen Sie die folgenden Befehle über Ihre Befehlszeilenschnittstelle aus:

python -m nltk.downloader punkt
python -m nltk.downloader averaged_perceptron_tagger

Beispielcode:

import nltk

text = "well the money has finally come"
tokens = nltk.word_tokenize(text)

textBigGrams = nltk.bigrams(tokens)
textTriGrams = nltk.trigrams(tokens)

print(list(textBigGrams), list(textTriGrams))

Die Ausgabe des Codes:

[('well', 'the'), ('the', 'money'), ('money', 'has'), ('has', 'finally'), ('finally', 'come')] [('well', 'the', 'money'), ('the', 'money', 'has'), ('money', 'has', 'finally'), ('has', 'finally', 'come')]

Beispielcode:

import nltk

text = "well the money has finally come"
tokens = nltk.word_tokenize(text)

textBigGrams = nltk.bigrams(tokens)
textTriGrams = nltk.trigrams(tokens)

print("The Bigrams of the Text are")
print(*map(" ".join, textBigGrams), sep=", ")

print("The Trigrams of the Text are")
print(*map(" ".join, textTriGrams), sep=", ")

Die Ausgabe des Codes:

The Bigrams of the Text are
well the, the money, money has, has finally, finally come
The Trigrams of the Text are
well the money, the money has, money has finally, has finally come
Olorunfemi Akinlua avatar Olorunfemi Akinlua avatar

Olorunfemi is a lover of technology and computers. In addition, I write technology and coding content for developers and hobbyists. When not working, I learn to design, among other things.

LinkedIn