Skip to main content

A python library for accurate and scaleable data deduplication and entity-resolution

Project description

Dedupe Python Library

Tests Passingcodecov

dedupe is a python library that uses machine learning to perform fuzzy matching, deduplication and entity resolution quickly on structured data.

dedupe will help you:

  • remove duplicate entries from a spreadsheet of names and addresses
  • link a list with customer information to another with order history, even without unique customer IDs
  • take a database of campaign contributions and figure out which ones were made by the same person, even if the names were entered slightly differently for each record

dedupe takes in human training data and comes up with the best rules for your dataset to quickly and automatically find similar records, even with very large databases.

Important links

dedupe library consulting

If you or your organization would like professional assistance in working with the dedupe library, Dedupe.io LLC offers consulting services. Read more about pricing and available services here.

Tools built with dedupe

Dedupe.io

A cloud service powered by the dedupe library for de-duplicating and finding matches in your data. It provides a step-by-step wizard for uploading your data, setting up a model, training, clustering and reviewing the results.

Dedupe.io also supports record linkage across data sources and continuous matching and training through an API.

For more, see the Dedupe.io product site, tutorials on how to use it, and differences between it and the dedupe library.

Dedupe is well adopted by the Python community. Check out this blogpost, a YouTube video on how to use Dedupe with Python and a Youtube video on how to apply Dedupe at scale using Spark.

csvdedupe

Command line tool for de-duplicating and linking CSV files. Read about it on Source Knight-Mozilla OpenNews.

Installation

Using dedupe

If you only want to use dedupe, install it this way:

pip install dedupe

Familiarize yourself with dedupe's API, and get started on your project. Need inspiration? Have a look at some examples.

Developing dedupe

We recommend using virtualenv and virtualenvwrapper for working in a virtualized development environment. Read how to set up virtualenv.

Once you have virtualenvwrapper set up,

mkvirtualenv dedupe
git clone https://github.com/dedupeio/dedupe.git
cd dedupe
pip install -e . --config-settings editable_mode=compat
pip install -r requirements.txt

If these tests pass, then everything should have been installed correctly!

pytest

Afterwards, whenever you want to work on dedupe,

workon dedupe

Testing

Unit tests of core dedupe functions

pytest

Test using canonical dataset from Bilenko's research

Using Deduplication

python -m pip install -e ./benchmarks
python benchmarks/benchmarks/canonical.py

Using Record Linkage

python -m pip install -e ./benchmarks
python benchmarks/benchmarks/canonical_matching.py

Team

  • Forest Gregg, DataMade
  • Derek Eder, DataMade

Credits

Dedupe is based on Mikhail Yuryevich Bilenko's Ph.D. dissertation: Learnable Similarity Functions and their Application to Record Linkage and Clustering.

Errors / Bugs

If something is not behaving intuitively, it is a bug, and should be reported. Report it here

Note on Patches/Pull Requests

  • Fork the project.
  • Make your feature addition or bug fix.
  • Send us a pull request. Bonus points for topic branches.

Copyright

Copyright (c) 2022 Forest Gregg and Derek Eder. Released under the MIT License.

Third-party copyright in this distribution is noted where applicable.

Citing Dedupe

If you use Dedupe in an academic work, please give this citation:

Forest Gregg and Derek Eder. 2022. Dedupe. https://github.com/dedupeio/dedupe.

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

dedupe-2.0.24.tar.gz (107.3 kB view hashes)

Uploaded Source

Built Distributions

dedupe-2.0.24-pp310-pypy310_pp73-win_amd64.whl (121.0 kB view hashes)

Uploaded PyPy Windows x86-64

dedupe-2.0.24-pp310-pypy310_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (122.9 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ x86-64 manylinux: glibc 2.5+ x86-64

dedupe-2.0.24-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (124.5 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

dedupe-2.0.24-pp310-pypy310_pp73-macosx_11_0_arm64.whl (118.9 kB view hashes)

Uploaded PyPy macOS 11.0+ ARM64

dedupe-2.0.24-pp310-pypy310_pp73-macosx_10_15_x86_64.whl (118.9 kB view hashes)

Uploaded PyPy macOS 10.15+ x86-64

dedupe-2.0.24-pp39-pypy39_pp73-win_amd64.whl (121.0 kB view hashes)

Uploaded PyPy Windows x86-64

dedupe-2.0.24-pp39-pypy39_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (122.9 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ x86-64 manylinux: glibc 2.5+ x86-64

dedupe-2.0.24-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (124.4 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

dedupe-2.0.24-pp39-pypy39_pp73-macosx_11_0_arm64.whl (118.8 kB view hashes)

Uploaded PyPy macOS 11.0+ ARM64

dedupe-2.0.24-pp39-pypy39_pp73-macosx_10_15_x86_64.whl (118.9 kB view hashes)

Uploaded PyPy macOS 10.15+ x86-64

dedupe-2.0.24-pp38-pypy38_pp73-win_amd64.whl (120.4 kB view hashes)

Uploaded PyPy Windows x86-64

dedupe-2.0.24-pp38-pypy38_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (122.2 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ x86-64 manylinux: glibc 2.5+ x86-64

dedupe-2.0.24-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (122.8 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

dedupe-2.0.24-pp38-pypy38_pp73-macosx_11_0_arm64.whl (118.1 kB view hashes)

Uploaded PyPy macOS 11.0+ ARM64

dedupe-2.0.24-pp38-pypy38_pp73-macosx_10_9_x86_64.whl (117.9 kB view hashes)

Uploaded PyPy macOS 10.9+ x86-64

dedupe-2.0.24-pp37-pypy37_pp73-win_amd64.whl (120.4 kB view hashes)

Uploaded PyPy Windows x86-64

dedupe-2.0.24-pp37-pypy37_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (122.2 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ x86-64 manylinux: glibc 2.5+ x86-64

dedupe-2.0.24-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (122.8 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

dedupe-2.0.24-pp37-pypy37_pp73-macosx_10_9_x86_64.whl (117.9 kB view hashes)

Uploaded PyPy macOS 10.9+ x86-64

dedupe-2.0.24-cp312-cp312-win_amd64.whl (123.8 kB view hashes)

Uploaded CPython 3.12 Windows x86-64

dedupe-2.0.24-cp312-cp312-win32.whl (121.1 kB view hashes)

Uploaded CPython 3.12 Windows x86

dedupe-2.0.24-cp312-cp312-musllinux_1_2_x86_64.whl (224.6 kB view hashes)

Uploaded CPython 3.12 musllinux: musl 1.2+ x86-64

dedupe-2.0.24-cp312-cp312-musllinux_1_2_i686.whl (215.8 kB view hashes)

Uploaded CPython 3.12 musllinux: musl 1.2+ i686

dedupe-2.0.24-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (224.8 kB view hashes)

Uploaded CPython 3.12 manylinux: glibc 2.17+ x86-64 manylinux: glibc 2.5+ x86-64

dedupe-2.0.24-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (215.6 kB view hashes)

Uploaded CPython 3.12 manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

dedupe-2.0.24-cp312-cp312-macosx_11_0_arm64.whl (122.2 kB view hashes)

Uploaded CPython 3.12 macOS 11.0+ ARM64

dedupe-2.0.24-cp312-cp312-macosx_10_9_x86_64.whl (122.3 kB view hashes)

Uploaded CPython 3.12 macOS 10.9+ x86-64

dedupe-2.0.24-cp312-cp312-macosx_10_9_universal2.whl (140.6 kB view hashes)

Uploaded CPython 3.12 macOS 10.9+ universal2 (ARM64, x86-64)

dedupe-2.0.24-cp311-cp311-win_amd64.whl (123.5 kB view hashes)

Uploaded CPython 3.11 Windows x86-64

dedupe-2.0.24-cp311-cp311-win32.whl (121.1 kB view hashes)

Uploaded CPython 3.11 Windows x86

dedupe-2.0.24-cp311-cp311-musllinux_1_2_x86_64.whl (217.9 kB view hashes)

Uploaded CPython 3.11 musllinux: musl 1.2+ x86-64

dedupe-2.0.24-cp311-cp311-musllinux_1_2_i686.whl (211.4 kB view hashes)

Uploaded CPython 3.11 musllinux: musl 1.2+ i686

dedupe-2.0.24-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (219.3 kB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.17+ x86-64 manylinux: glibc 2.5+ x86-64

dedupe-2.0.24-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (209.9 kB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

dedupe-2.0.24-cp311-cp311-macosx_11_0_arm64.whl (122.1 kB view hashes)

Uploaded CPython 3.11 macOS 11.0+ ARM64

dedupe-2.0.24-cp311-cp311-macosx_10_9_x86_64.whl (122.1 kB view hashes)

Uploaded CPython 3.11 macOS 10.9+ x86-64

dedupe-2.0.24-cp311-cp311-macosx_10_9_universal2.whl (140.3 kB view hashes)

Uploaded CPython 3.11 macOS 10.9+ universal2 (ARM64, x86-64)

dedupe-2.0.24-cp310-cp310-win_amd64.whl (123.4 kB view hashes)

Uploaded CPython 3.10 Windows x86-64

dedupe-2.0.24-cp310-cp310-win32.whl (121.1 kB view hashes)

Uploaded CPython 3.10 Windows x86

dedupe-2.0.24-cp310-cp310-musllinux_1_2_x86_64.whl (205.7 kB view hashes)

Uploaded CPython 3.10 musllinux: musl 1.2+ x86-64

dedupe-2.0.24-cp310-cp310-musllinux_1_2_i686.whl (202.3 kB view hashes)

Uploaded CPython 3.10 musllinux: musl 1.2+ i686

dedupe-2.0.24-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (206.7 kB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.17+ x86-64 manylinux: glibc 2.5+ x86-64

dedupe-2.0.24-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (201.0 kB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

dedupe-2.0.24-cp310-cp310-macosx_11_0_arm64.whl (122.2 kB view hashes)

Uploaded CPython 3.10 macOS 11.0+ ARM64

dedupe-2.0.24-cp310-cp310-macosx_10_9_x86_64.whl (122.2 kB view hashes)

Uploaded CPython 3.10 macOS 10.9+ x86-64

dedupe-2.0.24-cp310-cp310-macosx_10_9_universal2.whl (140.4 kB view hashes)

Uploaded CPython 3.10 macOS 10.9+ universal2 (ARM64, x86-64)

dedupe-2.0.24-cp39-cp39-win_amd64.whl (123.4 kB view hashes)

Uploaded CPython 3.9 Windows x86-64

dedupe-2.0.24-cp39-cp39-win32.whl (121.1 kB view hashes)

Uploaded CPython 3.9 Windows x86

dedupe-2.0.24-cp39-cp39-musllinux_1_2_x86_64.whl (205.3 kB view hashes)

Uploaded CPython 3.9 musllinux: musl 1.2+ x86-64

dedupe-2.0.24-cp39-cp39-musllinux_1_2_i686.whl (201.9 kB view hashes)

Uploaded CPython 3.9 musllinux: musl 1.2+ i686

dedupe-2.0.24-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (206.3 kB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.17+ x86-64 manylinux: glibc 2.5+ x86-64

dedupe-2.0.24-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (200.7 kB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

dedupe-2.0.24-cp39-cp39-macosx_11_0_arm64.whl (122.2 kB view hashes)

Uploaded CPython 3.9 macOS 11.0+ ARM64

dedupe-2.0.24-cp39-cp39-macosx_10_9_x86_64.whl (122.2 kB view hashes)

Uploaded CPython 3.9 macOS 10.9+ x86-64

dedupe-2.0.24-cp39-cp39-macosx_10_9_universal2.whl (140.4 kB view hashes)

Uploaded CPython 3.9 macOS 10.9+ universal2 (ARM64, x86-64)

dedupe-2.0.24-cp38-cp38-win_amd64.whl (123.4 kB view hashes)

Uploaded CPython 3.8 Windows x86-64

dedupe-2.0.24-cp38-cp38-win32.whl (121.1 kB view hashes)

Uploaded CPython 3.8 Windows x86

dedupe-2.0.24-cp38-cp38-musllinux_1_2_x86_64.whl (204.8 kB view hashes)

Uploaded CPython 3.8 musllinux: musl 1.2+ x86-64

dedupe-2.0.24-cp38-cp38-musllinux_1_2_i686.whl (201.4 kB view hashes)

Uploaded CPython 3.8 musllinux: musl 1.2+ i686

dedupe-2.0.24-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (206.6 kB view hashes)

Uploaded CPython 3.8 manylinux: glibc 2.17+ x86-64 manylinux: glibc 2.5+ x86-64

dedupe-2.0.24-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (200.2 kB view hashes)

Uploaded CPython 3.8 manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

dedupe-2.0.24-cp38-cp38-macosx_11_0_arm64.whl (122.2 kB view hashes)

Uploaded CPython 3.8 macOS 11.0+ ARM64

dedupe-2.0.24-cp38-cp38-macosx_10_9_x86_64.whl (122.2 kB view hashes)

Uploaded CPython 3.8 macOS 10.9+ x86-64

dedupe-2.0.24-cp38-cp38-macosx_10_9_universal2.whl (140.4 kB view hashes)

Uploaded CPython 3.8 macOS 10.9+ universal2 (ARM64, x86-64)

dedupe-2.0.24-cp37-cp37m-win_amd64.whl (123.2 kB view hashes)

Uploaded CPython 3.7m Windows x86-64

dedupe-2.0.24-cp37-cp37m-win32.whl (120.8 kB view hashes)

Uploaded CPython 3.7m Windows x86

dedupe-2.0.24-cp37-cp37m-musllinux_1_2_x86_64.whl (198.9 kB view hashes)

Uploaded CPython 3.7m musllinux: musl 1.2+ x86-64

dedupe-2.0.24-cp37-cp37m-musllinux_1_2_i686.whl (195.3 kB view hashes)

Uploaded CPython 3.7m musllinux: musl 1.2+ i686

dedupe-2.0.24-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (200.9 kB view hashes)

Uploaded CPython 3.7m manylinux: glibc 2.17+ x86-64 manylinux: glibc 2.5+ x86-64

dedupe-2.0.24-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (193.9 kB view hashes)

Uploaded CPython 3.7m manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

dedupe-2.0.24-cp37-cp37m-macosx_10_9_x86_64.whl (121.9 kB view hashes)

Uploaded CPython 3.7m macOS 10.9+ x86-64

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page