2017-04-17 4 views
-6

Dieser Punkt dieses Programms ist, Vorkommen von Wörtern zu zählen, während Interpunktion und Artikel und Konjunktionen ignoriert werden. Die gewünschte Ausgabe ist eine Liste der 15 am häufigsten verwendeten Wörter und der 15 am Ende verwendeten Wörter ohne Angabe ihres Auftretens. Ich bin ein Anfänger und jede Hilfe würde sehr geschätzt werden. Vielen Dank!Verbessern Sie Code-Verbesserungen: Zählen Sie Instanzen von Wörtern, während Sie Interpunktionszeichen und allgemeine Wörter ignorieren

# This program reads a text file, performs a content analysis 
# and prints both a top 15 and a bottom 15 report 

name = input('Enter name of file: ') 

# Clean Function 
def clean(s): 
    punctuations = ["!","@","#","$"] 
    art_con = ['the','a','an','some','and','but','or','nor','for'] 
    for each in punctuations: 
     s = s.replace(each,"") 
    words = s.split() 
    resultwords = [word for word in words if word.lower() not in art_con] 
    result= ''.join(resultwords) 
    return result 

# Analyze Function 
def analyze(name): 
    print('Reading',name,'for analysis...') 
    print('===========================') 
    print('Creating content analysis dictionary...') 
    r = open(name, 'r') 
    s = r.read() 
    result = clean(s) 
    count = dict((x,result.count(x)) for x in set(result)) 
    print('Analysis complete!') 
    print('===================') 
    return count 

count = analyze(name) 

# turn dictionary into a list of tuples to sort 
def function(count): 
    list1 = [] 
    for key in count: 
     t = (count[key],key) 
     list1.append((t)) 
    list1.sort() 
    result = [list1[i] for i in range(len(list1))] 
    t15 = result[0:15] 
    b15 = result[-15:0] 
    print("The top 15 words are ",t15) 
    print("The bottom 15 words are ",b15) 

#Main Function 
def main(): 
    count = analyze(name) 
    function(count) 
main() 
+0

Willkommen bei Stackoverflow. Bitte lesen und befolgen Sie die Buchungsrichtlinien in der Hilfe. [Minimales, vollständiges, überprüfbares Beispiel] (http://stackoverflow.com/help/mcve) gilt hier. Wir können Ihnen nicht effektiv helfen, bis Sie Ihren MCVE-Code veröffentlicht und das Problem genau beschrieben haben. – Prune

+0

Okay ... und was ist deine Frage? – Chris

Antwort

0

Ich bin ein Anfänger und jede mögliche Hilfe wäre sehr geschätzt.

Insgesamt sieht der Code gut aus. Die clean() Funktion könnte schneller und prägnanter gemacht werden, indem 1) die Eingabezeichenfolge zu Beginn reduziert wird, 2) reguläre Ausdrücke verwendet werden, um die Wörter zu extrahieren, während die Interpunktion ignoriert wird, und 3) die gebräuchlichen Wörter eliminiert werden -Differenzoperation.

ist hier ein Rohschnitt Ihnen den Einstieg:

words = re.findall(r"[a-z\'\-]+", s.lower()) 
return set(words) - {'the','a','an','some','and','but','or','nor','for'} 
Verwandte Themen