joinery has a small vocabulary that the articles and the reference pages lean on. This page is the single place to look a term up: one short definition each, and the verb or argument it attaches to. Terms are ordered alphabetically for lookup. For the order they appear in a real workflow, read the getting started article instead.
A note on naming. The word “join” runs through the package because the work is the woodworker’s: take two pieces cut at different times, on different machines, and make them meet so cleanly the seam disappears. The terms below are the measurements and the jigs that get a join to fit.
aIP (asymmetric identification potential). A measure
of how strongly a shared token points to the same real-world thing, and
one that can differ by direction. A token that is rare in one table but
common in the other carries more weight when you search from the side
where it is rare. That asymmetry is what the “a” stands for. joinery
uses aIP only during calibration: match_features() computes
it for each token to help a model judge which candidate pairs are true
matches. The formula comes from Doherr (2023). Specialist, calibration
only.
Block / blocking (block_by). A stable
key, such as a region or an industry code, that records must agree on
before they are compared. It restricts the comparison to within-block
pairs, which cuts cost at a small recall risk. Use
plan_strategy() to choose one.
Candidate / candidate match. A record pair the
search proposes as a possible match, with a score. Produced by
search_candidates(). A candidate is not yet a confirmed
match; the threshold, and optionally calibration, decide.
Containment. A relaxed exact match where one
record’s token set is a subset of another’s, rather than equal. Off by
default on exact_strategy()
(containment = "off" | "forward" | "bidirectional"); it
over-links on noisy data.
Document frequency (df). How many records a token
appears in within its column and block. High df means common and
uninformative. The max_token_df lever drops tokens above a
df cap before scoring; rarity_distribution() reports
df.
Entity. A group of records that are the same
real-world thing: the connected component of the match graph. A
duplicate group within a table, or a matched cluster across tables, is
an entity. Produced by resolve_entities().
Exact strategy. A strategy that links records only
when their token sets are identical within a block, with no scoring or
threshold. Cheap, robust to empty columns, and the usual front stage of
a staged run. Built by exact_strategy().
Feedback weighting (feedback_strength).
An optional adjustment that nudges a pair’s score by the proportion of
its tokens that matched. Off by default (0).
Fuzzy match. The scored, threshold-based matching of
a search_strategy(), as opposed to the all-or-nothing exact
match. It is “fuzzy” because near-misses still score and can clear the
threshold.
Ledger. The directed record of every link a staged
cross-source search made, with the stage and direction of each, attached
to a multi_stage_search() result as the ledger
attribute. The audit trail behind the entity grouping.
Match graph / edge list. The set of scored record
pairs viewed as a graph whose nodes are records and whose edges are
matches. resolve_entities() turns it into entities.
Rarity. How informative a token is, computed per
column and block. The default metric is inverse_freq. This
is the core quantity behind scoring: rare shared tokens score high. Set
with rarity = on the strategy; reported by
compute_rarity().
Rarity prefilter (min_rarity,
max_token_df). Two cut levers applied to the token
table before the overlap join. min_rarity floors the rarity
metric; max_token_df caps raw document frequency. Both tame
the fan-out from common tokens. Set them from
rarity_distribution().
Representative (rep,
rep_by). The one record chosen to stand for an
entity (rank 1). Chosen by best score, then a priority column
rep_by, then the smallest id.
deduplicate_table() keeps representatives.
Residual / unmatched. The records a pass did not
match, carried into a later, looser pass.
extract_unmatched() produces them;
materialize_records() rehydrates a set of ids back into
full rows.
rIP (relative identification potential). How much of
a record’s identifying power, within one field, sits on a single token.
A record’s tokens split that field’s evidence among them, and a rare
token takes a larger share than a common one:
rIP = rarity / sum(rarity) over the record’s tokens in that
column. Scoring multiplies each shared token’s rIP by the column weight
and adds them up.
Score. A pair’s match strength: the sum over shared
tokens of rIP * weight. It sits in
[0, sum(weights)], or [0, 1] with normalised
weights. Decomposed by explain_match().
Smoothing (smooth_rip_*). An optional
transform applied to rIP before scoring
(smooth_rip_identity, smooth_rip_log,
smooth_rip_offset, smooth_rip_softmax),
reshaping how within-record token weight is distributed. The default is
identity.
Source (source_by). In a multi-source
search, the column or columns recording where each row came from, such
as a year or a register. It lets links be tagged within-source or
cross-source and lets the grouping report how many sources an entity
covers.
Stage. One pass of a staged workflow with one
strategy. Stages run in order, each on the residual, and optionally the
collapsed representatives, of the last. Run with
multi_stage_dedup() or multi_stage_search();
diagnosed with compare_stages().
Strategy. A declarative object describing how to
match: the per-column preparation pipelines, blocking, rarity metric,
weights, and threshold. Built by search_strategy(),
exact_strategy(), or embedding_strategy(). It
holds no data and runs nothing itself; the verbs interpret it.
Threshold. The minimum score to keep a pair. Either
the strategy default or a per-call override.
summarise_matches() helps set it.
Token. A piece of a field’s text after preparation:
the unit everything matches on. word_tokens(),
numeric_tokens(), and the other preparers make them;
inspect_tokens() shows them.
Token set vs. bag. joinery scores on token sets, the distinct tokens per record and column, not bags, so repeating a token within one record does not inflate a score.
Weight (weights). A column’s share of
the total score: a named numeric vector on the strategy, uniform if
omitted. A column’s weight is also the most it can cost a pair when that
column disagrees or is empty.
