2016-04-25 3 views
0

Was ich versuche, ist ein Programm zu schreiben, das eine .TXT-Datei mit Film Bewertungen öffnet, wo die Bewertung eine Zahl von 0-4 ist gefolgt von einer kurzen Überprüfung des Films . Das Programm fordert den Benutzer dann auf, eine zweite Textdatei mit Wörtern zu öffnen, die mit den Übersichten verglichen werden und einen Zahlenwert basierend auf der Überprüfung erhalten.Iterieren durch eine TXT-Datei in einer ungeraden Art und Weise

Zum Beispiel mit diesen beiden Probe-Bewertungen, wie sie in der TXT-Datei erscheinen würde:

4 Ein Comedy-Drama von fast epischen Ausmaßen in einer aufrichtigen Leistung wurzelt durch den Titelcharakter Midlife-Krise. 2 Massouds Geschichte ist ein Epos, aber auch eine Tragödie, die Aufzeichnung eines hartnäckigen, humanen Kämpfers, der auch der Gefangene -LRB- und schließlich das Opfer -RRB- der Geschichte war.

Also, wenn ich nach dem Wort "epic" suchen würde, würde es die Zählung für dieses Wort um 2 erhöhen (was ich bereits herausgefunden habe), da es zweimal erscheint, und dann die Werte 4 und 2 an a anhängen Liste der Bewertungen für dieses Wort.

Wie hänge ich diese Ints an eine Liste oder ein Wörterbuch an, das zu diesem Wort gehört? Beachten Sie, dass ich für jedes Wort in einer Wortliste eine neue Liste oder einen neuen Dictionary-Schlüssel erstellen muss.

Bitte und danke. Tut mir leid, wenn das schlecht formuliert war, Programmierung ist nicht meine Stärke.

Alle meine Code:

def menu_validate(prompt, min_val, max_val): 
    """ produces a prompt, gets input, validates the input and returns a value. """ 
    while True: 
     try: 
      menu = int(input(prompt)) 
      if menu >= min_val and menu <= max_val: 
       return menu 
       break 
      elif menu.lower == "quit" or menu.lower == "q": 
       quit() 
      print("You must enter a number value from {} to {}.".format(min_val, max_val)) 
     except ValueError: 
      print("You must enter a number value from {} to {}.".format(min_val, max_val)) 

def open_file(prompt): 
    """ opens a file """ 
    while True: 
     try: 
      file_name = str(input(prompt)) 
      if ".txt" in file_name: 
       input_file = open(file_name, 'r') 
       return input_file 
      else: 
       input_file = open(file_name+".txt", 'r') 
       return input_file 
     except FileNotFoundError: 
      print("You must enter a valid file name. Make sure the file you would like to open is in this programs root folder.") 

def make_list(file): 
    lst = [] 
    for line in file: 
     lst2 = line.split(' ') 
     del lst2[-1] 
     lst.append(lst2) 
    return lst 

def rating_list(lst): 
    '''iterates through a list of lists and appends the first value in each list to a second list''' 
    rating_list = [] 
    for list in lst: 
     rating_list.append(list[0]) 
    return rating_list 

def word_cnt(lst, word : str): 
    cnt = 0 
    for list in lst: 
     for word in list: 
      cnt += 1 
    return cnt 

def words_list(file): 
    lst = [] 
    for word in file: 
     lst.append(word) 
    return lst 

##def sort(words, occurrences, avg_scores, std_dev): 
## '''sorts and prints the output''' 
## menu = menu_validate("You must choose one of the valid choices of 1, 2, 3, 4 \n  Sort Options\n 1. Sort by Avg Ascending\n 2. Sort by Avg Descending\n 3. Sort by Std Deviation Ascending\n 4. Sort by Std Deviation Descending", 1, 4) 
## print ("{}{}{}{}\n{}".format("Word", "Occurence", "Avg. Score", "Std. Dev.", "="*51)) 
## if menu == 1: 
##  for i in range (len(word_list)): 
##   print ("{}{}{}{}".format(cnt_list.sorted[i],) 

def make_odict(lst1, lst2): 
    '''makes an ordered dictionary of keys/values from 2 lists of equal length''' 

    dic = OrderedDict() 

    for i in range (len(word_list)): 
     dic[lst2[i]] = lst2[i] 

    return dic   


cnt_list = [] 
while True: 
    menu = menu_validate("1. Get sentiment for all words in a file? \nQ. Quit \n", 1, 1) 
    if menu == True: 
     ratings_file = open("sample.txt") 
     ratings_list = make_list(ratings_file) 


     word_file = open_file("Enter the name of the file with words to score \n") 
     word_list = words_list(word_file) 
     for word in word_list: 
      cnt = word_cnt(ratings_list, word) 
      cnt_list.append(word_cnt(ratings_list, word)) 

Sorry, ich weiß, es ist chaotisch und sehr unvollständig.

Antwort

1

Ich denke du meinst:

import collections 

counts = collections.defaultdict(int) 

word = 'epic' 

counts[word] += 1 

Natürlich können Sie mit word mehr tun als ich, aber Sie sind uns keinen Code zeigt, so ...

EDIT

Okay, mit Blick auf Ihren Code, würde ich vorschlagen, dass Sie die Trennung zwischen Bewertung und Text explizit machen. Nehmen Sie dies:

def make_list(file): 
    lst = [] 
    for line in file: 
     lst2 = line.split(' ') 
     del lst2[-1] 
     lst.append(lst2) 
    return lst 

und wandelt es in diese:

def parse_ratings(file): 
    """ 
    Given a file of lines, each with a numeric rating at the start, 
    parse the lines into score/text tuples, one per line. Return the 
    list of parsed tuples. 
    """ 
    ratings = [] 
    for line in file: 
     text = line.strip().split() 
     if text: 
      score = text[0] 
      ratings.append((score,text[1:])) 
    return ratings 

Dann sind Sie beide Werte zusammen berechnen kann:

def match_reviews(word, ratings): 
    cnt = 0 
    scores = [] 

    for score,text in ratings: 
     n = text.count(word) 
     if n: 
      cnt += n 
      scores.append(score) 

    return (cnt, scores) 
+0

Ich habe die Zählung Teil bekam herausgefunden. Ich muss in der Lage sein, durch die TXT-Datei zu iterieren, und wenn das Wort, nach dem das Programm sucht, erscheint, sollte es die Ganzzahl vor diesem Wort an eine Liste anhängen. –

+0

Okay, ich habe einen Code hinzugefügt, der helfen kann. Ich denke, Sie müssen anfangen, Ihre Daten formaler zu behandeln. Trennen Sie die Partitur vom Text und halten Sie sie danach in ihren offiziellen Positionen. Du wirst immer wissen, was was ist. –