2016-11-25 8 views
4

2つのベクトルの各単語間のJaccard類似度を計算する必要があります。各単語ごとに各単語。そして最も類似した言葉を抽出する。2つのベクトルの各単語間のJaccardの類似度を計算する

txt1 <- c('The quick brown fox jumps over the lazy dog') 
txt2 <- c('Te quick foks jump ovar lazzy dogg') 

words <- strsplit(as.character(txt1), " ") 
words.p <- strsplit(as.character(txt2), " ") 

r <- length(words[[1]]) 
c <- length(words.p[[1]]) 

m <- matrix(nrow=r, ncol=c) 
for (i in 1:r){ 
    for (j in 1:c){ 
    m[i,j] = stringdist(tolower(words.p[[1]][j]), tolower(words[[1]][i]), method='jaccard', q=2) 
    } 
} 

ind <- which(m == min(m))-nrow(m) 
words[[1]][ind] 

が向上し、大規模なデータフレームのために、このコードを美化するために私を助けてください:

は、ここに私の悪い悪い遅いコードです。

+0

どのように大規模な「大」であり、どのくらいの時間があなたのコードを使用して取るん:

words[which.min(mindists)] 

または1つのラインで

? – lukeA

+0

この 'sapply(words.p、function(x)mapply(stringdist、words、x、method = 'jaccard'))'を試してください。これにより、簡単に調べることができるマトリックスが直接得られます。 –

答えて

3

準備(ここtolowerを追加しました):

matches <- words.p[sapply(dists, which.min)] 

cbind(words, matches) 
       matches 
[1,] "the" "te" 
[2,] "quick" "quick" 
[3,] "brown" "ovar" 
[4,] "fox" "foks" 
[5,] "jumps" "jump" 
[6,] "over" "ovar" 
[7,] "the" "te" 
[8,] "lazy" "lazzy" 
[9,] "dog" "dogg" 

words.pから最も近い単語を見つけるwordsの各単語に対して

dists <- sapply(words, Map, f=stringdist, list(words.p), method="jaccard") 

txt1 <- c('The quick brown fox jumps over the lazy dog') 
txt2 <- c('Te quick foks jump ovar lazzy dogg') 

words <- unlist(strsplit(tolower(as.character(txt1)), " ")) 
words.p <- unlist(strsplit(tolower(as.character(txt2)), " ")) 

各単語の距離を取得します編集:

は、あなたが最初words.p内のすべての単語にwordsの各単語から最小距離を選択する必要が最良の一致する単語のペアを取得するには:

mindists <- sapply(dists, min) 

これは、各単語のためのあなたの最良の距離を取得します。そして、あなたは最短距離でwordsから単語を選択:

words[which.min(sapply(dists, min))] 
+0

ありがとう!しかし、私は最高の言葉を一つだけ手に入れたいと思っています。この場合、これは「迅速」です。それをどのように抽出するのですか? – Dennix

+0

@Dennixは答え(編集後) –

+0

@KarolisKoncevičiusの答えを示す方法についての行を追加しました。ありがとうございます。私は似たようなものを探していましたが、アドレスのリストを一致させるためでした。だから、約70,000の異なるアドレスを含むデータセットと、約4つの不具合レコード(0.4百万)を含むもう1つの大きなデータセットがあります。私は住所の言葉を見て大きなデータセットと各アドレスを一致させたい。どうすればこれを達成できますか?私はリンクに質問を投稿しました。http://stackoverflow.com/questions/42486172/r-string-match-for-address-using-stringdist-stringdistmatrix助けてください! – user1412

関連する問題