2013-07-20 6 views
2

업데이트를 사용하는 것처럼 보일 것 같습니다. 나는 그것을 올바르게 사용하고 있다고 생각합니다. 그래서 타입이나 다른 것을 다루는 에러가되어야합니다.세트를 업데이트하는 방법은 무엇입니까?

어쨌든, 여기에 앉아있다 : ​​

나는 코 세라 과정에 대한 과정을하고 있어요 (! 말할 필요도없이, 최소화 또는 폐색 코드를 가장 도움이 응답)와 마지막 문제에 붙어 있어요. 작업은 쿼리의 모든 단어를 포함하는 모든 문서를 포함하는 집합을 반환하는 것입니다. 이 함수는 단어를 키로 포함하는 사전 인 inverseIndex와 그 단어를 값으로 포함하는 문서를 사용합니다. 예 : {'a':[0,1],'be':[0,1,4].....}

이 방법을 구현하려고 시도한 방식은 매우 간단합니다. sets에는 문서 ID 목록이 포함되어 있고 .intersections (집합)을 호출하여 집합을 병합하여 쿼리의 모든 단어를 포함하는 문서의 문서 ID 만 포함하는 집합으로 만듭니다.

def andSearch(inverseIndex, query): 

    sets = set() 
    s = set() 
    for word in query: 
     s.update(inverseIndex[word]) 
     print(inverseIndex[word]) 
    print s 
    s.intersection(*sets) 

    return s 

불행히도 인덱스 3 만 반환해야하는 경우 inverseIndex에있는 모든 문서를 반환합니다.

터미널 출력 :

[0, 1, 2, 3, 4] 
[0, 1, 2, 3] 
[0, 1, 2, 3, 4] 
[0, 1, 2, 3] 
[0, 1, 3, 4] 
[2, 3, 4] 
set([0, 1, 2, 3, 4]) 

문제점은 무엇입니까?

감사합니다.


sets = [] 
s = set() 
for word in query: 
    sets.append(inverseIndex[word]) 
print sets 
s.intersection(*sets) 

return s 

출력 :

[[0, 1, 2, 3, 4], [0, 1, 2, 3], [0, 1, 2, 3, 4], [0, 1, 2, 3], [0, 1, 3, 4], [2, 3, 4]] 
set([]) 
logout 
+0

'sets'이 비어있는 것처럼 보일 때마다 매번 작은 세트를 추가해야합니다. – seth

답변

2

당신은 루프 내에서 update를 사용합니다. 따라서 반복 할 때마다 새 페이지를 s에 추가합니다. 그러나 당신은 페이지를 필요로하기 때문에 그 페이지들을 교차시켜야합니다. 각각의 페이지는 적어도 하나의 단어가 아닌 모든 단어들을 포함하고 있습니다. 업데이트하는 대신 각 반복마다 intersect이 필요합니다.

또한 왜 sets이 필요한지 알 수 없습니다.

def andSearch(inverseIndex, query): 
    return set.intersection(*(set(inverseIndex[word]) for word in query)) 

이는 set의 배열을 생성합니다 :

>>> [set(ii[word]) for word in query] 
[set([0, 1]), set([0, 1, 4])] 

을 그리고 난 그냥 그들 모두를 교차하도록 set.intersection 전화

이 작동합니다.


질문 업데이트에 관하여.

s이 비어 있기 때문에 발생합니다.

이 예제를 고려하십시오

>>> s = set() 
>>> s.intersection([1,2,3],[2,3,4]) 
set([]) 

는 세트 그냥 set.intersection을 사용하여 교차. 그러나 그것은 집합만을 인수로 받아들입니다. 따라서 페이지 목록을 페이지 집합으로 변환하거나 페이지를 사전 집합으로 유지해야합니다.

+0

가져 오기 : attributeError : set 속성이 교차하지 않습니다. – goldisfine

+0

@goldisfine 지금 시도해보십시오. – ovgolovin

+0

나는보고, 내가 사용했던 방법이 왜 작동하지 않는지 궁금하다. 당신은 분명히 내 게시물에 답변했지만, 내가 원래 질문의 맨 아래에 게시 한 코드가 작동하지 않는 이유를 설명 할 수 있습니까? – goldisfine

관련 문제