[파이썬] nltk 텍스트에서의 시간 정보 추출

자연어 처리란 컴퓨터와 사람 사이에서 자연스러운 언어로 대화할 수 있는 인터페이스를 만드는 것을 의미합니다. 이러한 자연어 처리 작업을 수행할 때, 텍스트에 포함된 시간 정보를 추출하는 것은 중요한 과제 중 하나입니다. nltk (Natural Language Toolkit)은 파이썬의 강력한 자연어 처리 라이브러리로, 텍스트에서 시간 정보를 추출하는 기능을 제공합니다.

시간 정보 추출 방법

nltk를 사용하여 텍스트에서 시간 정보를 추출하는 방법은 다음과 같습니다:

  1. 토큰화(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', '.']
  1. 품사 태깅(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'), ('.', '.')]
  1. 정규 표현식(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)
  ./.)
  1. 시간 정보 추출: 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를 사용하여 텍스트에서 시간 정보를 추출하는 방법에 대해 살펴보았습니다. 이와 같은 자연어 처리 기술을 활용하면 텍스트에서 다양한 유형의 정보를 추출할 수 있습니다. 그러나 정확한 시간 정보 추출을 위해서는 텍스트 데이터의 특성을 고려해서 정교한 표현식을 작성해야합니다.