2012-05-26 1 views
0

Je travaille avec quelques corpus inclus dans nltk-data de nltk pour comprendre certains algorithmes.Python IDE ou module qui met en cache les résultats?

Donc, mon code serait généralement quelque chose du style:

import re, nltk, random 
from nltk.corpus import reuters 

def find_test_and_train_data(): 
    return [fileid for fileid in reuters.fileids() if re.match(r"^training/", fileid)], [fileid for fileid in reuters.fileids() if re.match(r"^test/", fileid)] 

def generate_random_data(train_and_test_fileids): 
    random.seed(348) ; random.shuffle(train_and_test_fileids[0]) 
    return train_and_test_fileids[0][2000:], train_and_test_fileids[0][:2000] 

def fileid_words(fileid): 
    return [word.lower() for line in reuters.words(fileid) for word in line.split() if re.match('^[A-Za-z]+$', word)] 

if __name__ == '__main__': 
    train_fileids, dev_fileids = generate_random_data(find_test_and_train_data()) 
    train_data=fileid_words(train_fileids) 
    dev_data=fileid_words(dev_fileids) 

Donc, si je le lance dans un interpréteur interactif alors je peux effectuer des tâches sur train_data, dev_data et leurs fileids correspondants sans repeupler les variables (un tâche très longue).

Cependant, je veux être capable de l'écrire dans un fichier .py afin que je puisse enregistrer des algorithmes statistiquement intéressants. Je peux le faire en tapant deux fois, par exemple: quand j'obtiens une fonction fonctionnant dans l'interpréteur, je la copie puis la colle dans le fichier .py, mais c'est assez inefficace et je perds les fonctionnalités de mes IDE .

Existe-t-il des IDE ou des modules Python qui peuvent automatiquement conserver le script Python en mémoire ou stocker la valeur d'une variable, telle que test_data, dans une base de données?

Merci pour toutes les suggestions

Répondre

0

La manière spécifique-python pour ce faire est avec cornichon:

http://docs.python.org/library/pickle.html

Vous pouvez simplement enregistrer des variables sur le disque, puis les charger en arrière:

import pickle 

data1 = {'a': [1, 2.0, 3, 4+6j], 
    'b': ('string', u'Unicode string'), 
    'c': None} 
output = open('data.pkl', 'wb') 
pickle.dump(data1, output) 
output.close() 

input = open('data.pkl', 'rb') 

data1 = pickle.load(pkl_file) 

Si vous souhaitez enregistrer dans un format qui sera compatible avec d'autres langues à l'avenir, envisagez JSON.

+0

Le décodage est-il beaucoup plus rapide que le traitement avec '.words()' de NLTK? –

+0

Je m'y attendais, mais il devrait être assez facile de faire un test en utilisant le code ci-dessus. –

0

Une autre solution est que l'utilisation inspecter le module pour obtenir la chaîne de codes à partir de cela et l'enregistrer dans un fichier.py. Si vous utilisez le module inspecter, vous pourrez obtenir des objets de code et du code source d'événement, puis être en mesure d'obtenir du code brut en chaîne, puis le placer dans un fichier de stockage persistant.

+0

Mais il est déjà en stockage persistant (quoique inefficace). Je ne suis pas familier avec le module d'inspection, peut-être que vous pouvez me donner un exemple de code montrant que ceci est plus efficace que mentionné ci-dessus? –

Questions connexes