2013-01-25 14 views
13

से पेड़ ग्राफ बनाने के लिए पाइथन लाइब्रेरी क्या किसी को किसी भी पायथन पुस्तकालयों के बारे में पता है जो आपको इसे आसानी से और जल्दी से मनमाने ढंग से स्तर पर निहित वस्तु को खिलाने की अनुमति देता है, उदाहरण के लिए एक तेंदुए की रेखा के साथ आपको this gist में क्या मिलेगा, और यह एक व्यावहारिक वृक्ष ग्राफ़ फ़ाइल थूक सकता है?नेस्टेड पायथन ऑब्जेक्ट्स (डिक्ट्स)

सरलता महत्वपूर्ण है, क्योंकि मुझे उन लोगों के साथ काम करने में सक्षम होना चाहिए जो तकनीकी रूप से दिमाग में नहीं हैं।

मैं "ग्राफ पेड़" से क्या मतलब निम्नलिखित है, जहां मैं इसे मूल्यों की एक नेस्टेड शब्दकोश फ़ीड सकता है की तर्ज पर कुछ है और यह तो वृक्ष संरचना बनाना होगा:

http://dhaka.rubyforge.org/parse_tree.jpg

+0

क्या आप "पेड़ ग्राफ फ़ाइल" से क्या मतलब रखते हैं इसके बारे में अधिक कह सकते हैं? उदाहरण इनपुट/आउटपुट और आउटपुट का उपयोग करने के तरीके के बारे में कुछ टिप्पणियां काफी मददगार होंगी। – neirbowj

+0

@neirbowj अच्छी टिप्पणी, धन्यवाद; अद्यतन – jdotjdot

उत्तर

3

तो पुस्तकालय मैं सलाह देते हैं और इस जवाब में मेरी कोड स्निपेट के लिए उपयोग नहीं एक अजगर पुस्तकालय है, लेकिन यह एक अजगर के अनुकूल पुस्तकालय, जिसके द्वारा मेरा मतलब इस लाइब्रेरी का उपयोग कर कि कोड एक अजगर में डाला जा सकता है डेटा प्रोसेसिंग के लिए मॉड्यूल और यह विदेशी कोड दोनों सिरों पर मौजूदा पायथन कोड से कनेक्ट होगा, यानी इनपुट और आउटपुट दोनों, और मुझे संदेह है, हालांकि निश्चित रूप से मुझे नहीं पता, यह सब वास्तव में "पायथन लाइब्रेरी" "मानदंड। तो यदि आप एक वेब ऐप लिख रहे हैं, तो यह कोड क्लाइंट-साइड होगा। दूसरे शब्दों में, यह पुस्तकालय अजगर नहीं है, लेकिन यह अजगर के साथ काम करता है।

  1. अपने इनपुट है (लगभग) कच्चे अजगर dicts, और अधिक विशेष, json.load (a_python_dict) एक json सरणी या वस्तु देता है, एक प्रारूप है जो इस जावास्क्रिप्ट पुस्तकालय निश्चित रूप से पहचान सकते हैं; और

  2. उत्पादन प्रारूप या तो HTML या एसवीजी है, कुछ भाषा-विशिष्ट स्वरूप में नहीं वस्तुओं

आप d3.js उपयोग कर सकते हैं।यह है प्रतिपादन पेड़ों के लिए विशेष रूप से एक class:

var tree = d3.layout.tree().size([h, w]); 

वहाँ भी d3 स्रोत है, जो आप को क्लोन कर सकते हैं में उदाहरण फ़ोल्डर में पेड़ (काम कर कोड) के उदाहरण के एक जोड़े है/डाउनलोड के लिए फार्म लिंक मैंने ऊपर प्रदान किया है।

क्योंकि डी 3 जावास्क्रिप्ट लाइब्रेरी है, इसका मूल डेटा प्रारूप JSON है।

बुनियादी संरचना एक नेस्टेड शब्दकोश है, प्रत्येक शब्दकोश दो मूल्यों के साथ एक एकल नोड का प्रतिनिधित्व करने, नोड का नाम और अपने बच्चों (एक सरणी में संग्रहीत), नाम और बच्चों क्रमशः keyed :

{"name": "a_root_node", "children": ["B", "C"]} 

और निश्चित रूप से यह अजगर शब्दकोशों और JSON के बीच परिवर्तित करने के लिए सरल है:

>>> d = {"name": 'A', "children": ['B', 'C']} 
>>> import json as JSON 
>>> dj = JSON.dumps(d) 
>>> dj 
    '{"name": "A", "children": ["B", "C"]}' 

यहाँ एक अजगर शब्दकोश एक बड़ा पेड़ (लगभग एक दर्जन नोड्स) के प्रतिनिधित्व जो मैं के रूप में ऊपर JSON में बदल जाती है, और फिर पेड़ नीचे दी गई छवि में दिखाया गया है d3 में गाया:

tree = {'name': 'root', 'children': [{'name': 'node 2', 'children': 
     [{'name': 'node 4', 'children': [{'name': 'node 10', 'size': 7500}, 
     {'name': 'node 11', 'size': 12000}]}, {'name': 'node 5', 'children': 
     [{'name': 'node 12', 'children': [{'name': 'node 16', 'size': 10000}, 
     {'name': 'node 17', 'size': 12000}]}, {'name': 'node 13', 'size': 5000}]}]}, 
     {'name': 'node 3', 'children': [{'name': 'node 6', 'children': 
     [{'name': 'node 14', 'size': 8000}, {'name': 'node 15', 'size': 9000}]}, 
     {'name': 'node 7', 'children': [{'name': 'node 8', 'size': 10000}, 
     {'name': 'node 9', 'size': 12000}]}]}]} 

tree represented as python dictionary rendered in d3:

टिप्पणी: D3 ब्राउज़र में renders; उपरोक्त छवि सिर्फ मेरी ब्राउज़र विंडो का एक स्क्रीन शॉट है।

+8

-1: डी 3 महान और सब कुछ है, लेकिन इसका एक * जावास्क्रिप्ट * उपकरण, पायथन नहीं है। यदि आप पाइथन कोडिंग कर रहे हैं तो यह वास्तव में मदद नहीं करता है। –

+0

इस उत्तर को प्यार करो। आखिर में मेरे पास एक अजगर लिपि से आउटपुट प्रदर्शित करने का एक साफ तरीका है! – Andrew

5

मैं मुझे यकीन नहीं है कि यह आपके मन में काफी है, लेकिन यह पहली बात है जो दिमाग में आती है।

blockdiag मुख्य रूप से Graphviz के समान स्टैंडअलोन फ़ाइल प्रोसेसर के रूप में उपयोग किया जाना है (जिसके लिए एक पायथन इंटरफ़ेस मौजूद है)। यह एक ड्रॉप फ़ाइल को ड्रॉप-डेड सरल सिंटैक्स के साथ इनपुट के रूप में स्वीकार करता है, और आउटपुट के रूप में छवियों का उत्पादन करता है।

आप स्टैंडअलोन ब्लॉकडिग स्क्रिप्ट में इनपुट के लिए प्रारूपित अपनी रिकर्सिव डॉक स्ट्रक्चर आउटपुट करने के लिए एक साधारण शिम लिखने में सक्षम होना चाहिए, या ब्लॉकडिएग पैकेज के आवश्यक अंदरूनी आयात आयात करें और सीधे आउटपुट ड्राइव करें।

यदि यह वादा करता है, तो मैं देखता हूं कि मैं कुछ उदाहरण कोड चाबुक कर सकता हूं या नहीं।

संपादित उदाहरण कोड:

def print_blockdiag(tree, parent=None): 
    if not parent: print('blockdiag { orientation = portrait') 
    for key in tree: 
     if parent: print(' {} -> {};'.format(parent, key)) 
     print_blockdiag(tree[key], key) 
    if not parent: print('}') 

हो जाएगा ताकि उत्पादन एक फ़ाइल है कि पढ़ सकते हैं blockdiag।

-3

आपको जो चाहिए उसे निर्भर करते हुए, लेकिन अगर आपको केवल सामग्री को देखने के लिए इसकी आवश्यकता है, तो आप उस उपकरण के लिए ऑनलाइन उपकरण का उपयोग कर सकते हैं - "Python dict formatter and viewer" एक पेड़ के रूप में एक नियम प्रस्तुत कर सकते हैं।

+1

मैंने कोशिश की और यह सिर्फ एक HTML सूची प्रदर्शित करता है। –

संबंधित मुद्दे