[英]How to compare two paragraphs of text?
我需要刪除包含許多段落的文本中的重復段落。
我使用類java.security.MessageDigest
函數來計算每個段落的MD5哈希值,然后將這些哈希值添加到Set
。
如果add()
'ed成功,則表示最新段落是重復段落。
這種方式有風險嗎?
除了String.equals()
,有沒有其他方法可以做到這一點?
在散列之前,您可以規范化段落,例如刪除標點,轉換為小寫並刪除其他空格。 規范化后,只有不同的段落會得到相同的哈希值。
如果MD5哈希尚未在集合中,則表示該段落是唯一的。 但事實恰恰相反。 因此,如果您發現散列已經在集合中,則可能具有相同散列值的非重復。 這是不太可能的,但你必須對所有其他人測試該段以確定。 對於String.equals會這樣做。
此外,你應該很好地考慮你所謂的獨特之處(關於拼寫錯誤,空格,大寫字母等),但任何方法都是如此。
沒有必要計算MD5哈希值,只需使用HashSet
並嘗試將字符串本身放入此集合中。 這將使用String#hashCode()
方法計算String的哈希值,並檢查它是否已經在集合中。
public Set removeDuplicates(String[] paragraphs) {
Set<String> set = new LinkedHashSet<String>();
for (String p : paragraphs) {
set.add(p);
}
return set;
}
使用LinkedHashSet
甚至可以保留段落的原始順序。
我認為這是一個好方法。 但是,有一些事情要記住:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.