假设我得到了一组结构化数据。数据已知是有问题的,我需要以某种方式“一致”地评分它们。例如,我有数据,如下图所示:数据集内的评分一致性
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