Возможно, вы можете использовать метод «fetchAll» PDO, который возвращает массив, содержащий все результаты SELECT. Затем используйте метод count для подсчета строк массива.
Пример:
$rows = $stmt->fetchAll();
$num_rows = count($rows);
Как правило, существует алгоритм levenshtein , который просто выводит, сколько операций вставки / обновления / удаления вам необходимо выполнить (по символам ), чтобы преобразовать одну строку в другую.Класс Apache StringUtils имеет реализацию.
Я вижу двух основных кандидатов:
Это называется SoundEx, поищите java soundex для нескольких реализаций.
одна из них - apache soundex, которая выглядит хорошо (хотя я сам ее не использовал).
Вы должны использовать "мягкую" метрику строк:
Есть много других, см. обзор в Метрика строк для обзора.
Лучший алгоритм сильно зависит от проблемной области. Например, SoundEx ухудшается для восточноевропейских имен, а расстояние Хэмминга не очень помогает, если вы хотите сравнить сходство слов "реального мира".
Похоже на SoundEx, реализация доступна в Apache Commons.
попробуйте SimMetrics - библиотека с открытым исходным кодом, включая SoundEx и ChapmanMatchingSoundex, которые дали бы гораздо лучший результат для приведенных примеров. то есть Will Shake vs Shake, Будет ли этот подход использовать подход сопоставления поверх SoundEx. Еще одна метрика, которую вы, возможно, захотите попробовать, которая, хотя и не фонетически очень хорошо оценивает (если не лучше в разных задачах сопоставления имен), - это метрика q-Grams в той же библиотеке.
Сопоставление строк очень специфично, потому что в большинстве случаев вы будете иметь одинаковые характеристики шума в ваших строках, которые нужно сопоставить, будь то лишняя пунктуация, опечатки или орфографические ошибки. Вам нужно будет найти алгоритм, подходящий для решения проблем в ваших исходных данных, если вы будете заниматься этим в широком масштабе.
Soundex даст вам определенную степень уверенности в том, что две строки звучат одинаково, но, возможно, вам придется сначала провести некоторую предварительную очистку (например, удалить пунктуацию и разделить строку на отдельные слова).
Лучшее, что вы можете сделать - это провести тест. Существует огромное количество различных алгоритмов, которые вы можете использовать, левенштейн - отличный алгоритм, как и саундекс (хотя ваш пробег зависит от вашей проблемной области). Существуют также вариации этих двух алгоритмов, BTW.
Я предлагаю взглянуть на библиотеки simmetrics и second string, в которых есть множество реализаций сопоставления строк (из этих двух я предпочитаю библиотеку second string).
Похоже, вам предстоит решить интересную проблему, удачи!