Проблема при использовании NSPredicate

SQL-запрос:

выберите * из test_mart, где заменить (заменить (заменить (заменить (заменить (заменить (нижнее (имя)), '+'), '_'), '),' '), 'a '), ' а')='тарик'

Я могу очень легко запустить следующий запрос, если мне нужно использовать просто Sqlite... но в текущем проекте я использую Core Data, поэтому мало знаком с NSPredicate.

Функционал говорит об удалении всех буквенно-цифровых символов, НО, что означает удаление спецсимволов.

Символы, которые должны быть действительными при сравнении, будут

ABCDEFGHIJKLMNOPQRESTUVWXYZ1234567890

Но мы не должны ошибаться в сравнении для следующих символов

:;,~`!@#$%^&*()_-+="'/?.>,‹|\

Или для следующих слов

'а' 'а'

Некоторые примеры:

  1. «Walmart» будет рассматриваться как тот же получатель платежа, что и «Wal-Mart».

  2. «Обувной магазин» будет рассматриваться как тот же получатель платежа, что и «Обувной магазин».

  3. «Доминос Пицца» будет рассматриваться как тот же получатель платежа, что и «Доминос Пицца».

  4. «Проверить получателя платежа»; будет рассматриваться как тот же получатель платежа, что и «Тестовый получатель платежа»

Может ли кто-нибудь предложить подходящие предикаты/регулярные выражения?

Спасибо


person Tariq    schedule 24.01.2011    source источник


Ответы (2)


У меня было бы дополнительное поле в базе данных, которое было бы обработанной версией оригинала с удаленными всеми ненужными символами. Затем используйте это для сравнения.

Возможно, вы захотите взглянуть на алгоритм soundex, который может лучше соответствовать вашим целям... Soundex

person AnthonyLambert    schedule 24.01.2011

Мне кажется, что вы хотели бы нормализовать свои данные, прежде чем они будут помещены в основное хранилище данных. Итак, если вам дали «Wal-Mart», нормализуйте его до «walmart» один раз, а затем сохраните. Тогда вам не придется много раз проводить все эти дорогостоящие сравнения на лету.

Нормализация будет довольно простой, учитывая ваши правила:

  • Удалите слова «a», «an» и «the».
  • Удалить знаки препинания
person Dave DeLong    schedule 24.01.2011