[python] NLTK를 사용해 문맥 자유 문법을 분석하는 방법은 무엇인가요?
NLTK는 자연어 처리를 위한 파이썬 라이브러리로, 많은 기능을 제공합니다. 이 중에서도 NLTK는 문맥 자유 문법 분석에 유용한 기능을 제공합니다.
먼저, NLTK를 사용하기 위해 nltk
모듈을 import합니다:
import nltk
NLTK에서 제공하는 기본적인 CFG 분석 도구를 사용하기 위해 nltk.CFG
클래스와 nltk.ChartParser
클래스를 import합니다:
from nltk import CFG, ChartParser
이제 분석할 문법을 작성합니다. 문법은 규칙(rule)의 집합으로 구성됩니다. 각 규칙은 특정 심볼(symbol)의 형태를 정의합니다. 심볼은 단어 또는 문법 내에서 사용되는 토큰입니다.
예를 들어, 간단한 문법을 작성해보겠습니다:
grammar = CFG.fromstring("""
S -> NP VP
NP -> DET N
VP -> V NP
DET -> 'the' | 'a'
N -> 'cat' | 'dog'
V -> 'chased' | 'bit'
""")
이제 문법을 사용하여 문장을 분석해보겠습니다. ChartParser
클래스를 사용하여 문장을 파싱합니다:
parser = ChartParser(grammar)
sentence = "the cat chased the dog"
parsed_sentences = parser.parse(sentence.split())
ChartParser.parse()
메서드는 입력 문장을 분석하고, 가능한 모든 파싱 트리를 반환합니다. 반환된 파싱 트리를 순회하며 원하는 정보를 추출할 수 있습니다.
예를 들어, 첫 번째 파싱 트리의 구조를 확인해보겠습니다:
for tree in parsed_sentences:
print(tree)
tree.pretty_print()
break
출력 결과:
``` (S (NP (DET the) (N cat)) (VP (V chased) (NP (DET the) (N dog)))) S __| | VP | __|_ NP | NP |__ | __| DET N V DET N | | | | | the catch