Ich verwende nltk
, um N-Gramm aus Sätzen zu generieren, indem zuerst gegebene Stopwörter entfernt werden. Allerdings ist nltk.pos_tag()
extrem langsam und dauert bis zu 0,6 Sekunden auf meiner CPU (Intel i7).POS-Tagger ist unglaublich langsam
Der Ausgang:
['The first time I went, and was completely taken by the live jazz band and atmosphere, I ordered the Lobster Cobb Salad.']
0.620481014252
["It's simply the best meal in NYC."]
0.640982151031
['You cannot go wrong at the Red Eye Grill.']
0.644664049149
Der Code:
for sentence in source:
nltk_ngrams = None
if stop_words is not None:
start = time.time()
sentence_pos = nltk.pos_tag(word_tokenize(sentence))
print time.time() - start
filtered_words = [word for (word, pos) in sentence_pos if pos not in stop_words]
else:
filtered_words = ngrams(sentence.split(), n)
Ist das wirklich so langsam oder mache ich etwas falsch hier?
Können Sie den Text schreiben, dass hast du eingabe? Was ist die Spezifikation Ihrer Maschine (CPU-Geschwindigkeit und RAM)? Verbinden Sie sich mit einer Cloud und wie wird die Funktion getimed? Siehe auch http://stackoverflow.com/questions/33558836/pos-tagging-using-nltk-takes-time – alvas
@alvas Es ist ein Intel i7 (in der Frage angegeben). 16 GB RAM. Nein, es ist nicht in der Cloud, es ist lokal. Sie können in meinem Codebeispiel sehen, wie ich es zeitlich passe. – displayname
Sie müssen Ihre Lösung parallelisieren, wenn Sie einen großen Datensatz haben. Andernfalls (wenn Sie die getaggten Sätze im RAM halten können), sammeln Sie einfach alle markierten Sätze und machen Sie anschließend den Filter. – alvas