2017-04-16 17 views
0

방금 ​​함수 (hypernym_distances())를 둘러 보았을 때 가능한 모든 상위 기호의 결과를 보았을 때 거리가 다른 두 개의 "entity.n.01"요소가 있었는데 그 이유는 무엇입니까? 아무도 이것에 대해 설명해 주시겠습니까? 파이썬에서synset.hyperym_distances()에 중복 된 것이 있습니까?

:

print([{i[0] : i[1]} for i in wn.synset('person.n.01').hypernym_distances()])

이 위의 코드는 마지막 학기 '실체'로 이어질 모든 hypernyms 표시됩니다 표시됩니다.

출력은 :

[{Synset ('entity.n.01') 3} {Synset ('object.n.01') 4}, {Synset ('physical_entity {Synset ('entity.n.01') : 1}, {Synset ('person.n.01') : 0}, {Synset ('entity.n.01' {Synset ('causal_agent.n.01') : 1}, {Synset ('living_thing.n.01') : 2}, {Synset ('physical_entity.n.01') : 2} {synset ('whole.n.02')는 3}]

이것은 지정된 단어의 상위 개념의 하나 인 synset 함유 이름 - 값 쌍이다.

누구나 'entity.n.01'이 두 번 출력되는 이유를 설명 할 수 있습니까?

{Synset ('entity.n.01') : 6}

{Synset ('entity.n.01') 3}

+0

StackOverflow에 오신 것을 환영합니다. https://stackoverflow.com/help/how-to-ask를 참조하십시오. 코드를 형식화하고 질문을 재현 할 수 있습니까? 네가 묻는 것이 불분명 한가? – alvas

+0

확인 :) @alvas –

답변

0

코드가 둔각이며, 휴식 그들.

또한 한 줄자를 사용하지 않으려는 경우 입력 속도가 다른 것보다 계산 속도가 빠릅니다.

당신이 그럼 다운을 깰 수 있도록

을 반복하는지 알 수 있습니다. 모든 요소에 대한 목록의 반복을 사전을 생성하는 지능형리스트의 복잡한 인쇄에서

, 우리는 다음을 참조하십시오

그 자체가 단순화 될 수있다 루프처럼 보이는
print([{i[0] : i[1]} for i in wn.synset('person.n.01').hypernym_distances()]) 

. 먼저 synset을 유지하기 위해 변수를 설정하십시오. 이제

person = wn.synset('person.n.01') 

의이 person.hypernym_distances() 반환 무엇을 보자 :

>>> person.hypernym_distances() 
{(Synset('person.n.01'), 0), (Synset('organism.n.01'), 1), (Synset('whole.n.02'), 3), (Synset('physical_entity.n.01'), 5), (Synset('causal_agent.n.01'), 1), (Synset('entity.n.01'), 3), (Synset('living_thing.n.01'), 2), (Synset('physical_entity.n.01'), 2), (Synset('entity.n.01'), 6), (Synset('object.n.01'), 4)} 

person.hypernym_distances()의 데이터 구조가 (난 당신이 몇 가지 synset을에 같은 작업을하려면 대신의 유일한 person.n.01에 그것을 사용한다고 가정) 이미 첫 번째 요소가 상위 요소이고 두 번째 요소가 거리 인 튜플 집합입니다. 그리고 Synset('entity.n.01')set 유형이므로 person.hypernym_distances()에 한 번만 발생해야합니다.

튜플을 반복, 당신은 쉽게 그것을 튜플의 목록을 반복하여

>>> from nltk.corpus import wordnet as wn 
>>> wn.synset('person.n.01') 
Synset('person.n.01') 
>>> person = wn.synset('person.n.01') 
>>> person.hypernym_distances() 
{(Synset('person.n.01'), 0), (Synset('organism.n.01'), 1), (Synset('whole.n.02'), 3), (Synset('physical_entity.n.01'), 5), (Synset('causal_agent.n.01'), 1), (Synset('entity.n.01'), 3), (Synset('living_thing.n.01'), 2), (Synset('physical_entity.n.01'), 2), (Synset('entity.n.01'), 6), (Synset('object.n.01'), 4)} 
>>> for ss, count in person.hypernym_distances(): 
...  print (ss,'\t', count) 
... 
Synset('person.n.01') 0 
Synset('organism.n.01')  1 
Synset('whole.n.02')  3 
Synset('physical_entity.n.01') 5 
Synset('causal_agent.n.01')  1 
Synset('entity.n.01') 3 
Synset('living_thing.n.01')  2 
Synset('physical_entity.n.01') 2 
Synset('entity.n.01') 6 
Synset('object.n.01') 4 

을 (Unpacking a list/tuple of pairs into two lists/tuplesHow can I iterate through two lists in parallel? 참조) "압축 해제"할 수있는 루프에서 튜플/반복 가능 객체의 반복 가능한 포장 풀기 위와 같은 방법으로 추악한 (i[0], i[1]) for i in iterable_of_tuples 구문을 피할 수 있습니다. 대신 (a,b) for a,b in iterable_of_tuples을 수행하십시오. DICT 이해 대

목록

당신이 키가 synset이고 값이 카운트 경우 사전에 person.hypernym_distances()에서 튜플을 넣어하려고하는 것 같다.

list comprehensiondictionary comprehension 사이에 오르면 실수가되는 것 같습니다. person.hypernym_distances()에있는 모든 요소에 대해 새 사전을 만들 필요는 없습니다. 대신에, 나는 사전 이해가 당신이 찾고있는 무슨 생각 예 :

사실, 사전에 튜플

>>> {ss:count for ss, count in person.hypernym_distances()} 
{Synset('object.n.01'): 4, Synset('whole.n.02'): 3, Synset('living_thing.n.01'): 2, Synset('organism.n.01'): 1, Synset('entity.n.01'): 6, Synset('person.n.01'): 0, Synset('causal_agent.n.01'): 1, Synset('physical_entity.n.01'): 2} 

주조 목록 위의 사전은 튜플의 반복자에 주어진 원하는 경우

>>> dict(person.hypernym_distances()) 
{Synset('object.n.01'): 4, Synset('whole.n.02'): 3, Synset('living_thing.n.01'): 2, Synset('organism.n.01'): 1, Synset('entity.n.01'): 6, Synset('person.n.01'): 0, Synset('causal_agent.n.01'): 1, Synset('physical_entity.n.01'): 2} 

,536,913를 참조하십시오 사전에 반복 가능한 캐스팅 튜플 당이 개 항목은 자동으로 키와 값으로 두 번째로 튜플의 첫 번째 항목을 설정합니다

네이티브 파이썬에는이 컨테이너를 처리 할 수있는 고성능 컨테이너 데이터 구조가 있으며 멋진 기능도 제공됩니다. https://docs.python.org/3/library/collections.html