keller/soundex-fr-bundle
Symfony bundle implementing the French Soundex phonetic algorithm, letting you index and compare French names and words by sound for fuzzy matching, tolerant search, and deduplication even when spellings differ.
fuzzystrmatch/pg_trgm, an Elasticsearch/OpenSearch phonetic analyzer, or Meilisearch. The package is most useful as a cheap way to scope that decision, not as a thing to ship as a dependency.Net: the package helps you scope and de-risk a feature decision (French name matching), and choose an implementation path (vendor the algorithm vs. go database-native). It does not help you choose a long-term vendor.
Consider it when:
Bundle class + DI extension against symfony/framework-bundle), so a Laravel app would inherit a framework dependency for zero functional gain. The realistic path is: copy the encoder into app/Support/, wrap it behind a small interface, add a service provider and a model trait only if needed.Look elsewhere when:
fuzzystrmatch (soundex/difference) and pg_trgm, or a phonetic analyzer in Elasticsearch/OpenSearch/Meilisearch, gets you there with the backup and monitoring you already have — and avoids a second source of truth for name normalization.mb_* hygiene, deprecation removal, ligature handling for œ/æ, accented input) should be budgeted explicitly rather than discovered in review.Practical recommendation: timebox a half-day (two-hour core) spike. Extract the encoder, validate it against published French Soundex test vectors and a real sample of your name corpus, and measure recall against your current exact-match baseline. Then decide between (a) vendoring the encoder with tests, (b) a maintained phonetic library, or (c) a database-native trigram/phonetic approach. Do not take a hard runtime dependency on the bundle, and do not block a release on this — it is an enrichment to name matching, not a critical-path item. Switching cost is low now and rises sharply once phonetic keys are persisted across tables.
To executives: We've surfaced a small, cheap capability gap, not a vendor decision. In French-speaking markets, customer and contact records routinely fail exact-match because of accents, elisions, and spelling variants — which inflates duplicate records and degrades search relevance. A French Soundex encoder addresses this with a small amount of code and no new infrastructure, no recurring cost, and no third-party service. The public package itself is not mature enough to depend on (minimal adoption, no maintenance signal), so the recommendation is to own the algorithm internally — vendor or reimplement — and treat this as a roughly two-engineer-day scoped improvement, not a platform bet. Decision requested: approve a short discovery spike (half a day) to test it against our real name data; no budget commitment beyond that, and a clear fallback to our existing database/search tooling if the spike looks weak.
To engineering: Single-purpose French phonetic encoder returning a fixed-length key. It is packaged as a Symfony bundle, so the only part worth keeping is the encoder class — plan to vendor it into app/Support/, wrap it behind an interface, and add a model trait plus a soundex_fr column (populated on save, with a queued backfill and a composite index) if the spike justifies it. Two critical engineering caveats: it produces keys, not match scores, so it sits underneath an existing similarity or ranking layer rather than replacing it; and any future change to the algorithm invalidates every stored key silently, so version the column or gate changes behind an explicit reindex. Ask: first check whether Postgres fuzzystrmatch/pg_trgm or our search backend's phonetic analyzer already covers this — if so, we skip the PHP entirely. If not, vendor the encoder with spec-derived test fixtures, modernize it to PHP 8.2 with mb_* hygiene, and validate on real French data (including North and West African and Portuguese-influenced surnames) before persisting anything. Do not adopt the bundle as a runtime Composer dependency.
How can I help you explore Laravel packages today?