Tokenizacja i segmentacja

Czym jest tokenizacja?

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.:

  • białymi znakami (np.: spacja)
  • znakami interpunkcyjnymi
  • tagami (znacznikami)

Przykład tokenizacji

Ei mutat utamur explicari quo. Duo at quem scripta, pertinax indoctum mel an, est ne duis populo appareat

Sentencja

Tokenizacja

Przykład tokenizacji

Ei mutat utamur explicari quo. Duo at quem scripta, pertinax indoctum mel an, est ne duis populo appareat

Sentencja

Tokenizacja

Problemy tokenizacji

Protokoły, adresy URL

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/

Nazwy własne

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

Miary

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%

Przedrostki, spacje i końcówki

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.

Przykłady wyrażeń regularnych 

Rozpoznawanie znacznika

/<p\b[^>]*>(.*?)<\/p>

Wzorzec na przykładzie znacznika <p> języka HTML

Przykład użycia

/^<([a-z]+)([^<]+)*(?:>(.*)<\/\1>|\s+\/>)$

Wzorzec dowolnego znacznika HTML

Rozpoznawanie maila

/^([a-z0-9_\.-]+)@([\da-z\.-]+)\.([a-z\.]{2,6})$/

Wzorzec

Przykłady użycia

Rozpoznawanie adresu strony

/^([a-z0-9_\.-]+)@([\da-z\.-]+)\.([a-z\.]{2,6})$/

Wzorzec

Przykłady użycia

Rozpoznawanie polskiego kodu pocztowego

/^[0-9]{2}-[0-9]{3}$

Wzorzec

Przykłady użycia

Przykłady tokenizatorów online

Zdania testowe

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.

Tokenizator nr 1

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. 

Tokenizator nr 1 - test

            53 words in 2 sentences found.

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

Tokenizator nr 2

http://text-processing.com/demo/tokenize/

2

Tokenizator wyświetla wynik podziału sentencji wg różnych kryteriów, są to:

  • TreebankWordTokenizer
  • WordPunctTokenizer
  • PunctWordTokenizer
  • WhitespaceTokenizer

"Pod maską" ma silnik NLTK dla Pythona.

Tokenizator nr 2 - test

Co to jest segmentacja?

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.

Segmentation Rules eXchange

Język oparty o XML, któy ma za zadanie tworzyć zasady segmentacji

SRX - Elementy

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

SRX - Przykład

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

Wnioski

  • język naturalny ma wpływ na tokenizacje
  • wyrażenia regularne są bardzo pomocne w tokenizacji
  • proces tokenizacji powinien być oparty na zbiorze zasad, które zawierają konkretne zachowania dla danego języka naturalnego lub też są zachowaniami ogólnymi dla rodziny języków
  • segmentacja to początkowy faza wykonywana przed procesem tokenizacji
  • tokenizacja musi się zmierzyć z wieloma problemami, które nie są oczywiste i jednoznaczne

Tokenizacja i segmentacja

By madjer22

Tokenizacja i segmentacja

  • 1,845