Przetwarzanie języka naturalnego - Python

W tym rozdziale nauczymy się przetwarzania języka za pomocą Pythona.

Następujące funkcje sprawiają, że Python różni się od innych języków -

  • Python is interpreted - Nie musimy kompilować naszego programu w języku Python przed jego wykonaniem, ponieważ interpreter przetwarza język Python w czasie wykonywania.

  • Interactive - Możemy bezpośrednio współpracować z tłumaczem, aby pisać nasze programy w Pythonie.

  • Object-oriented - Python jest z natury zorientowany obiektowo i ułatwia pisanie programów w tym języku, ponieważ za pomocą tej techniki programowania hermetyzuje kod w obiektach.

  • Beginner can easily learn - Python jest również nazywany językiem początkującym, ponieważ jest bardzo łatwy do zrozumienia i wspiera rozwój szerokiej gamy aplikacji.

Wymagania wstępne

Najnowsza wydana wersja Pythona 3 to Python 3.7.1 jest dostępna dla systemów Windows, Mac OS i większości odmian systemu Linux.

  • W przypadku systemu Windows możemy przejść do łącza www.python.org/downloads/windows/, aby pobrać i zainstalować Python.

  • W przypadku systemu MAC OS możemy skorzystać z linku www.python.org/downloads/mac-osx/ .

  • W przypadku Linuksa różne wersje Linuksa używają różnych menedżerów pakietów do instalacji nowych pakietów.

    • Na przykład, aby zainstalować Python 3 na Ubuntu Linux, możemy użyć następującego polecenia z terminala -

$sudo apt-get install python3-minimal

Aby dowiedzieć się więcej o programowaniu w Pythonie, przeczytaj podstawowy samouczek Python 3 - Python 3

Pierwsze kroki z NLTK

Będziemy używać biblioteki Python NLTK (Natural Language Toolkit) do analizy tekstu w języku angielskim. Zestaw narzędzi języka naturalnego (NLTK) to zbiór bibliotek Pythona zaprojektowanych specjalnie do identyfikowania i oznaczania fragmentów mowy występujących w tekście języka naturalnego, takiego jak angielski.

Instalowanie NLTK

Przed rozpoczęciem korzystania z NLTK musimy go zainstalować. Za pomocą następującego polecenia możemy go zainstalować w naszym środowisku Python -

pip install nltk

Jeśli używamy Anacondy, pakiet Conda dla NLTK można zbudować za pomocą następującego polecenia -

conda install -c anaconda nltk

Pobieranie danych NLTK

Po zainstalowaniu NLTK kolejnym ważnym zadaniem jest pobranie jego gotowych repozytoriów tekstowych, aby można było z niego łatwo korzystać. Jednak wcześniej musimy zaimportować NLTK w taki sam sposób, w jaki importujemy każdy inny moduł Pythona. Następujące polecenie pomoże nam w imporcie NLTK -

import nltk

Teraz pobierz dane NLTK za pomocą następującego polecenia -

nltk.download()

Zainstalowanie wszystkich dostępnych pakietów NLTK zajmie trochę czasu.

Inne niezbędne pakiety

Niektóre inne pakiety Pythona, takie jak gensim i patternsą również bardzo potrzebne do analizy tekstu, a także do tworzenia aplikacji przetwarzających język naturalny przy użyciu NLTK. pakiety można zainstalować jak pokazano poniżej -

gensim

gensim to solidna biblioteka do modelowania semantycznego, której można używać w wielu zastosowaniach. Możemy go zainstalować, wykonując polecenie -

pip install gensim

wzór

Można go użyć do zrobienia gensimpakiet działa poprawnie. Poniższe polecenie pomaga w instalacji wzorca -

pip install pattern

Tokenizacja

Tokenizację można zdefiniować jako Proces dzielenia danego tekstu na mniejsze jednostki zwane tokenami. Żetonami mogą być słowa, cyfry lub znaki interpunkcyjne. Można to również nazwać segmentacją słów.

Przykład

Input - Łóżko i krzesło to rodzaje mebli.

Mamy różne pakiety do tokenizacji dostarczane przez NLTK. Możemy korzystać z tych pakietów w zależności od naszych wymagań. Pakiety i szczegóły ich instalacji są następujące -

pakiet sent_tokenize

Ten pakiet może służyć do dzielenia tekstu wejściowego na zdania. Możemy go zaimportować za pomocą następującego polecenia -

from nltk.tokenize import sent_tokenize

pakiet word_tokenize

Za pomocą tego pakietu można podzielić wprowadzany tekst na słowa. Możemy go zaimportować za pomocą następującego polecenia -

from nltk.tokenize import word_tokenize

Pakiet WordPunctTokenizer

Ten pakiet może służyć do podzielenia tekstu wejściowego na słowa i znaki interpunkcyjne. Możemy go zaimportować za pomocą następującego polecenia -

from nltk.tokenize import WordPuncttokenizer

Przybitka

Ze względów gramatycznych język zawiera wiele odmian. Odmiany w tym sensie, że język, angielski, a także inne języki, mają różne formy wyrazu. Na przykład słowa takie jakdemocracy, democratic, i democratization. W przypadku projektów uczenia maszynowego bardzo ważne jest, aby maszyny zrozumiały, że te różne słowa, podobnie jak powyżej, mają tę samą formę podstawową. Dlatego podczas analizy tekstu bardzo przydatne jest wyodrębnienie podstawowych form słów.

Stemming to heurystyczny proces, który pomaga wydobyć podstawowe formy słów poprzez odcięcie ich końców.

Różne pakiety do wyprowadzania dostarczane przez moduł NLTK są następujące -

Pakiet PorterStemmer

Algorytm Portera jest używany przez ten pakiet do wyodrębniania podstawowej formy słów. Za pomocą następującego polecenia możemy zaimportować ten pakiet -

from nltk.stem.porter import PorterStemmer

Na przykład, ‘write’ byłoby wynikiem tego słowa ‘writing’ podane jako dane wejściowe do tego stempla.

Pakiet LancasterStemmer

Algorytm Lancastera jest używany przez ten pakiet rdzeniujący do wyodrębnienia podstawowej formy słów. Za pomocą następującego polecenia możemy zaimportować ten pakiet -

from nltk.stem.lancaster import LancasterStemmer

Na przykład, ‘writ’ byłoby wynikiem tego słowa ‘writing’ podane jako dane wejściowe do tego stempla.

Pakiet SnowballStemmer

Algorytm Snowballa jest używany przez ten pakiet rdzenia do wyodrębnienia podstawowej formy słów. Za pomocą następującego polecenia możemy zaimportować ten pakiet -

from nltk.stem.snowball import SnowballStemmer

Na przykład, ‘write’ byłoby wynikiem tego słowa ‘writing’ podane jako dane wejściowe do tego stempla.

Lemmatyzacja

Jest to inny sposób na wyodrębnienie podstawowej formy słów, zwykle mający na celu usunięcie końcówek fleksyjnych za pomocą słownictwa i analizy morfologicznej. Po lematyzacji podstawową formą dowolnego słowa jest lemat.

Moduł NLTK zapewnia następujący pakiet do lematyzacji -

Pakiet WordNetLemmatizer

Ten pakiet wyodrębni podstawową formę słowa w zależności od tego, czy jest używany jako rzeczownik, czy jako czasownik. Do zaimportowania tego pakietu można użyć następującego polecenia -

from nltk.stem import WordNetLemmatizer

Liczenie tagów POS - dzielenie

Identyfikację części mowy (POS) i krótkich fraz można dokonać za pomocą fragmentacji. Jest to jeden z ważnych procesów w przetwarzaniu języka naturalnego. Ponieważ zdajemy sobie sprawę z procesu tokenizacji w celu tworzenia tokenów, fragmentacja polega w rzeczywistości na etykietowaniu tych tokenów. Innymi słowy, możemy powiedzieć, że możemy uzyskać strukturę zdania za pomocą procesu fragmentacji.

Przykład

W poniższym przykładzie zaimplementujemy fragmentację rzeczownik-fraza, kategorię fragmentacji, która znajdzie fragmenty frazy rzeczownikowej w zdaniu, używając modułu NLTK Python.

Rozważ następujące kroki, aby zaimplementować fragmentację wyrażeń rzeczownikowych

Step 1: Chunk grammar definition

Na tym etapie musimy zdefiniować gramatykę dla fragmentacji. Składałby się z zasad, których musimy przestrzegać.

Step 2: Chunk parser creation

Następnie musimy utworzyć parser fragmentów. To przeanalizowałoby gramatykę i dałoby wynik.

Step 3: The Output

W tym kroku otrzymamy dane wyjściowe w formacie drzewa.

Uruchomienie skryptu NLP

Zacznij od zaimportowania pakietu NLTK -

import nltk

Teraz musimy zdefiniować zdanie.

Tutaj,

  • DT jest wyznacznikiem

  • VBP to czasownik

  • JJ to przymiotnik

  • IN to przyimek

  • NN to rzeczownik

sentence = [("a", "DT"),("clever","JJ"),("fox","NN"),("was","VBP"),
   ("jumping","VBP"),("over","IN"),("the","DT"),("wall","NN")]

Następnie gramatykę należy podać w postaci wyrażenia regularnego.

grammar = "NP:{<DT>?<JJ>*<NN>}"

Teraz musimy zdefiniować parser do analizowania gramatyki.

parser_chunking = nltk.RegexpParser(grammar)

Teraz parser przeanalizuje zdanie w następujący sposób -

parser_chunking.parse(sentence)

Następnie dane wyjściowe będą w zmiennej w następujący sposób: -

Output = parser_chunking.parse(sentence)

Teraz poniższy kod pomoże Ci narysować wynik w postaci drzewa.

output.draw()