Docs
The R package is the canonical engine. The Studio on this site runs a Python port of its core stages — same blocking, same missing-value-aware similarities, same clustering ideas.
Install
# R (canonical package)
install.packages("remotes")
remotes::install_github("xinminchu/erbot")
library(erbot)Quickstart
# one call: nine stages, honest defaults
res <- er_run(df, truth = truth_tbl)
res$metrics # ARI, B-cubed, AMI, ...
res$labels # cluster per record
# or stage by stage
pairs <- er_block(df, method = "prefix", block_key = "name")
sim <- er_similarity(df, pairs,
spec = list(list(name = "name", type = "jw"),
list(name = "address", type = "jw")))
S <- er_pairs_to_sparse(pairs, er_combine(sim), n = nrow(df))
labs <- er_cluster(S, method = "louvain")
# supervised pairwise classifier (Firth logistic default)
fit <- er_pair_classify(sim, pairs, truth_vec = truth,
classifier = "logistic")
fit$valid # FALSE + reason if structurally inapplicableCore pipeline
er_run()Run the full entity-resolution pipelineer_block()Generate candidate pairs via blockinger_similarity()Compute per-field similarity for all candidate pairser_combine()missing-value-aware adaptive weighted similarity combinationer_weights()Learn or select field weightser_cluster()Run a single clustering methoder_cluster_all()Run all clustering methodser_merge()Post-process clustering resultser_evaluate()Evaluate clustering against ground truthSupervised classifiers
er_supervised_classifiers()Names of the 11 supervised pairwise classifierser_pair_features()Build the pair-feature matrix from per-field similaritieser_pair_classify()Fit one supervised pairwise classifierHonest evaluation
er_split()Entity-disjoint (or record-level) CV foldser_stratified_three_way_split()Entity-disjoint three-way split with positive-pair quotaser_augment_fit_pairs()Augment positive pairs inside the Fit partition onlyer_positive_ratio_report()Per-partition natural-prevalence reporter_tune()Tune ER methods over parameter gridser_cv()K-fold cross-validation for the pipelineer_protocol_a()Protocol A: full-data principled parameter selectioner_protocol_b()Protocol B: entity-disjoint CV tune, true held-out evaluationStudies & baselines
er_ablation_all()Full ablation study: single-run conditions + CV + baselineser_scaling_curve()Scalability curves by subsampling ner_stability_ari()Stability via repeated-subsample ARIer_bcubed()B-cubed precision, recall, and F-scoreer_ami()Adjusted mutual informationer_baseline_splink()Splink probabilistic-linkage baselineer_scenarios()Scenario presets for stress-testingThe Studio engine
The Studio runs engine/ — a pure-Python port of ERBOT's core stages on a serverless function: blocking, missing-value-aware similarity, classification (transitive closure, average-linkage hierarchical clustering, or HDBSCAN), clustering (threshold connected-components, Louvain, Leiden, label propagation, graph coloring, average/Ward hierarchical clustering, PAM, or a supervised pairwise classifier — logistic, lda, qda, knn, wknn, tree, rf, xgboost, nnet, fellegi_sunter, svm_radial — trained on ground truth), and evaluation (ARI, pairwise precision/recall/F1, B-cubed when ground truth is attached). Pairs stream through the pipeline, so million-pair runs stay in budget. It covers the interactive-dedup path; the full R package adds weight learning, consensus merging, multiplex fusion, baselines, and the complete evaluation suite.
Every Studio run shows its equivalent R code — the exact erbot calls that reproduce the result on your own machine.