Skip to main content

Entity resolution for everyone. Minimal. No dependencies.

Project description

rezolva

Entity resolution for everyone. Minimal. No dependencies.

rezolva is a lightweight, flexible, and extensible entity resolution library implemented in pure Python. It's designed for simplicity, educational purposes, and easy integration into larger projects. (it is also very much a work in progress)

Features

  • Zero dependencies: built with Python standard library only
  • Modular architecture: easy to customize and extend
  • Defaults: out-of-the-box implementations of ER algorithms
  • Flexible: adaptable to various ER scenarios
  • Evaluation: utilities for testing precision, recall, F1, accuracy
  • Visualization: trace candidates through the resolution process

Installation

pip install rezolva

Quick Start

Here's a simple example of how to use rezolva:

from rezolva import Entity, EntityResolver, SimpleBlocker, SimpleModelBuilder, SimplePreprocessor
from rezolva.matchers import CosineSimilarityMatcher
from rezolva.preprocessors.preprocessing_functions import lowercase, strip_whitespace, remove_punctuation

# Set up components
preprocessor = SimplePreprocessor([lowercase, strip_whitespace, remove_punctuation])
model_builder = SimpleModelBuilder(['title', 'description', 'brand'])
matcher = CosineSimilarityMatcher(threshold=0.5, attribute_weights={'title': 2.0, 'description': 1.5, 'brand': 1.0})
blocker = SimpleBlocker(lambda e: e.attributes['brand'].lower())

# Create resolver
resolver = EntityResolver(preprocessor, model_builder, matcher, blocker)

# Train the resolver
training_entities = [
    Entity("1", {"title": "iPhone 12", "description": "Latest Apple smartphone", "brand": "Apple"}),
    Entity("2", {"title": "Galaxy S21", "description": "Samsung's flagship phone", "brand": "Samsung"}),
    Entity("3", {"title": "Pixel 5", "description": "Google's latest smartphone", "brand": "Google"}),
]
resolver.train(training_entities)

# Resolve new entities
new_entities = [
    Entity("4", {"title": "iPhone 12 Pro", "description": "Apple's premium smartphone", "brand": "Apple"}),
    Entity("5", {"title": "Galaxy S21+", "description": "Samsung's large screen flagship", "brand": "Samsung"}),
]
results = resolver.resolve(new_entities, top_k=1)

# Print results
for entity, matches in results:
    print(f"Top matches for {entity.id} - {entity.attributes['title']}:")
    for match, score in matches[:2]:
        print(f"  Match: {match.id} - {match.attributes['title']} (Score: {score:.2f})")

Advanced Usage

For more advanced examples, including custom preprocessing, different matching algorithms, model saving/loading, deduplication, and more, please check the examples directory in the repository.

Customization

You can extend rezolva by creating custom implementations of its components:

  1. Subclass the base component classes (Preprocessor, ModelBuilder, Matcher, Blocker)
  2. Implement the required methods with your custom logic
  3. Use your custom components when creating the EntityResolver

Contributing

Contributions to rezolva are welcome! Please feel free to submit a Pull Request.

License

This project is licensed under the MIT License - see the LICENSE file for details.

Project details


Download files

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

Source Distribution

rezolva-0.1.1.tar.gz (3.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

rezolva-0.1.1-py3-none-any.whl (3.7 kB view details)

Uploaded Python 3

File details

Details for the file rezolva-0.1.1.tar.gz.

File metadata

  • Download URL: rezolva-0.1.1.tar.gz
  • Upload date:
  • Size: 3.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.12.4

File hashes

Hashes for rezolva-0.1.1.tar.gz
Algorithm Hash digest
SHA256 3f470bd221ec51b9b30d06b206d91bfe03784bd195001b601b2cff3e717caf34
MD5 16602a1881166b323957d2406bd8ffee
BLAKE2b-256 cc8cebb59cf26ce1829dd6e478c5e9329c13341c07e13af268383d210351df91

See more details on using hashes here.

File details

Details for the file rezolva-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: rezolva-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 3.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.12.4

File hashes

Hashes for rezolva-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 a7b1ab9160c9b72c07c8e0892c8338e62d8bf7c152eb74b71055b17d6bc1dc7f
MD5 6fff9f22e5944f7d14b063160940147a
BLAKE2b-256 788a29cec8498ed0bd2752822e3e71b1cdba7114251f857754d7ea6482e5e30d

See more details on using hashes here.

Supported by

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