Jak wyodrębnić zdania z tekstu za pomocą modułu Python NLTK

Jak wyodrębnić zdania z tekstu za pomocą modułu Python NLTK
The Natural Language Toolkit (NLTK) to moduł przetwarzania języka i tekstu dla Pythona. NLTK może analizować, przetwarzać i tokenizować tekst dostępny w wielu różnych językach za pomocą wbudowanej biblioteki korporacji i dużej puli danych leksykalnych. Python jest jednym z najpopularniejszych języków programowania używanych w nauce danych i przetwarzaniu języka, głównie ze względu na wszechstronność języka i dostępność przydatnych modułów, takich jak NLTK. W tym artykule wyjaśniono, jak wyodrębnić zdania z akapitów tekstowych za pomocą NLTK. Kod w tym przewodniku został przetestowany z Python 3.8.2 i NLTK 3.4.5 na Ubuntu 20.04 LTS.

Instalowanie NLTK w Linux

Aby zainstalować NLTK w Ubuntu, uruchom poniższe polecenie:

$ sudo apt instal Python3-nltk

Pakiety NLTK są dostępne we wszystkich głównych dystrybucjach Linux. Wyszukaj słowo kluczowe „NLTK” w menedżerze pakietów, aby zainstalować pakiety. Jeśli z jakiegoś powodu NLTK nie jest dostępny w repozytoriach dystrybucji, możesz go zainstalować z menedżera pakietów PIP, uruchamiając poniższe polecenie:

$ instalacja instalacji --user -u nltk

Pamiętaj, że najpierw będziesz musiał zainstalować PIP z menedżera pakietów, aby powyższe polecenie działało. W niektórych dystrybucjach można to nazwać PIP3. Możesz także śledzić szczegółowe instrukcje instalacji dostępne na oficjalnej stronie NLTK.

Wyodrębnienie zdań z akapitu za pomocą NLTK

W przypadku akapitów bez złożonych interpunkcji i odstępów możesz użyć wbudowanego tokenizatora zdania NLTK, zwanego „Tokenizerem punkowym”, który jest wyposażony w wstępnie wyszkolony model. Możesz także użyć własnych wyszkolonych modeli danych do tokenizacji tekstu w zdania. Niestandardowe modele danych są poza zakresem tego artykułu, więc poniższy kod użyje wbudowanego tokenizatora Punkt English. Aby pobrać plik zasobów punkt, uruchom następujące trzy polecenia z rzędu i poczekaj na zakończenie pobierania:

$ Python3
$ import nltk
$ nltk.Pobierz („punkt”)

W próbce kodu poniżej zostanie użyty akapit z „Alice's Adventures in Wonderland”:

Import NLTK
para = "albo studnia była bardzo głęboka, albo upadła bardzo powoli, bo miała
mnóstwo czasu, gdy poszła na nią, i zastanawiać się, co się dzieje
nastąpi następny. Najpierw próbowała spojrzeć w dół i zrozumieć, do czego przychodziła,
Ale było zbyt ciemno, żeby cokolwiek zobaczyć; Potem spojrzała na boki studni i
Zauważył, że były wypełnione szafkami i półprzewaniami; tu i tam ona
widziałem mapy i zdjęcia zawieszone na kołkach. Zdjąła słoik z jednej z półek
kiedy mija; Został oznaczony jako „Orange Marmalade”, ale ku jej wielkim rozczarowaniu
była pusta: nie lubiła upuszczać słoika z obawy przed zabiciem kogoś, tak zarządzana
włożyć go do jednej z szafek, gdy minęła."
tokens = nltk.send_tokenize (para)
Dla t w tokenach:
druk (t, „\ n”)

Uruchomienie powyższego kodu da następujące dane wyjściowe:

Wbudowany tokenizer zdania punka działa dobrze, jeśli chcesz tokenizować proste akapity. Po zaimportowaniu modułu NLTK wszystko, co musisz zrobić, to użyć metody „send_tokenize ()”. Jednak tokenizer zdania punka może nie wykryć prawidłowo wykrywania zdań, gdy istnieje złożony akapit, który zawiera wiele znaków interpunkcyjnych, wykrzykników, skrótów lub powtarzających się symboli. Nie można zdefiniować standardowego sposobu przezwyciężenia tych problemów. Będziesz musiał napisać niestandardowy kod do rozwiązywania tych problemów za pomocą Regex, Manipulacji String lub szkolenia własnego modelu danych zamiast korzystania z wbudowanego modelu danych punk.

Możesz także spróbować ulepszyć istniejący model punk, aby naprawić nieprawidłową tokenizację za pomocą dodatkowych parametrów. Aby to zrobić, postępuj zgodnie z oficjalną dokumentacją tokenizacji punkowej dostępnej tutaj. Aby użyć własnych poprawek niestandardowych, wymagana jest niewielka zmiana kodu:

z NLTK.tokenize.Punkt Import punktsentenceTokenizer, punktparameters
para = "Albo studnia była bardzo głęboka, albo upadła bardzo powoli, bo miała mnóstwo
czasu, gdy poszła na nią, i zastanawiać się, co się stanie
Następny. Najpierw próbowała spojrzeć w dół i zrozumieć, do czego przychodzi, ale to było
Zbyt ciemno, żeby cokolwiek zobaczyć; Potem spojrzała na boki studni i zauważyła
że były wypełnione szafkami i półprzewaniami; tu i tam widziała mapy
i zdjęcia zawieszone na kołkach. Zebrała słoik z jednej z półek, gdy ona
przeszedł; Został oznaczony jako „Orange Marmalade”, ale ku jej wielkim rozczarowaniu
Pusta: nie lubiła upuszczać słoika z obawy przed zabiciem kogoś, więc udało mi się
Włóż go w jedną z szafek, gdy mijała."
punkt_params = punktparameters ()
punkt_params.abbrev_types = set ([„mr”, „mrs”, „LLC”])
tokenizer = punkSentenceTokenizer (punkt_params)
tokens = tokenizer.tokenize (para)
Dla t w tokenach:
druk (t, „\ n”)

Powyższy kod wykonuje to samo zadanie, co metoda „send_tokenize ()”. Jednak możesz teraz zdefiniować własne reguły przy użyciu wbudowanych metod i przekazać je jako argumenty, jak opisano w dokumentacji. Na przykład do powyższego kodu dodano pewne skróty. Jeśli po tych skrótach następuje interpunkcja, nie zostaną one podzielone na nowe zdanie. Normalnym zachowaniem jest użycie kropki lub okresu jako wskazania końca zdania.

Wniosek

NLTK i jego metody tokenizacji są dość wydajne w tokenizacji i przetwarzaniu danych tekstowych. Jednak wstępnie wyszkolone modele mogą nie działać w 100% z różnymi rodzajami tekstów. Może być konieczne ulepszenie istniejących modeli, wyszkolić i dostarczyć własnego lub napisać własny kod, aby naprawić anomalie.