Ainsi, en Python, j'utilise makovify pour construire des modèles de Markov de grands corpus de texte pour générer des phrases aléatoires avec elle. J'utilise aussi nltk pour que les modèles de Markov obéissent à la structure des phrases. Comme il faut un certain temps pour générer un modèle de Markov à partir d'un vaste corpus, en particulier avec une partie du discours de tagger de NLTK, générant le même modèle chaque fois est tout à fait donc j'ai décidé inutile de sauvegarder les modèles de Markov sous forme de fichiers JSON pour les réutiliser plus tard . Toutefois, lorsque j'essaie de lire ces fichiers JSON volumineux en Python, j'ai quelques problèmes. Ce qui suit est le code:Python, les chaînes de Markov et de lecture de gros fichiers JSON
import nltk
import markovify
import os
import json
pathfiles = 'C:/Users/MF/Documents/NetBeansProjects/Newyckham/data/'
filenames = []
ebook = []
def build_it (path):
for root, dirs, files in os.walk(path):
for file in files:
if file.endswith(".json"):
filenames.append(os.path.join(root, file))
for file in filenames:
print(str(file))
with open(file) as myjson:
ebook.append(markovify.Text.from_json(json.load(myjson)))
return ebook
text_model = markovify.combine(build_it(pathfiles))
for i in range(5):
print(text_model.make_sentence())
print('\r\n')
print(text_model.make_short_sentence(140))
print('\r\n')
Mais je reçois l'erreur suivante:
Traceback (most recent call last):
File "C:\Users\MF\Desktop\eclipse\markovify-master\terceiro.py", line 24, in <
module>
text_model = markovify.combine(build_it(pathfiles))
File "C:\Users\MF\Desktop\eclipse\markovify-master\terceiro.py", line 21, in b
uild_it
ebook.append(markovify.Text.from_json(json.load(myjson)))
File "C:\Python27\lib\json\__init__.py", line 290, in load
**kw)
File "C:\Python27\lib\json\__init__.py", line 338, in loads
return _default_decoder.decode(s)
File "C:\Python27\lib\json\decoder.py", line 366, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "C:\Python27\lib\json\decoder.py", line 382, in raw_decode
obj, end = self.scan_once(s, idx)
MemoryError
J'ai lu une question similaire sur ce site sur la façon de traiter cette question et la plupart pointent vers l'utilisation ijson et en sautant les parties indésirables du fichier JSON, cependant, il n'y a rien de vraiment dans ces JSON que je peux sauter, donc des idées sur ce sujet?
Le fichier est trop volumineux pour être chargé en mémoire, semble-t-il. Essayez de «pickle» le fichier, mais je ne suis pas sûr à 100% si cela va aider. – PYA
essayer cette https://stackoverflow.com/questions/519633/lazy-method-for-reading-big-file-in-python/519653#519653 – PYA
peut-être vous avez besoin d'une véritable base de données? – thebjorn