Jak używać modułu tokenize w Python

Jak używać modułu tokenize w Python
W tym artykule obejmie przewodnik po użyciu modułu „tokenize” w Python. Moduł tokenize można użyć do segmentu lub podziału tekstu na małe kawałki na różne sposoby. Możesz użyć tych segmentów w aplikacjach Python, które wykorzystują uczenie maszynowe, przetwarzanie języka naturalnego i algorytmy sztucznej inteligencji. Wszystkie próbki kodu w tym artykule są testowane z Python 3.9.5 na Ubuntu 21.04.

O module tokenize

Jak sama nazwa wskazuje, moduł tokenize można użyć do tworzenia „tokenów” z akapitu lub części tekstu. Każdy pojedynczy zepsuty kawałek powrócił po procesie tokenizacji nazywany tokenem. Po tokenizowaniu tekstu możesz zaimplementować własną logikę w programie Python, aby przetwarzać tokeny zgodnie z przypadkiem użycia. Moduł tokenize zapewnia kilka przydatnych metod, które można użyć do tworzenia tokenów. Wykorzystanie tych metod można najlepiej zrozumieć za pomocą przykładów. Niektóre z nich są wyjaśnione poniżej.

Tokenizowanie akapitu lub wyroku

Możesz tokenizować akapit lub zdanie za pomocą słów oddzielonych przestrzenią za pomocą próbki kodu wyjaśnionej poniżej.

importować tokenize
z IO Import Bajtesio
Text = "LoreM ipsum dolor sit amet, konsektowo -adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua."
tokeny = tokenize.tokenize (bajtsio (tekst.enkoduj („UTF-8”)).Czytaj linię)
Dla t w tokenach:
Drukuj (t)

Pierwsze dwa stwierdzenia importują niezbędne moduły Pythona wymagane do przekształcenia kawałka tekstu na indywidualne tokeny. Zmienna o nazwie „tekst” zawiera przykładowy ciąg. Następnie wywoływana jest metoda „tokenize” z modułu tokenize. Wykorzystuje metodę „odczytu” jako obowiązkowego argumentu. Ponieważ zmienna tekstowa jest typu „str”, użycie jej bezpośrednio spowoduje błąd. Argument LILINE jest metodą, która musi zwracać bajty zamiast ciągu, aby metoda tokenize działała poprawnie. Korzystając z klasy „bajtesio”, tekst jest konwertowany na strumień bajtów, określając typ kodowania.

Metoda tokenize generuje nazwany krotek zawierający pięć typów: typ (typ tokena), ciąg (nazwa tokena), start (pozycja początkowa tokena), koniec (pozycja końcowa tokena) i linia (linia (linia linii To było używane do tworzenia tokenów). Więc po uruchomieniu powyższej próbki kodu należy uzyskać wyjście podobne do tego:

Tokeninfo (type = 62 (kodowanie), string = 'utf-8', start = (0), end = (0, 0), line = ")
Tokeninfo (typ = 1 (nazwa), string = 'loreM', start = (1, 0), end = (1, 5), linia = 'lore ipsum dolor sit amet, cunipiscing elit, sed do eiusmod tempor incydIdunt Ut Ut Labore et Dolore Magna Aliqua.')


Tokeninfo (typ = 54 (op), string = '.', start = (1, 122), end = (1, 123), linia =' lorem ipsum dolor sit amet, konsektowa całodzowie elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua aliqua.')
Tokeninfo (typ = 4 (newline), string = ", start = (1, 123), end = (1, 124), line =")
Tokeninfo (type = 0 (endmarker), string = ", start = (2, 0), end = (2, 0), line =")

Jak widać na powyższym wyjściu, metoda tokenize generuje „Tokeninfo”Obiekt z pięcioma typami wymienionymi powyżej. Jeśli chcesz uzyskać dostęp do tego typu indywidualnie, użyj notacji kropkowej (jak pokazano w poniższym próbce kodu).

importować tokenize
z IO Import Bajtesio
Text = "LoreM ipsum dolor sit amet, konsektowo -adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua."
tokeny = tokenize.tokenize (bajtsio (tekst.enkoduj („UTF-8”)).Czytaj linię)
Dla t w tokenach:
Drukuj (t.String, t.Start, t.koniec, t.typ)

Po uruchomieniu powyższej próbki kodu należy uzyskać następujące dane wyjściowe:


UTF-8 (0, 0) (0, 0) 62
LORM (1, 0) (1, 5) 1
ipsum (1, 6) (1, 11) 1

Zauważ, że „T.typ„Wywołanie zwraca stały numer dla typu tokena. Jeśli chcesz bardziej czytelnego typu tokena, użyj „znak”Moduł i„Tok_name„Dostępny w nim słownik.

importować tokenize
z IO Import Bajtesio
import token
Text = "LoreM ipsum dolor sit amet, konsektowo -adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua."
tokeny = tokenize.tokenize (bajtsio (tekst.enkoduj („UTF-8”)).Czytaj linię)
Dla t w tokenach:
Drukuj (t.String, t.Start, t.koniec, token.tok_name [t.typ])

Dostarczając „t.Wpisz „stały na słownik„ tok_name ”, możesz uzyskać czytelną nazwę człowieka dla typu tokena. Po uruchomieniu powyższej próbki kodu należy uzyskać następujące dane wyjściowe:

UTF-8 (0, 0) (0, 0)
LOREM (1, 0) (1, 5)
Ipsum (1, 6) (1, 11)
nazwa Dolor (1, 12) (1, 17)

Pełna lista wszystkich rodzajów tokenów i ich nazwiska jest dostępne tutaj. Zauważ, że pierwszy token jest zawsze typem kodowania strumienia wejściowego i nie ma wartości początkowej i końcowej.

Możesz łatwo uzyskać listę nazwy tokenów za pomocą instrukcji lub rozumiania listy pętli, jak pokazano w poniższej próbce kodu.

importować tokenize
z IO Import Bajtesio
Text = "LoreM ipsum dolor sit amet, konsektowo -adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua."
tokeny = tokenize.tokenize (bajtsio (tekst.enkoduj („UTF-8”)).Czytaj linię)
token_list = [t.sznur dla t w tokenach]
Drukuj (token_list)

Po uruchomieniu powyższej próbki kodu należy uzyskać następujące dane wyjściowe:

[„Utf-8”, „LoreM”, „ipsum”, „dolor”, „sit”, „amet”, ”,”, „konsekttur”, „adipiscing”, „elit”, ”,„, „sed” , 'do', 'eiusmod', 'tempor', 'incididunt', 'ut', 'labore', 'et', 'dolore', 'magna', 'aliqua', '.', ","]

Możesz użyć metody „Geneate_tokens” dostępnej w module tokenize, jeśli chcesz tokenizować ciąg bez przekształcania go w bajty. Nadal podejmuje metodę odczytu, który jest obowiązkowym argumentem, ale obsługuje tylko ciągi zwrócone metodą Readline, a nie bajty (w przeciwieństwie do metody tokenize wyjaśnionej powyżej). Poniższa próbka kodu ilustruje użycie metody generate_tokens. Zamiast klasy bajtejskiej, teraz używana jest klasa „stringio”.

importować tokenize
z IO Import Stringio
Text = "LoreM ipsum dolor sit amet, konsektowo -adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua."
tokeny = tokenize.generate_tokens (Stringio (tekst).Czytaj linię)
token_list = [t.sznur dla t w tokenach]
Drukuj (token_list)

Po uruchomieniu powyższej próbki kodu należy uzyskać następujące dane wyjściowe:

['Lorem', 'ipsum', 'dolor', 'sit', 'amet', ',', 'consectetur', 'adipiscing', 'elit', ',', 'sed', 'do', ' eiusmod ', „Tempor”, „incididunt”, „ut”, „labore”, „et”, „dolore”, „magna”, „aliqua”,', ','.', ","]

Tokenizowanie zawartości pliku

Możesz użyć instrukcji „z otwartą” w trybie „RB”, aby bezpośrednio odczytać zawartość pliku, a następnie tokenizować. Tryb „R” w „RB” oznacza tryb tylko do odczytu, podczas gdy „B” oznacza tryb binarny. Poniższa próbka kodu otwiera „próbkę.plik txt ”i tokenizuje jego zawartość za pomocą metod tokenize i odczytu linii.

importować tokenize
z otwartą („próbka.txt "," rb ") jako f:
tokeny = tokenize.tokenize (f.Czytaj linię)
token_list = [t.sznur dla t w tokenach]
Drukuj (token_list)

Możesz także użyć „Otwórz”, metody wygody dostępnej w module tokenize, a następnie wywołać generat_tokens i metody odczytu, aby bezpośrednio tworzyć tokeny z pliku.

importować tokenize
z tokenize.otwarte („próbka.txt ") jako f:
tokeny = tokenize.generate_tokens (f.Czytaj linię)
token_list = [t.sznur dla t w tokenach]
Drukuj (token_list)

Zakładając, że próbka.plik txt zawiera ten sam przykładowy ciąg, należy uzyskać następujące dane wyjściowe po uruchomieniu dwóch próbek kodów wyjaśnionych powyżej.

['Lorem', 'ipsum', 'dolor', 'sit', 'amet', ',', 'consectetur', 'adipiscing', 'elit', ',', 'sed', 'do', ' eiusmod ', „Tempor”, „incididunt”, „ut”, „labore”, „et”, „dolore”, „magna”, „aliqua”,', ','.', ","]

Wniosek

Moduł tokenize w Python zapewnia użyteczny sposób na tokenizację fragmentów tekstu zawierające. Tworzy także mapę początkowych i końcowych pozycji tokenów. Jeśli chcesz tokenizować każde słowo tekstu, metoda tokenize jest lepsza niż metoda „podzielona”, ponieważ zajmuje się również tokenizującymi postaciami interpunkcyjnymi / innymi symbolami, a także zapiera typ tokena.