2017-04-02 3 views
0

So habe ich ein Programm, das einen Satz in einer TXT-Datei sieht. Das Programm findet dann die Position jedes Wortes im Satz sowie die eindeutigen Wörter im Satz. Diese beiden Listen werden im Programm ausgegeben, und dann versucht das Programm, den ursprünglichen Satz in der .txt-Datei basierend auf den eindeutigen Wörtern im Satz und der Position der Wörter im Satz neu zu erstellen, die dann im Programm ausgegeben werden sollten. Der Code, den ich bis jetzt habe, ist unten gezeigt:Fehler beim Erstellen von Satz

import json 
import os.path 

def InputFile(): 
    global compfilename 
    compfilename = input("Please enter an existing compressed file to be decompressed: ") 

def Validation2(): 
    if compfilename == (""): 
     print ("Nothing was entered for the filename. Please re-enter a valid filename.") 
     Error() 
    if os.path.exists(compfilename + ".txt") == False: 
     print ("No such file exists. Please enter a valid existing file.") 
     Error() 

def OutputDecompressed(): 
    global words 
    global orgsentence 
    newfile = open((compfilename)+'.txt', 'r') 
    saveddata = json.load(newfile) 
    orgsentence = saveddata 
    words = orgsentence.split(' ') 
    print ("Words in the sentence: " + str(words)) 

def Uniquewords(): 
    for i in range(len(words)): 
     if words[i] not in unilist: 
      unilist.append(words[i]) 
    print ("Unique words: " + str(unilist)) 

def PosText(): 
    global pos 
    find = dict((sentence, words.index(sentence)+1) for sentence in list(words)) 
    pos = (list(map(lambda sentence: find [sentence], words))) 
    return (pos) 

def Error(): 
    MainCompression() 

def OutputDecompressed2(): 
    for number in pos: 
    decompression.append(orgsentence[int(number)-1]) 
    finalsentence = (" ".join(decompression)) 
    print ("Original sentence from file: " + finalsentence) 

def OutputText(): 
    print ("The positions of the word(s) in the sentence are: " + str(pos)) 

def MainCompression(): 
    global decompression 
    decompression = [] 
    global unilist 
    unilist = [] 
    InputFile() 
    Validation2() 
    OutputDecompressed() 
    Uniquewords() 
    PosText() 
    OutputText() 
    OutputDecompressed2() 

MainCompression() 

Ein Beispieltest wird jetzt beschrieben. Sagen, es ist eine .txt-Datei mit dem Namen ‚ohdear‘ und enthält den Satz: „hallo hallo hallo hallo“

Jetzt wird das Programm wie folgt dar:

Please enter an existing compressed file to be decompressed: ohdear 
Words in the sentence: ['hello', 'hello', 'hello', 'hello'] 
Unique words: ['hello'] 
The positions of the word(s) in the sentence are: [1, 1, 1, 1] 
Original sentence from file: h h h h 

Wie Sie sehen können, war der ursprüngliche Satz nicht aus den einzigartigen Wörtern und Positionen der Wörter im Satz rekonstruiert - seltsamerweise wurden 4 Stunden angezeigt. Kann jemand mit diesem Fehler helfen, weil ich keine Idee habe, wie man den ursprünglichen Satz von den eindeutigen Wörtern und der Position von Wörtern im Satz gerade neu erstellt. Das Problem liegt in der Funktion OutputDecompressed2(). Danke für jede Hilfe im Voraus. Ich habe für eine Weile auf diese stecken ...

Antwort

0
words = orgsentence.split(' ') 

Dies bedeutet, dass words eine Liste von Strings und orgsentence ist nur eine große Zeichenfolge. Aber später bekommst du:

orgsentence[int(number)-1] 

Welches wird nur ein Charakter sein. Lieber erhalten Sie words[int(number)-1].

auch:

find = dict((sentence, words.index(sentence)+1) for sentence in list(words)) 

gibt Ihnen nur das erste Vorkommen eines jeden 'sentence' denn das ist, was .index tut, daher haben Sie die Ausgabe:

The positions of the word(s) in the sentence are: [1, 1, 1, 1] 

, die offensichtlich falsch ist.

Und übrigens, sentence ist ein schrecklicher Variablenname an diesem Punkt, warum nicht word?

+0

Danke, es funktioniert jetzt! – Kronixion