2013-01-09 14 views
6

में सभी वर्णों को कुशलता से सूचीबद्ध करें प्रायः किसी दिए गए यूनिकोड श्रेणी में सभी वर्णों को सूचीबद्ध करना चाहता है।किसी दिए गए यूनिकोड श्रेणी

यह वांछित श्रेणी के लिए सभी यूनिकोड कोड-अंक और परीक्षण से अधिक पुनरावृत्ति द्वारा इस सूची का निर्माण करने के लिए संभव है (अजगर 3)::

उदाहरण के लिए
[c for c in map(chr, range(0x110000)) if unicodedata.category(c) in ('Ll',)] 

या regexes का उपयोग,

re.findall(r'\s', ''.join(map(chr, range(0x110000)))) 

लेकिन ये विधियां धीमी हैं। क्या श्रेणी में पात्रों की सूची देखने के लिए उनमें से सभी को फिर से शुरू करने का कोई तरीका है?

पर्ल के लिए

संबंधित प्रश्न: How do I get a list of all Unicode characters that have a given property?

उत्तर

9

आप अक्सर ऐसा करने की जरूरत है, यह काफी आसान अपने आप को एक फिर से प्रयोग करने योग्य नक्शा बनाने के लिए है:

import sys 
import unicodedata 
from collections import defaultdict 

unicode_category = defaultdict(list) 
for c in map(chr, range(sys.maxunicode + 1)): 
    unicode_category[unicodedata.category(c)].append(c) 

और बाहर उपयोग पर वहाँ से कि

alphabetic = unicode_category['Ll'] 

इस स्टार्ट-यू के लिए बहुत महंगी है: किसी एक श्रेणी के लिए वर्णों की एक श्रृंखला के लिए वापस अनुवाद करने के लिए मानचित्र पी समय, उस संरचना को एक फ़ाइल में डंपिंग पर विचार करें; इस मैपिंग को किसी JSON फ़ाइल या अन्य त्वरित-से-पार्स-टू-टोकन प्रारूप से लोड करना बहुत दर्दनाक नहीं होना चाहिए।

एक बार जब आप मैपिंग कर लेंगे, तो निश्चित रूप से एक श्रेणी की तलाश करना निश्चित रूप से किया जाता है।

+4

chr() को मानचित्र में unichr() के साथ प्रतिस्थापित किया जाना चाहिए() –

+2

@ m.kocikowski: जब तक कि आप पायथन 3 का उपयोग नहीं कर रहे हैं, जो प्रश्न का ओपी स्पष्ट रूप से है (यह अन्यथा पाइथन 2 में विफल हो जाएगा)। –