[파이썬] nltk 텍스트에서의 시간 정보 추출
자연어 처리란 컴퓨터와 사람 사이에서 자연스러운 언어로 대화할 수 있는 인터페이스를 만드는 것을 의미합니다. 이러한 자연어 처리 작업을 수행할 때, 텍스트에 포함된 시간 정보를 추출하는 것은 중요한 과제 중 하나입니다. nltk (Natural Language Toolkit)은 파이썬의 강력한 자연어 처리 라이브러리로, 텍스트에서 시간 정보를 추출하는 기능을 제공합니다.
시간 정보 추출 방법
nltk를 사용하여 텍스트에서 시간 정보를 추출하는 방법은 다음과 같습니다:
- 토큰화(Tokenization): 텍스트를 단어나 문장 단위로 나누는 작업을 수행합니다. nltk의
word_tokenize()
함수를 사용하여 문장을 단어 단위로 토큰화 할 수 있습니다.
import nltk
from nltk.tokenize import word_tokenize
text = "I have a meeting at 2pm tomorrow."
tokens = word_tokenize(text)
print(tokens)
결과:
['I', 'have', 'a', 'meeting', 'at', '2pm', 'tomorrow', '.']
- 품사 태깅(Part-of-Speech Tagging): 각 토큰에 대해 그것의 품사를 태깅합니다. nltk의
pos_tag()
함수를 사용하여 각 단어의 품사를 확인할 수 있습니다.
from nltk.tag import pos_tag
tagged_tokens = pos_tag(tokens)
print(tagged_tokens)
결과:
[('I', 'PRP'), ('have', 'VBP'), ('a', 'DT'), ('meeting', 'NN'), ('at', 'IN'), ('2pm', 'CD'), ('tomorrow', 'NN'), ('.', '.')]
- 정규 표현식(Regular Expression)을 사용하여 시간 정보를 추출합니다. nltk의
RegexpParser
를 사용하여 정규 표현식 기반의 Chunking 작업을 수행할 수 있습니다.
from nltk.chunk import RegexpParser
grammar = r"""
TIME: {<CD><NN|NNS>?}
"""
chunk_parser = RegexpParser(grammar)
chunked_tokens = chunk_parser.parse(tagged_tokens)
print(chunked_tokens)
결과:
(S
I/PRP
have/VBP
a/DT
meeting/NN
at/IN
(TIME 2pm/CD tomorrow/NN)
./.)
- 시간 정보 추출: Chunking 작업을 통해 추출된 시간 정보를 필터링합니다. 각 Chunk에서 시간 정보에 대한 필터링 처리를 추가하여 추출할 수 있습니다.
for subtree in chunked_tokens.subtrees():
if subtree.label() == 'TIME':
time_chunk = subtree
time_words = [token[0] for token in time_chunk.leaves()]
time = ' '.join(time_words)
print(time)
결과:
2pm
마무리
nltk를 사용하여 텍스트에서 시간 정보를 추출하는 방법에 대해 살펴보았습니다. 이와 같은 자연어 처리 기술을 활용하면 텍스트에서 다양한 유형의 정보를 추출할 수 있습니다. 그러나 정확한 시간 정보 추출을 위해서는 텍스트 데이터의 특성을 고려해서 정교한 표현식을 작성해야합니다.