一般來說,您能否提出一種方法,讓我測試對象以確保它們相似。如何檢測數據的「相似性」
如果對象內容超過'n%'的價值是相同的,那麼接受這些對象是相似的。
其他然後一個蠻力,有沒有任何圖書館我可以利用?
感謝
一般來說,您能否提出一種方法,讓我測試對象以確保它們相似。如何檢測數據的「相似性」
如果對象內容超過'n%'的價值是相同的,那麼接受這些對象是相似的。
其他然後一個蠻力,有沒有任何圖書館我可以利用?
感謝
一兩件事你可以嘗試一種編碼對象然後比較結果......特別是我和JSON做到了這一點。爲了檢測對象是否完全匹配,這很簡單。
這隻能根據具體情況進行。如果我真的需要這個功能,我會定義一個接口:
public interface Similar<Entity> {
boolean isSimilar(Entity other);
}
每一個實現類可以定義它的意思是「相似」到另一個實例。事情要記住的是,你會記住克隆同樣的問題:淺拷貝VS深拷貝等
樸素實現人:
public class Person implements Similar<Person> {
private String firstName;
private String lastName;
public String getLastName() {
return lastName;
}
public String getFirstName() {
return firstName;
}
public boolean isSimilar(Person other) {
if (other != null) {
if (lastName.equalsIgnoreCase(other.getLastName())
|| (firstName.equalsIgnoreCase(other.getFirstName()))) {
return true;
}
}
return false;
}
}
作爲一個起點,看看在所謂的Levenshtein distance,看看它是否與你的使用有關?
我相信你可以找到一個很好的解決方案,如果你專注於你的具體問題的細節。我在一般情況下考慮的唯一「合理」解決方案是基於reflection:掃描數據成員並遞歸地查找相應成員對的相似性。
但是,這個想法存在很多問題,所以我認爲它不可行。其中:
1)權重的概念應該定義好,以便能夠返回相似性百分比。
2)如何處理只屬於其中一個對象的數據成員?在比較類A的實例和後代類B的實例時,這經常發生。
3)也許是最大的問題:對象內部結構與其抽象數據表示之間的映射不是一個內射函數。例如,由於表格重新分配的不同歷史,表示相同映射的兩個hashmaps可能具有不同的內部結構。
您可以實現Comparable接口併爲比較類的實例定義自己的「邏輯」。
正如前面提到的,對於文本相似性,您可以使用距離計算算法,您可以在SimMetrics庫(http://www.dcs.shef.ac.uk/~sam/simmetrics.html)中找到它們。
另一種比較對象的方法是通過比較對象哈希碼(在重寫Object類的hashCode()方法之後) - 請注意,這是您要查找的內容。
這太籠統了。請提供您計劃執行的其他信息。 – 2010-09-03 16:46:29
什麼樣的'對象/數據':任意的java類實例?三維形狀? – ChrisW 2010-09-03 19:00:47
根據javap,字符串有4個實例成員 - 值,偏移量,計數,散列。 (「Hello World」,0,5,-1)和(「Good Bye World」,0,5,-1)在75%的水平相似。讓NotString是一個實現CharSequence的類,它沒有這4個實例成員。 String「Hello World」和NotString「Hello World」之間的相似性關係是什麼? – emory 2010-09-04 01:30:52