본문 바로가기
Programming/python

spaCy 사용하기 - tokenization

by 유주원 2018. 4. 19.

spaCy에서는 아래와 같은 방식으로 tokenization이 발생한다.


우선 whitespace 기준으로 raw text를 분리하고, 왼쪽에서 오른쪽 순서로 tokenization을 진행한다. 각각의 token은 아래의 주의사항을 거치게 된다.


1. don't 같은 경우엔 whitespace가 없지만 do, n't로 토큰화 해야 하며, U.K 같은 경우에는 하나의 토큰으로 인식해야 한다.

2. prefix, suffix, infix를 분리할 수 있는지 여부.. 아래의 그림 형태라고 생각하면 될 듯 하다.


각각의 언어마다 tokenization을 할 때 주의해야 할 특별한 규칙들이 있을 수가 있으며 spaCy에서는 이러한 규칙들을 추가할 수가 있다.






하다보니 궁금한 사항이 생겼는데.. 규칙 지우는건 어떻게 지울까?? 먼가 있겠지..


spaCy에서는 아래의 로직으로 tokenizer가 동작한다고 한다.



간략하게 설명하자면 , 우선 빈 공백으로 문장을 분리해서 substring을 만든다. 그 후 substring이 special_case인지를 확인해서 special_case이면 token에 추가한다.


special_case가 아니라면 해당 substring이 prefix인지를 찾아서, prefix를 token에 추가한다.

suffix, infix도 같은 방법으로 진행하면서 tokenizing을 진행한다.


아래의 코드처럼 tokenizer를 customizing 할 수도 있다.



prefix를 찾기 위한 함수, suffix를 찾기 위한 함수, infix를 찾기 위한 함수를 각각 만든 후 파라미터로 넘겨 주자. token_match 같은 경우에는 해당 조건에 맞는 문자열을 찾은 경우 문자열을 분리(tokenizing) 하지 말아야 한다. url 혹은 숫자 같은 경우에 유용하다.


이번에는 아래와 같은 방법으로 whitespace tokenizer를 만들어 보자.