Проблема при использовании NSPredicate - PullRequest
0 голосов
/ 24 января 2011

Запрос Sql:

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

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

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

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

ABCDEFGHIJKLMNOPQRESTUVWXYZ1234567890

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

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

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

' the '' an '' a '

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

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

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

  3. 'Domino's Pizza' будет рассматриваться как тот же получатель, что и 'Dominos Pizza'

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

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

Спасибо

Ответы [ 2 ]

1 голос
/ 24 января 2011

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

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

  • Уберите слова "a", "an" и "the"
  • Удалить пунктуацию
1 голос
/ 24 января 2011

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

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

...