2016-04-06 12 views
0

Ich versuche zu zählen, wie oft ein Wort in einer TXT-Datei erscheint. Das Programm scheint zu funktionieren, aber ich kann nicht aufhören zu zählen, was ich denke, ist weißer Raum (die 60 in meinem Ergebnis, was keinen Sinn macht, da es mehr als 60 Leerzeichen). Gibt es eine Art zu strippen - und - aus der Mitte der Wörter?Ich versuche zu zählen, wie oft ein Wort in einer TXT-Datei mit Python3 erscheint

import string 

words = {} 

def unique_words2(filename): 
    strip = string.whitespace + string.punctuation + string.digits + "\"'" 
    for line in open(filename): 
     for word in line.lower().split(): 
      if word == " ": 
       continue 
      else: 
       word = word.strip(strip) 
       words[word] = words.get(word, 0) + 1 
    for word in sorted(words): 
     print("{0} {1}".format(word, words[word])) 

unique_words2("alice.txt") 

die ersten 5 Ergebnisse zeigen;

60 
a 627 
a--i'm 1 
a-piece 1 
abide 1 

Es ist Ergebnisse wie 1, 3 und 4, die ich gerne beseitigen würde.

+0

Was hat das mit 'urllib' zu tun? Ich habe dieses Tag entfernt. Sie können auch unerwünschte Zeichen mit dem 're' Modul ersetzen. – ChrisP

Antwort

0

Die Methode strip einer Python-Zeichenfolge entfernt nur angegebene Zeichen vom Anfang und Ende der Zeichenfolge. Verwenden Sie stattdessen die translate-Methode, um das zu beheben. (Dies ist die Ursache der Ausgänge 3 und 4). Ausgabe eins wird durch ein anderes Problem verursacht. Wenn ein Wort, das ausschließlich aus Zeichen in strip besteht, auftritt, wird es in das Wörterverzeichnis unter der leeren Zeichenfolge eingeschlossen.

Gezwickt Code:

import string 
def unique_words2(filename): 
    words = {} 
    strip = string.whitespace + string.punctuation + string.digits + "\"'" 
    translation = {ord(bad):None for bad in strip} 
    for line in open(filename): 
     for word in line.lower().split(): 
      word = word.translate(translation) 
      if word: 
       words[word] = words.get(word, 0) + 1 
    for word in sorted(words): 
     print("{0} {1}".format(word, words[word])) 

unique_words2("alice.txt") 
+0

Danke, das ist eine große Hilfe! – gedjnr

+0

Gern geschehen. – ppperry

0

Von https://docs.python.org/2/library/string.html:

string.split(s[, sep[, maxsplit]]) 

Die Worte von beliebigen Zeichenketten von Leerzeichen getrennt sind (Leerzeichen, Tabulator, neue Zeile, Rückkehr, Seitenvor)

Ersetzen Sie alle anderen Trennzeichen wie '-' mit einem Leerzeichen sollte der Trick tun. Keine Notwendigkeit, sich um wiederholte Räume zu kümmern, da sie als ein einziger Raum behandelt werden.

def unique_words2(filename): 
    strip = string.whitespace + string.punctuation + string.digits + "\"'" 
    for line in open(filename): 
     separators = '-_|' 
     for sep in seperators: 
      line = line.replace(sep, ' ') 

     for word in line.lower().split(): 
      word = word.strip(strip) 
      if word: 
       words[word] = words.get(word, 0) + 1 
    for word in sorted(words): 
     print("{0} {1}".format(word, words[word])) 
Verwandte Themen