Zestaw narzędzi języka naturalnego - tokenizacja tekstu
Co to jest tokenizacja?
Można to zdefiniować jako proces dzielenia fragmentu tekstu na mniejsze części, takie jak zdania i słowa. Te mniejsze części nazywane są żetonami. Na przykład słowo jest tokenem w zdaniu, a zdanie jest tokenem w akapicie.
Ponieważ wiemy, że NLP jest wykorzystywane do budowania aplikacji, takich jak analiza sentymentu, systemy QA, tłumaczenia językowe, inteligentne chatboty, systemy głosowe itp., Dlatego aby je zbudować, konieczne jest zrozumienie wzorca w tekście. Wspomniane wyżej tokeny są bardzo przydatne w znajdowaniu i zrozumieniu tych wzorców. Możemy uznać tokenizację za podstawowy krok dla innych przepisów, takich jak wyrastanie i lematyzacja.
Pakiet NLTK
nltk.tokenize to pakiet dostarczany przez moduł NLTK do realizacji procesu tokenizacji.
Tokenizacja zdań na słowa
Dzielenie zdania na słowa lub tworzenie listy słów z ciągu znaków jest istotną częścią każdej czynności przetwarzania tekstu. Zrozummy to za pomocą różnych funkcji / modułów dostarczonych przeznltk.tokenize pakiet.
moduł word_tokenize
word_tokenizeModuł służy do podstawowego tokenizacji słów. Poniższy przykład użyje tego modułu do podzielenia zdania na słowa.
Przykład
import nltk
from nltk.tokenize import word_tokenize
word_tokenize('Tutorialspoint.com provides high quality technical tutorials for free.')
Wynik
['Tutorialspoint.com', 'provides', 'high', 'quality', 'technical', 'tutorials', 'for', 'free', '.']
TreebankWordTokenizer Class
word_tokenize użyty powyżej jest w zasadzie funkcją opakowującą, która wywołuje funkcję tokenize () jako instancję TreebankWordTokenizerklasa. Daje to ten sam wynik, jaki otrzymujemy podczas używania modułu word_tokenize () do dzielenia zdań na słowa. Zobaczmy ten sam przykład zaimplementowany powyżej -
Przykład
Najpierw musimy zaimportować zestaw narzędzi języka naturalnego (nltk).
import nltk
Teraz zaimportuj plik TreebankWordTokenizer klasa implementująca algorytm tokenizera słowa -
from nltk.tokenize import TreebankWordTokenizer
Następnie utwórz instancję klasy TreebankWordTokenizer w następujący sposób -
Tokenizer_wrd = TreebankWordTokenizer()
Teraz wprowadź zdanie, które chcesz zamienić na tokeny -
Tokenizer_wrd.tokenize(
'Tutorialspoint.com provides high quality technical tutorials for free.'
)
Wynik
[
'Tutorialspoint.com', 'provides', 'high', 'quality',
'technical', 'tutorials', 'for', 'free', '.'
]
Kompletny przykład wdrożenia
Zobaczmy poniżej pełny przykład wdrożenia
import nltk
from nltk.tokenize import TreebankWordTokenizer
tokenizer_wrd = TreebankWordTokenizer()
tokenizer_wrd.tokenize('Tutorialspoint.com provides high quality technical
tutorials for free.')
Wynik
[
'Tutorialspoint.com', 'provides', 'high', 'quality',
'technical', 'tutorials','for', 'free', '.'
]
Najważniejszą konwencją tokenizera jest oddzielanie skurczów. Na przykład, jeśli użyjemy do tego celu modułu word_tokenize (), to da wynik w następujący sposób -
Przykład
import nltk
from nltk.tokenize import word_tokenize
word_tokenize('won’t')
Wynik
['wo', "n't"]]
Taka konwencja wg TreebankWordTokenizerjest niedopuszczalne. Dlatego mamy dwa alternatywne tokenizery słów, a mianowiciePunktWordTokenizer i WordPunctTokenizer.
Klasa WordPunktTokenizer
Alternatywny tokenizer słów, który dzieli wszystkie znaki interpunkcyjne na oddzielne tokeny. Zrozummy to na następującym prostym przykładzie -
Przykład
from nltk.tokenize import WordPunctTokenizer
tokenizer = WordPunctTokenizer()
tokenizer.tokenize(" I can't allow you to go home early")
Wynik
['I', 'can', "'", 't', 'allow', 'you', 'to', 'go', 'home', 'early']
Tokenizacja tekstu na zdania
W tej sekcji zamierzamy podzielić tekst / akapit na zdania. NLTK zapewniasent_tokenize moduł do tego celu.
Dlaczego jest to potrzebne?
Oczywistym pytaniem, które przyszło nam do głowy, jest to, że kiedy mamy tokenizator słów, to po co nam tokenizator zdań lub dlaczego musimy tokenizować tekst na zdania. Załóżmy, że musimy policzyć przeciętne słowa w zdaniach, jak możemy to zrobić? Do wykonania tego zadania potrzebujemy zarówno tokenizacji zdań, jak i tokenizacji słów.
Zrozummy różnicę między tokenizatorem zdań i słów, posługując się prostym przykładem -
Przykład
import nltk
from nltk.tokenize import sent_tokenize
text = "Let us understand the difference between sentence & word tokenizer.
It is going to be a simple example."
sent_tokenize(text)
Wynik
[
"Let us understand the difference between sentence & word tokenizer.",
'It is going to be a simple example.'
]
Tokenizacja zdań przy użyciu wyrażeń regularnych
Jeśli uważasz, że dane wyjściowe tokenizera słów są niedopuszczalne i chcesz mieć pełną kontrolę nad sposobem tokenizacji tekstu, mamy wyrażenie regularne, którego można użyć podczas tokenizacji zdań. NLTK zapewniająRegexpTokenizer klasa, aby to osiągnąć.
Zrozummy tę koncepcję na dwóch poniższych przykładach.
W pierwszym przykładzie użyjemy wyrażenia regularnego do dopasowania tokenów alfanumerycznych i pojedynczych cudzysłowów, aby nie dzielić kontrakcji, takich jak “won’t”.
Przykład 1
import nltk
from nltk.tokenize import RegexpTokenizer
tokenizer = RegexpTokenizer("[\w']+")
tokenizer.tokenize("won't is a contraction.")
tokenizer.tokenize("can't is a contraction.")
Wynik
["won't", 'is', 'a', 'contraction']
["can't", 'is', 'a', 'contraction']
W pierwszym przykładzie użyjemy wyrażenia regularnego do tokenizacji białych znaków.
Przykład 2
import nltk
from nltk.tokenize import RegexpTokenizer
tokenizer = RegexpTokenizer('/s+' , gaps = True)
tokenizer.tokenize("won't is a contraction.")
Wynik
["won't", 'is', 'a', 'contraction']
Z powyższego wyniku widać, że znaki interpunkcyjne pozostają w tokenach. Parametr gaps = True oznacza, że wzorzec będzie identyfikował luki do tokenizacji. Z drugiej strony, jeśli użyjemy parametru gaps = False, to wzorzec zostanie użyty do identyfikacji tokenów, co widać w poniższym przykładzie -
import nltk
from nltk.tokenize import RegexpTokenizer
tokenizer = RegexpTokenizer('/s+' , gaps = False)
tokenizer.tokenize("won't is a contraction.")
Wynik
[ ]
To da nam puste wyjście.