使用加密散列和布隆过滤器进行匿名链接
项目描述
A Python (and optimised C++) implementation of anonymous linkage using cryptographic linkage keys as described by Rainer Schnell, Tobias Bachteler, and Jörg Reiher in A Novel Error-Tolerant Anonymous Linking Code.
anonlink computes similarity scores, and/or best guess matches between sets of cryptographic linkage keys (hashed entity records).
Use clkhash to create cryptographic linkage keys from personally identifiable data.
安装
从 PyPi 安装预编译的 wheel 文件
pip install anonlink
或者(如果您的系统有 C++ 编译器),您可以从源代码本地安装
pip install -r requirements.txt pip install -e .
基准测试
您可以使用以下命令运行基准测试
$ python -m anonlink.benchmark Anonlink benchmark -- see README for explanation ------------------------------------------------ Threshold: 0.5, All results returned Size 1 | Size 2 | Comparisons | Total Time (s) | Throughput | | (match %) | (comparisons / matching)| (1e6 cmp/s) -------+--------+------------------+-------------------------+------------- 1000 | 1000 | 1e6 (50.73%) | 0.762 (49.2% / 50.8%) | 2.669 2000 | 2000 | 4e6 (51.04%) | 3.696 (42.6% / 57.4%) | 2.540 3000 | 3000 | 9e6 (50.25%) | 8.121 (43.5% / 56.5%) | 2.548 4000 | 4000 | 16e6 (50.71%) | 15.560 (41.1% / 58.9%) | 2.504 Threshold: 0.5, Top 100 matches per record returned Size 1 | Size 2 | Comparisons | Total Time (s) | Throughput | | (match %) | (comparisons / matching)| (1e6 cmp/s) -------+--------+------------------+-------------------------+------------- 1000 | 1000 | 1e6 ( 6.86%) | 0.170 (85.9% / 14.1%) | 6.846 2000 | 2000 | 4e6 ( 3.22%) | 0.384 (82.9% / 17.1%) | 12.561 3000 | 3000 | 9e6 ( 2.09%) | 0.612 (81.6% / 18.4%) | 18.016 4000 | 4000 | 16e6 ( 1.52%) | 0.919 (78.7% / 21.3%) | 22.135 5000 | 5000 | 25e6 ( 1.18%) | 1.163 (80.8% / 19.2%) | 26.592 6000 | 6000 | 36e6 ( 0.97%) | 1.535 (75.4% / 24.6%) | 31.113 7000 | 7000 | 49e6 ( 0.82%) | 1.791 (80.6% / 19.4%) | 33.951 8000 | 8000 | 64e6 ( 0.71%) | 2.095 (81.5% / 18.5%) | 37.466 9000 | 9000 | 81e6 ( 0.63%) | 2.766 (72.5% / 27.5%) | 40.389 10000 | 10000 | 100e6 ( 0.56%) | 2.765 (81.7% / 18.3%) | 44.277 20000 | 20000 | 400e6 ( 0.27%) | 7.062 (86.2% / 13.8%) | 65.711 Threshold: 0.7, All results returned Size 1 | Size 2 | Comparisons | Total Time (s) | Throughput | | (match %) | (comparisons / matching)| (1e6 cmp/s) -------+--------+------------------+-------------------------+------------- 1000 | 1000 | 1e6 ( 0.01%) | 0.009 (99.0% / 1.0%) | 113.109 2000 | 2000 | 4e6 ( 0.01%) | 0.033 (98.7% / 1.3%) | 124.076 3000 | 3000 | 9e6 ( 0.01%) | 0.071 (99.1% / 0.9%) | 128.515 4000 | 4000 | 16e6 ( 0.01%) | 0.123 (99.0% / 1.0%) | 131.654 5000 | 5000 | 25e6 ( 0.01%) | 0.202 (99.1% / 0.9%) | 124.999 6000 | 6000 | 36e6 ( 0.01%) | 0.277 (99.0% / 1.0%) | 131.403 7000 | 7000 | 49e6 ( 0.01%) | 0.368 (98.9% / 1.1%) | 134.428 8000 | 8000 | 64e6 ( 0.01%) | 0.490 (99.0% / 1.0%) | 131.891 9000 | 9000 | 81e6 ( 0.01%) | 0.608 (99.0% / 1.0%) | 134.564 10000 | 10000 | 100e6 ( 0.01%) | 0.753 (99.0% / 1.0%) | 134.105 20000 | 20000 | 400e6 ( 0.01%) | 2.905 (98.8% / 1.2%) | 139.294 Threshold: 0.7, Top 100 matches per record returned Size 1 | Size 2 | Comparisons | Total Time (s) | Throughput | | (match %) | (comparisons / matching)| (1e6 cmp/s) -------+--------+------------------+-------------------------+------------- 1000 | 1000 | 1e6 ( 0.01%) | 0.009 (99.0% / 1.0%) | 111.640 2000 | 2000 | 4e6 ( 0.01%) | 0.033 (98.6% / 1.4%) | 122.060 3000 | 3000 | 9e6 ( 0.01%) | 0.074 (99.1% / 0.9%) | 123.237 4000 | 4000 | 16e6 ( 0.01%) | 0.124 (99.0% / 1.0%) | 130.204 5000 | 5000 | 25e6 ( 0.01%) | 0.208 (99.1% / 0.9%) | 121.351 6000 | 6000 | 36e6 ( 0.01%) | 0.275 (99.0% / 1.0%) | 132.186 7000 | 7000 | 49e6 ( 0.01%) | 0.373 (99.0% / 1.0%) | 132.650 8000 | 8000 | 64e6 ( 0.01%) | 0.496 (99.1% / 0.9%) | 130.125 9000 | 9000 | 81e6 ( 0.01%) | 0.614 (99.0% / 1.0%) | 133.216 10000 | 10000 | 100e6 ( 0.01%) | 0.775 (99.1% / 0.9%) | 130.230 20000 | 20000 | 400e6 ( 0.01%) | 2.939 (98.9% / 1.1%) | 137.574
表格的解释如下。每个表格衡量 Dice 系数比较函数的吞吐量。四个表格对应两种不同的“匹配阈值”和“结果限制”选择。
这些参数被选择来表征两种不同的性能场景。由于用于比较的数据是随机生成的,第一个阈值值(0.5)将导致约 50% 的候选者“匹配”,而第二个阈值值(0.7)将导致 ~0.01% 的候选者匹配(这些值在“匹配 %”列中报告)。如果表头包括“返回所有结果”,则所有高于阈值的匹配都将返回并传递给求解器。在 0.5 的阈值下,大量的匹配意味着大部分时间都花在保持候选者顺序上。接下来我们限制每条记录的匹配数最多为 100 - 这也必须高于阈值。
在最后两个表格中,我们使用阈值值 0.7,这非常有效地过滤了候选匹配的数量。在这里,吞吐量主要取决于比较代码本身,添加前 100 个过滤器没有产生重大影响。
最后,总时间列包括关于计算(稀疏)相似性矩阵 比较 所花费时间比例以及花费在贪婪求解器中的 匹配 时间的指示。后者的确定由相似性矩阵的大小决定,这大约是 comparisons * match% / 100。
测试
使用 pytest 运行单元测试
$ pytest ====================================== test session starts ====================================== platform linux -- Python 3.6.4, pytest-3.2.5, py-1.4.34, pluggy-0.4.0 rootdir: /home/hlaw/src/n1-anonlink, inifile: collected 71 items tests/test_benchmark.py ... tests/test_bloommatcher.py .............. tests/test_e2e.py .............ss.... tests/test_matcher.py ..x.....x......x....x.. tests/test_similarity.py ......... tests/test_util.py ... ======================== 65 passed, 2 skipped, 4 xfailed in 4.01 seconds ========================
要启用稍大的测试,请添加以下环境变量
INCLUDE_10K
INCLUDE_100K
局限性
链接过程具有 n^2 时间复杂度 - 尽管存在算法可以显著加快这个过程。一些可能的加速方法在 Privacy Preserving Record Linkage with PPJoin 中进行了描述。
讨论
如果您遇到错误,可以在我们的 GitHub 问题跟踪器 中报告。
还有一个 anonlink 邮件列表 用于开发讨论和发布公告。
无论我们在哪里互动,我们都努力遵循 Python 社区行为准则。
引用
Anonlink 是由 CSIRO 的 Data61 设计、开发和支持的。如果您在研究中使用了这个库的任何部分,请使用以下 BibTex 条目进行引用
@misc{Anonlink, author = {CSIRO's Data61}, title = {Anonlink Private Record Linkage System}, year = {2017}, publisher = {GitHub}, journal = {GitHub Repository}, howpublished = {\url{https://github.com/data61/anonlink}}, }
许可证
版权 2017 CSIRO (Data61)
根据 Apache License 2.0(“许可”)许可;除非遵守许可,否则您不得使用此文件。您可以在以下位置获得许可副本
除非适用法律要求或书面同意,否则在许可证下分发的软件按照“现状”原则分发,不提供任何形式的明示或暗示保证。有关许可证的权限和限制的特定语言,请参阅许可证。
项目详情
下载文件
下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。
源分发
构建分发
哈希值 for anonlink-0.15.3-pp39-pypy39_pp73-win_amd64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 37b45e48dd5c4c0b80cfe03d432c0b1110d40cda408300986abd5bf88d28f437 |
|
MD5 | a5d55d3fe0b87ee923ae142cb7c411d2 |
|
BLAKE2b-256 | 562ebe5634a4971a822999aa48784da7f6c963f942decf5d71c148f400e728ce |
哈希值 for anonlink-0.15.3-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 6e0a8c64e116d9eab72b08ff963fadf280ed340239b130aa654dfa16f10a2351 |
|
MD5 | a9e915fb188bc477750ce38fa99fbd9b |
|
BLAKE2b-256 | 11fad0494adbe365b0768bd047b1d3218f117dbac9603f550af4218fd9bc0e2a |
哈希值 for anonlink-0.15.3-pp39-pypy39_pp73-macosx_10_9_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 51a7f09186189d2b85bd3058bb75a35f2ec6b78ca9735a93771be94ffe560ab0 |
|
MD5 | a74f67554bdf2ee6baa56f6537e9eba6 |
|
BLAKE2b-256 | d2772a8f20700e7f2c6b98c542fbd14ee62c211f8f3ce4d6237d729096231ce1 |
哈希值 for anonlink-0.15.3-pp38-pypy38_pp73-win_amd64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 085dc8d55beabeea5c70bbd5a21636c423cc8c59fbadde13a5709f562749e712 |
|
MD5 | fb84b281f2be7022e8fbdc6eaf56adb1 |
|
BLAKE2b-256 | 36e97e5cfd2b59cedfd21745f6f3f00c4a3ceb4c1bea71481f950ca02621e7ad |
哈希值 for anonlink-0.15.3-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | fb96c3e97e11eda3cac32dc22ffc0ee3b843386b2a02316886c6b2d443805581 |
|
MD5 | 252a8c23d8c39b1f5317a0a0f7eb289d |
|
BLAKE2b-256 | bb431d11c277f3e3f2dd8033bbc1f7a490addae16637c3dacad72f9da25479b5 |
哈希值 for anonlink-0.15.3-pp38-pypy38_pp73-macosx_10_9_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | f3b2ba3345f2b3882d60a77ad101bcca218a1493a016e94a9cf79c68ce704437 |
|
MD5 | e0268682256dbdf07c751a5bfe1ad854 |
|
BLAKE2b-256 | 87041a77788ca2799045d7ef6a5d5081d8e6767f257730c4c8005d7ea021b808 |
哈希值 for anonlink-0.15.3-pp37-pypy37_pp73-win_amd64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 4537d46e125e22893d6d60535fbe8d3809b403c46e4b8d64cf7130077f46d336 |
|
MD5 | 708c9c87559559367221ba4a28e1769f |
|
BLAKE2b-256 | 0d8dde8e8d0e44305f287ae9e94a9dc2d4f4290fd2c7c1077abdebc944c6e7d7 |
哈希值 for anonlink-0.15.3-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | b03c21f684c0b8ef71811e4eba1b7d339ed7519484932a8b1879d94b245b9e98 |
|
MD5 | 9ee320c2b0a804379eca873066a0ed81 |
|
BLAKE2b-256 | a79b8e520debf794540974787d752c9142e8fe0a7bc2a397e67aad8e9f0fac42 |
哈希值 for anonlink-0.15.3-pp37-pypy37_pp73-macosx_10_9_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 397f26533572bb41b5423c0ff8a3a53a6ca2a5cffdfb7b1e72f9cb49a6150bc4 |
|
MD5 | 2133f9daaeb59acce1f3dd33986cab7f |
|
BLAKE2b-256 | d29f528bb4927c6534609a5dda399617d6b89d7b73524c80e4c8c86234a6131e |
哈希值 for anonlink-0.15.3-cp311-cp311-musllinux_1_1_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 61702b485002f2d62ee9293f97a90fd673bc32ff1a7d9b9d80ae44cf20436fff |
|
MD5 | 8c050ec1a4c30a42e21b6bcceff39940 |
|
BLAKE2b-256 | d7f18eeca06d1646b9fdee870ce734103f01f366498b80ce2b4cf83ddffbd8bd |
哈希值 for anonlink-0.15.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 5a94bb7a407767e05f9988aa7356410b80e4086fba77b7a48c43d88393cab34d |
|
MD5 | d417646a5f1a58f99ce540a3a8f34483 |
|
BLAKE2b-256 | 2b5446b5f1caae52880645707eea8a4982586d0512f4e2e9334e77501ff31ec6 |
哈希值 for anonlink-0.15.3-cp311-cp311-macosx_11_0_arm64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 01053a9ceef51de4c8044e3ed29a7fa3f151adec1717389877717a272d5480c7 |
|
MD5 | 182ec37f091aba49cff1727bee2a9fb1 |
|
BLAKE2b-256 | 6ea8bab173513549a02e064c6c981f4d4748c031c2a1fdcd00ca55e1b0143ef2 |
哈希值 for anonlink-0.15.3-cp311-cp311-macosx_10_9_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | f828bd1888ed4c69e4b5cf984abd499004a9544cc0b941da9a9246a9a9ce9a76 |
|
MD5 | 4b3173529291063718dcbee53230df6c |
|
BLAKE2b-256 | fdc98306f5bfb50765c4f3ac4846a110d43bc2cd67c1822a4a366fa9636450d1 |
哈希值 for anonlink-0.15.3-cp310-cp310-musllinux_1_1_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 795190796aa727c4e33e166fa09583a5694b53e1cee8d1c9009c42e062c4b577 |
|
MD5 | 0bac5f8d9d70bcfa0e7d52031928d05d |
|
BLAKE2b-256 | 7c4095c3dc50ec2dfdf3bc25206606e33b85d67b1608cf893b0e6f7a19b5f9b8 |
哈希值 for anonlink-0.15.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | cb939c3e7f10bef3287890c0fa5bc0a4fa224d35bd0fe131b3cc0644072e9181 |
|
MD5 | 7a40e1992c9bf2e9f3772aa5f3be7823 |
|
BLAKE2b-256 | 3799f3c471b159b4a0a0807b19572681707671bd9ca365ca5acab1698470c27c |
哈希值 for anonlink-0.15.3-cp310-cp310-macosx_11_0_arm64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 787a827cdf9dc772a8a624105f66c22d519933b4c134023fe3ff4382b32eafb5 |
|
MD5 | b0d610ae72c931bc37e1e94fe496f67d |
|
BLAKE2b-256 | 599442af5f83492ed54c1aa86145cb9ccbe647807a2c56483e44158ec6e0c5f4 |
哈希值 for anonlink-0.15.3-cp310-cp310-macosx_10_9_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 7a82cc074db8dab14d7c12b103663653114d01db311ca6be3ed85e9d6508f8fc |
|
MD5 | ee2b1835f944fd6fa8c2e0865cb086c0 |
|
BLAKE2b-256 | e20f21f7ff59e69bd2b496f7f712619fdde2f1169a5ab47168faaf5ecbd5c4de |
哈希值 for anonlink-0.15.3-cp39-cp39-musllinux_1_1_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | b13c98a1833b34181a4294087b45628a17430b3e3da1209483ffc59aa76965fe |
|
MD5 | ac5934aa9a0979a017ae353dc406c49d |
|
BLAKE2b-256 | bb9e015df530550c666c58d2cb9800b826287c64cb3660c973689bfd1b600820 |
哈希值 for anonlink-0.15.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 1052361ce7bad40a96054dbbc573508cf5693819976ac1227fcc68caebf53899 |
|
MD5 | cb5541548f65e7d387454125ee3980f4 |
|
BLAKE2b-256 | e207d9196495095b46ee18312f801a14d78988347351681589f932f337a694e5 |
哈希值 用于 anonlink-0.15.3-cp39-cp39-macosx_11_0_arm64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 792129bd674496f38d169eed2ccdea3a0302498882969839309e28ad3cc76b13 |
|
MD5 | 1fe68c3d63bfb2b1c54f6a989e0b3e98 |
|
BLAKE2b-256 | 6a577f189b3be96e2ca86978bf01954ed5d3e3552203ff2cc37f4d78ac9f6afb |
哈希值 用于 anonlink-0.15.3-cp39-cp39-macosx_10_9_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | e47e9e433f04022e1c925da548e057ca7981788fe772e571036f8ff8c9dee9fd |
|
MD5 | 1c77ee9b192114950d378614c2203c29 |
|
BLAKE2b-256 | c6c66a3194793a118dd0f281f5f7d697068a8d8a679ac4b5691883f4614d6587 |
哈希值 用于 anonlink-0.15.3-cp38-cp38-musllinux_1_1_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | b489adc8977ac17ae0fd7260037d6f75d3e82ba3ac28766175c087ddc7d4bb15 |
|
MD5 | 6a646e6a9ae4a583725805e70c121231 |
|
BLAKE2b-256 | d713c6baee8dae5407cb13cec78d523df4179441648efd4acea7f1645525bd3c |
哈希值 用于 anonlink-0.15.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | c7bbaf02e2da35ffb6824fab7a001d86d098a2a433ac52776e732833b2e570e7 |
|
MD5 | 8595869fd2926678834d967b0697234d |
|
BLAKE2b-256 | ecc38e9814f262e451c8781eab484c0fcd1e1eb45389eef430185aec2e8dd0d8 |
哈希值 用于 anonlink-0.15.3-cp38-cp38-macosx_11_0_arm64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 83785a380d8adc26afa4388fe5427365bbf49f336d8fe4b48280751a5ed99973 |
|
MD5 | fb52fa300bdfee94133076ec062efd06 |
|
BLAKE2b-256 | 89917fa69d8e7bfd595025dc25439770bd1ff61397e88f1c40de8497eee47d17 |
哈希值 用于 anonlink-0.15.3-cp38-cp38-macosx_10_9_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 0e6610810b26eb9955185c7b5f11b1501ee12dc953dc0844904f910b35b826be |
|
MD5 | 43d51c55fd80a6bf83b4f0b3fcbcc548 |
|
BLAKE2b-256 | 20a3414bcc20c688822da0ff9f448e1872dfa88207b27a3ad8c03ad10efd1f15 |
哈希值 用于 anonlink-0.15.3-cp37-cp37m-musllinux_1_1_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | e63330cc290caf13b7c0d65e327dd346301ba5b7964f6d1b347158dfbbe6b4ff |
|
MD5 | 817f31785919a2ac8bf85330d5eb8b95 |
|
BLAKE2b-256 | 7641b444af21c62e801856aea191dc4238fdc5a21ca5113a35a6afa8b7991c8e |
哈希值 用于 anonlink-0.15.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 09f96ae7bfa48152c1a05e48db63e0780ea99630fa0e8a22f41c6bfe1dcce74d |
|
MD5 | 4f3b3a34b3aa578309065b233b64362a |
|
BLAKE2b-256 | 1aaf6c768586b4b4f07173263ff3f2380a39fb86cd4ed1cd149b10593eb7ffcd |
哈希值 用于 anonlink-0.15.3-cp37-cp37m-macosx_10_9_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 670082f0df2ffc65909b8cb18bae95678acd7c60a7ecf7edfe12f5a45073c2a2 |
|
MD5 | 695947f50fb603bea255b5920358e7ad |
|
BLAKE2b-256 | 33188189c06618dcb210d18918c089bc523079c3ccf1bcd2c256040ea8884fa4 |
哈希值 用于 anonlink-0.15.3-cp36-cp36m-musllinux_1_1_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 54572ccb318a8add98bc1badffd55a037f93e9e40f01b22268a1774e473126e1 |
|
MD5 | 4be8e35b72c679b9ab67b3d083ace9b5 |
|
BLAKE2b-256 | 0d842c6b28090197ecd1eb3479744dec036e0c36545033be9fb90fe29cfb3537 |
哈希值 for anonlink-0.15.3-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | e3ab51942edc54356ccd0df93e4bcd914481fe1e96fa1e4659415421de91f1ab |
|
MD5 | bbdaa37cf468731c9943adbb9e02f541 |
|
BLAKE2b-256 | f8fce6dbe6143976b9d95f8071bd7ac5e94e5a2845ef0a23df2cf7ae730ffb3c |
哈希值 for anonlink-0.15.3-cp36-cp36m-macosx_10_9_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 4cfa1ff43e0258738a70c710ce6318f19bae5f479df1f806f44e60536c99908b |
|
MD5 | 4208b2accf7cea50dcbbdccc4b4e968d |
|
BLAKE2b-256 | bdbfdaf84bf9c0662e50372237d86d83eb1d27977f04e1a076e2d3e053812ab5 |