Ich habe eine Datenbank mit Textdaten und einen kleinen Zähler erstellt, um die Wortzahl von der gesamten Datenbank zu erhalten. Die gebräuchlichsten Wörter sind die üblichen Verdächtigen ('ist', 'und' usw.) und die am wenigsten verbreiteten sind eine Mischung aus Emojis, Dollarwerten, Tippfehlern und so weiter. Ich möchte die Wörter aus dem Text entfernen, damit ich nur die Werte vektorisieren kann, die nicht am häufigsten oder am seltensten sind. Aber die Liste der höchst ungewöhnlich/anomaler Worte sind etwa 600.000 Artikel lang:Beschleunigung der Textreinigung mit vielen Stoppworten
stopwords = []
for key, value in ctr.items(): #ctr is a Counter() object of words in the entire corpus of text and their counts
if value < 4:
words += 1
stopwords.append(key)
print (len(stopwords))
643392
Das heißt, ein Beispiel für Tokenisieren nur ein Stück Text unter:
start = time.time()
[word for word in word_tokenize(stemmer.stem(dataframe.text[20])) if word not in stopwords]
end = time.time()
print (end - start)
79.92309927940369
also mehr als eine Minute für ein einzelnes Stück Text. Es gibt ungefähr 160.000 Artikel zu reinigen und zu vektorisieren.
Gibt es eine Art vektorisierte Funktion zum Entfernen von Stoppwörtern? Die einzigen Möglichkeiten, die ich beim Umgang mit Stoppwörtern gesehen habe, behandeln das Problem iterativ. Bei dieser Geschwindigkeit dauert die Reinigung dieses Textes etwa drei Monate.
Danke wie immer für jede Hilfe.
Dies ist definitiv ein Fall, wo Multi-Threading die Ausführungszeit verbessern könnte. Eine andere Sache wäre, einen MCVE zu haben, um besser sehen zu können, wo Ihr Engpass sein könnte: https://stackoverflow.com/help/mcve – Adonis
Gibt es eine Möglichkeit, einen MCVE bereitzustellen, wenn die Liste der Stoppwörter so groß ist? Ist das ein Szenario, in dem ich einfach einen Dropbox-Link erstellen soll? – snapcrack
Ich bin mir nicht sicher, ob es hilft, aber vielleicht könnte dies die Dinge ein wenig beschleunigen: https://github.com/alvations/earthy/blob/master/FAQ.md#what-else-can-earthy-do – alvas