2016-10-10 4 views
0

У меня есть 100 узлов и 4950 краев. Каков самый быстрый способ создания графика в Python (не планируя вообще визуализировать или рисовать его), чтобы я мог получить доступ к информации о узле, чтобы мне понадобилось то, что каждый элемент в матрице 2d означает, что узел 1 подключен к узлу 3? (также мне не нужно сохранять его как матрицу).создать граф со слишком большим количеством краев

import gensim 
import nltk 
from gensim.models import word2vec 
from nltk.corpus import stopwords 
import logging 
import re 
import itertools 
import glob 
from collections import defaultdict 
import networkx as nx 


logging.basicConfig(format='%(asctime)s : %(levelname)s : %(message)s', 
        level=logging.INFO) 

sentences = word2vec.Text8Corpus("/home/mona/mscoco/text8") 
model = word2vec.Word2Vec(sentences, workers = 16) 
#model.init_sims(replace = True) 
model_name = "text8_data" 
model.save(model_name) 

stopwords = nltk.corpus.stopwords.words('english') 

path = "/home/mona/mscoco/caption_files/*.txt" 
files = glob.glob(path) 
adj_list = defaultdict(lambda: defaultdict(lambda: 0)) 


for file in files: 
     g.add_nodes(file) 

for file1, file2 in itertools.combinations(files, 2): 
     with open(file1) as f1: 
       f1_text = f1.read() 
       f1_words = re.sub("[^a-zA-Z]", ' ', f1_text).lower().split() 
       f1_words = [w for w in f1_words if w not in stopwords] 
       print(f1_text) 
       f1.close() 
     with open(file2) as f2: 
       f2_text = f2.read() 
       f2_words = re.sub("[^a-zA-Z]", ' ', f2_text).lower().split() 
       f2_words = [w for w in f2_words if w not in stopwords] 
       print(f2_text) 
       f2.close() 
     print('{0}: {1}: {2}'.format(file1, file2, model.wmdistance(f1_words, f2_words))) 
     g.add_edge(file1, file2, model.wmdistance(f1_words, f2_words)) 



print(g.number_of_edges()) 
print(g.number_of_edges()) 


nx.write_gml(g, "gensim.gml") 

Пожалуйста, дайте мне знать, если у вас есть лучшее предложение, что мой текущий код. В итоге у меня будет что-то вроде 20 узлов и 190 ребер. Я в основном ищу что-то, что обработка его вывода будет легкой для другой программы, такой как MATLAB. Я не уверен, что файлы .gml легко обрабатываются в MATLAB.

+0

С этой плотностью ребер было бы больше смысла для хранения пар узлов, * не являются * связаны. –

+0

Этот вопрос слишком открытый. Как вы получаете список узлов и ребер? Матрица смежности, список узлов с подключениями к их соседям, список пар, представляющих край, являются допустимыми параметрами ... – jaypb

+0

Возможная дубликация [Что является наиболее эффективной структурой данных графа в Python?] (Http: // stackoverflow .com/questions/1171/what-is-the-most-efficient-graph-data-structure-in-python) – jaypb

ответ

1

Я думаю, что создание файла GML с целью повторного использования в Matlab, вероятно, прекрасно. Этот вопрос содержит дополнительную информацию об этом.

Convert GML file to adjacency matrix in matlab

+0

, пожалуйста, ознакомьтесь с вопросом о обновлении с кодом :) –

+1

Надеюсь, мой новый ответ будет полезен, и вы узнали важный урок о предоставлении достаточной информации в своем вопросе. Вопрос, который сейчас стоит, совершенно другой, чем раньше :). – jaypb