2017-10-11 8 views
0

스탠포드 파서를 사용하여 비슷한 종류의 문장을 생성하려고합니다. 단계 :스탠포드 파서를 사용한 문장 생성

1. 표준 입력란을 스탠포드 라이브러리를 사용합니다. 문장 해석

3.Replace에서

2.Generate 생산 ​​규칙 일부 단말기 값

I 세 의심 nltk.parse.generate

() 함수를 사용하여 생성 4.Regenerate 문장 :

1. StanfordParser는 항상 유한 생산 규칙을 ​​생성합니까?

2. 몇 가지 문장에 대해 생성 함수를 사용하면서 다음 오류가 발생합니다. "분할 오류 : 11"

2.1 수

: 나는이 sys.setrecursionlimit (0x10000000으로), 내가 가진 오류를 사용하여 재귀 제한을 설정

"RuntimeError에 파이썬 객체를 호출하는 동안 최대 재귀 수준 초과" 재귀 한도를 늘릴 수 있습니까?

2.2 어떻게이 문제를 해결할 수 있습니까?

3이 방법이 올바른 방법입니까? 어떻게 개선 할 수 있습니까?

+0

스택 오버플로에 오신 것을 환영합니다. 이 일을하기 위해 이미 무엇을 시도 했습니까? [연구 노력이 얼마나 필요합니까?] (https://meta.stackoverflow.com/questions/261592/how-much-research-effort-is-expected-of-stack-overflow-users)를 검토하십시오. 스택 오버플로는 코딩 서비스가 아닙니다. 게시하기 전에 문제를 조사하고 코드를 직접 작성하는 것이 좋습니다. 특정 항목에 얽매이면 돌아와서 [Minimal, Complete, Verifiable example] (https://stackoverflow.com/help/mcve) 및 시도한 내용을 요약하면 도움이됩니다. – Sand

답변

2

fuction nltk.parse.generate.generate()모두의 문법을 생성합니다. 즉 NP 내 (항상 발생하는 NP)와 같은 단일 재귀 규칙조차도 무한 재귀를 제공합니다. 설명서에 나와 있듯이 재귀 깊이 (예 : depth=20)를 제한하여 제어 할 수 있습니다. 원하는 경우 생성 할 트리 수 (n=100)를 지정할 수도 있습니다.

제한 사항은 무한 재귀 문제를 해결하지만 결과가 마음에들 것이라는 보장은 없습니다. generate()은 가능한 모든 확장을 순서대로 삽입하므로 첫 번째 규칙이 반복적이면 반복적으로 사용됩니다. 생성 된 50 번째 트리를 선택하면 더 나은 결과를 얻을 수 있습니다 (예 : 하지만 생성 한 문법의 구조를 검사하고 가능한 확장 중에서 무작위로 선택하는 자체 생성기를 코딩하면 최상의 결과를 얻을 수 있습니다.

+0

깊이 = 20 근무했지만 문제는 단일 재귀 규칙이 루프를 만듭니다 감사합니다. 예. "큰 라떼"의 문장은 "큰 가격의 대가의 대가의 대가의 대가는 얼마입니까?"라는 반복문을 처리 할 수있는 해결책이 무엇인지 문제. 거기에 더 나은 파서를 사용해야합니까? – Shaili

+0

파서 나 규칙에 문제가 없습니다. 문제는'generate()'가 가능한 모든 확장을 생성하기 때문에 규칙을 순서대로 선택한다는 것이다. 토론 추가됨. – alexis