networkx 에 접근하여 메소드를 추가해보았다.


환경은 Mac OS 

수정해야 되는 파일 접근 경로는


/Library/Frameworks/Python.framework/Versions/7.3/lib/python2.7/site-packages/networkx-1.7-py2.7.egg/networkx/classes

(각자의 환경별로 경로가 다를 수 있습니다)

*** 주의 ***

 밑의 코드에서 한글 주석이 붙어있는경우 인코딩에러뜨며 실행이 안될 경우 한글 주석 지워주세요...

***********

안에 있는 graph.py 를 수정하여

jaccard_similarity   ,   cosine_similarity

그리고

수정된  jaccard_similarity   ,  수정된 cosine_similarity

를 추가해보았다.

jaccard_similarity

  =  | Ni ∩ Nj |  /  | Ni ∪ Nj |       =     | Ni ∩ Nj |  /  ( | Ni | + | Nj | - | Ni ∩ Nj | )

cosine_similarity

  =  | Ni ∩ Nj |  /  √( | Ni | * | Nj | )

=== 코 드 ===


    def my_jaccard(self, node1, node2):


#self 는 자기자신 graph 를 나타내고 neighbors 는 그 노드의 이웃 노드들을 list형식으로 반환해준다.

        list1 = self.neighbors(node1)           

        list2 = self.neighbors(node2)

#반환된 두개의 list에서 서로 겹치는 부분(교집합)을 찾아내는 함수 intersection 사용하고  len을 이용하여 갯수 저장

        n = len(set(list1).intersection(set(list2)))

# return 값으로 jaccard_simiarity 를 계산하여 반환해준다.

        return n / float(len(list1) + len(list2) - n )

    def my_jaccard_modify(self, node1, node2):


        list1 = self.neighbors(node1)

        list2 = self.neighbors(node2)

# 위와 똑같은 방식으로 진행 되며 추가된것은 list에 자기자신 노드가 더 추가되는것

# list에 item 추가하기   list.append()        

        list1.append(node1)

        list2.append(node2)

        

        n = len(set(list1).intersection(set(list2)))

        return n / float(len(list1) + len(list2) - n )

        

    def my_cosine(self, node1, node2):


        list1 = self.neighbors(node1)

        list2 = self.neighbors(node2)

        n = len(set(list1).intersection(set(list2)))

        

        return n / (math.sqrt( len(list1) * len(list2) ) )

#math.sqrt 를 사용하기 위해서는 상단에 import math 가 필요하다.


    def my_cosine_modify(self, node1, node2):


        list1 = self.neighbors(node1)

        list2 = self.neighbors(node2)

        

        list1.append(node1)

        list2.append(node2)

        

        n = len(set(list1).intersection(set(list2)))

        

        return n / (math.sqrt( len(list1) * len(list2) ) )

Posted by 초올싹
,