Wortfrequenzen in Python effizient zählen

Ich möchte die Häufigkeit aller Wörter in einer Textdatei zählen.

>>> countInFile('test.txt')

should return{'aaa':1, 'bbb': 2, 'ccc':1} wenn die Zieltextdatei wie folgt lautet:

# test.txt
aaa bbb ccc
bbb

Ich habe es mit reinem Python implementiert nach einige Beiträge. Ich habe jedoch festgestellt, dass reine Python-Methoden aufgrund der großen Dateigröße (> 1 GB) nicht ausreichend sind.

ch denke, die Macht von sklearn zu leihen, ist ein Kandida

Wenn Sie CountVectorizer Frequenzen für jede Zeile zählen lassen, erhalten Sie Wortfrequenzen, indem Sie jede Spalte aufsummieren. Aber es klingt ein bisschen indirekt.

Was ist der effizienteste und einfachste Weg, um Wörter in einer Datei mit Python zu zählen?

Aktualisiere

Mein (sehr langsamer) Code ist hier:

from collections import Counter

def get_term_frequency_in_file(source_file_path):
    wordcount = {}
    with open(source_file_path) as f:
        for line in f:
            line = line.lower().translate(None, string.punctuation)
            this_wordcount = Counter(line.split())
            wordcount = add_merge_two_dict(wordcount, this_wordcount)
    return wordcount

def add_merge_two_dict(x, y):
    return { k: x.get(k, 0) + y.get(k, 0) for k in set(x) | set(y) }

Antworten auf die Frage(14)

Ihre Antwort auf die Frage