Metaphone: примеры (PHP)
metaphone(string $string, int $max_phonemes = 0): stringФункция metaphone() реализует алгоритм метафона, который генерирует фонетическое представление строки на английском языке. Она преобразует слова в последовательность звуков, что полезно для поиска похожих по произношению слов, особенно при работе с опечатками или различными акцентами.
Основное применение функции — системы поиска, проверка орфографии, исправление ошибок в пользовательском вводе.
- $string (обязательный) — исходная строка для обработки. Если передана нестрока, будет преобразована в строку.
- $max_phonemes (опциональный) — максимальная длина возвращаемого метафона. По умолчанию 0 (без ограничений).
echo metaphone('Hello');HL
$words = ['write', 'right', 'rite']; foreach ($words as $word) { echo $word . ': ' . metaphone($word) . "\n"; }write: RT right: RT rite: RT
echo metaphone('Extraterrestrial', 4);EKST
Создает четырехсимвольный звуковой код слова. Менее точная, чем metaphone, но быстрее и имеет фиксированную длину.
Вычисляет расстояние Левенштейна между строками (количество операций для преобразования). Полезно для измерения схожести написания, но не фонетики.
Определяет процент схожести двух строк. Ресурсоемкая, но дает более детальный результат.
Metaphone предпочтительнее для английских слов с фонетическими ошибками. Soundex подходит для простых задач с короткими словами. Levenshtein и similar_text лучше использовать для визуального сравнения строк.
echo metaphone(['array']);Array to string conversion
echo metaphone('Москва');MSKF
Функция преобразует кириллицу, но результат может быть непредсказуемым.
echo metaphone('a', 5);A
Возвращаемый код может быть короче указанного ограничения.
В PHP 8.0 функция стала строго типизированной: при передаче некорректных типов аргументов выбрасывается TypeError. В предыдущих версиях происходило молчаливое преобразование.
// PHP 7 metaphone(null); // Возвращала '' // PHP 8 metaphone(null); // TypeErrorfunction phoneticSearch($query, $array) { $code = metaphone($query); $results = []; foreach ($array as $item) { if (metaphone($item) === $code) { $results[] = $item; } } return $results; } $data = ['sea', 'see', 'C', 'bee']; print_r(phoneticSearch('see', $data));Array ( [0] => sea [1] => see )
$dict = ['apple', 'orange', 'banana']; $input = 'aple'; $inputCode = metaphone($input); foreach ($dict as $word) { if (metaphone($word) === $inputCode) { echo "Возможно, вы имели в виду: $word"; break; } }Возможно, вы имели в виду: apple
$word1 = metaphone('psychological', 5); $word2 = metaphone('psychology', 5); echo "$word1 == $word2: "; var_dump($word1 === $word2);SKKL == SKKL: bool(true)
$words = ['knight', 'night', 'cat', 'kat', 'dog']; $groups = []; foreach ($words as $word) { $key = metaphone($word); $groups[$key][] = $word; } print_r($groups);Array ( [NT] => Array ( [0] => knight [1] => night ) [KT] => Array ( [0] => cat [1] => kat ) [TK] => Array ( [0] => dog ) )
from metaphone import doublemetaphone result = doublemetaphone("programming") print(result)('PRKRMNK', '')const natural = require('natural'); const metaphone = natural.Metaphone.process("javascript"); console.log(metaphone);JSFKRPT
SELECT SOUNDEX('database');D312
Реализация Double Metaphone в Python возвращает основной и альтернативный код. JavaScript-библиотеки часто имеют дополнительные настройки. MySQL SOUNDEX менее точен, но интегрирован в СУБД.