2017-09-04 1 views
0

동시에 그래프, 버텍스 및 엣지 클래스를 graph-tool으로 서브 클래스 화하면 실현 가능성이 있습니까? 소셜 네트워크와 같은 특정 유형의 그래프? 그래프 방법을 add_authorship(Person, Publication)의 취향에 랩하는 동안
은보다 구체적으로는, 내가이 사람과 출판 정점이 property_map로 식별되는 상상 등 class Person(Vertex)의 경우, class Publication(Vertex), class Authored(Edge)을 포함 class CollaborationNetwork(Graph),
을하고 싶습니다 Authored의 인스턴스를 만듭니다.동시에 파이썬 그래프 도구에서 서브 클래 싱 그래프, 버텍스 및 엣지

graph-tool과 같은 추상화를 구현하는 것이 맞는지, 그렇다면 CollaborationNetwork을 Vertex 및 Edge의 하위 클래스에 연결하는 방법이 확실하지 않습니다. (나는 단지 Subclassing Graph from the graph_tool package가 어떻게 작동하는지 알고 있습니다). 동기 정보

:
내가 소셜 네트워크의 성장을 시뮬레이션한다 Neo4j 및 그래프로 저장된 실제 데이터와 비교한다. 저는 py2neo OGM 접근 방식을 좋아합니다.이 접근 방식은 이러한 개인 및 게시 데이터를 python 개체로 나타냅니다.

답변

0

가능하지만 그렇게하는 것이 실제적인 이점은 아닙니다.

서브 클래 싱 Vertex은 쉽지만 그래프가 지정되거나 필터링되는 경우에 따라 여러 개의 Edge 클래스가 있습니다. 작동 시키려면 Vertex 또는 Edge 오브젝트 (또는 이터레이터)를 반환하는 파생 클래스에서 Graph 메소드를 랩핑하여 파생 된 EdgeVertex 오브젝트로 변환해야합니다.

클래스를 다른 이름으로 만들려면이 모든 작업 만 수행하면되므로 노력이 낭비되는 것처럼 보입니다. 그러나 그것은 불가능하지 않습니다.

보다 간단한 전략은 Graph 하위 클래스가 아니라 별도의 인스턴스를 포함하는 별도의 클래스 (예 : CitationGraph)를 만드는 것입니다. 그런 다음 기본 작업을 수행하는 add_personadd_publication과 같은 편리한 기능을 구현할 수 있으며 언제든지 Graph에 액세스 할 수 있습니다. 이렇게하면 많은 두통을 예방할 수 있으며 심지어 기본적으로 무료로 pickle 같은 것을 제공합니다.

+0

감사합니다. Tiago. 이게 내 질문에 완전히 답합니다! 가능한 경우에도 "개체 - 그래프 매핑"방식은 과도한 공격이라고 생각했습니다. Graph 인스턴스 포함에 대한 제안 사항과 관련하여 이미 경험이 풍부하고 매우 효과적입니다. [scientometric-graph-tool] (https://github.com/nanumyan/scientometric-graph-tool) –