tutorial - python typing



Python schnellere Alternative zum Wörterbuch? (1)

Verwenden Sie nicht, if word in counts.keys() Wenn Sie das tun, sehen Sie nacheinander durch die Tasten, was dict eigentlich vermeiden soll.

Setzen Sie einfach, if word in counts .

Oder verwende ein defaultdict . https://docs.python.org/2/library/collections.html#collections.defaultdict

Diese Frage hat hier bereits eine Antwort:

Ich mache ein einfaches Sentiment-Mining-System mit einem Naive Bayes classifier .

Zum Trainieren meines Klassifikators habe ich eine Textdatei, in der jede Zeile eine Liste von Tokens (generiert aus einem Tweet) und die zugehörige Stimmung enthält (0 für -ve, 4 für positiv).

Beispielsweise:

0 @ switchfoot http : //twitpic.com/2y1zl - Awww , that 's a bummer . You shoulda got David Carr of Third Day to do it . ; D
0 spring break in plain city ... it 's snowing
0 @ alydesigns i was out most of the day so did n't get much done
0 some1 hacked my account on aim now i have to make a new one
0 really do n't feel like getting up today ... but got to study to for tomorrows practical exam ...

Nun, was ich versuche, ist für jeden Token, zähle, wie oft er in einem positiven Tweet vorkommt und wie oft er in einem negativen Tweet vorkommt. Ich plane dann, diese Zählungen für die Berechnung von Wahrscheinlichkeiten zu verwenden. Ich verwende das integrierte Wörterbuch zum Speichern dieser Zählerstände. Die Schlüssel sind die Token und die Werte sind Ganzzahl-Arrays der Größe 2.

Das Problem ist, dass dieser Code ziemlich schnell beginnt, aber immer langsamer wird und wenn er etwa 200.000 Tweets verarbeitet hat, wird er sehr langsam - etwa 1 Tweet pro Sekunde. Da mein Trainingssatz 1,6 Millionen Tweets hat, ist das zu langsam. Der Code, den ich habe, ist dies:

def compute_counts(infile):
    f = open(infile)
    counts = {}
    i = 0
    for line in f:
        i = i + 1
        print(i)
        words = line.split(' ')
        for word in words[1:]:
            word = word.replace('\n', '').replace('\r', '')
            if words[0] == '0':
                if word in counts.keys():
                    counts[word][0] += 1
                else:
                    counts[word] = [1, 0]
            else:
                if word in counts.keys():
                    counts[word][1] += 1
                else:
                    counts[word] = [0, 1]
    return counts

Was kann ich tun, um diesen Prozess zu beschleunigen? Eine bessere Datenstruktur?

Edit: Kein Duplikat, die Frage geht nicht um etwas schneller als Diktat im allgemeinen Fall, sondern in diesem speziellen Anwendungsfall.





nlp