2016-08-19 98 views
1

在Excel中我有一個藝術家,歌曲,版本列表。 此列表包含超過15000條記錄。 問題是該列表包含一些「重複」記錄。我說「重複」,因爲它們不完全匹配。有些人可能會有一些錯字,我想解決這些問題並刪除這些記錄。物品列表發現幾乎重複

因此,例如一些記錄:

ABBA - Mamma Mia - Party 
ABBA - Mama Mia! - Official 

每個破折號表示一個單獨的列(SO 3列A,B,C都填寫)

我將如何將它們標記爲在Excel中的重複?

我已經找到關於該工具模糊查找。然而,我正在一個mac上工作,因爲它沒有在mac上可用我卡住了。

任何正則表達式魔術或vba腳本什麼可以幫助我? 看看這個排有多少相似(比如80%的相似)也沒關係。

+1

這是我發現唯一有用的模糊匹配代碼:http://www.mrexcel。com/forum/excel-questions/195635-fuzzy-matching-new-version-plus-explanation.html –

回答

1

之後的最後部分模糊文本匹配的常用方法之一是Levenshtein(距離)算法。這幾個不錯的實現存在這裏:

https://stackoverflow.com/a/4243652/1278553

從那裏,你可以直接使用該功能在電子表格中的實例之間找到相似之處:

enter image description here

你沒問,但數據庫在這裏真的很不錯。原因是你可以做一個笛卡爾連接(這是爲數不多的有效用途之一),並將每一條記錄與其他記錄進行比較。例如:

select 
    s1.group, s2.group, s1.song, s2.song, 
    levenshtein (s1.group, s2.group) as group_match, 
    levenshtein (s1.song, s2.song) as song_match 
from 
    songs s1 
    cross join songs s2 
order by 
    group_match, song_match 

是的,這將是一個非常昂貴的查詢,根據記錄的數量(在你的例子225,000,000行),但它會泡到頂部的最有可能的重複/匹配。不僅如此,還可以加入「合理的」連接以消除明顯的不匹配,例如將其限制爲小組匹配,幾乎匹配,以相同字母等開頭的情況,或者預先篩選Levenschtein更大的組比x。

-1

試試這個工作表類函數在循環:

=COUNTIF(Range,"*yourtexttofind*") 
+0

對不起,但這不會訣竅。該函數返回用特定文本找到的項目數量。所以如果我找「ABBA - 媽媽咪呀!」它會返回1.它不會檢測到其他行,並將其視爲完全不同的事物。我需要的是找到一個近似匹配。如果它是一個近似的匹配標記,它會重複。 – Baklap4

+0

使用*將添加通配符 –

+0

實際上,它可以工作,我用它在我的工作任務中找到近似值。我通常需要在15000計數電子表格中找到「失敗」。問題是,很多時候是「失敗 - 其他事情」或其「

some text Fail some more text
。所以對我來說它工作正常:P –

0

你可以使用一個數組公式,以指示重複,你可以修改下面顯示的行數,此檢查項下的行對於任何可能的80%欺騙,其中80%是從左到右,而不是全部比較。我的數據是A1:a15000

=IF(NOT(ISERROR(FIND(MID($A1,1,INT(LEN($A1)*0.8)),$A2:$A$15000))),1,0)

這種方式也將查找備份列表,以指示那些發現

=SUM(IF(ISERROR(FIND(MID($A2,1,INT(LEN($A1)*0.8)),$A3:$A$15000,1)),0,1))+SUM(IF(ISERROR(FIND(MID($A2,1,INT(LEN($A2)*0.8)),$A$1:$A1,1)),0,1))

中的第一項,即第1行是第一部分公式和最後一行將需要在+

+0

我如何在列表中充分使用這個數據,其中數據沒有排序,而類似的數據沒有總是必須低於另一個..? – Baklap4

+0

它會在上面的一箇中被檢測到,所以ABC123之前的ABC123將被ABC顯示爲旁邊的123,如果另一種方式顯示999將會一直顯示以上。 –