Ich habe einen Code entwickelt, der für das Lesen der Wörter einer TXT-Datei verantwortlich ist, in meinem Fall "elquijote.txt", um dann ein Wörterbuch {key: value} zu verwenden erscheinen und ihre Vorkommen.Wörter aus der txt-Datei lesen - Python
Zum Beispiel für eine Datei „test1.txt“ mit den folgenden Worten:
hello hello hello good bye bye
Der Ausgang meines Programms ist:
hello 3
good 1
bye 2
, eine andere der Optionen, die das Programm hat, ist dass es jene Wörter zeigt, die eine größere Anzahl von Malen erscheinen als eine Zahl, die von uns durch ein Argument eingeführt wurde.
Wenn wir in der Shell den folgenden Befehl "python readingwords.py text.txt 2" eingeben, zeigt die in der Datei "test1.txt" enthaltenen Wörter an, die öfter als die von uns eingegebene Zahl erscheinen in diesem Fall 2
Ausgang:
hello 3
Jetzt können wir ein drittes Argument der gemeinsamen Wörter wie Determinanten Konjunktionen einführen, die, da sie so generisch, wollen wir nicht in unserem gezeigt oder eingeführt werden Wörterbuch.
Mein Code funktioniert ordnungsgemäß, das Problem ist, dass die Verwendung von großen Dateien wie "elquijote.txt" lange dauert, um den Vorgang abzuschließen.
Ich habe nachgedacht und es ist wegen der Verwendung meiner Hilfslisten für die Beseitigung von Wörtern.
Ich habe als eine Lösung gedacht, nicht in meine Listen diejenigen Wörter, die in der txt-Datei erscheinen, die durch Argument eingegeben wird, die die zu verwerfenden Wörter enthält, einzuführen.
Hier ist mein Code:
def contar(aux):
counts = {}
for palabra in aux:
palabra = palabra.lower()
if palabra not in counts:
counts[palabra] = 0
counts[palabra] += 1
return counts
def main():
characters = '!?¿-.:;-,><=*»¡'
aux = []
counts = {}
with open(sys.argv[1],'r') as f:
aux = ''.join(c for c in f.read() if c not in characters)
aux = aux.split()
if (len(sys.argv)>3):
with open(sys.argv[3], 'r') as f:
remove = "".join(c for c in f.read())
remove = remove.split()
#Borrar del archivo
for word in aux:
if word in remove:
aux.remove(word)
counts = contar(aux)
for word, count in counts.items():
if count > int(sys.argv[2]):
print word, count
if __name__ == '__main__':
main()
Contar Funktion, um die Wörter im Wörterbuch einführt.
Und Hauptfunktion führt in einer "Aux" -Liste diejenigen Wörter ein, die keine symbolischen Zeichen enthalten, und löscht dann diese "verbotenen" Wörter, die aus einer anderen .txt-Datei geladen wurden, aus derselben Liste.
Ich denke, die richtige Lösung wäre, die verbotenen Wörter zu verwerfen, wo ich Symbole verwerfen, die nicht akzeptiert werden, aber nach mehreren Versuchen habe ich es nicht richtig geschafft.
Hier können Sie meine Online-Test: https://repl.it/Nf3S/54 Dank.
warum ein normales Wort nicht zählt möglicherweise mit ** collections.Counter ** und dann beseitigt Ihre unerwünschten Worte nach? Verschiebt den langsamen Code in eine kleinere Volumenschleife. –
Haben Sie ein Speicherproblem? "elquijote.txt" könnte eine sehr lange Datei sein. Wenn es das vollständige Buch ist, hat es 381.104 Wörter aus einer Menge von 22.939 verschiedenen Wörtern und mehr als 2 Millionen Zeichen. Batch-Verarbeitung des Buches sollte eine gute Idee sein. – Adirio