Я работаю над кодом, который по существу является супер-базовой системой AI (в основном простой версией Python для Cleverbot).Сохранение словаря Python во внешнем файле?
Как часть кода, у меня есть начальный словарь с парами ключей, которые имеют списки в качестве значений. По мере запуска файла изменяется словарь - создаются ключи и элементы добавляются в связанные списки.
Так что я хочу, чтобы словарь был сохранен как внешний файл в одной и той же папке файла, так что программе не нужно «переучивать» данные каждый раз при запуске файла. Поэтому он загрузит его в начале запуска файла, и в конце он сохранит новый словарь во внешнем файле. Как я могу это сделать?
Должен ли я сделать это с помощью JSON, и если да, то как это сделать? Могу ли я это сделать, используя встроенный модуль json, или мне нужно загрузить JSON? Я попытался посмотреть, как его использовать, но не смог найти никаких хороших объяснений.
У меня есть основной файл, сохраненный в C: /Users/Alex/Dropbox/Coding/AI-Chat/AI-Chat.py
phraselist сохраняется в C:/Users/Alex/Dropbox/Coding /AI-Chat/phraselist.py
Я запускаю Python 2.7 через Canopy.
Когда я запускаю код, это выход:
In [1]: %run "C:\Users\Alex\Dropbox\Coding\AI-Chat.py"
File "C:\Users\Alex\Dropbox\Coding\phraselist.py", line 2
S'How are you?'
^
SyntaxError: invalid syntax
EDIT: Я получил его. Я должен был указать sys.path импортировать фразу Фром phraselist.py
Вот полный код у меня есть:
############################################
################ HELPER CODE ###############
############################################
import sys
import random
import json
sys.path = ['C:\\Users\\Alex\\Dropbox\\Coding\\AI-Chat'] #needed to specify path
from phraselist import phrase
def chooseResponse(prev,resp):
'''Chooses a response from previously learned responses in phrase[resp]
resp: str
returns str'''
if len(phrase[resp])==0: #if no known responses, randomly choose new phrase
key=random.choice(phrase.keys())
keyPhrase=phrase[key]
while len(keyPhrase)==0:
key=random.choice(phrase.keys())
keyPhrase=phrase[key]
else:
return random.choice(keyPhrase)
else:
return random.choice(phrase[resp])
def learnPhrase(prev, resp):
'''prev is previous computer phrase, resp is human response
learns that resp is good response to prev
learns that resp is a possible computer phrase, with no known responses
returns None
'''
#learn resp is good response to prev
if prev not in phrase.keys():
phrase[prev]=[]
phrase[prev].append(resp)
else:
phrase[prev].append(resp) #repeat entries to weight good responses
#learn resp is computer phrase
if resp not in phrase.keys():
phrase[resp]=[]
############################################
############## END HELPER CODE #############
############################################
def chat():
'''runs a chat with Alan'''
keys = phrase.keys()
vals = phrase.values()
print("My name is Alan.")
print("I am an Artifical Intelligence Machine.")
print("As realistic as my responses may seem, you are talking to a machine.")
print("I learn from my conversations, so I get better every time.")
print("Please forgive any incorrect punctuation, spelling, and grammar.")
print("If you want to quit, please type 'QUIT' as your response.")
resp = raw_input("Hello! ")
prev = "Hello!"
while resp != "QUIT":
learnPhrase(prev,resp)
prev = chooseResponse(prev,resp)
resp = raw_input(prev+' ')
else:
with open('phraselist.py','w') as f:
f.write('phrase = '+json.dumps(phrase))
print("Goodbye!")
chat()
И phraselist.py выглядит следующим образом:
phrase = {
'Hello!':['Hi!'],
'How are you?':['Not too bad.'],
'What is your name?':['Alex'],
}
Почему бы не написать в другой файл Python, чтобы вы могли просто импортировать его в качестве словаря? –