2011-08-14 6 views
14

저는 NLTK와 Python을 처음 접했습니다. 예제에서 주어진 장난감 문법을 사용하여 문장 파싱을 만들었지 만 Penn Treebank의 일부에서 배운 문법을 사용할 수 있는지 알고 싶습니다. 말하자면, 직접 작성하거나 장난감을 사용하는 것과 반대되는 말입니다. 문법? (저는 Mac에서 Python 2.7을 사용하고 있습니다) 많은 감사Penn Treebank에서 Python & NLTK를 사용하여 문법 규칙 집합을 얻으려면 어떻게해야합니까?

답변

14

, 당신은 (아래에 의견을 참조) NLTK에 대한 Treebank 데이터를 다운로드 한 가정이 작업을 수행 할 수 있습니다

import nltk 
from nltk.corpus import treebank 
from nltk.grammar import ContextFreeGrammar, Nonterminal 

tbank_productions = set(production for sent in treebank.parsed_sents() 
         for production in sent.productions()) 
tbank_grammar = ContextFreeGrammar(Nonterminal('S'), list(tbank_productions)) 

이를 그러나 아마도 당신에게 유용한 것을주지는 못할 것입니다. NLTK는 모든 터미널이 지정된 문법으로 구문 분석 만 지원하므로 Treebank 샘플의 단어가 포함 된 문장 만 구문 분석 할 수 있습니다.

또한 Treebank에있는 많은 구의 편평한 구조 때문에이 문법은 교육에 포함되지 않은 문장으로 매우 일반적으로 일반화됩니다. 이것이 트리 뱅크를 분석하려고 시도한 NLP 응용 프로그램이 Treebank에서 CFG 규칙을 학습하는 방법을 사용하지 않은 이유입니다. 가장 가까운 기술은 Ren Bods Data Oriented Parsing 방식이지만 훨씬 더 정교합니다.

마지막으로 이것은 너무 느려서 쓸모가 없습니다. 내가 두 번째 코드를 실행할 수 없습니다 해요

mini_grammar = ContextFreeGrammar(Nonterminal('S'), 
            treebank.parsed_sents()[0].productions()) 
parser = nltk.parse.EarleyChartParser(mini_grammar) 
print parser.parse(treebank.sents()[0]) 
+0

: 단일 문장에서 문법에 대한 조치에서이 방법을보고 싶다면 그냥 작동하는지 증명하기 위해서 아래 (위의 수입 후) 코드를 시도 단편. 그것은 나에게 다음과 같은 오류가 발생합니다 : 'corpora/treebank/combined'자원을 찾을 수 없습니다. –

+2

가장 큰 원인은 NLTK를 설치할 때 Treebank 데이터를 설치하지 않았기 때문입니다. [NLTK 데이터 지침] (http://www.nltk.org/data)을 참조하십시오. 기본적으로 파이썬 인터프리터에서는'import nltk','nltk.download()'를 호출하고, "Corpora"탭을 클릭하고 "treebank"를 선택한 다음 "Download"를 클릭하고 완료되면 닫으십시오. – Constantine

관련 문제