假設我得到了一組結構化數據。數據已知是有問題的,我需要以某種方式「一致」地評分它們。例如,我有數據,如下圖所示:數據集內的評分一致性
fieldA | fieldB | fieldC
-------+--------+-------
foo | bar | baz
fooo | bar | baz
foo | bar | lorem
.. | .. | ..
lorem | ipsum | dolor
lorem | upsum | dolor
lorem | ipsum | baz
所以假設,因爲有在該組合相對更多的數據相比,第二排和第三排的記錄的第一行被認爲是正確的條目。在第二行中,fieldA
的值應爲foo
(由於拼寫錯誤而不一致)。然後在第三行中,fieldC
的值應爲baz
,因爲數據集中的其他條目具有fieldA
(foo
)和fieldB
(bar
)的相似值。
此外,在數據集的其他部分,還有另一種相對更常見的組合(lorem
,ipsum
,dolor
)。因此,以下記錄中的問題與前面提到的相同,只是數值組合不同。
我最初將所有內容都轉儲到SQL數據庫,並使用GROUP BY
的語句來檢查字段值的一致性。因此,對於每個我想檢查一致性以及每條記錄的字段,都會有一個查詢。
SELECT fieldA, count(fieldA)
FROM cache
WHERE fieldB = 'bar' and fieldC = 'baz'
GROUP BY fieldA
然後,我可以檢查的記錄fieldA
值是參照記錄以下(以前的SQL查詢的處理結果)的對象,其餘是一致的。
{'foo': {'consistency': 0.99, 'count': 99, 'total': 100}
'fooo': {'consistency': 0.01, 'count': 1, 'total': 100}}
不過它非常慢(數據集有220萬左右的記錄,而我檢查4個領域,所以作出有關9mil查詢),並會採取半天才能完成。然後我將SQL存儲換成了elasticsearch,處理時間縮短到5個小時左右,能否以某種方式更快?
也只是出於好奇,我在這裏重新發明了一個輪子?有沒有現成的工具?目前它是用Python3和elasticsearch實現的。
我還沒有時間看解決方案,我可以用它來「評分」多項條目嗎?例如「foo吧」與「fooz酒吧」 – Jeffrey04
也應該有效。 difflib使用散列進行比較。所以任何可排序的工作。 – klaas
哈哈,看起來不像我需要的工具。因爲我沒有爲每個領域提供所有可能的(相對)正確的規範值和組合。 – Jeffrey04