পাইথনে আমি কীভাবে ইউনিকোড স্ট্রিংগুলি বর্ণানুক্রমিকভাবে বাছাই করতে পারি?


99

পাইথন ডিফল্টরূপে বাইট মান অনুসারে বাছাই করে যার অর্থ é z এবং অন্যান্য সমান মজাদার জিনিসগুলির পরে আসে। পাইথনে বর্ণানুক্রমিকভাবে বাছাই করার সর্বোত্তম উপায় কোনটি?

এই জন্য কোন গ্রন্থাগার আছে? আমি কিছুই খুঁজে পেলাম না। অগ্রাধিকার অনুসারে বাছাইয়ের ভাষা সমর্থন থাকা উচিত তাই এটি বুঝতে পারে যে সুইডিশ ভাষায় z এর পরে বাছাই করা উচিত, তবে তা u আপনার অনুসারে বাছাই করা উচিত etc. ইত্যাদি ইউনিকোড সমর্থনটির প্রয়োজন অনেক বেশি।

যদি এর জন্য কোনও গ্রন্থাগার না থাকে তবে এটি করার সর্বোত্তম উপায় কী? কেবলমাত্র একটি অক্ষর থেকে কোনও পূর্ণসংখ্যার মানতে একটি ম্যাপিং তৈরি করুন এবং তার সাথে একটি পূর্ণসংখ্যা তালিকায় স্ট্রিংটি মানচিত্র করুন?


11
মনে রাখবেন যে এটি আরও স্থানীয় নির্ভরশীল: সুইডিশ ভাষায় (যেমন আপনি বলেছেন) "Ä" "জেড" এর পরে আসে, তবে জার্মানিতে "Ä" সাধারণত "এই" হিসাবে বাছাই হয়।
বালফা

@ জর্গ: আপনি কি এই বিষয়ে অনুদান খোলার কোনও কারণ ছিল? locale.strcollযখন আপনি ইউনিকোড ব্যবহারকারীর লোকেল ব্যবহার বাছাই প্রয়োজন উত্তরটি সঠিক, এবং আইসিইউ উত্তর কি আপনি চান যখন আপনি যে বেশী (কোলেশন একটির বেশি লোকেল ব্যবহার করে) প্রয়োজন। বেশিরভাগ সময়, আপনি চান locale.strcoll
গ্লেন মেইনার্ড

@ গ্লেন: আমি জানতে চেয়েছিলাম কতটা ভাল locale.strcollকাজ করে এবং বিশেষত আইসিইউ পাইথন ফাংশনের চেয়ে আরও ভাল কী করে। মূলত প্রশ্নের আরও কিছু মনোযোগ
জর্জি স্কলি

4
@ জর্জি: আমি ইউনিকোড কোলিশন অ্যালগোরিদমের সাথে ইদানীং অনেকটা খেলছিলাম, আপনি আমার উত্তর থেকে দেখতে পাচ্ছেন। এটি সক্ষম হওয়া সত্যিই দুর্দান্ত, উদাহরণস্বরূপ, আপনার --locale=de__phonebookযখন প্রয়োজন হবে তখন এটি সাজানোর জন্য । পার্ল মডিউলটি ইউসিএ টেস্ট স্যুটটি পাস করে এবং আমি যে স্ক্রিপ্টটি দিয়েছি তা কমান্ড লাইন থেকে পুরো ইউসিএ প্লাসের সাথে লোকেল সহ এর সমস্ত বিকল্পগুলির সাথে খেলতে অনেক সহজ করে তোলে । উত্তর নাও হতে পারে প্রশ্ন, কিন্তু এটি এখনও অত্যন্ত আকর্ষণীয় হতে হবে। আপনি যদি সুইজারল্যান্ডে থাকেন তবে আমি নিশ্চিত যে আপনি নমনীয়তাটি ব্যবহার করতে পারেন। :)
tchrist

উত্তর:


75

আইবিএমের আইসিইউ লাইব্রেরি এটি করে (এবং আরও অনেক কিছু)। এটিতে পাইথন বাইন্ডিং রয়েছে: পাইআইসিইউ

আপডেট : আইসিইউর মধ্যে বাছাই করার মূল পার্থক্য এবং locale.strcollএটি হ'ল আইসিইউ সম্পূর্ণ ইউনিকোড কলেশন আলগোরিদিমstrcoll ব্যবহার করে যখন আইএসও 14651 ব্যবহার করে ।

এই দুটি অ্যালগরিদমের মধ্যে পার্থক্যগুলি এখানে সংক্ষেপে সংক্ষিপ্ত করা হয়েছে: 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.strxfrmউত্তরটি u0b34a0f6ae দ্বারা ব্যবহার করেছি এবং এটি কাজ করে বলে মনে হচ্ছে এবং এটি আরও মার্জিত এবং কোনও অতিরিক্ত সফ্টওয়্যার প্রয়োজন নেই।
চুমুক দিয়া পান

পাইথন 3 নিয়ে আমার জন্য কাজ করে না, sudo pip3 install PyICUইনস্টল করতে ব্যর্থ হয় এবং পাইথন 2 এর জন্যও হয়।
imrek

পাইপ থেকে সংকলন করতে এবং পাইপ থেকে ইনস্টল করতে আমাকে পাইবিকু-ডিভেল.এক্স 86__64৪ ইনস্টল করতে হয়েছিল। এটি কাজ করে, যদিও শেষ 'সাজানো' কমান্ডের আউটপুটটি হ'ল: ['a', '\ xc3 \ xa4', 'b', 'c']
মাইক স্টোডার্ড্ট

54

আমি উত্তরে এটি দেখতে পাচ্ছি না। পাইথনের স্ট্যান্ডার্ড লাইব্রেরি ব্যবহার করে আমার অ্যাপ্লিকেশন লোকেল অনুসারে বাছাই করে। এটা বেশ সহজ।

# 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) আমি লোকাল ভাবি না str আমি আবেদনের দ্বারা বেঞ্চমার্ক করেছি এবং এই সিদ্ধান্তে পৌঁছেছি যে ইউনিকোড অবজেক্টে সিএমপি = স্ট্রোকল ব্যবহার করা ইউটিএফ -8 এ সমস্ত ডিকোডিং করা এবং কী = স্ট্রাক্সফর্ম ব্যবহার করার চেয়ে সস্তা
u0b34a0f6ae

6
উপায় 2) লোকেল মডিউলটি কেবল আপনার উত্পন্ন লোকেলগুলি (একটি লিনাক্স বাক্সের জন্য) নিয়ে কাজ করবে, কোনও স্বেচ্ছাসেবক লোকেলের সাথে নয়। "
লোকালে

6
@ জর্গ: আমি বিশ্বাস করি যে লোকেল কেবল একটি সাধারণ সাবস্ট্রিং-> কোলেটিং_এলমেন্ট ম্যাপিং সমর্থন করে। এটি সম্প্রসারণ ("" এই "হিসাবে সাজানো), ফরাসী অ্যাকসেন্ট বাছাই (বাম থেকে ডানে বর্ণগুলি সাজানো, তবে ডান থেকে বামে উচ্চারণগুলি), পুনরায় সাজানো এবং সম্ভবত আরও কয়েকটি জিনিস হ্যান্ডেল করে না। বিশদ এখানে (সম্পূর্ণ ইউসিএ বৈশিষ্ট্য সেট): unicode.org/report/tr10 এবং এখানে (স্থানীয় সমাহার
রাফা ডাউজিড

4
পরিষ্কারভাবে প্রশ্নের উত্তর করার জন্য: হ্যাঁ এটা হয় কাজের পর্যন্ত। স্পষ্টতই কিছু বিশেষ কেস রয়েছে যা সম্পূর্ণ ইউনিকোড কোলেশন অ্যালগরিদম আরও ভালভাবে পরিচালনা করে তবে আপনি যদি ইতিমধ্যে না জানতেন যে সম্ভাবনাগুলি আপনি খেয়াল করবেন না।
লেনার্ট রেজেব্রো

4
এখানে সবচেয়ে বড় সমস্যা হ'ল: পুরো অ্যাপ্লিকেশনটির জন্য আপনাকে বিশ্বব্যাপী লোকেলটি সেট করতে হবে। - আপনি কেবল হাতে তুলনা করার জন্য এটি করতে পারবেন না।
রবার্ট সিমার

9

জেমস টাবারের পাইথন ইউনিকোড কলেশন অ্যালগরিদম ব্যবহার করে দেখুন । এটি আপনি যেমন চান ঠিক তেমন না করতে পারে তবে এটি দেখতে খুব ভাল worth সমস্যাগুলি সম্পর্কে আরও কিছু তথ্যের জন্য ক্রিস্টোফার লেনজের এই পোস্টটি দেখুন ।


এটি অন্তত জেনেরিক সমস্যার সমাধান করে। আমার ধারণা অনুমানের তালিকার ভাষা সংবেদনশীল সংস্করণগুলিও তৈরি করা যেতে পারে।
লেনার্ট রেগেব্রো

এটি আপনাকে স্থানীয় নির্দিষ্ট করতে দেয় না এবং রেফারেন্স কনফিগারেশন ফাইলের কারণে একটি ভ্যালুআরারের কারণ হয়।
thejjorn

8

আপনি পাইউচায় আগ্রহীও হতে পারেন :

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

যদিও এটি অবশ্যই সবচেয়ে সঠিক উপায় নয়, এটি অন্তত কিছুটা সঠিক হওয়ার পক্ষে এটি একটি খুব সহজ উপায়। স্থানীয় ওয়েব থ্রেডসেফ না থাকায় এটি ওয়েব অ্যাপে লোকালকেও মারায় এবং ভাষা সেটিংস প্রক্রিয়া-ভিত্তিতে সেট করে। বাহ্যিক সি লাইব্রেরিতে নির্ভর করে পাইআইসিইউর চেয়ে সেটআপ করা আরও সহজ।

এই লেখার সময় মূলটি নিচে নেমে আসার কারণে আমি স্ক্রিপ্টটি গিথুবে আপলোড করেছি এবং এটি পেতে ওয়েব ক্যাশে আমাকে অবলম্বন করতে হয়েছিল:

https://github.com/href/Python- ইউনিকোড- সঙ্গতি- অ্যালগোরিদম

আমি এই স্ক্রিপ্টটি সফলভাবে জার্মান / ফরাসি / ইতালিয়ান পাঠকে প্লেন মডিউলে সান্টে বাছাই করতে ব্যবহার করেছি।


পাইউকার জন্য +1 এটি মোটামুটি দ্রুত (২৮,০০০ শব্দকে সাজানোর জন্য 3 সেকেন্ড), খাঁটি অজগর, এবং এর কোনও নির্ভরতার প্রয়োজন নেই ency
মাইকেলমায়ার

7

একটি সংক্ষিপ্তসার এবং বর্ধিত উত্তর:

locale.strcollপাইথন 2 এর অধীনে locale.strxfrmএবং আসলে সমস্যাটি সমাধান করবে এবং ধরে নেবে যে আপনার কাছে প্রশ্নযুক্ত লোকেলটি ইনস্টল রয়েছে। আমি এটি উইন্ডোজের অধীনেও পরীক্ষা করেছি, যেখানে লোকালের নাম গুলিয়ে অন্যথায় আলাদা, তবে অন্যদিকে মনে হয় যে সমস্ত লোকাল ডিফল্টরূপে ইনস্টলড সমর্থিত।

ICUঅগত্যা অনুশীলনে এটি আরও ভাল করে না, তবে এটি আরও কিছু করে । উল্লেখযোগ্যভাবে এটির বিভাজনের পক্ষে সমর্থন রয়েছে যা বিভিন্ন ভাষায় পাঠ্যকে শব্দের মধ্যে বিভক্ত করতে পারে। শব্দগুলির বিভাজক নেই এমন ভাষার জন্য এটি খুব কার্যকর। বিভাজনের জন্য বেস হিসাবে আপনার শব্দের একটি কর্পস থাকা দরকার, যদিও এটি অন্তর্ভুক্ত নেই।

এটিতে লোকেলগুলির দীর্ঘ নামও রয়েছে যাতে আপনি লোকেলের জন্য সুন্দর প্রদর্শন নামগুলি পেতে পারেন, গ্রেগরিয়ানের তুলনায় অন্যান্য ক্যালেন্ডারের জন্য সমর্থন পেতে পারেন (যদিও আমি নিশ্চিত নই যে পাইথন ইন্টারফেস এটি সমর্থন করে) এবং টন এবং আরও কয়েক বা আরও কম অস্পষ্ট লোকেল সমর্থন করে ।

সব মিলিয়ে: আপনি যদি বর্ণানুক্রমিকভাবে এবং লোকেল-নির্ভর করে বাছাই করতে চান localeতবে আপনার বিশেষ প্রয়োজনীয়তা না থাকলে বা শব্দ স্প্লিটারের মতো আরও স্থানীয় স্থানীয় নির্ভর কার্যকারিতা প্রয়োজন না হলে আপনি মডিউলটি ব্যবহার করতে পারেন ।


6

আমি দেখতে পেয়েছি যে উত্তরগুলি ইতিমধ্যে একটি দুর্দান্ত কাজ করেছে, হিউম্যান সাজাতে একটি কোডিংয়ের অদক্ষতাটি কেবল নির্দেশ করতে চেয়েছিল । কোনও ইউনিকোড স্ট্রিংয়ে একটি নির্বাচনী চর-বাই-চরিত অনুবাদ প্রয়োগ করতে, এটি কোডটি ব্যবহার করে:

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)

পাইথন 3-এ আপনি এই স্থির পদ্ধতিটি ব্যবহার করতে পারেন এমন অন্যান্য উপায়ে ডক্স দেখুন maketrans


এই পদ্ধতিটি দুর্দান্ত তবে আপনাকে এজ এবং বি এর মধ্যে place স্থান দেওয়ার অনুমতি দেয় না
বার্নি স্যাজাবলাকস

1

এটি বাস্তবায়ন করতে আপনার সম্পর্কে "ইউনিকোড কোলেশন অ্যালগরিদম" পড়ার প্রয়োজন হবে দেখতে http://en.wikipedia.org/wiki/Unicode_collation_algorithm

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

একটি নমুনা বাস্তবায়ন এখানে

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


1

ইদানীং আমি এই কাজের জন্য zope.ucol ( https://pypi.python.org/pypi/zope.ucol ) ব্যবহার করছি । উদাহরণস্বরূপ, জার্মান sort বাছাই করা:

>>> 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 এছাড়াও আইসিইউ মোড়ক করে, তাই পাইআইসিইউর বিকল্প হবে।


1

একটি সম্পূর্ণ ইউসিএ সমাধান

পার্ল লাইব্রেরি মডিউল, ইউনিকোড :: কোলেট :: লোকালে , যা স্ট্যান্ডার্ড ইউনিকোড :: কোলেট মডিউলটির একটি সাবক্লাস, এটি কলআউট করার জন্য এটি করার সবচেয়ে সহজ, সহজ ও সহজ উপায় । আপনার যা যা করা দরকার তা হ'ল নির্ধারককে "xv"সুইডেনের একটি স্থানীয় মান pass

(আপনি সম্ভবত সুইডিশ পাঠ্যের জন্য এটি প্রশংসা করতে পারবেন না, তবে পার্ল বিমূর্ত অক্ষর ব্যবহার করেছেন বলে আপনি যে কোনও ইউনিকোড কোড পয়েন্ট ব্যবহার করতে পারেন দয়া করে - প্ল্যাটফর্ম বা বিল্ডিং কোনও ব্যাপার নয়) কয়েকটি ভাষা এই জাতীয় সুবিধা সরবরাহ করে I আমি এটি উল্লেখ করেছি কারণ আমি লড়াই করেছি ইদানীং এই ক্ষিপ্ত সমস্যা নিয়ে জাভার সাথে যুদ্ধ হারাতে)

সমস্যাটি হ'ল পাইথন থেকে পার্ল মডিউলটি কীভাবে অ্যাক্সেস করতে হয় তা আমি জানি না - আলাদাভাবে, শেল কলআউট বা দ্বি-পার্শ্বযুক্ত পাইপ ব্যবহার করা থেকে। সেই লক্ষ্যে, আমি আপনাকে ucsort নামক একটি সম্পূর্ণ কার্যনির্বাহী স্ক্রিপ্ট সরবরাহ করেছি যা আপনি নিখুঁত স্বাচ্ছন্দ্যে যা চেয়েছিলেন ঠিক তা করতে কল করতে পারেন।

এই স্ক্রিপ্টটি সম্পূর্ণ ইউনিকোড কলেশন অ্যালগরিদমের সাথে 100% মেনে চলছে , সমস্ত টেইলারিং বিকল্পগুলি সমর্থন করে !! এবং যদি আপনার একটি alচ্ছিক মডিউল ইনস্টল থাকে বা পার্ল 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 ä å ö

যা প্রত্যেকের বই দ্বারা ভুল। আমার স্ক্রিপ্টটি, যা ইউনিকোড কলেশন অ্যালগরিদম ব্যবহার করে আপনি এই অর্ডারটি পেয়েছেন:

% 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

এটি ডিফল্ট ইউসিএ বাছাই। সুইডিশ লোকেল পেতে, 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

তবে ডিফল্ট ইউসিএ ব্যবহার করে এটি এইভাবে সাজিয়ে তোলে:

% 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 --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 বা আরও ভাল প্রয়োজন। স্থানীয় সহায়তার জন্য আপনাকে অবশ্যই CPচ্ছিক সিপিএএন মডিউলটি ইনস্টল করতে হবে Unicode::Collate::Locale। পর্যায়ক্রমে, আপনি পার্ল, 5.13+ এর বিকাশ সংস্করণ ইনস্টল করতে পারেন, এতে স্ট্যান্ডার্ডভাবে মডিউলটি অন্তর্ভুক্ত থাকে।

সম্মেলন আহ্বান

এটি একটি দ্রুত প্রোটোটাইপ, সুতরাং ucsort বেশিরভাগই আন (ডার) নথিভুক্ত। তবে এটি কমান্ড লাইনে কী স্যুইচ / অপশনগুলি গ্রহণ করবে তার এটির সিনপসিস:

    # 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% ইউসিএ অনুসারে বাছাইয়ের জন্য যথেষ্ট যথেষ্ট দ্রুত । যেহেতু এটি মেমরিতে সমস্ত কিছু লোড করে, আপনি সম্ভবত এটি গিগা বাইট নথিতে ব্যবহার করতে চান না। আমি এটি দিনে অনেকবার ব্যবহার করি এবং এটি নিশ্চিত যে এটি শেষ পর্যন্ত বুদ্ধিমান পাঠ্য বাছাই করে।


4
পৃথিবীতে পাইথন লাইব্রেরি আছে এমন কিছু করার জন্য আপনি কেন পার্ল স্ক্রিপ্ট কল করবেন?
লেনার্ট রেজেব্রো

4
কারণ আমি জানতাম না সেখানে ছিল একটি পাইথন গ্রন্থাগার, যে কেন!
tchrist

@ লেনার্ট: আমি প্রকৃতপক্ষে দেশীয় গ্রন্থাগারগুলি পছন্দ করি, বা বেশিরভাগ সি সি এপি-র সাথে যুক্ত এবং গতিশীল লোডেড (যা আপনার মাঝে মাঝে প্রয়োজন হয়)। আমি বিভিন্ন পাইপারেল এবং ইনলাইন :: পার্ল সমাধানগুলি খুব দৃinc়প্রত্যয়ী, বা দৃ .় বা নমনীয় found অথবা অন্যকিছু. তারা কিছু কারণে ঠিক বোধ করে না। আমি সর্বশেষে চেষ্টা করেছিলাম যখন আমার ভাল চরসেট সনাক্তকরণ (যা আমি কখনই পাইনি) হ'ল।
tchrist

4
পাইথনের অভ্যন্তরে পার্ল ব্যবহার করা কেবল আসক্তি।
উত্কু জিহনিওগলু

4
কি দারুন. হ্যাঁ - আমার কাছে পার্লের মতো দেখতে, বাস্তবে আমরা দেখতে পাচ্ছি যে কাজগুলি করার আরও দুটি উপায় রয়েছে :) তবে পাইথন থেকে সি কল করা সাধারণত পার্লকে ডেকে যুক্ত করা নির্ভরশীলতা এবং ব্যবহারিক সমর্থন সংক্রান্ত সমস্যার ইঙ্গিত দেয় না, তাই এর এইভাবে এটি করার জন্য অনেক কল দেখতে ভীষণ কঠিন।
nealmcb

0

এটা আপনার ব্যবহারের ক্ষেত্রে জন্য সম্পূর্ণ সমাধান থেকে অনেক দূরে, কিন্তু আপনি কটাক্ষপাত করা যায়নি unaccent.py effbot.org থেকে স্ক্রিপ্ট। এটি মূলত যা করে তা হ'ল কোনও পাঠ্য থেকে সমস্ত উচ্চারণ সরিয়ে নেওয়া। আপনি বর্ণানুক্রমিকভাবে বাছাই করতে সেই 'স্যানিটাইজড' পাঠ্যটি ব্যবহার করতে পারেন। (আরও ভাল বর্ণনার জন্য এই পৃষ্ঠাটি দেখুন ))


0

জেফ অ্যাটউড ন্যাচারাল সাজ্ট অর্ডারে একটি ভাল পোস্ট লিখেছেন , এতে তিনি একটি স্ক্রিপ্টের সাথে লিঙ্ক করেছেন যা আপনি যা চান তা অনেকটা করে ।

এটি কোনওভাবেই তুচ্ছ স্ক্রিপ্ট নয়, তবে এটি কৌশলটি কার্যকর করে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.