2016-10-20 5 views
0

Ich versuche, ein Konkordanzprogramm zu schreiben, in dem ich versuche, die Shell eine Datei öffnen zu lassen, sie zu lesen und zu interpretieren, was der Inhalt ist. Dann möchte ich, dass es die Wörter in alphabetischer Reihenfolge zusammen mit dem Ausdruck der Wörter in Bezug auf den Text ausdruckt. Bisher habe ich das:Konkordanz in Python. Alphabetische Reihenfolge

import sys 

if len(sys.argv) < 2: 
    filename= input('what file? ') 
    handle = open(filename, 'r') 
elif sys.argv[1] == '-': 
    handle = sys.stdin 
else: 
    handle = open(sys.argv[1], 'r') 

appearances = [] 
position = 0 
allwords = {} 
for line in handle.readlines(): 
    words = line.split() 
    for w in words: 
     w = w.lower() 
     if w in allwords.keys(): 
      allwords [w] += 1 
     else: 
      allwords[w] =1 
     for w in allwords: 
      if not w in allwords: 
       allwords[w] = [] 
       appearances.append(position) 
       position +=1 
      else: 
       appearances.append(position) 
       position += 1 
handle.close() 

keys = sorted(allwords.keys()) 
for k in keys: 
    print('{:15s} {} {}'.format(k, appearances, position)) 

soweit der Code gibt mir die Wörter richtig in alphabetischer Reihenfolge; Allerdings gibt es mir nicht den richtigen Ort, an dem sich die Wörter befinden. Ich bin etwas neu zu Python, also wenn Sie versuchen könnten, es ein wenig grundlegend zu behalten, würde es geschätzt werden. Ich möchte auch in Satzzeichen bleiben, um es ein bisschen "einzigartiger" zu machen.

+2

Meinst du, dass Sie die Zeilennummer erhalten möchten, die einem Wort entspricht? – Chr

+0

Sie wollen also die Wörter in der Datei, die Anzahl der Male jedes Wort erscheint und die Positionen der einzelnen Vorkommen? –

+0

Willkommen bei StackOverflow. Es ist unklar von Ihrer Frage, was genau Sie erreichen wollen. Bitte klären Sie Ihre Anforderungen und geben Sie Beispiele für die Eingabe und die Ausgabe, die Sie erwarten. Sei so genau wie möglich, denn das führt zu besseren Antworten. –

Antwort

0

Soweit ich verstehen konnte, sind Sie besorgt über die tatsächliche Position der Wörter in der Datei und gleichzeitig möchten Sie die Wörter in alphabetischer Reihenfolge gedruckt werden. Sie können den folgenden Code verwenden:

Beachten Sie, dass wir immer eine Zählung für jedes Wort haben und welche die Länge der Liste ist, die die Positionen dieses bestimmten Worts speichert.

# allwords is a dictionary which uses word as the key and the list of position of the word in the file as the value. 
# The position will be recored as (line_number, word_number) tuple where word_number is position of the word in that particular line. 

allwords = {} 

# Get the index of the line as well. 
for lineno,line in enumerate(handle.readlines()): 

    words = line.split() 

    # Get the word index as well. 
    for wordno,w in enumerate(words): 

     w = w.lower() 

     # Make the position tuple and append in the list of appearances for that particular word. 
     position = (lineno+1, wordno+1) 

     if w not in allwords.keys(): 

      allwords[w] = [] 

     allwords[w].append(position) 



for key in sorted(allwords.keys()): 
    print(key + " appeared " + str(len(allwords[key])) + " number of times and positions are:") 
    for tup in allwords[key]: 
     print(tup) 
Verwandte Themen