EXCELSIOR

Chap01-1: Token, Tokenize, Tokenizer 본문

NLP/NLTK

Chap01-1: Token, Tokenize, Tokenizer

Excelsior-JH 2016. 12. 13. 22:12

1. Tokenizing text into sentences

Tokenization이란 문자열을 여러개의 조각, 즉 여러 개의 Token(토큰)들로 쪼개는 것을 말한다. Token은 문자열의 한 조각으로 하나의 단어가 하나의 토큰이라고 할 수 있다.


1)  paragraph 을 문장 단위로 tokenize하기

nltk의 sentence tokenization function인 sent_tokenize를 통해 단락을 문장단위로 분리해본다.

from nltk.tokenize import sent_tokenize
para = "Hello World. It's good to see you. Thanks for buying this book."
print(sent_tokenize(para))
['Hello World.', "It's good to see you.", 'Thanks for buying this book.']

2. Tokenizing sentences into words

가장 기본적인 word tokenization은 word_tokenize( ) 함수이다. 이 함수는 space 단위와 구두점(punctuation)을 기준으로 토큰화(Tokenize)한다.

from nltk.tokenize import word_tokenize
print(word_tokenize('Hello World.'))
#결과
['Hello', 'World', '.']

Tokenizer의 종류는 다음 그림과 같다.



1) Separating contractions

Tokenizer들의 가장 중요한 규칙(?) 중 하나는 바로 축약형(contraction) 단어의 분리이다. word_tokenize( )를 사용하면 can't가 다음과 같이 분리된다.

from nltk.tokenize import word_tokenize
print(word_tokenize("can't"))
#결과
['ca', "n't"]

WordPunctTokenizer

word_tokenize( )의 대안으로 WordPunctTokenizer가 있다. 이 Tokenizer는 모든 구두점(punctuation)을 기준으로 분리한다. 

from nltk.tokenize import WordPunctTokenizer
tokenizer = WordPunctTokenizer()
print(tokenizer.tokenize("Can't is a contraction."))
# 결과
['Can', "'", 't', 'is', 'a', 'contraction', '.']


3. Tokenizing sentences using regular expressions

정규식 또는 정규표현(regular expression)은 특정 문자의 집합 또는 문자열을 기호로 바꾸어 나타내는 방법으로 텍스트를 어떻게 토큰화(Tokenize) 할건지에 대해 사용할 수 있다.  다음은 정규표현식의 일부분을 나타낸 표이다.(출처:http://www.nextree.co.kr/p4327/)


from nltk.tokenize.regexp import RegexpTokenizer
tokenizer = RegexpTokenizer("[\w']+")
print(tokenizer.tokenize("Can't is a contraction."))
#결과
["Can't", 'is', 'a', 'contraction']

from nltk.tokenize.regexp import regexp_tokenize
print(regexp_tokenize("Can't is a contraction.", "[\w']+"))
#결과
["Can't", 'is', 'a', 'contraction']

1) Simple whitespace tokenizer

RegexpTokenizer은 공백을 매칭하여 분리할 수도 있다. 

from nltk.tokenize.regexp import RegexpTokenizer
tokenizer = RegexpTokenizer("\s+", gaps=True)
print(tokenizer.tokenize("Can't is a contraction."))
# 결과
["Can't", 'is', 'a', 'contraction.']


4. Filtering stopwords in a tokenized sentence

Stopwords(불용어)는 information retrieval 이나 NLP(Natural Language Processing)에서 의미를 가지지 않는 단어들을 의미한다. 예를 들어, 관사, 전치사, 조사, 접속사 등이 불용어에 해당한다.

NLTK 영어 뿐만아니라 독일어, 스페인어 등 다양한 언어의 불용어를 제공한다. nltk_data/corpora/stopwords/에서 확인할 수 있다.

from nltk.corpus import stopwords
english_stops = set(stopwords.words('english'))
words = ["Can't", 'is', 'a', 'contraction']
print([word for word in words if word not in english_stops])
#결과
["Can't", 'contraction']

다음 fileids( )함수를 통해 NLTK의 stopwords 불용어를 제공하는 국가의 언어를 확인할 수 있다.

print(stopwords.fileids())
#결과
['danish', 'dutch', 'english', 'finnish', 'french', 'german', 'hungarian',
 'italian', 'kazakh', 'norwegian', 'portuguese', 'russian', 'spanish', 'swedish', 'turkish']


Comments