एक पूर्ण यूसीए समाधान
इसे करने के लिए सबसे आसान, सबसे आसान और सबसे सरल तरीका यह है कि पर्ल लाइब्रेरी मॉड्यूल, यूनिकोड :: 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
Foundation’s 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% यूसीए के अनुरूप छँटाई के लिए काफी तेज़ है । चूंकि यह सब कुछ मेमोरी में लोड करता है, आप शायद इसे गीगाबाइट दस्तावेजों पर उपयोग नहीं करना चाहते हैं। मैं इसे दिन में कई बार उपयोग करता हूं, और यह सुनिश्चित करता है कि यह बहुत बढ़िया है, जो पिछले में छँटाई गई है।