Skip to main content

disamby

https://img.shields.io/pypi/v/disamby.svg https://img.shields.io/travis/verginer/disamby.svg Documentation Status Updates

disamby is a python package designed to carry out entity disambiguation based on fuzzy string matching.

It works best for entities which if the same have very similar strings. Examples of situation where this disambiguation algorithm works fairly well is with company names and addresses which have typos, alternative spellings or composite names. Other use-cases include identifying people in a database where the name might be misspelled.

The algorithm works by exploiting how informative a given word/token is, based on the observed frequencies in the whole corpus of strings. For example the word ‘inc’ in the case of firm names is not very informative, however “Solomon” is, since the former appears repeatedly whereas the second rarely.

With these frequencies the algorithms computes for a given pair of instances how similar they are, and if they are above an arbitrary threshold they are connected in an “alias graph” (i.e. a directed network where an entity is connected to an other if it is similar enough). After all records have been connected in this way disamby returns sets of entities, which are strongly connected [2] . Strongly connected means in this case that there exists a path from all nodes to all nodes within the component.

Example

To use disamby in a project:

import pandas as pd
import disamby.preprocessors as pre
form disamby import Disamby

# create a dataframe with the fields you intend to match on as columns
df = pd.DataFrame({
    'name':     ['Luca Georger',        'Luca Geroger',         'Adrian Sulzer'],
    'address':  ['Mira, 34, Augsburg',  'Miri, 34, Augsburg',   'Milano, 34']},
    index=      ['L1',                  'L2',                   'O1']
)

# define the pipeline to process the strings, note that the last step must return
# a tuple of strings
pipeline = [
    pre.normalize_whitespace,
    pre.remove_punctuation,
    lambda x: pre.trigram(x) + pre.split_words(x)  # any python function is allowed
]

# instantiate the disamby object, it applies the given pre-processing pipeline and
# computes their frequency.
dis = Disamby(df, pipeline)

# let disamby compute disambiguated sets. Node that a threshold must be given or it
# defaults to 0.
dis.disambiguated_sets(threshold=0.5)
[{'L2', 'L1'}, {'O1'}]  # output

# To check if the sets are accurate you can get the rows from the
# pandas dataframe like so:
df.loc[['L2', 'L1']]

Credits

I got the inspiration for this package from the seminar “The SearchEngine - A Tool for Matching by Fuzzy Criteria” by Thorsten Doherr at the CISS [1] Summer School 2017

History

0.2.3 (2017-07-01)

  • Fixes formatting breaking pypi display

0.2.2 (2017-06-30)

  • working release with minimal documentation

  • works with multiple field matching

  • carries out all steps autonomously from string pre-processing to identifying the strongly connected components

0.1.0 (2017-06-24)

  • First release on PyPI.

Release files for disamby 0.2.3

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for disamby 0.2.3
File Size Uploaded
disamby-0.2.3.tar.gz 638.8 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for disamby 0.2.3
File Interpreter ABI Platform
disamby-0.2.3-py2.py3-none-any.whl Python 3, Python 2 none any Details

Total release size: 651.3 kB

Release files / disamby-0.2.3.tar.gz

Download URL disamby-0.2.3.tar.gz
Size 638.8 kB
Tags Source
SHA-256 checksum
How to use checksums
02649b72011b14713dcf8a394e5effe741901c66b189775d3dc393cbbd64116f
BLAKE2b-256 checksum
How to use checksums
8f5f08f0bb63c931105c0488eb91ad1aa19cc15de6f038f15c5ae244e4d61e1b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No

Release files / disamby-0.2.3-py2.py3-none-any.whl

Download URL disamby-0.2.3-py2.py3-none-any.whl
Size 12.5 kB
Tags Python 2 Python 3
SHA-256 checksum
How to use checksums
52844689c88bd817289d16b1d0d3ce724bd7834f01914c5d22b00225b290ac94
BLAKE2b-256 checksum
How to use checksums
17891d857f28977c7f038211d7cb84de05b5f1d2212955d4d30ac8d3c7c8bc65
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No

Release history Release notifications | RSS feed

0.2.4

2 release files

This release

0.2.3 This release

2 release files

0.2.2

2 release files

0.2.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page