मुझे यह उत्तर वेब पर मिला:
import unicodedata
def remove_accents(input_str):
nfkd_form = unicodedata.normalize('NFKD', input_str)
only_ascii = nfkd_form.encode('ASCII', 'ignore')
return only_ascii
यह ठीक काम करता है (उदाहरण के लिए फ्रेंच के लिए), लेकिन मुझे लगता है कि दूसरे चरण (उच्चारण को हटाना) को गैर-एएससीआईआई पात्रों को छोड़ने से बेहतर तरीके से नियंत्रित किया जा सकता है, क्योंकि यह कुछ भाषाओं (उदाहरण के लिए ग्रीक) के लिए विफल हो जाएगा। सबसे अच्छा समाधान संभवतः यूनिकोड वर्णों को स्पष्ट रूप से हटाने के लिए होगा जिन्हें डायट्रीटिक के रूप में चिह्नित किया जाता है।
संपादित करें : यह चाल है:
import unicodedata
def remove_accents(input_str):
nfkd_form = unicodedata.normalize('NFKD', input_str)
return u"".join([c for c in nfkd_form if not unicodedata.combining(c)])
unicodedata.combining(c)यह सच है कि अगर चरित्र cको पूर्ववर्ती चरित्र के साथ जोड़ा जा सकता है, तो यह मुख्य रूप से यदि यह एक बाल चिकित्सा है।
संपादित करें 2 : remove_accentsएक यूनिकोड स्ट्रिंग की अपेक्षा करता है , न कि एक बाइट स्ट्रिंग की। यदि आपके पास एक बाइट स्ट्रिंग है, तो आपको इसे यूनिकोड स्ट्रिंग में इस तरह से डीकोड करना होगा:
encoding = "utf-8" # or iso-8859-15, or cp1252, or whatever encoding you use
byte_string = b"café" # or simply "café" before python 3.
unicode_string = byte_string.decode(encoding)