Metaphone: примеры (PHP)

Использование функции metaphone в PHP с практическими примерами
Раздел: Работа со строками
metaphone(string $string, int $max_phonemes = 0): string
Функция metaphone в PHP: принципы работы и параметры

Функция metaphone() реализует алгоритм метафона, который генерирует фонетическое представление строки на английском языке. Она преобразует слова в последовательность звуков, что полезно для поиска похожих по произношению слов, особенно при работе с опечатками или различными акцентами.

Основное применение функции — системы поиска, проверка орфографии, исправление ошибок в пользовательском вводе.

Аргументы функции
  • $string (обязательный) — исходная строка для обработки. Если передана нестрока, будет преобразована в строку.
  • $max_phonemes (опциональный) — максимальная длина возвращаемого метафона. По умолчанию 0 (без ограничений).
Базовые примеры использования metaphone
Простой вызов функции
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
Похожие функции в PHP

Создает четырехсимвольный звуковой код слова. Менее точная, чем metaphone, но быстрее и имеет фиксированную длину.

Вычисляет расстояние Левенштейна между строками (количество операций для преобразования). Полезно для измерения схожести написания, но не фонетики.

Определяет процент схожести двух строк. Ресурсоемкая, но дает более детальный результат.

Критерии выбора

Metaphone предпочтительнее для английских слов с фонетическими ошибками. Soundex подходит для простых задач с короткими словами. Levenshtein и similar_text лучше использовать для визуального сравнения строк.

Распространенные ошибки при работе с metaphone
Некорректный тип аргументов
echo metaphone(['array']);
Array to string conversion
Обработка неанглийских символов
echo metaphone('Москва');
MSKF

Функция преобразует кириллицу, но результат может быть непредсказуемым.

Ограничение длины для коротких слов
echo metaphone('a', 5);
A

Возвращаемый код может быть короче указанного ограничения.

Изменения в поведении metaphone

В PHP 8.0 функция стала строго типизированной: при передаче некорректных типов аргументов выбрасывается TypeError. В предыдущих версиях происходило молчаливое преобразование.

Пример различий
// PHP 7 metaphone(null); // Возвращала '' // PHP 8 metaphone(null); // TypeError
Расширенные примеры применения metaphone
Поиск в массиве с фонетическим сравнением
Пример php
function 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 )
Обработка пользовательского ввода с опечатками
Пример php
$dict = ['apple', 'orange', 'banana']; $input = 'aple'; $inputCode = metaphone($input); foreach ($dict as $word) { if (metaphone($word) === $inputCode) { echo "Возможно, вы имели в виду: $word"; break; } }
Возможно, вы имели в виду: apple
Сравнение с разной длиной кода
Пример php
$word1 = metaphone('psychological', 5); $word2 = metaphone('psychology', 5); echo "$word1 == $word2: "; var_dump($word1 === $word2);
SKKL == SKKL: bool(true)
Группировка слов по метафону
Пример php
$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 ) )
Аналоги в других языках программирования
Python: модуль Metaphone
from metaphone import doublemetaphone result = doublemetaphone("programming") print(result)
('PRKRMNK', '')
JavaScript: библиотека natural
const natural = require('natural'); const metaphone = natural.Metaphone.process("javascript"); console.log(metaphone);
JSFKRPT
MySQL: функция SOUNDEX
SELECT SOUNDEX('database');
D312
Отличия от PHP

Реализация Double Metaphone в Python возвращает основной и альтернативный код. JavaScript-библиотеки часто имеют дополнительные настройки. MySQL SOUNDEX менее точен, но интегрирован в СУБД.

PHP metaphone function comments

En
Metaphone Calculate the metaphone key of a string