2012-02-12 8 views
5

का उपयोग करके वाक्य निष्कर्षण के लिए पेजरैंक का पूरक करना मैं here वर्णित वाक्य निष्कर्षण के लिए टेक्स्ट्रैंक एल्गोरिदम लागू करने की कोशिश कर रहा हूं। इसके लिए भारित किनारों के साथ पेजरैंक एल्गोरिदम पूरक करने की आवश्यकता है और इसे अप्रत्यक्ष ग्राफ पर चलाने के लिए प्राप्त करें। नेटवर्कक्स पेजरैंक एल्गोरिदम कार्यान्वयन मुझे भारित किनारों को आसानी से एकीकृत करने की अनुमति देता है और निर्देशित ग्राफ को अप्रत्यक्ष रूपांतरित करने के लिए कहा जाता है: here देखें। हालांकि, जब मैंने इसका परीक्षण किया तब भी निर्देशित ग्राफ का उपयोग करना प्रतीत होता है। मुझे यहां क्या समझ नहीं आ रहा है? बहुत सराहना में मदद करें।टेक्स्ट्रैंक: नेटवर्कक्स

उदाहरण:

import networkx as nx 
D=nx.DiGraph() 
D.add_weighted_edges_from([('A','B',0.5),('A','C',1)]) 
print nx.pagerank(D) 

Outpunt: { 'ए': .25974025929223499, 'सी': .40692640737443164, 'बी': .33333333333333331}

उत्तर

9

मुझे लगता है कि आप networkx पर टिप्पणी की गलत व्याख्या की प्रलेखन। हालांकि, मुझे स्वीकार करना होगा कि इसे बेहतर कहा जा सकता है।

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

यह क्या कहता है कि, पेजरैंक एल्गोरिदम निर्देशित ग्राफ के लिए डिज़ाइन किया गया है, लेकिन इसका उपयोग अप्रत्यक्ष ग्राफ के लिए किया जा सकता है। ऐसा करने के लिए, यह प्रत्येक किनारे को दो निर्देशित किनारों (इन और आउट) के साथ प्रतिस्थापित करके निर्देशित नेटवर्क पर अप्रत्यक्ष नेटवर्क को परिवर्तित करता है।

इसलिए, यदि आप इसे एक निर्देशित नेटवर्क देते हैं, तो यह निर्देशित संरचना के अनुसार पेजरैंक की गणना करेगा। तो या तो एक अनिर्दिष्ट नेटवर्क के साथ शुरू:

import networkx as nx 

# Undirected Network 
D = nx.Graph() 
D.add_weighted_edges_from([('A', 'B', 0.5),('A', 'C', 1)]) 

# Default max number of iterations failed to converge for me 
print nx.pagerank(D, max_iter=200) 

# Outputs: 
{'A': 0.48648648872844047, 'C': 0.32567567418103965, 'B': 0.18783783709051982} 

या यदि आप पहले से ही एक निर्देशित नेटवर्क है, एक अनिर्दिष्ट एक के लिए परिवर्तित:

import networkx as nx 

# Directed Network 
D = nx.DiGraph() 
D.add_weighted_edges_from([('A', 'B', 0.5), ('A', 'C', 1)]) 

# Convert to undirected 
G = D.to_undirected() 

# Default max number of iterations failed to converge for me 
print nx.pagerank(G, max_iter=200) 

# Outputs: 
{'A': 0.48648648872844047, 'C': 0.32567567418103965, 'B': 0.18783783709051982} 
+0

मेरी गलती। समाधान के लिए धन्यवाद। – root

0

अजगर में TextRank एल्गोरिथ्म के एक अच्छा कार्यान्वयन पाया जा सकता है here। यदि आप इस स्क्रिप्ट का उपयोग करना चाहते हैं तो आपको here वर्णित आवश्यक डेटा फ़ाइलों को स्थापित करने के लिए पहले nltk.download() को चलाने के लिए है।

+0

यह कार्यान्वयन वाक्य निष्कर्षण के लिए नहीं है, बल्कि कीवर्ड निष्कर्षण है। आप कोड के नीचे टिप्पणियों से देख सकते हैं। – UberAlex

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