Проверьте, насколько String звучит как другой в Java

Возможно, вы можете использовать метод «fetchAll» PDO, который возвращает массив, содержащий все результаты SELECT. Затем используйте метод count для подсчета строк массива.

Пример:

$rows = $stmt->fetchAll();
$num_rows = count($rows);
13
задан Lrrr 9 February 2015 в 10:36
поделиться

9 ответов

Как правило, существует алгоритм levenshtein , который просто выводит, сколько операций вставки / обновления / удаления вам необходимо выполнить (по символам ), чтобы преобразовать одну строку в другую.Класс Apache StringUtils имеет реализацию.

6
ответ дан 1 December 2019 в 19:30
поделиться

Я вижу двух основных кандидатов:

  • Кодировка Soundex , реализованная Apache Commons . Однако обратите внимание, что это в основном предназначено для одиночных, относительно коротких слов. В третьем примере ничего подобного не будет. Кроме того, это действительно работает только для английских слов.
  • Расстояние Левенштейна (снова реализовано в Apache Commons ). Это не зависит от языка, но сходство для переключаемых частей, как в вашем третьем примере, будет относительно низким (примерно 40%). Такие модификации, как расстояние Дамерау – Левенштейна , могут дать лучшие результаты.
14
ответ дан 1 December 2019 в 19:30
поделиться

Это называется SoundEx, поищите java soundex для нескольких реализаций.

одна из них - apache soundex, которая выглядит хорошо (хотя я сам ее не использовал).

2
ответ дан 1 December 2019 в 19:30
поделиться

Вы должны использовать "мягкую" метрику строк:

Есть много других, см. обзор в Метрика строк для обзора.

Лучший алгоритм сильно зависит от проблемной области. Например, SoundEx ухудшается для восточноевропейских имен, а расстояние Хэмминга не очень помогает, если вы хотите сравнить сходство слов "реального мира".

7
ответ дан 1 December 2019 в 19:30
поделиться

Похоже на SoundEx, реализация доступна в Apache Commons.

2
ответ дан 1 December 2019 в 19:30
поделиться

Вы можете использовать: Class Soundex

2
ответ дан 1 December 2019 в 19:30
поделиться

Вы можете попробовать SoundEx алгоритм.

2
ответ дан 1 December 2019 в 19:30
поделиться

попробуйте SimMetrics - библиотека с открытым исходным кодом, включая SoundEx и ChapmanMatchingSoundex, которые дали бы гораздо лучший результат для приведенных примеров. то есть Will Shake vs Shake, Будет ли этот подход использовать подход сопоставления поверх SoundEx. Еще одна метрика, которую вы, возможно, захотите попробовать, которая, хотя и не фонетически очень хорошо оценивает (если не лучше в разных задачах сопоставления имен), - это метрика q-Grams в той же библиотеке.

0
ответ дан 1 December 2019 в 19:30
поделиться

Сопоставление строк очень специфично, потому что в большинстве случаев вы будете иметь одинаковые характеристики шума в ваших строках, которые нужно сопоставить, будь то лишняя пунктуация, опечатки или орфографические ошибки. Вам нужно будет найти алгоритм, подходящий для решения проблем в ваших исходных данных, если вы будете заниматься этим в широком масштабе.

Soundex даст вам определенную степень уверенности в том, что две строки звучат одинаково, но, возможно, вам придется сначала провести некоторую предварительную очистку (например, удалить пунктуацию и разделить строку на отдельные слова).

Лучшее, что вы можете сделать - это провести тест. Существует огромное количество различных алгоритмов, которые вы можете использовать, левенштейн - отличный алгоритм, как и саундекс (хотя ваш пробег зависит от вашей проблемной области). Существуют также вариации этих двух алгоритмов, BTW.

Я предлагаю взглянуть на библиотеки simmetrics и second string, в которых есть множество реализаций сопоставления строк (из этих двух я предпочитаю библиотеку second string).

Похоже, вам предстоит решить интересную проблему, удачи!

0
ответ дан 1 December 2019 в 19:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: