ein Korpus Gegeben/Texte als solche:schnellste Weg, um einen Korpus Wörterbuch in eine OrderedDict Sortierung - Python
Resumption of the session
I declare resumed the session of the European Parliament adjourned on Friday 17 December 1999 , and I would like once again to wish you a happy new year in the hope that you enjoyed a pleasant festive period .
Although , as you will have seen , the dreaded ' millennium bug ' failed to materialise , still the people in a number of countries suffered a series of natural disasters that truly were dreadful .
You have requested a debate on this subject in the course of the next few days , during this part @[email protected] session .
In the meantime , I should like to observe a minute ' s silence , as a number of Members have requested , on behalf of all the victims concerned , particularly those of the terrible storms , in the various countries of the European Union .
konnte ich einfach das tun, ein Wörterbuch mit Worthäufigkeiten zu bekommen:
>>> word_freq = Counter()
>>> for line in text.split('\n'):
... for word in line.split():
... word_freq[word]+=1
...
Aber wenn das Ziel darin besteht, ein bestelltes Wörterbuch von der höchsten zur niedrigsten Frequenz zu erreichen, muss ich dies tun:
Stellen Sie sich vor, ich hätte 1 Milliarde Schlüssel im Objekt Counter
, die Iteration durch die most_common()
hätte eine Komplexität, einmal durch ein Korpus (nicht eindeutige Instanzen) und das Vokabular (eindeutiger Schlüssel) zu gehen.
Hinweis: Die Counter.most_common()
wäre ein Ad-hoc-sorted()
nennen, siehe https://hg.python.org/cpython/file/e38470b49d3c/Lib/collections.py#l472
dies gegeben, habe ich den folgenden Code gesehen, dass numpy.argsort()
verwendet:
>>> import numpy as np
>>> words = word_freq.keys()
>>> freqs = word_freq.values()
>>> sorted_word_index = np.argsort(freqs) # lowest to highest
>>> sorted_word_freq_with_numpy = OrderedDict()
>>> for idx in reversed(sorted_word_index):
... sorted_word_freq_with_numpy[words[idx]] = freqs[idx]
...
, die schneller ist?
Gibt es eine andere Art und Weise schneller eine solche OrderedDict
von einem Counter
zu bekommen?
Gibt es außer OrderedDict
weitere Python-Objekte, die dasselbe sortierte Schlüssel/Wert-Paar erreichen?
Angenommen, Speicher ist kein Problem. Angesichts 120 GB RAM sollte es nicht viel Problem sein, 1 Milliarde Schlüssel-Wert-Paare richtig zu halten? Nehmen Sie einen Durchschnitt von 20 Zeichen pro Schlüssel für 1 Milliarde Schlüssel und eine einzelne Ganzzahl für jeden Wert an.
Speicher kann ebenso ein Problem sein wie Geschwindigkeit. Ich stelle mir vor, dass eine Art Merge-Sort in beiden Fällen am besten ist. Es gibt einige Diskussionen über die beste Art in http://stackoverflow.com/questions/1180240/best-way-to-sort-1m-records-in-python. –
angenommen, dass Speicher kein Problem ist. – alvas
Möglicherweise würde eine Billion Schlüssel-Wert-Paar nicht so viel Speicher aufnehmen, oder? – alvas