支持重复数据消除和合并的工作流
mergic的Python项目详细描述
梅吉奇
重复数据消除和合并的工作流支持
假设你有一堆字符串,其中一些是不同的,但指的是相同的东西。可能只是一个长列表,也可能是要合并数据集中两个关键列的内容。
David Copperfield
Lance Burton
Dave Copperfield
Levar Burton
以下是您可以使用Mergic进行的操作:
把所有的标识符,每行一个。如果它们位于名为
originals.txt的文件中:
mergic calc originals.txt
您将看到关于基于其默认距离函数生成的可能分组的输出。(使用自定义距离功能很容易,请参见下文。)
num groups, max group, num pairs, cutoff
----------------------------------------
4, 1, 0, -0.909090909091
3, 2, 1, 0.0909090909091
2, 2, 2, 0.25
1, 4, 6, 0.714285714286
利用给定的距离函数,mergic可以进行4个分组,从每个名称对应一个组到所有四个名称对应一个组。
num groups
是给定的
截止值下
mergic
可以生成的组数。
max group
是该分组中最大组中的项目数。
num pairs
列指示与分组相对应的组内链接数。从某种意义上说,这代表了检查mergic所做的所有链接需要做多少工作。分组思考要比个体配对比较好得多,但是这个指标对于总结有多少联系是有用的。
截止值确定哪些项对放在同一组中。如果两个项目之间的距离等于或小于
截止值,则这些项目将组合在一起。
选择一个截断点以生成您希望看到的分组。如果您想使用截止值0.3并将结果放入名为
grouping.json的文件中:
mergic make originals.txt 0.3 > grouping.json
现在
grouping.json
包含原始数据的分组,在
json
中指定。它被设计成可读的,可编辑的,所以你可以检查它并根据需要改进它。最大的组将位于顶部,相似的项将彼此靠近。
{
"Lance Burton": [
"Lance Burton",
"Levar Burton"
],
"David Copperfield": [
"Dave Copperfield",
"David Copperfield"
]
}
有两个提议的团体,提议的名字是"兰斯伯顿"和"大卫科波菲尔"。您可能需要复制生成的文件并编辑副本。
cp grouping.json grouping_fixed.json
# edit `grouping_fixed.json`
如果愿意,可以编辑建议的组名对象的键。数据的原始值位于对象的数组值中,您可以移动它们来更正分组。在这种情况下,您还可以使用0.1的截止值重新运行
mergic
,以获得正确的分组:
{
"David Copperfield": [
"Dave Copperfield",
"David Copperfield"
],
"Lance Burton": [
"Lance Burton"
],
"Levar Burton": [
"Levar Burton"
]
}
现在
grouping_fixed.json
已经尽可能完美了,您可以继续前进了。
您还可以比较两个json分组文件并查看您所做的更改:
mergic diff grouping.json grouping_fixed.json > diff.json
现在文件
diff.json
包含了
grouping.json
和
grouping\u fixed.json
之间的区别。< T >>mergic diff
命令类似于文本文件的常规
diff
,但它知道json分区格式,因此可以智能地捕获更改。
您可以对mergic生成的文件应用更改以恢复编辑的版本。
mergic apply grouping.json diff.json > grouping_new.json
现在
grouping_new.json
等同于
grouping_fixed.json
,您可以验证:
David Copperfield
Lance Burton
Dave Copperfield
Levar Burton
0
这样,您就有了完整的、可验证的工作记录,包括整个文件级别和手动更改级别。
json分组格式对人类非常方便,但是对于表格数据,合并表更有用。合并表有一列包含数据的原始值,另一列包含新键。它们在输出中分别命名为
原始
和
Mergic
。
David Copperfield
Lance Burton
Dave Copperfield
Levar Burton
1
文件
merge_table.csv
如下所示:
David Copperfield
Lance Burton
Dave Copperfield
Levar Burton
2
这个合并表现在可以用于任何表格数据系统。对于合并,首先将其合并到两个表上,然后按
mergic
键合并。对于重复数据消除,请将其合并到感兴趣的表中,然后像使用原始数据一样使用
mergic
列。
安装
David Copperfield
Lance Burton
Dave Copperfield
Levar Burton
3
使用自定义距离功能
mergic
包提供了一个名为
mergic
的命令行脚本,该脚本使用python内置的difflib.sequencematcher.ratio()
来计算字符串距离,但是
mergic
的一个主要优点是它可以通过
mergic.blender
类轻松定制距离函数。制作定制的mergic脚本非常简单:
David Copperfield
Lance Burton
Dave Copperfield
Levar Burton
4
现在可以像标准的mergic脚本一样使用定制的mergic.py!
还有一个函数确定如何为组生成键。它接受一个列表并返回一个字符串。默认情况下,
mergic.blender
将使用组值中最长的值(第一个最长的值,按稳定的排序顺序)。您还可以提供生成密钥的自定义功能。
您可能喜欢的距离
levenshtein字符串编辑距离
:经典!它有许多实现;其中之一是
python levenshtein
David Copperfield
Lance Burton
Dave Copperfield
Levar Burton
5
seatgeek的fuzzywuzzy:正如他们的博客中所描述的,一些人发现这些变体在实践中很好地工作。fuzzywuzzy的响应用整数百分比相似度表示;一种方法是从100中减去距离。
David Copperfield
Lance Burton
Dave Copperfield
Levar Burton
6
有很多距离,甚至就在提到的两个包内!
你也可以自己做!
安装
David Copperfield Lance Burton Dave Copperfield Levar Burton3
使用自定义距离功能
mergic 包提供了一个名为 mergic 的命令行脚本,该脚本使用python内置的difflib.sequencematcher.ratio() 来计算字符串距离,但是 mergic 的一个主要优点是它可以通过 mergic.blender 类轻松定制距离函数。制作定制的mergic脚本非常简单:
David Copperfield Lance Burton Dave Copperfield Levar Burton4
现在可以像标准的mergic脚本一样使用定制的mergic.py!
还有一个函数确定如何为组生成键。它接受一个列表并返回一个字符串。默认情况下, mergic.blender 将使用组值中最长的值(第一个最长的值,按稳定的排序顺序)。您还可以提供生成密钥的自定义功能。
您可能喜欢的距离
levenshtein字符串编辑距离 :经典!它有许多实现;其中之一是 python levenshtein
David Copperfield Lance Burton Dave Copperfield Levar Burton5
seatgeek的fuzzywuzzy:正如他们的博客中所描述的,一些人发现这些变体在实践中很好地工作。fuzzywuzzy的响应用整数百分比相似度表示;一种方法是从100中减去距离。
David Copperfield Lance Burton Dave Copperfield Levar Burton6
有很多距离,甚至就在提到的两个包内!
你也可以自己做!