2017-03-03 8 views
0

그래서 아주 간단한 파서를 사용하여 WSJ 코퍼스의 일부 문장을 청크로 처리해야합니다. 내가 pos 태그를 문장 자신을 그것은 작동하지만 ... 태그 지정된 문장을 얻으려면 주어진 방법을 사용하지 마십시오.태그가 지정된 집합 중 하나가 구문 분석되지 않는 이유는 무엇입니까?

제 과제는 WSJ corpus nltk.corpus.treebank.tagged_sents()라는 콘텐츠의 문장 200-220을 사용하도록 권유했습니다. 그러나 파서가 내게 오류를주고있다. 작동하지 않는 자신의 코드를 사용하여

tbss = concat(treebank.sents()[200:220]) 
tag1 = nltk.pos_tag(tbss) 
print(cp.parse(tag1)) 

: (수동 작동 문장 태그) 작동

내 코드

tag2 = nltk.corpus.treebank.tagged_sents()[200:220] 
print(cp.parse(tag2)) 
>>> ValueError: chunk structures must contain tagged tokens or trees 

이유는 정확히주는 두 번째입니다 오류? 나는 태그 1과 태그 2의 인쇄본을 모두 만들었고 거의 동일하게 보입니다 ... 왜 파싱이 아닌 다른 파싱이 ... 나는 잘못된 것을하고 있습니까?

+0

구조체를 인쇄하면 도움이되지 않을 수 있습니다. 객체의'repr (...) '을 보거나 포장을 풀고 하부 구조를 개별적으로 검사하십시오. 또한 예외를 던지는 객체가 특정 메서드를 놓친 것이므로 필요한 인터페이스를 제공하기 위해 어떻게 든 래핑해야합니다. – lenz

+1

첫 번째 경우, 기본 POS 태그 태그를 적용하는 경우 (필자는 "수동", btw라고 부르지 않습니다) 문장을 먼저 연결하므로 태그가 지정된 단일 시퀀스를 얻을 수 있습니다. 두 번째 경우에는 그런 일이 일어나지 않습니다. 따라서 여러 개의 태그가 지정된 시퀀스 (모든 문장마다 하나씩)가있을 수 있습니다. – lenz

답변

1

cp.parse()에 태그가 지정된 토큰 목록이 아닌 문장 목록을 전달하기 때문에 오류가 발생합니다. concat의 출처는 표시하지 않지만 명확하게 (@lenz 주석으로) 문장을 하나의 단어 목록으로 연결합니다. 두 번째 경우에도 동일한 작업을 수행하려면 cp.parse(concat(tag2))이 필요합니다.

그러나 매우 비정상적인 문법이 없으면이 오류가 발생합니다. 구문 분석기는 한 번에 한 문장 씩 작업하므로 문장을 서로 구분하지 말고 서로 연결하지 않아야합니다. 문장 목록을 반복하고 각 문장을 구문 분석하거나 문장을 모두 한 번에 구문 분석 한 후 cp.parse_sents(tag2)을 입력하십시오. 자기 태그가 붙은 treebank 문장에도 적용됩니다.이 문장은 다음과 같이 태그를 지정하고 구문 분석해야합니다.

tbss = treebank.sents()[200:220] 
tag1 = nltk.pos_tag_sents(tbss) 
parsed1 = cp.parse_sents(tag1) 
for sent in parsed1: 
    print(sent) 
+0

@alexis ... 덕분에 동료가 ... 제발 내 다른 질문을보십시오 제발이 질문에 대한 후속 조치는 무엇입니까? 이 질문에 대한 후속 조치는 http://stackoverflow.com/questions/42572648/extending-the-grammar-to-handle-complex-nps입니다. 내 주요 작업은 thb 트리 뱅크 문장을 청크하는 것입니다 ...하지만 모든 경우를 처리하는 데있어 몇 가지 어려움이 있습니다 ... 또한 청크 구문의 이런 유형에 관한 웹에 관한 정보는 거의 없습니다. ( –

+0

죄송합니다. 그 외의 질문은 nltk의 구문이 아니라 영어 문법에 관한 것입니다. – alexis