Je suis novice en python et je tente de créer une chaîne markov. D'autres exemples montrent l'utilisation d'une instance d'objet et je ne suis pas allé aussi loin. Je n'ai pas encore fait la sélection aléatoire de la partie des valeurs, mais fondamentalement, je suis à court de perte pour ma sortie de ce code jusqu'à présent.Chaîne de Markov en Python (débutant)
filename = open("dr-suess.txt")
def make_list(filename):
"""make file a list and a list of tuple tup_pairs"""
file_string = filename.read() #read whole file
file_list = file_string.split() #split on whitespace (not worrying about
# puncuation right now)
tup_pairs = []
for i in range(len(file_list)-1):
tup_pairs.append((file_list[i], file_list[i+1])) #making my tuple pair list
return tup_pairs, file_list
def mapping(filename):
tup_pairs, file_list = make_list(filename)
dictionary = {}
for pair in tup_pairs:
dictionary[pair] = [] #setting the value of dict to empty list
tup_pairs = set(tup_pairs) #throwing out repeated tuples
for word in file_list:
word_number = file_list.index(word) #index number of iter word
if word_number > 1: #because there is no -2/-1 index
compared_tuple = (file_list[word_number-2], file_list[word_number-1]) #to find
#preceeding pair to compare
for pair in tup_pairs:
if compared_tuple == pair:
dictionary[pair].append(word) #should append the word to my dict value (list)
print dictionary #getting weird results (some words should appear that dont, some
# don't appear that should)
mapping(filename)
sortie:
Lindsays-MBP:markov lindsayg$ python markov.py
{('a', 'fox?'): [], ('Sam', 'I'): ['am?'], **('you,', 'could'): ['you', 'you', 'you', 'you', 'you', 'yo**u']**, ('could', 'you'): ['in', 'with', 'in', 'with'], ('you', 'with'): [], ('box?', 'Would'): [], ('ham?', 'Would'): [], ('I', 'am?'): [], ('you', 'in'): ['a', 'a', 'a', 'a'], ('a', 'house?'): [], ('like', 'green'): ['eggs'], ('like', 'them,'): ['Sam'], ('and', 'ham?'): [], ('Would', 'you'): ['like', 'like'], ('a', 'mouse?'): [], ('them,', 'Sam'): ['I'], ('in', 'a'): ['house?', 'box?'], ('with', 'a'): ['mouse?', 'fox?'], ('house?', 'Would'): [], ('a', 'box?'): [], ('Would', 'you,'): ['could', 'could', 'could', 'could'], ('green', 'eggs'): ['and'], ('you', 'like'): ['green', 'them,'], ('mouse?', 'Would'): [], ('fox?', 'Would'): [], ('eggs', 'and'): ['ham?']}
Un exemple de sortie bizarre (il ne devrait y avoir 4 valeurs 'vous' et il y en a six):
('you,', 'could'): ['you', 'you', 'you', 'you', 'you', 'you']
fichier FYI texte utilisé:
Would you, could you in a house?
Would you, could you with a mouse?
Would you, could you in a box?
Would you, could you with a fox?
Would you like green eggs and ham?
Would you like them, Sam I am?
Je pense que vous avez besoin de revoir l'algorithme que vous essayez de mettre en œuvre. Le code (comme je le lis) pour chaque "vous" obtiendra le comparable_tuple ("Would you") qui existe 6 fois dans votre cas. Peut-être que vous avez besoin d'un idx, mot dans enumerate (file_list) et travailler avec idx au lieu de word_number. –