2016-08-06 9 views
0

Rの中に用語ドキュメント行列(tdm)があり(約16,000文字のコーパスから作成)、距離行列を作成しようとしていますが、どのくらいの時間がかかっているかわからない(すでに20分以上経過している)。私はまた、ドキュメント用語行列形式を使用して距離行列を作成しようとしましたが、それでも読み込まれません。プロセスをスピードアップするためにできることはありますか? tdmの場合、行はテキスト文書であり、列は可能な単語です。したがって、行列のセル内のエントリは、ドキュメントごとの各単語の数です。 これは私のコードは次のようになります。距離行列の計算に時間がかかりすぎるR

library(tm) 
library(slam) 
library(dplyr) 
library(XLConnect) 
wb <- loadWorkbook("Descriptions.xlsx") 
df <- readWorksheet(wb, sheet=1) 
docs <- Corpus(VectorSource(df$Long_Descriptions)) 
docs <- tm_map(docs, removePunctuation) %>% 
    tm_map(removeNumbers) %>% 
    tm_map(content_transformer(tolower), lazy = TRUE) %>% 
    tm_map(removeWords, stopwords("english"), lazy = TRUE) %>% 
    tm_map(stemDocument, language = c("english"), lazy = TRUE) 
dtm <- DocumentTermMatrix(docs) 
tdm <- TermDocumentMatrix(docs, control = list(removePunctuation = TRUE, stopwords = TRUE)) 
z<-as.matrix(dist(t(tdm), method = "cosine")) 

(私は私のコードが再現する必要があります知っているが、私は、私は私のデータを共有することができるかどうかはわかりませんExcel文書が1列がLong_Descriptions権利を与えており、例。行の値はカンマで区切られています:私は猫が好きです、私は犬の人です、私は3人のウサギです、私は猫の人ですが、私はペットのウサギです)

+0

あなたは小さなデータセットでこのコードの動作を試してみましたかないことがありますか?ありがとう。 – clmarquart

答えて

0

コサイン距離は2つの行列の単純な内積ですL2正規化を伴う。あなたのケースでは、それはさらに単純化されました - dtmのL2正規化dtmの転置が転置されました。ここでMatrixtext2vecパッケージを使用して再現性の例である:

library(text2vec) 
library(Matrix) 

cosine <- function(m) { 
    m_normalized <- m/sqrt(rowSums(m^2)) 
    tcrossprod(m_normalized) 
} 

data("movie_review") 
data = rep(movie_review$review, 3) 
it = itoken(data, tolower, word_tokenizer) 
v = create_vocabulary(it) %>% 
    prune_vocabulary(term_count_min = 5) 
vectorizer = vocab_vectorizer(v) 
it = itoken(data, tolower, word_tokenizer) 
dtm = create_dtm(it, vectorizer) 
dim(dtm) 
# 15000 24548 

system.time(dtm_cos <- cosine(dtm)) 
# user system elapsed 
# 41.914 6.963 50.761 
dim(dtm) 
# 15000 15000 

EDIT: tmパッケージの場合、この質問を参照してください。R: Calculate cosine distance from a term-document matrix with tm and proxy

+0

ありがとう。上記の使用したパッケージを使用してストップワードや句読点を削除する方法がありますか? –

+0

はい、それは存在します、vignettesを見てください。方法があなたのために働くなら、答えを受け入れてください。 –