# ---
# jupyter:
#   jupytext:
#     text_representation:
#       extension: .py
#       format_name: light
#       format_version: '1.5'
#       jupytext_version: 1.14.4
#   kernelspec:
#     display_name: Python [Root]
#     language: python
#     name: Python [Root]
# ---

# # Contents
#  - [Introduction](#Introduction)
#  - [Generating Features for Blocking Manually](#Debugging-Blocker-Output)

# # Introduction
# This IPython notebook illustrates how to generate features for blocking manually.
#
# First, we need to import *py_entitymatching* package and other libraries as follows:

# Import py_entitymatching package
import py_entitymatching as em
import os
import pandas as pd

# Then, read the (sample) input tables for blocking purposes.

# +
# Get the datasets directory
datasets_dir = em.get_install_path() + os.sep + 'datasets'

# Get the paths of the input tables
path_A = datasets_dir + os.sep + 'person_table_A.csv'
path_B = datasets_dir + os.sep + 'person_table_B.csv'
# -

# Read the CSV files and set 'ID' as the key attribute
A = em.read_csv_metadata(path_A, key='ID')
B = em.read_csv_metadata(path_B, key='ID')

# # Generating Features for Blocking Manually

# ## Getting Attribute Types

atypes1 = em.get_attr_types(A)
atypes2 = em.get_attr_types(B)

atypes1.keys()

atypes1['birth_year'], atypes1['hourly_wage'], atypes1['address'], atypes1['name'], atypes1['zipcode']

atypes2['birth_year'], atypes2['hourly_wage'], atypes2['address'], atypes2['name'], atypes2['zipcode']

# ## Getting Attribute Correspondences

block_c = em.get_attr_corres(A, B)

block_c.keys()

id(A), id(block_c['ltable']), id(B), id(block_c['rtable'])

block_c['corres']

# ## Getting Tokenizers

tok = em.get_tokenizers_for_blocking()

tok

# ## Getting Similarity Functions

sim = em.get_sim_funs_for_blocking()

sim

# ## Getting Features

feature_table = em.get_features(A, B, atypes1, atypes2, block_c, tok, sim)

feature_table.head()

type(feature_table)

StarcoderdataJupyterScriptsDedupFiltered