NLTK 나무에 약간의 도움이 필요합니다. 나는이 프랑스어 나무에서 일부 하위 트리를 추출하기 위해 노력하고하위 트리 추출 NLTK 트리
:
(SENT (NP-SUJ↓ (PRO=H Personne)) (VN=H (ADV* ne) (V=H sait)) (ADV* exactement) (PONCT* .))
가 난 단지 추가 한 후 POS 라벨의 끝에 '= H'를 가진 나무를 추출 할을 부모 노드 : 이것처럼
: (NP-SUJ↓ (PRO=H Personne)) and this: (VN=H (V=H sait))
그리고 그렇게하는 함수를 썼다 :
def AddParent(tree):
grammar = []
for subtree in tree.subtrees():
if subtree.height()==2 and subtree.label().endswith("=H"):
PartialTree = ParentedTree(subtree.parent().label(),
[ParentedTree(subtree.label(), subtree)])
grammar.append(PartialTree)
return grammar
#Test
pt = ParentedTree.fromstring("(SENT (NP-SUJ↓ (PRO=H Personne)) (VN=H (ADV* ne) (V=H sait)) (ADV* exactement) (PONCT* .))")
AddParent(pt)
[ParentedTree('NP-SUJ↓', [ParentedTree('PRO=H', ['Personne'])]),
ParentedTree('VN=H', [ParentedTree('V=H', ['sait'])])]
두 가지 문제가 있습니다. 첫째, 원본 트리의 하위 트리에 정보를 계속 추가하고 싶습니다. 의
(SENT (NP-SUJ↓) (VN=H (V=H sait)))
하지만 ...
둘째를 원래 나무의 트랙을 잃었 : 예를 들어, 나는 이런 식으로 뭔가를, 조상 노드 다음 아이를 계속 추가 할 parent()
함수는 그 안에 들어있는 모든 하위 트리를 반환합니다. 그리고 난 단지 특정 노드를 갖고 싶습니다.
이 마지막 서브 트리를 추출하는 좋은 방법은 무엇입니까 ???
도움 주셔서 감사합니다. 나는 이것에 초보 다. 그러나 나는 그것을 정말로 좋아한다! (? 아마 당신이 subtrees()
을 의미)
대단히 감사합니다! 이것은 내가 찾고 있었던 정확하게 것이다. 그러나 나는 그것을하는 법을 모른다. – Jonathan
다행입니다. 내 대답이 문제를 해결 했으므로 왼쪽의 큰 체크 표시를 클릭하여 "동의"하십시오. (또한이 사이트에서 유용한 질문이나 답변을 "upvote"할 수 있습니다.) – alexis