Instalowanie NLTK w Linuksie
Aby zainstalować NLTK w Ubuntu, uruchom poniższe polecenie:
$ sudo apt install python3-nltkPakiety NLTK są dostępne we wszystkich głównych dystrybucjach Linuksa. 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 twojej dystrybucji, możesz zainstalować go z menedżera pakietów pip, uruchamiając poniższe polecenie:
$ pip install --user -U nltkPamiętaj, że aby powyższe polecenie zadziałało, musisz najpierw zainstalować pip z menedżera pakietów. W niektórych dystrybucjach może się nazywać pip3. Możesz również postępować zgodnie ze szczegółowymi instrukcjami instalacji dostępnymi na oficjalna strona internetowa NLTK.
Wyodrębnianie zdań z akapitu za pomocą NLTK
W przypadku akapitów bez skomplikowanych interpunkcji i odstępów można użyć wbudowanego tokenizera zdań NLTK, zwanego „Punkt tokenizer”, który jest dostarczany ze wstępnie wytrenowanym modelem. Możesz także użyć własnych wytrenowanych modeli danych do tokenizacji tekstu w zdania. Wytrenowane niestandardowe modele danych są poza zakresem tego artykułu, więc poniższy kod będzie używał wbudowanego tokenizera Punkt English. Aby pobrać plik zasobów Punkt, uruchom kolejno następujące trzy polecenia i poczekaj na zakończenie pobierania:
$ Python3$ importuj nltk
$ nltk.pobierz('punkt')
W poniższym przykładzie kodu zostanie użyty akapit z „Alicji w Krainie Czarów”:
importuj nltkpara = „Albo studnia była bardzo głęboka, albo spadała bardzo wolno, bo miała
dużo czasu, kiedy schodziła, żeby się rozejrzeć i zastanowić, co się dzieje
wydarzy się dalej. Najpierw spróbowała spojrzeć w dół i zrozumieć, do czego zmierza,
ale było zbyt ciemno, żeby cokolwiek zobaczyć; potem spojrzała na boki studni i…
zauważył, że są wypełnione szafkami i półkami na książki; tu i tam ona
widziałem mapy i obrazki zawieszone na kołkach. Zdjęła słoik z jednej z półek
gdy mijała; był oznaczony jako „POMARAŃCZOWA MARMALADA”, ale ku jej wielkiemu rozczarowaniu to
była pusta: nie lubiła upuszczać słoika w obawie, że kogoś zabije, więc udało się
aby włożyć go do jednej z szafek, gdy przechodziła obok niego."
tokeny = nltk.sent_tokenize(para)
dla t w żetonach:
drukuj (t, "\n")
Uruchomienie powyższego kodu da następujące dane wyjściowe:
Albo studnia była bardzo głęboka, albo spadała bardzo wolno, bo miała mnóstwo czasu na…zeszła na dół, żeby się rozejrzeć i zastanowić, co będzie dalej.
Najpierw spróbowała spojrzeć w dół i zobaczyć, do czego zmierza, ale było za ciemno
zobaczyć cokolwiek; potem spojrzała na boki studni i zauważyła, że są
wypełnione szafkami i regałami na książki; tu i tam widziała rozwieszone mapy i zdjęcia
na kołkach.
Przechodząc zdjęła słoik z jednej z półek; był oznaczony jako „ORANGEMARMALADE”,
ale ku jej wielkiemu rozczarowaniu był pusty: nie lubiła upuszczać słoika ze strachu
zabiła kogoś, więc zdołała włożyć go do jednej z szafek, gdy wpadła obok niego.
Wbudowany tokenizator zdań Punkt działa dobrze, jeśli chcesz tokenizować proste akapity. Po zaimportowaniu modułu NLTK wystarczy użyć metody „sent_tokenize()” na dużym korpusie tekstowym. Jednak tokenizator zdań Punkt może nie wykrywać poprawnie zdań, gdy istnieje złożony akapit zawierający wiele znaków interpunkcyjnych, wykrzykników, skrótów lub powtarzających się symboli. Nie jest możliwe zdefiniowanie standardowego sposobu przezwyciężenia tych problemów. Będziesz musiał napisać niestandardowy kod, aby rozwiązać te problemy, używając wyrażenia regularnego, manipulacji ciągami lub trenując własny model danych zamiast korzystania z wbudowanego modelu danych Punkt.
Możesz także spróbować poprawić istniejący model Punktu, aby naprawić nieprawidłową tokenizację, używając dodatkowych parametrów. Aby to zrobić, postępuj zgodnie z dostępną oficjalną dokumentacją tokenizacji Punktu tutaj. Aby użyć własnych niestandardowych poprawek, wymagana jest niewielka zmiana w kodzie:
od nltk.tokenizować.punkt import PunktSentenceTokenizer, PunktParametrypara = „Albo studnia była bardzo głęboka, albo spadała bardzo wolno, bo miała dużo
czasu, gdy zeszła na dół, żeby się rozejrzeć i zastanowić, co się stanie
Kolejny. Najpierw próbowała spojrzeć w dół i zrozumieć, do czego zmierza, ale tak było
zbyt ciemno, by cokolwiek zobaczyć; potem spojrzała na boki studni i zauważyła
że były wypełnione szafami i regałami z książkami; tu i tam widziała mapy
i obrazki zawieszone na kołkach. Zdjęła słoik z jednej z półek, gdy…
przeszedł; był oznaczony jako „POMARAŃCZOWA MARMALADA”, ale ku jej wielkiemu rozczarowaniu tak było?
pusta: nie lubiła upuścić słoika w obawie, że kogoś zabije, więc udało jej się
wsadziła go do jednej z szafek, gdy przechodziła obok niego."
punkt_params = PunktParametry()
punkt_params.abbrev_types = set(['Pan', 'Pani', 'LLC'])
tokenizer = PunktSentenceTokenizer(punkt_params)
tokeny = tokenizer.tokenizować (para)
dla t w żetonach:
drukuj (t, "\n")
Powyższy kod wykonuje to samo zadanie, co metoda „sent_tokenize()”. Możesz jednak teraz definiować własne reguły za pomocą wbudowanych metod i przekazywać je jako argumenty, jak opisano w dokumentacji. Na przykład do powyższego kodu dodano kilka skrótów. Jeśli po tych skrótach następuje interpunkcja, nie zostaną one podzielone na nowe zdanie. Normalnym zachowaniem jest użycie kropki lub kropki jako wskazania końca zdania.
Wniosek
NLTK i jego metody tokenizacji są dość wydajne w tokenizacji i przetwarzaniu danych tekstowych. Jednak wstępnie wytrenowane modele mogą nie działać w 100% z różnymi rodzajami tekstów. Być może będziesz musiał ulepszyć istniejące modele, wyszkolić i dostarczyć własne lub napisać własny kod, aby naprawić anomalie.