Bigramme wirklich schnell zählen (mit oder ohne Multiprocessing) - Python

8

In Anbetracht der big.txt von norvig.com/big.txt ist das Ziel, die Bigramme wirklich schnell zu zählen (Imagine dass ich das 100.000 mal wiederholen muss).

Nach Fast / Optimize N-Gramm-Implementierungen in Python Das Extrahieren von Bigrams wäre das Optimalste:

%Vor%

Und wenn ich Python3 verwende, wird der Generator nicht ausgewertet, bis ich ihn mit list(_bigrams) oder einigen anderen Funktionen realisiert habe, die das Gleiche tun.

%Vor%

Aber das dauert ungefähr 1+ Sekunden pro Iteration und 100.000 Iterationen wären zu lang.

Ich habe auch sklearn CountVectorizer ausprobiert, aber die Zeit zum Extrahieren, Zählen und Abrufen der Top100-Bigramme ist vergleichbar mit dem nativen Python.

Dann habe ich mit etwas multiprocessing experimentiert, wobei ich eine leichte Modifikation von Python-Multiprocessing verwende und einen geteilten Zähler und Ссылка :

%Vor%

Aber die Verwendung von MultiProcCounter in der Bigrammzählung dauert sogar länger als 1+ Sekunden pro Iteration. Ich habe keine Ahnung, warum das der Fall ist, mit der Dummy-Liste von int Beispiel funktioniert die multiproc_count perfekt.

Ich habe es versucht:

%Vor%

Gibt es eine Möglichkeit, die Bigrams in Python wirklich schnell zu zählen?

    
alvas 02.11.2016, 06:03
quelle

2 Antworten

1
%Vor%

Es gibt einige Probleme mit diesem Programm, wie z. B. das Herausfiltern von Leerzeichen oder Interpunktion, aber ich habe dieses Programm gemacht, um zu zeigen, wofür Sie schießen sollten. Sie können es leicht an Ihre Bedürfnisse anpassen.

Dieses Programm erkennt automatisch, wie viele Kerne Ihr Computer hat, und erstellt diese Anzahl von Threads, um die Bereiche, in denen nach Bigrammen gesucht wird, gleichmäßig zu verteilen. Ich konnte diesen Code nur in einem Online-Browser auf einem schuleigenen Computer testen, daher kann ich nicht sicher sein, dass dies vollständig funktioniert. Wenn es Probleme oder Fragen gibt, lassen Sie sie bitte in den Kommentaren.

    
Douglas 10.11.2016 19:12
quelle
0

Mein Vorschlag:

%Vor%

Bei dieser Version wird zwischen Groß- und Kleinschreibung unterschieden. wahrscheinlich besser, zuerst den ganzen Text klein geschrieben.

    
Yves Daoust 02.11.2016 13:53
quelle