2017-07-11 18 views
1

私はテキストデータのデータベースを持っていて、データベース全体から単語数を得るための小さなカウンタを作成しました。最も一般的な言葉は通常の容疑者( 'is'、 'and'など)であり、最も一般的なものは、emojis、ドル値、タイプミスなどがあります。私はテキストから単語を削除して、最も一般的ではない、あるいは最も一般的でない値をベクトル化できるようにしたいと思います。しかし、非常に珍しい/異常な単語のリストは長いおよそ60万アイテムです。多くのストップワードでテキストを高速化する

テキストのトークン化ちょうど一枚を例にとると、意味
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 

:用分にわたり、

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 

ので、一枚のテキスト。清掃してベクトル化する記事は約16万件あります。

ストップワード除去のためのベクター化された機能はありますか?ストップワードを扱うのを見てきた唯一の方法は、問題を繰り返し解決します。このレートでは、このテキストの消去には約3ヶ月かかります。

いつもありがとうございました。

+1

マルチスレッドが実行時間を改善する可能性があるのは間違いありません。別のことは、あなたのボトルネックがどこにあるのかを良く知るためにMCVEを持つことです。https://stackoverflow.com/help/mcve – Adonis

+0

ストップワードのリストが非常に大きいときにMCVEを提供する方法はありますか?これは、Dropboxのリンクなどを作成するだけのシナリオですか? – snapcrack

+0

私はそれが助けになるかどうかは分かりませんが、少し速いかもしれません。https://github.com/alvations/earthy/blob/master/FAQ.md#what-else-can-earthy-do – alvas

答えて

2

ワードルックアップはPythonでそれほど長い時間を費やすべきではありません。ストップワードの削除をベクトル化する必要はありません。コードを修正するだけで済みます。あなたのコードは表示されませんが、チャンスはstopwordsは巨大なリストです。それをセットに変換して、問題はなくなるはずです。

stopwords = set(stopwords) 

第二には、再び、あなたは完全なコードを示していないが、私は本当にあなたが複数の単語列を食い止めることができステマーを持っている疑い。最初に文字列をトークン化し、次に各単語をステミングします。

+0

apologies今までこれを手に入れることができませんでした。リストはCounter()から来たので既にセットになっているので、それらの単語のそれぞれは一意です。それは挑戦です – snapcrack

+0

一意ではなく、アクセス時間です。しかし、おそらくあなたのstemmerはあなたが知っているそれを与える文書の長さの文字列に窒息しています。あなたは何か間違っているが、重要なコードを表示していないので誰もあなたを助けることができない。 – alexis

+0

また、 'Counter.keys()'を取った場合、それはリストです。あなたのコードはどこですか? – alexis

関連する問題