Я пишу помощника, который выполняет ряд преобразований для входной строки, чтобы создать удобное для поиска представление этой строки.
Подумайте о следующем сценарии:
- Полнотекстовый поиск по немецкому или французскому тексту
- Записи в вашем хранилище данных содержат
Müller
Großmann
Çingletòn
Bjørk
Æreogramme
- Поиск должен быть нечетким, в этом случае
ull
, Üll
и т. д. соответствует Müller
Gros
, groß
и т. д. соответствует Großmann
cin
и т. д. соответствует Çingletòn
bjö
, bjo
и т. Д. Совпадение Bjørk
aereo
и т. Д. Совпадение Æreogramme
До сих пор я добивался успеха в делах(1), (3) и (4).
Я не могу понять, как обращаться с (2) и (5).
До сих пор я пробовалследующие методы безрезультатны:
CFStringNormalize() // with all documented normalization forms
CFStringTransform() // using the kCFStringTransformToLatin, kCFStringTransformStripCombiningMarks, kCFStringTransformStripDiacritics
CFStringFold() // using kCFCompareNonliteral, kCFCompareWidthInsensitive, kCFCompareLocalized in a number of combinations -- aside: how on earth do I normalize simply _composing_ already decomposed strings??? as soon as I pack that in, my formerly passing tests fail, as well...
Я просмотрел Руководство пользователя ICU для преобразований , но не вошелслишком много в нем ... по тем причинам, которые я считаю очевидными.
Я знаю, что я мог бы поймать case (2), преобразовав его в прописные, а затем обратно в строчные, что сработало бы в рамках этого конкретного приложения.,Тем не менее, я заинтересован в решении этой проблемы на более фундаментальном уровне, и, надеюсь, учтю также регистрозависимые приложения.
Буду признателен за любые подсказки!