只是爲了好玩,這裏的一些樣品的Postgres的戈登提到萊文施泰因代碼(RDBMS您使用哪一個?),但問題並非如此簡單。
create extension fuzzystrmatch
create table t (id serial, txt text)
insert into t(txt) values('Red Hot Chili Peppers in Hungary');
insert into t(txt) values('Concert Red Hot Chili Peppers');
insert into t(txt) values('Red Hot Chili Peppers');
insert into t(txt) values('Red Hot (Live in CA)');
select a.txt a, b.txt b, levenshtein(a.txt, b.txt) from t as a inner join t as b on a.id < b.id
返回
"Red Hot Chili Peppers in Hungary";"Concert Red Hot Chili Peppers";19
"Red Hot Chili Peppers in Hungary";"Red Hot Chili Peppers";11
"Red Hot Chili Peppers in Hungary";"Red Hot (Live in CA)";18
"Concert Red Hot Chili Peppers";"Red Hot Chili Peppers";8
"Concert Red Hot Chili Peppers";"Red Hot (Live in CA)";19
"Red Hot Chili Peppers";"Red Hot (Live in CA)";11
但是,現在你必須做這些距離的東西(在過去的山坳數)。數字越大,距離越大,距離越小,越不相似。因此,您可以輕鬆創建一個將每個字符串綁定到分數的查找表,但是最終會導致項目落在多個組中,因此不能真正實現分組。根據你有多少數據,你可以把它拉出來,用KMeans之類的東西進行聚類,然後放回去,或者你可以保留一個已知組的列表,然後在你的連接中添加一個類似的操作符,但是,根據組的不同,您仍然可能會得到許多組中的一些行。
無論如何,玩得開心,希望這有助於,有趣的問題。
你能提供一個更精確的定義,在你的問題的背景下「類似」? –
Google:「Levenshtein距離」。數據庫可能有一個實現。 –
我幫助了一些格式化,但刪除了很多nbsp; -s仍然適合您。 – peterh