갈루아의 반서재

NLTK (4) - 정규표현식을 사용한 문자 분해 Tokenizing sentences using regular expressions


RegexpTokenizer 인스턴스를 생성한 후, 매칭 토큰을 사용하기위해 정규표현식 문장에 적용시켜보자. 

from nltk.tokenize import RegexpTokenizer
tokenizer = RegexpTokenizer("[\w']+")
tokenizer.tokenize("Can't is a contraction.")
Out[6]:
["Can't", 'is', 'a', 'contraction']

클래스를 생성하고 싶지 않다면 다음과 같은 헬퍼 함수를 이용할 수도 있다.

from nltk.tokenize import regexp_tokenize
regexp_tokenize("Can't is a contraction.", "[\w']+")
Out[7]:
["Can't", 'is', 'a', 'contraction']

축약형을 이제 하나의 단어로 다룰 수 있게 되었다. 

※ 정규표현식에 대해서는 아래 링크 참고https://ko.wikipedia.org/wiki/%EC%A0%95%EA%B7%9C_%ED%91%9C%ED%98%84%EC%8B%9D

RegexpTokenizer는 토큰과는 반대로 gap과 매칭해서 사용할 수도 있다. re.findall() 을 사용하는대신, RegexpTokenizer 클래스는 re.split() 을 사용할 것이다. BlanklineTokenizer 클래스가 nltk.tokenize 에서 구현되는 방법이다.


Simple whitespace tokenizer

아래는 공백을 기준으로 분해하는 코드이다. 구두점이 여전히 토큰 속에 포함되어 있음을 알 수 있다. gaps=True 라는 파라메터는 그 패턴이 분해하는 갭을 정의하는데 사용된다는 의미이고, gaps=False 라고 두면 해당 패턴은 토큰을 정의하는데 사용된다는 의미이다. 

from nltk.tokenize import RegexpTokenizer
tokenizer = RegexpTokenizer('\s+', gaps=True)
regexp_tokenize("Can't is a contraction.", "[\w']+")
Out[8]:
["Can't", 'is', 'a', 'contraction']