2014-10-17 98 views
0

這裏區分兩個句子是我的數據的一個例子識別/由R

ID地址

Table1:User table 
id  address 
1  mont carlo road,CA 
2  mont road,IS 
3  mont carlo road1-11,CA 

Table 2(The output I wanna get) 
Similarity Matrix 
id 1 2 3 

1 

2 3 

3 1 3 

1~3 very similar~very dissimilar 

我的問題是如何通過地址來識別在表1的情況之間的相似性,然後輸出結果,如R中的表2所示的相似矩陣。重點是如何計算R中兩個句子之間的比較,然後設置一個尺度來衡量一對之間的相似度,最後輸出一個矩陣。

+0

http://stackoverflow.com/questions/6704499/algorithm-to-compare-similarity-of-english-sentences – KFB 2014-10-17 05:31:15

+0

@KFB謝謝你的建議。我正在尋找一個詳細的方法/算法R. – user3566160 2014-10-17 05:35:51

+0

看到我的答案與RecordLinkage這個問題:http://stackoverflow.com/questions/26405895/how-can-i-match-fuzzy-match-strings-from-兩個數據集#26408600 – lawyeR 2014-10-17 10:24:00

回答

0

我也用stringdist包,但會利用outercut來完成這項工作:

library(stringdist) 
dat <- data.frame(
    address = c("mont carlo road,CA", "mont road,IS", "mont carlo road1-11,CA"), 
    id = 1:3 
) 

m <- outer(dat[["address"]], dat[["address"]], stringdist, method="jw") 

m[lower.tri(m)] <- cut(m[lower.tri(m)], 3, labels=1:3) 
m[upper.tri(m)] <- cut(m[upper.tri(m)], 3, labels=1:3) 
dimnames(m) <- list(dat[["id"]], dat[["id"]]) 
diag(m) <- NA 
m 

## 1 2 3 
## 1 NA 3 1 
## 2 3 NA 3 
## 3 1 3 NA 

您可以使用任何方法計算距離(?stringdist)。

0

您可能會感興趣在R包stringdist中實現的Levenshtein Distance。例如:

library(stringdist) 
address <- c("mont carlo road,CA", "mont road,IS", "mont carlo road1-11,CA") 
stringdist(address[1], address[2], method="lv") 
[1] 8 

然後,您可以定製這些結果矩陣或任何輸出你的願望