मैं पायथन में वर्णानुक्रम में यूनिकोड के तार कैसे छाँटता हूँ?


98

डिफ़ॉल्ट रूप से बाइट मान द्वारा पायथन प्रकार, जिसका अर्थ है कि z और अन्य समान रूप से मजेदार चीजों के बाद आता है। पायथन में वर्णानुक्रम में छाँटने का सबसे अच्छा तरीका क्या है?

क्या इसके लिए कोई पुस्तकालय है? मुझे कुछ नहीं मिला। अधिमानतः छँटाई में भाषा का समर्थन होना चाहिए ताकि यह समझ सके कि स्वीडिश में z के बाद åäö को सॉर्ट किया जाना चाहिए, लेकिन यह है कि ü को यू द्वारा क्रमबद्ध किया जाना चाहिए, आदि यूनिकोड समर्थन की आवश्यकता बहुत अधिक है।

यदि इसके लिए कोई पुस्तकालय नहीं है, तो ऐसा करने का सबसे अच्छा तरीका क्या है? बस पत्र से एक पूर्णांक मान तक मानचित्रण करें और स्ट्रिंग को पूर्णांक सूची में मैप करें?


11
ध्यान दें कि यह और भी अधिक स्थानीय निर्भर है: स्वीडिश में (जैसा कि आप कहते हैं) "comes" "Z" के बाद आता है, लेकिन जर्मन में, "German" को आमतौर पर "AE" के रूप में क्रमबद्ध किया जाता है।
बाल्फा

@Georg: वहाँ एक कारण आप इस पर एक इनाम खोला था? locale.strcollजब आप यूनिकोड को उपयोगकर्ता के लोकेल का उपयोग करते हुए छांटना चाहते हैं, तो इसका उत्तर सही है, और आईसीयू उत्तर देता है कि आपको क्या चाहिए जब आपको इससे अधिक की आवश्यकता हो (एक से अधिक लोकेल का उपयोग करके टकराव)। अधिकांश समय, आप चाहते हैं locale.strcoll
ग्लेन मेयार्ड

@ ग्लेन: मैं जानना चाहता था कि कितना अच्छा locale.strcollकाम करता है और खासकर आईसीयू पायथन फंक्शन से बेहतर क्या करता है। मूल रूप से प्रश्न के लिए कुछ और ध्यान।
जॉर्ज शॉर्ली

1
@Georg: मैं यूनिकोड कोलाज एल्गोरिथ्म के साथ हाल ही में बहुत खेल रहा हूं, जैसा कि आप मेरे जवाब से देख सकते हैं। यह वास्तव में उत्कृष्ट है, उदाहरण के लिए, --locale=de__phonebookजब आपको इसकी आवश्यकता होती है, तब इसे छांटना उत्कृष्ट है। पर्ल मॉड्यूल यूसीए टेस्ट सूट से गुजरता है, और मैंने जो स्क्रिप्ट प्रदान की है, वह पूरे यूसीए प्लस के साथ-साथ इसके सभी विकल्पों के साथ खेलना आसान बनाती है , बस कमांड लाइन से। इस सवाल का जवाब नहीं है , लेकिन यह अभी भी बहुत दिलचस्प होना चाहिए। यदि आप स्विट्जरलैंड में हैं, तो मुझे यकीन है कि आप लचीलेपन का उपयोग कर सकते हैं। :)
tchrist

जवाबों:


75

IBM का ICU पुस्तकालय ऐसा करता है (और भी बहुत कुछ)। इसके पास पायथन बाइंडिंग हैं: PyICU

अद्यतन : ICU के बीच छँटाई में मुख्य अंतर और locale.strcollयह है कि ICU पूर्ण यूनिकोड Collation Algorithm का strcollउपयोग करता है जबकि ISO 14141 का उपयोग करता है

उन दो एल्गोरिदम के बीच अंतर को संक्षेप में यहां बताया गया है: http://unicode.org/faq/collation.html#13 । ये बल्कि विदेशी विशेष मामले हैं, जो व्यवहार में शायद ही कभी मायने रखें।

>>> import icu # pip install PyICU
>>> sorted(['a','b','c','ä'])
['a', 'b', 'c', 'ä']
>>> collator = icu.Collator.createInstance(icu.Locale('de_DE.UTF-8'))
>>> sorted(['a','b','c','ä'], key=collator.getSortKey)
['a', 'ä', 'b', 'c']

क्या यह पायथन 2 और पायथन 3 के लिए समान है? मैं locale.strxfrmu0b34a0f6ae द्वारा उत्तर से उपयोग किया गया था और यह काम करने लगता है और बहुत अधिक सुरुचिपूर्ण है और इसके अतिरिक्त सॉफ़्टवेयर की आवश्यकता नहीं है।
सुप

मेरे लिए Python3 के साथ काम नहीं करता है, sudo pip3 install PyICUस्थापित करने में विफल रहता है और इसलिए Python2 के लिए करता है।
imrek

मुझे पीआईसीआईसीयू से पिप को संकलित करने और स्थापित करने के लिए libicu-devel.x86_64 स्थापित करना पड़ा। यह काम करता है, हालांकि अंतिम 'सॉर्ट किए गए' कमांड से आउटपुट है: ['a', '\ xc3 \ xa4', 'b', 'c']
माइक स्टोडार्ड

53

मैं इस जवाब में नहीं देख रहा हूँ। अजगर के मानक पुस्तकालय का उपयोग करते हुए स्थान के अनुसार मेरा आवेदन। यह बहुत आसान है।

# python2.5 code below
# corpus is our unicode() strings collection as a list
corpus = [u"Art", u"Älg", u"Ved", u"Wasa"]

import locale
# this reads the environment and inits the right locale
locale.setlocale(locale.LC_ALL, "")
# alternatively, (but it's bad to hardcode)
# locale.setlocale(locale.LC_ALL, "sv_SE.UTF-8")

corpus.sort(cmp=locale.strcoll)

# in python2.x, locale.strxfrm is broken and does not work for unicode strings
# in python3.x however:
# corpus.sort(key=locale.strxfrm)

लेनार्ट और अन्य उत्तरदाताओं के लिए प्रश्न: क्या कोई 'लोकेल' नहीं जानता है या यह इस कार्य के लिए नहीं है?


वैसे 1) मुझे नहीं लगता कि locale.strxfrm UTF-8 एनकोडेड `str 'के लिए टूट गया है; मैंने आवेदन द्वारा बेंचमार्क किया और निष्कर्ष निकाला कि यूनिकोड ऑब्जेक्ट्स पर cmp = strcoll का उपयोग करना UTF-8 को डिकोड करने और कुंजी = strxfrm
u0b34a0f6ae

6
वैसे 2) लोकेल मॉड्यूल केवल आपके उत्पन्न किए गए स्थानों (लिनक्स बॉक्स के लिए) के साथ काम करेगा, किसी भी मनमाने स्थान पर नहीं। "लोकेल-ए" आपको बताएगा कि
u0b34a0f6ae

6
@Georg: मेरा मानना ​​है कि लोकेल केवल एक साधारण विकल्प का समर्थन करता है-> collating_element मैपिंग। यह विस्तारक ("एई" के रूप में छांटे गए), फ्रांसीसी उच्चारण छँटाई (बाएं-से-दाएँ सॉर्ट किए गए अक्षर, लेकिन दाएँ-से-बाएँ उच्चारण करता है), पुनर्व्यवस्था और शायद कुछ और चीज़ों को नहीं संभालता है। यहाँ विवरण (पूर्ण यूसीए सुविधा सेट): unicode.org/reports/tr10 और यहाँ (स्थानिक टकराव
Rafał Dowgird

2
स्पष्ट रूप से इस सवाल का जवाब करने के लिए: हाँ, यह है कार्य करने के लिए। जाहिरा तौर पर कुछ विशेष मामले हैं जिन्हें पूरा यूनिकोड Collation Algorithm बेहतर तरीके से हैंडल करता है, लेकिन जब तक आप पहले से ही नहीं जानते कि संभावना है कि आप नोटिस नहीं करेंगे।
लेन्नर्ट रेग्रोब

1
यहां सबसे बड़ी समस्या यह है: आपको पूरे आवेदन के लिए विश्व स्तर पर सेट करना होगा। - आपके पास हाथ में तुलना के लिए बस नहीं है।
रॉबर्ट सिएमर 5'15 '10:54

9

जेम्स टाउबर के पायथन यूनिकोड कोलेशन एल्गोरिथ्म का प्रयास करें । यह बिल्कुल वैसा नहीं कर सकता जैसा आप चाहते हैं, लेकिन यह देखने लायक है। मुद्दों के बारे में थोड़ी और जानकारी के लिए, क्रिस्टोफर लेनज़ की इस पोस्ट को देखें ।


यह कम से कम जेनेरिक मुद्दे को ठीक करता है। मुझे लगता है कि कोलाज सूची के भाषा संवेदनशील संस्करण भी बनाए जा सकते हैं।
लेणर्ट रेगेब्र जूल 8'09

यह आपको लोकेल निर्दिष्ट नहीं करता है, और संदर्भ कॉन्फ़िगरेशन फ़ाइल एक ValueError का कारण बनती है।
thebjorn

8

तुम भी pyuca में रुचि हो सकती है :

http://jtauber.com/blog/2006/01/27/python_unicode_collation_algorithm/

हालांकि यह निश्चित रूप से सबसे सटीक तरीका नहीं है, यह कम से कम इसे कुछ हद तक सही करने का एक बहुत ही सरल तरीका है। यह वेबलेप में लोकेल को भी धड़कता है क्योंकि लोकेल थ्रेडसेफ़ नहीं है और भाषा सेटिंग को विस्तृत करता है। यह PyICU की तुलना में स्थापित करना भी आसान है जो बाहरी C लाइब्रेरी पर निर्भर करता है।

मैंने स्क्रिप्ट को गितुब में अपलोड किया क्योंकि इस लेखन के समय मूल नीचे था और मुझे पाने के लिए वेब कैश का सहारा लेना पड़ा:

https://github.com/href/Python-Unicode-Collation-Algorithm

मैंने इस लिपि का सफलतापूर्वक उपयोग एक प्रतिरूप मॉड्यूल में जर्मन / फ्रेंच / इतालवी पाठ को क्रमबद्ध करने के लिए किया।


पायुका के लिए +1। यह काफी तेज़ है (28 सेकंड के शब्दों को क्रमबद्ध करने के लिए 3 सेकंड), शुद्ध अजगर है, और किसी निर्भरता की आवश्यकता नहीं है।
माइकलमीयर

7

एक सारांश और विस्तारित उत्तर:

locale.strcollपायथन 2 के तहत, और locale.strxfrmवास्तव में समस्या को हल करेगा, और एक अच्छा काम करता है, यह मानते हुए कि आपके पास प्रश्न में लोकेल स्थापित है। मैंने इसे विंडोज के तहत भी परीक्षण किया, जहां स्थानीय नाम अलग-अलग हैं, लेकिन दूसरी तरफ ऐसा लगता है कि सभी स्थान डिफ़ॉल्ट रूप से इंस्टॉल किए गए हैं।

ICUजरूरी नहीं कि यह अभ्यास में बेहतर हो, लेकिन यह अधिक तरीके से करता है । सबसे विशेष रूप से इसमें स्प्लिटर्स का समर्थन है जो विभिन्न भाषाओं में ग्रंथों को शब्दों में विभाजित कर सकता है। यह उन भाषाओं के लिए बहुत उपयोगी है जिनमें शब्द विभाजक नहीं हैं। बंटवारे के लिए आधार के रूप में उपयोग करने के लिए आपको शब्दों का एक कोष होना चाहिए, क्योंकि यह शामिल नहीं है, हालांकि।

इसमें स्थानों के लिए लंबे नाम भी हैं, ताकि आप स्थानीय लोगों के लिए सुंदर प्रदर्शन नाम प्राप्त कर सकें, ग्रेगोरियन की तुलना में अन्य कैलेंडर के लिए समर्थन (हालांकि मुझे यकीन नहीं है कि पायथन इंटरफ़ेस का समर्थन करता है) और टन और अन्य कम या ज्यादा अस्पष्ट लोकल सपोर्ट के टन ।

इसलिए सभी में: यदि आप वर्णानुक्रम और स्थान-निर्भरता को क्रमबद्ध करना चाहते हैं, तो आप localeमॉड्यूल का उपयोग कर सकते हैं , जब तक कि आपके पास विशेष आवश्यकताएं न हों, या शब्द फाड़नेवाला की तरह अधिक स्थानीय निर्भर कार्यक्षमता की भी आवश्यकता हो।


6

मुझे लगता है कि जवाब पहले ही एक उत्कृष्ट काम कर चुके हैं, बस मानव क्रमबद्धता में एक कोडिंग अक्षमता को इंगित करना चाहते थे । यूनिकोड स्ट्रिंग s में चयनात्मक चार-चार अनुवाद लागू करने के लिए, यह कोड का उपयोग करता है:

spec_dict = {'Å':'A', 'Ä':'A'}

def spec_order(s):
    return ''.join([spec_dict.get(ch, ch) for ch in s])

पायथन के पास इस सहायक कार्य को करने के लिए एक बहुत बेहतर, तेज़ और अधिक संक्षिप्त तरीका है (यूनिकोड स्ट्रिंग्स पर - बाइट स्ट्रिंग्स के लिए अनुरूप पद्धति में एक अलग और कुछ हद तक कम उपयोगी विनिर्देश है! -):

spec_dict = dict((ord(k), spec_dict[k]) for k in spec_dict)

def spec_order(s):
    return s.translate(spec_dict)

translateविधि में आप जो पास करते हैं उसमें यूनिकोड ऑर्डिनल्स (स्ट्रिंग्स नहीं) कुंजी के रूप में होते हैं, यही वजह है कि हमें मूल चार-से-चार से उस पुनर्निर्माण कदम की आवश्यकता होती है spec_dict। (आप जो अनुवाद करना चाहते हैं, उसमें दिए गए निर्देशों के अनुसार [कुंजी के विपरीत, जो कि अध्यादेश होना चाहिए] यूनिकोड ऑर्डिनल्स, मनमाने ढंग से यूनिकोड स्ट्रिंग्स, या अनुवाद के हिस्से के रूप में संबंधित वर्ण को हटाने के लिए कोई भी नहीं हो सकता है, इसलिए यह निर्दिष्ट करना आसान है "अनदेखा करें" छँटाई प्रयोजनों के लिए कुछ चरित्र "," छँटाई प्रयोजनों के लिए मानचित्र के लिए ä ", और इस तरह)।

पायथन 3 में, आप "पुनर्निर्माण" कदम को अधिक सरलता से प्राप्त कर सकते हैं, जैसे:

spec_dict = ''.maketrans(spec_dict)

अन्य तरीकों के लिए डॉक्स देखें आप maketransपायथन 3 में इस स्थिर विधि का उपयोग कर सकते हैं ।


यह विधि अच्छी है लेकिन आपको az और b
Barney

1

इसे लागू करने के लिए आपको "यूनिकोड कोलाज एल्गोरिथ्म" के बारे में पढ़ना होगा। http://en.wikipedia.org/wiki/Unicode_collation_algorithm देखें

http://www.unicode.org/unicode/reports/tr10/

एक नमूना कार्यान्वयन यहाँ है

http://jtauber.com/blog/2006/01/27/python_unicode_collation_algorithm/


1

हाल ही में मैं इस कार्य के लिए zope.ucol ( https://pypi.python.org/pypi/zope.ucol ) का उपयोग कर रहा हूं । उदाहरण के लिए, जर्मन को छांटना the:

>>> import zope.ucol
>>> collator = zope.ucol.Collator("de-de")
>>> mylist = [u"a", u'x', u'\u00DF']
>>> print mylist
[u'a', u'x', u'\xdf']
>>> print sorted(mylist, key=collator.key)
[u'a', u'\xdf', u'x']

zope.ucol ICU को भी लपेटता है, इसलिए PyICU का विकल्प होगा।


1

एक पूर्ण यूसीए समाधान

इसे करने के लिए सबसे आसान, सबसे आसान और सबसे सरल तरीका यह है कि पर्ल लाइब्रेरी मॉड्यूल, यूनिकोड :: Collate :: Locale , जो मानक यूनिकोड का एक उपवर्ग :: Collate मॉड्यूल है, को कॉलआउट करें । आपको बस इतना करना होगा कि कंस्ट्रक्टर "xv"को स्वीडन के लिए लोकल मान दिया जाए ।

(स्वीडिश टेक्स्ट के लिए आप इसे शायद ही कभी सराहना नहीं कर सकते, लेकिन क्योंकि पर्ल अमूर्त वर्णों का उपयोग करता है, आप कृपया किसी भी यूनिकोड कोड बिंदु का उपयोग कर सकते हैं - कोई फर्क नहीं पड़ता कि मंच या निर्माण! कुछ भाषाएँ ऐसी सुविधा प्रदान करती हैं। मैं इसका उल्लेख करता हूं क्योंकि मैंने लड़ाई की है। हाल ही में इस भयावह समस्या पर जावा के साथ लड़ाई हारना।)

समस्या यह है कि मुझे पता नहीं है कि पायथन मॉड्यूल से पायल मॉड्यूल का उपयोग कैसे किया जाता है - इसके अलावा, शेल कॉलआउट या दो-तरफा पाइप का उपयोग करने से। इस कारण से , मैंने आपको ucsort नामक एक पूरी तरह से काम करने वाली स्क्रिप्ट प्रदान की है, जिसे आप एकदम सहजता से करने के लिए कह सकते हैं।

यह स्क्रिप्ट 100% पूर्ण यूनिकोड Collation Algorithm के अनुरूप है , जिसमें सभी सिलाई विकल्प समर्थित हैं !! और अगर आपके पास एक वैकल्पिक मॉड्यूल स्थापित है या पर्ल 5.13 या उससे बेहतर चला रहा है, तो आपके पास सीएलडीआर स्थानों का उपयोग करने में आसान है। निचे देखो।

प्रदर्शन

इस तरह से ऑर्डर किए गए इनपुट सेट की कल्पना करें:

b o i j n l m å y e v s k h d f g t ö r x p z a ä c u q

कोड बिंदु पैदावार द्वारा एक डिफ़ॉल्ट प्रकार:

a b c d e f g h i j k l m n o p q r s t u v x y z ä å ö

जो हर किसी की किताब से गलत है। मेरी स्क्रिप्ट का उपयोग करते हुए, जो यूनिकोड Collation Algorithm का उपयोग करता है, आपको यह आदेश मिलता है:

% perl ucsort /tmp/swedish_alphabet | fmt
a å ä b c d e f g h i j k l m n o ö p q r s t u v x y z

यह डिफ़ॉल्ट UCA सॉर्ट है। स्वीडिश लोकेल प्राप्त करने के लिए, इस तरह से ucsort को कॉल करें :

% perl ucsort --locale=sv /tmp/swedish_alphabet | fmt
a b c d e f g h i j k l m n o p q r s t u v x y z å ä ö

यहाँ एक बेहतर इनपुट डेमो है। सबसे पहले, इनपुट सेट:

% fmt /tmp/swedish_set
cTD cDD Cöd Cbd cAD cCD cYD Cud cZD Cod cBD Cnd cQD cFD Ced Cfd cOD
cLD cXD Cid Cpd cID Cgd cVD cMD cÅD cGD Cqd Cäd cJD Cdd Ckd cÖD cÄD
Ctd Czd Cxd cHD cND cKD Cvd Chd Cyd cUD Cld Cmd cED Crd Cad Cåd Ccd
cRD cSD Csd Cjd cPD

कोड बिंदु से, इस तरह से:

Cad Cbd Ccd Cdd Ced Cfd Cgd Chd Cid Cjd Ckd Cld Cmd Cnd Cod Cpd Cqd
Crd Csd Ctd Cud Cvd Cxd Cyd Czd Cäd Cåd Cöd cAD cBD cCD cDD cED cFD
cGD cHD cID cJD cKD cLD cMD cND cOD cPD cQD cRD cSD cTD cUD cVD cXD
cYD cZD cÄD cÅD cÖD

लेकिन डिफ़ॉल्ट UCA का उपयोग करने से यह इस प्रकार बनता है:

% ucsort /tmp/swedish_set | fmt
cAD Cad cÅD Cåd cÄD Cäd cBD Cbd cCD Ccd cDD Cdd cED Ced cFD Cfd cGD
Cgd cHD Chd cID Cid cJD Cjd cKD Ckd cLD Cld cMD Cmd cND Cnd cOD Cod
cÖD Cöd cPD Cpd cQD Cqd cRD Crd cSD Csd cTD Ctd cUD Cud cVD Cvd cXD
Cxd cYD Cyd cZD Czd

लेकिन स्वीडिश लोकेल में, इस तरह:

% ucsort --locale=sv /tmp/swedish_set | fmt
cAD Cad cBD Cbd cCD Ccd cDD Cdd cED Ced cFD Cfd cGD Cgd cHD Chd cID
Cid cJD Cjd cKD Ckd cLD Cld cMD Cmd cND Cnd cOD Cod cPD Cpd cQD Cqd
cRD Crd cSD Csd cTD Ctd cUD Cud cVD Cvd cXD Cxd cYD Cyd cZD Czd cÅD
Cåd cÄD Cäd cÖD Cöd

यदि आप लोअरकेस से पहले सॉर्ट करने के लिए अपरकेस पसंद करते हैं, तो यह करें:

% ucsort --upper-before-lower --locale=sv /tmp/swedish_set | fmt
Cad cAD Cbd cBD Ccd cCD Cdd cDD Ced cED Cfd cFD Cgd cGD Chd cHD Cid
cID Cjd cJD Ckd cKD Cld cLD Cmd cMD Cnd cND Cod cOD Cpd cPD Cqd cQD
Crd cRD Csd cSD Ctd cTD Cud cUD Cvd cVD Cxd cXD Cyd cYD Czd cZD Cåd
cÅD Cäd cÄD Cöd cÖD

अनुकूलित सॉर्ट

आप ucsort के साथ कई अन्य चीजें कर सकते हैं । उदाहरण के लिए, अंग्रेजी में शीर्षकों को कैसे छाँटा जाए:

% ucsort --preprocess='s/^(an?|the)\s+//i' /tmp/titles
Anathem
The Book of Skulls
A Civil Campaign
The Claw of the Conciliator
The Demolished Man
Dune
An Early Dawn
The Faded Sun: Kesrith
The Fall of Hyperion
A Feast for Crows
Flowers for Algernon
The Forbidden Tower
Foundation and Empire
Foundations Edge
The Goblin Reservation
The High Crusade
Jack of Shadows
The Man in the High Castle
The Ringworld Engineers
The Robots of Dawn
A Storm of Swords
Stranger in a Strange Land
There Will Be Time
The White Dragon

स्क्रिप्ट को सामान्य रूप से चलाने के लिए आपको पर्ल 5.10.1 या बेहतर की आवश्यकता होगी। स्थानीय समर्थन के लिए, आपको या तो वैकल्पिक CPAN मॉड्यूल स्थापित करना होगा Unicode::Collate::Locale। वैकल्पिक रूप से, आप पर्ल के विकास संस्करणों को स्थापित कर सकते हैं, 5.13+, जिसमें मानक रूप से वह मॉड्यूल शामिल है।

कॉलिंग कन्वेंशन

यह एक तेजी से प्रोटोटाइप है, इसलिए ucsort ज्यादातर संयुक्त राष्ट्र (der) प्रलेखित है। लेकिन यह इसका SYNOPSIS है कि कमांड लाइन पर इसे कौन से स्विच / विकल्प स्वीकार करते हैं:

    # standard options
    --help|?
    --man|m
    --debug|d

    # collator constructor options
    --backwards-levels=i
    --collation-level|level|l=i
    --katakana-before-hiragana
    --normalization|n=s
    --override-CJK=s
    --override-Hangul=s
    --preprocess|P=s
    --upper-before-lower|u
    --variable=s

    # program specific options
    --case-insensitive|insensitive|i
    --input-encoding|e=s
    --locale|L=s
    --paragraph|p
    --reverse-fields|last
    --reverse-output|r
    --right-to-left|reverse-input

हाँ, ठीक है: यह वास्तव में तर्क सूची है जिसका उपयोग मैं कॉल के लिए करता हूं Getopt::Long, लेकिन आपको यह विचार मिलता है। :)

यदि आप यह पता लगा सकते हैं कि पर्ल स्क्रिप्ट से सीधे पर्ल लाइब्रेरी को कैसे कॉल किया जाए, तो एक पर्ल स्क्रिप्ट को कॉल किए बिना, हर तरह से। मैं अभी खुद को नहीं जानता। मुझे सीखना अच्छा लगेगा कि कैसे।

इस बीच, मुझे विश्वास है कि यह स्क्रिप्ट वही करेगी जो आपको अपने सभी विशेष रूप से करने की ज़रूरत है - और अधिक! अब मैं इसका उपयोग सभी पाठ छँटाई के लिए करता हूँ। यह अंत में वही करता है, जिसकी मुझे लंबे, लंबे समय से जरूरत है।

केवल नकारात्मक पक्ष यह है कि --localeतर्क ट्यूबों के नीचे जाने के लिए प्रदर्शन का कारण बनता है, हालांकि यह नियमित, गैर-स्थानीय लेकिन फिर भी 100% यूसीए के अनुरूप छँटाई के लिए काफी तेज़ है । चूंकि यह सब कुछ मेमोरी में लोड करता है, आप शायद इसे गीगाबाइट दस्तावेजों पर उपयोग नहीं करना चाहते हैं। मैं इसे दिन में कई बार उपयोग करता हूं, और यह सुनिश्चित करता है कि यह बहुत बढ़िया है, जो पिछले में छँटाई गई है।


2
पृथ्वी पर आप कुछ करने के लिए पर्ल लिपि को क्यों कहेंगे, जिसके लिए अजगर पुस्तकालय हैं?
लेनार्ट रीबोरो

2
क्योंकि मुझे नहीं पता था कि पाइथन लाइब्रेरी थी, इसीलिए!
12

@ लेन्आर्ट: मैं वास्तव में देशी पुस्तकालयों को पसंद करता हूं, या ज्यादातर एक सी एपीआई से जुड़ा हुआ है और गतिशील रूप से लोड किया गया है (जिसकी आपको कभी-कभी आवश्यकता होती है)। मुझे विभिन्न PyPerl और इनलाइन :: Perl के समाधान बहुत ठोस या मजबूत या लचीले नहीं मिले। या कुछ और। वे सिर्फ कुछ कारणों से सही महसूस नहीं करते हैं। मैंने आखिरी बार यह कोशिश की थी जब मुझे अच्छे चारसेट डिटेक्शन की जरूरत थी (जो मुझे कभी नहीं मिला, अफसोस)।
21

4
पायथन के अंदर पर्ल का उपयोग करना सिर्फ लत है।
उत्कु जिहिनोग्लू

1
वाह। हां - मुझे पर्ल की तरह लगता है, वास्तव में हम देखते हैं कि चीजों को करने के लिए अब दो से अधिक तरीके हैं :) लेकिन पायथन से सी कॉलिंग आम तौर पर जोड़ा निर्भरता के प्रकार और व्यावहारिक समर्थन मुद्दों का अर्थ नहीं है जो पर्ल को बुला रहे हैं, इसलिए इसकी इस तरह से करने के लिए बहुत अधिक कॉल देखने के लिए उत्सुकता से।
nealmcb

0

यह आपके उपयोग के मामले के लिए एक पूर्ण समाधान से दूर है, लेकिन आप पर एक नज़र ले सकता है unaccent.py effbot.org से स्क्रिप्ट। यह मूल रूप से क्या करता है एक पाठ से सभी लहजे को हटा दें। आप वर्णमाला के अनुसार छांटने के लिए उस 'पवित्र' पाठ का उपयोग कर सकते हैं। (बेहतर विवरण के लिए यह पृष्ठ देखें ।)


0

जेफ एटवुड ने नेचुरल सॉर्ट ऑर्डर पर एक अच्छी पोस्ट लिखी , इसमें उन्होंने एक स्क्रिप्ट से जोड़ा, जो आप पूछते हैं

यह किसी भी तरह से एक तुच्छ स्क्रिप्ट नहीं है, लेकिन यह चाल है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.