2010-11-12 18 views
16

हैलो मैं एक विदेशी स्रोत है जो इस तरह u"ıöüç" के रूप में विशेष वर्ण शामिल हैं, जबकि मैं उन्हें अंग्रेजी जैसे "ıöüç" को सामान्य बनाने के लिए चाहते से पाठ आधारित UTF8 डेटा पुनः प्राप्त ->"iouc"। इसे हासिल करने का सबसे अच्छा तरीका क्या होगा?अजगर और चरित्र सामान्य

+0

खोजें और हो सकता है की जगह, आप हालांकि सामान्य वर्णों के लिए विशेष की एक पूरी सरणी है करना होगा। – soulseekah

उत्तर

36

मैं Unidecode module का उपयोग करना चाहिये:

>>> from unidecode import unidecode 
>>> unidecode(u'ıöüç') 
'iouc' 

नोट आप इसे कैसे एक यूनिकोड स्ट्रिंग फ़ीड और यह एक बाइट स्ट्रिंग आउटपुट। उत्पादन ASCII होने की गारंटी है।

+3

अच्छा एक +1 http://pypi.python.org/pypi/Unidecode/0.04.1 – soulseekah

0
import unicodedata 
unicodedata.normalize() 

http://docs.python.org/library/unicodedata.html

+0

मैं उलझन में हूं: मैंने प्रिंट unicodedata.normalize ('एनएफकेडी', यू "ıöüç") की कोशिश की है और आउटपुट फिर से है: ıöüç – Hellnar

+0

अन्य मान्य मान 'एनएफसी', 'एनएफकेसी', 'एनएफडी', और 'NFKD'। – soulseekah

+2

मैं निश्चित रूप से निश्चित हूं कि यह पूछताछ करने वाले की तुलना में एक अलग ऑपरेशन है। लेकिन हाँ, यह यूनिकोड सामान्यीकरण है। वह जो पूछ रहा है उसे आमतौर पर इस तरह के रूप में संदर्भित नहीं किया जाता है। – drxzcl

5

यह सब इस बात पर निर्भर करता है कि आप परिणाम को अनुवादित करने में कितना दूर जाना चाहते हैं। यदि आप सब कुछ ASCII (αβγ से abg) में कनवर्ट करना चाहते हैं तो unidecode जाने का तरीका है।

तुम सिर्फ उच्चारण चिह्न वाले अक्षरों से लहजे निकालना चाहते हैं, तो आप सामान्य रूप NFKD (यह एक सादे पत्र aU+0301 COMBINING ACUTE ACCENT द्वारा पीछा करने के लिए उच्चारण पत्र á धर्मान्तरित) का उपयोग कर अपने स्ट्रिंग सड़ते हुए और उसके बाद लहजे को त्यागकर (जो हैं की कोशिश कर सकते Unicode character classMn - "मार्क, नॉनस्पेसिंग")।

import unicodedata 

def remove_nonspacing_marks(s): 
    "Decompose the unicode string s and remove non-spacing marks." 
    return ''.join(c for c in unicodedata.normalize('NFKD', s) 
        if unicodedata.category(c) != 'Mn') 
1

सबसे आसान तरीका मैंने पाया:

unicodedata.normalize('NFKD', s).encode("ascii", "ignore")

संबंधित मुद्दे