3
機械学習用のデータセットを準備しようとしています。このプロセスでは、(ほとんどの場合、悪いOCRの読みに関連する)出現の少ない単語を削除(停止)したいと考えています。現在、私は削除したい約1mioの単語を含む単語のリストを持っています。2つの大きな文字列ベクトルの比較に時間がかかりすぎる(ストップワードを削除する)
ただし、この設定でデータセットを処理するのに時間がかかります。
library(stringi)
#generate the stopword list
b <- stri_rand_strings(1000000, 4, pattern = "[A-Za-z0-9]")
#remove stopstopwords form the dataset
system.time({
a <- stri_rand_strings(10, 4, pattern = "[A-Za-z0-9]")
c <- a[!(a %in% b)]
c
})
user system elapsed
0.14 0.00 0.14
「a%in%b」はO(N)ではないようです。プロセスが数時間以内に完了しないため、データセット全体でこれを実行することは不可能です。
Rの2つのベクトルを比較する効率的な方法はありますか?
私はそれがルックアップとして非常に速くなければならないと思う。私は数分で完了するC#で辞書を使ってテストを行いました。
data.table'が速くすなわちあるべき 'から'%の顎% 'で試してみてください' system.time({C < - [(%の顎% b)]}) #user system elapsed 0.01 0.00 0.02 'は%in%に基づいて' 0.13'と比較しています – akrun