Download the PHP package zendevio/bmpm without Composer
On this page you can find all versions of the php package zendevio/bmpm. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Download zendevio/bmpm
More information about zendevio/bmpm
Files in zendevio/bmpm
Package bmpm
Short Description Modern PHP 8.4+ implementation of the Beider-Morse Phonetic Matching (BMPM) algorithm for multilingual name matching
License GPL-3.0-or-later
Homepage https://github.com/zendevio/bmpm-php
Informations about the package bmpm
BMPM - Beider-Morse Phonetic Matching for PHP
A modern PHP 8.4+ implementation of the Beider-Morse Phonetic Matching (BMPM) algorithm for multilingual name matching. This library enables phonetic comparison of names across 20+ languages, making it ideal for genealogical research, record linkage, and fuzzy name searching.
Features
- Multilingual Support: 20 languages including Arabic, Cyrillic, Greek, Hebrew, and Latin-based scripts
- Three Name Type Modes: Generic, Ashkenazic, and Sephardic variants
- Dual Matching Accuracy: Exact and Approximate modes for precision vs. recall trade-offs
- Daitch-Mokotoff Soundex: Included D-M Soundex implementation for Slavic/Yiddish names
- Modern PHP: Built for PHP 8.4+ with enums, readonly classes, and strict typing
- Immutable API: Fluent, immutable builder pattern for safe configuration
- Well Tested: 400+ tests with 97.51% coverage, 81% MSI (mutation score), PHPStan level max
Installation
Requirements
- PHP 8.4 or higher
ext-mbstring- Multibyte string supportext-intl- Internationalization supportext-json- JSON support
Quick Start
Configuration
Name Types
| Type | Description | Languages |
|---|---|---|
| Generic | General-purpose matching | 20 languages |
| Ashkenazic | Eastern European Jewish names | 11 languages |
| Sephardic | Mediterranean Jewish names | 6 languages |
Language Detection
The library automatically detects the likely language(s) of a name:
Daitch-Mokotoff Soundex
For Slavic and Yiddish surname matching:
Advanced Usage
Restrict to Specific Languages
Custom Data Path
Direct Engine Access
For advanced use cases, access the engine directly:
API Reference
BeiderMorse (Main Facade)
| Method | Description |
|---|---|
encode(string $name): string |
Encode name to phonetic representation |
encodeToArray(string $name): array |
Get all phonetic alternatives as array |
encodeBatch(array $names): array |
Encode multiple names at once |
matches(string $a, string $b): bool |
Check if two names match phonetically |
similarity(string $a, string $b): float |
Get similarity score (0.0 - 1.0) |
detectLanguages(string $name): array |
Detect possible languages |
detectPrimaryLanguage(string $name): Language |
Get most likely language |
soundex(string $name): string |
Get D-M Soundex encoding |
Configuration Methods
| Method | Description |
|---|---|
withNameType(NameType $type): self |
Set name type variant |
withAccuracy(MatchAccuracy $accuracy): self |
Set matching accuracy |
withLanguages(Language ...$langs): self |
Restrict to specific languages |
withLanguageMask(int $mask): self |
Set language bitmask directly |
withAutoLanguageDetection(): self |
Enable automatic detection |
withDataPath(string $path): self |
Set custom rules path |
Supported Languages
Generic Mode (20 languages)
Arabic, Cyrillic, Czech, Dutch, English, French, German, Greek, Greek (Latin), Hebrew, Hungarian, Italian, Latvian, Polish, Portuguese, Romanian, Russian, Spanish, Turkish
Ashkenazic Mode (11 languages)
Cyrillic, English, French, German, Hebrew, Hungarian, Polish, Romanian, Russian, Spanish
Sephardic Mode (6 languages)
French, Hebrew, Italian, Portuguese, Spanish
How It Works
The Beider-Morse algorithm:
- Language Detection: Analyzes spelling patterns to identify likely source language(s)
- Phonetic Rules: Applies language-specific transformation rules
- Approximation: Generates phonetic codes that capture pronunciation variants
- Multi-output: Produces multiple codes for ambiguous spellings
This enables matching names like:
- "Smith" ↔ "Schmidt" ↔ "Schmitt"
- "Cohen" ↔ "Kohn" ↔ "Cohn" ↔ "Cahan"
- "Schwarzenegger" ↔ "Shvarceneger"
Documentation
- Getting Started
- API Reference
- Advanced Usage
- Contributing
- Changelog
Testing & Quality
Credits
- Alexander Beider - Original BMPM algorithm
- Stephen P. Morse - Original BMPM algorithm and website
- Alin M. Gheorghe - PHP 8.4+ implementation
License
This library is licensed under the GPL-3.0 License, the same license as the original BMPM implementation.
Related Resources
All versions of bmpm with dependencies
ext-mbstring Version *
ext-intl Version *
ext-json Version *