मुझे यह उत्तर वेब पर मिला:
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)