Tokenizacja jest procesem w wyniku którego z podanego ciągu tekstowego (zdania/zdań) powstają podzielone kawałki tego tekstu. Te kawałki tekstu nazywają się: tokeny. Program, który wykonuje tokenizacje nazywamy tokenizatorem.
Tokeny mogą być dzielone w tekście m.in.:
Ei mutat utamur explicari quo. Duo at quem scripta, pertinax indoctum mel an, est ne duis populo appareat
Sentencja
Tokenizacja
Ei mutat utamur explicari quo. Duo at quem scripta, pertinax indoctum mel an, est ne duis populo appareat
Sentencja
Tokenizacja
Problemem dla wielu tokenizatorów jest rozpoznawanie adresów URL różnych protokołów, niektóre potrafią wydzielić adres. Problemem jednak jest jednak rozpoznanie adresu w protokole.
Patterns
Tokenizer
https://www.wmi.amu.edu.pl/pl/kontakt
ftp://www.wmi.amu.edu.pl/
Tokenizatory mają też problemy z nazwami własnymi, są to m.in.: nazwiska, nazwy obiektów czy też nazwy geograficzne. Rozwiązaniem jest wprowadzenie bazy wiedz nazw własnych w konkretny językum (większość dostępnych jest po angielsku).
Patterns
Tokenizer
Jan Nowak-Jeziorański
Most św. Rocha
Zielona Góra
Kolejnym źródłem kłopotów stają się miary takie jak: waluty, jednostki wagi, odległośći pojemności, procenty itp. Unikatowe jednostki miar ("m", "kg", "l") powinny być z zasady rozpoznawane wszędzie, jednak tak nie jest. Poza tym problemem staje się też liczba rzeczywista, a znak "%", który piszę się bez spacji, jest także dzielony przez tokenizer.
Patterns
Tokenizer
10 zł
1,5 m
10 kg
2 l
100%
Tytuły, stopnie zawodowe czy też naukowe, a także różne inne skróty, chociażby znak "." używanych w datach; potrafią być kłopotliwe. Najwięcej problemów budzi jednak znak spacji, który czasami powinien być splitem, a czasami nie.
Patterns
Tokenizer
dr Who
inż. Kowalski
lata 80. XX wieku
2000r.
/<p\b[^>]*>(.*?)<\/p>
Wzorzec na przykładzie znacznika <p> języka HTML
Przykład użycia
/^<([a-z]+)([^<]+)*(?:>(.*)<\/\1>|\s+\/>)$
Wzorzec dowolnego znacznika HTML
/^([a-z0-9_\.-]+)@([\da-z\.-]+)\.([a-z\.]{2,6})$/
Wzorzec
Przykłady użycia
/^([a-z0-9_\.-]+)@([\da-z\.-]+)\.([a-z\.]{2,6})$/
Wzorzec
Przykłady użycia
/^[0-9]{2}-[0-9]{3}$
Wzorzec
Przykłady użycia
The Laws of the Game were originally codified in England by The Football Association in 1863. Association football is governed internationally by the International Federation of Association Football (FIFA; French: Fédération Internationale de Football Association), which organises World Cups for both men and women every four years.
http://morphadorner.northwestern.edu/wordtokenizer/example/
1
Tokenizer ten jest wart uwagi ze względu na to iż rozpoznaje język, co przekłada się na lepszy podział tekstu w danym języku. Ponadto w swoich podziałach wyznacza wyrazy oraz dzielące je punktory.
S#W#TokenType
1 | 1 | The | token |
1 | 2 | Laws | token |
1 | 3 | of | token |
1 | 4 | the | token |
1 | 5 | Game | token |
1 | 6 | were | token |
1 | 7 | originally | token |
1 | 8 | codified | token |
1 | 9 | in | token |
1 | 10 | England | token |
1 | 11 | by | token |
1 | 12 | The | token |
1 | 13 | Football | token |
1 | 14 | Association | token |
1 | 15 | in | token |
1 | 16 | 1863. | number |
2 | 1 | Association | token |
2 | 2 | football | token |
2 | 3 | is | token |
2 | 4 | governed | token |
2 | 5 | internationally | token |
2 | 6 | by | token |
2 | 7 | the | token |
2 | 8 | International | token |
2 | 9 | Federation | token |
2 | 10 | of | token |
2 | 11 | Association | token |
2 | 12 | Football | token |
2 | 13 | ( | punctuation |
2 | 14 | FIFA | token |
2 | 15 | ; | punctuation |
2 | 16 | French | token |
2 | 17 | : | punctuation |
2 | 18 | Fédération | token |
2 | 19 | Internationale | token |
2 | 20 | de | token |
2 | 21 | Football | token |
2 | 22 | Association | token |
2 | 23 | ) | punctuation |
2 | 24 | , | punctuation |
2 | 25 | which | token |
2 | 26 | organises | token |
2 | 27 | World | token |
2 | 28 | Cups | token |
2 | 29 | for | token |
2 | 30 | both | token |
2 | 31 | men | token |
2 | 32 | and | token |
2 | 33 | women | token |
2 | 34 | every | token |
2 | 35 | four | token |
2 | 36 | years | token |
2 | 37 | . | punctuation |
http://text-processing.com/demo/tokenize/
2
Tokenizator wyświetla wynik podziału sentencji wg różnych kryteriów, są to:
"Pod maską" ma silnik NLTK dla Pythona.
Segmentacja jak nazwa wskazuje, to segmentowanie czegoś. Mówiąć ściślej jest wstępnym procesem dla tokenizacji, to dzielenie tekstu na fragmenty - zdania. Bardzo ważnym problemem segmentacji jest zbadanie czy kropka kończy zdanie.
Język oparty o XML, któy ma za zadanie tworzyć zasady segmentacji
reguły dla zbioru języków
<languagerules>
<languagerule>
<rule>
<maprules>
reguły dla konkretnego języka
pojedyncza reguła
mapa reguł wiążąca reguły z językiem
Reguła, która zapobiega łamaniu zdania po kropce poprzedzonej regexem (jak w kodzie)
<languagerules>
<languagerule languagerulename="default">
<rule break="no">
<beforebreak>([A-Z]\.){2,}</beforebreak>
<afterbreak>\s</afterbreak>
</rule>
<rule break="yes">
<beforebreak>\.</beforebreak>
<afterbreak>\s</afterbreak>
</rule>
</languagerule>
</languagerules>
Zdanie testowe
I'm in the U.K. for now. But I plan to move to Papua New Guinea.
Po segmentacji
[I'm in the U.K. for now.]
[ But I plan to move to Papua New Guinea.]
[I'm in the U.K.]
[ for now.]
[ But I plan to move to Papua New Guinea.]
Bez pierwszej reguły