Получение эквивалентности строки Python для работы, как соответствие SQL

python

56 просмотра

2 ответа

Я пытаюсь сопоставить две строки, Serhat Kılıçи serhat kilic. В SQL это довольно просто, как я могу сделать:

select name from main_creditperson where name = 'serhat kılıç'
union all
select name from main_creditperson where name = 'serhat kilic';

===
name
Serhat Kılıç
Serhat Kılıç

Другими словами, оба имени возвращают один и тот же результат. Как бы я сделал строковый эквивалент в Python, чтобы увидеть, что эти два имени «одинаковы» в смысле SQL. Я хочу сделать что-то вроде:

if name1 == name2:
   do_something()

Я пытался идти по unicodedata.normalize('NFKD', input_str)пути, но это никуда меня не привело. Как бы я решил это?

Автор: David542 Источник Размещён: 08.11.2019 10:54

Ответы (2)


1 плюс

Решение

Если у вас все в порядке с ASCII, вы можете проверить, где находится «лучшая ASCII для Python для этого Unicode» в Python? Unidecodeэто довольно хорошо, однако это GPL-лицензия, что может быть проблемой для какого-то проекта. В любом случае, это будет работать в вашем случае и во многих других, и работает на Python 2 и 3 (они взяты из Python 3, чтобы было легче увидеть, что происходит):

>>> from unidecode import unidecode
>>> unidecode('serhat kılıç')
'serhat kilic'
>>> unidecode('serhat kilic')
'serhat kilic'
>>> # as a bonus it does much more, like
>>> unidecode('北亰')
'Bei Jing '
Автор: Antti Haapala Размещён: 20.08.2016 05:44

0 плюса

я нашел это

def compare_words (str_1, str_2):
    return unidecode(str_1.decode('utf-8')) == str_2

Протестировано на Python 2.7:

In[2]: from unidecode import unidecode
In[3]: def compare_words (str_1, str_2):
     return unidecode(str_1.decode('utf-8')) == str_2
 In[4]: print compare_words('serhat kılıç', 'serhat kilic')
 True
Автор: Madelyne Velasco Mite Размещён: 20.08.2016 05:16
Вопросы из категории :
32x32