বাছাই কেন ɛ = ই বলে?


25

ɛ("ল্যাটিন এপসিলন") হ'ল একটি চিঠি যা নির্দিষ্ট আফ্রিকান ভাষায় ব্যবহৃত হয়, সাধারণত ইংরেজী "বিছানা" তে স্বরধ্বনিকে উপস্থাপন করার জন্য। ইউনিকোডে এটি ইউ + 025 বি হিসাবে এনকোড করা হয়েছে, যা প্রতিদিনের থেকে খুব আলাদা e

তবে, আমি যদি sortনিম্নলিখিত:

eb
ed
ɛa
ɛc

মনে হচ্ছে যে sortবিবেচনায় ɛএবং eসমতুল্য:

ɛa
eb
ɛc
ed

এখানে কি হচ্ছে? এবং কোন উদ্দেশ্যে তৈরির উদ্দেশ্যে ɛএবং eআলাদা করার কোনও উপায় আছে sort?


21
বাছাইয়ের নিয়মগুলিকে 'কোলেশন' বলা হয়, যদি এটি আপনার
গুগলিংয়ে

1
একটি পাঠ্য ফাইলের অভ্যন্তরে নির্দিষ্ট সংখ্যক eaমিশ্রিত রাখার চেষ্টা ɛaকরুন এবং এটি বাছাই করুন। আপনি দেখতে পাবেন যে এটি সর্বদা eaআগে সাজানো হয় ɛa। সুতরাং, না তারা সমান বিবেচিত হয় না।
বাকুরিউ

একটি সুস্পষ্ট বক্তব্য হতে পারে, তবে আমি এটি এখনও স্পষ্টভাবে প্রস্তাবিত হতে দেখিনি: আপনি যদি words (নির্দিষ্ট_আফ্রিকান_ ভাষা) শব্দটি বাছাই করেন তবে প্রাকৃতিক জিনিসটি লোকালকে setting (নির্দিষ্ট_আফ্রিকান_ ভাষা) এ সেট করে।
ফেডেরিকো পোলোনি

@ ফেডেরিকো পোলোনি একটি খুব ভাল পয়েন্ট! দুর্ভাগ্যক্রমে আমি এই ভাষার জন্য কোনও লোকেল তৈরি করতে সক্ষম হইনি।
ড্রাকনিস

1
@ জার্মানবুউজাস এটি বিশেষত "লাতিন এপসিলন", লাতিন বর্ণমালার সাথে মানানসইভাবে তৈরি একটি ফর্ম। এগুলি দেখতে দেখতে অনেকটা একইরকম, তবে লাতিন অ্যাপসিলনটি ইউ + 025 বি, অন্যদিকে গ্রীক অ্যাপসিলন ইউ +03 বি 5।
ড্রাকনিস

উত্তর:


67

না, এগুলি তাদের সমতুল্য হিসাবে বিবেচনা করে না, তাদের কেবল একই প্রাথমিক ওজন রয়েছে। যাতে প্রথম অনুমানের মধ্যে, তারা একই সাজান।

আপনি যদি কোনও জিএনইউ সিস্টেমে / ইউএসআর / শেয়ার / আই 18 এন / লোকেল / আইসো 14651_t1_common (বেশিরভাগ লোকেলের ভিত্তিতে হিসাবে ব্যবহৃত হয়) তাকান, তবে আপনি দেখতে পাবেন:

<U0065> <e>;<BAS>;<MIN>;IGNORE # 259 e
<U025B> <e>;<PCL>;<MIN>;IGNORE # 287 ɛ
<U0045> <e>;<BAS>;<CAP>;IGNORE # 577 E

e, ɛএবং Eএকই প্রাথমিক ওজন eএবং Eএকই গৌণ ওজন থাকে, কেবল তৃতীয় ওজন তাদের আলাদা করে।

স্ট্রিংগুলির সাথে তুলনা করার সময়, sort( strcoll()স্ট্র্যান্ডের তুলনা করার জন্য স্ট্যান্ডার্ড লিবিসি ফাংশন ব্যবহার করা হয়) সমস্ত অক্ষরের প্রাথমিক ওজন তুলনা করে শুরু হয় এবং কেবল দ্বিতীয় ওজনের জন্য যান যদি স্ট্রিংগুলি প্রাথমিক ওজনের সাথে সমান হয় (এবং এইভাবে অন্যান্য ওজনগুলির সাথে) ।

এভাবেই প্রথম অনুমানের ক্ষেত্রে বাছাইয়ের ক্রমে কেসটিকে উপেক্ষা করা হবে বলে মনে হয়। Abমধ্যে প্রকারের aaএবং acকিন্তু Abসাজানোর আগে বা পরে করতে পারেন abভাষা নিয়ম উপর নির্ভর করে (কিছু কিছু ভাষায় আছে <MIN>সামনে <CAP>ব্রিটিশ ইংরেজি, কিছু মত <CAP>সামনে <MIN>এস্তোনীয় মত)।

যদি eহিসাবে একই সাজানোর ক্রম ছিল ɛ, printf '%s\n' e ɛ | sort -uশুধুমাত্র এক লাইন ফিরে আসবে। তবে <BAS>আগের মতোই <PCL>, eএকা আগেও সাজানো ɛeɛeপরে প্রকারের EEE(সেকেন্ডারি ওজন এ) যদিও EEEপ্রকারের পর eee(যা আমরা তৃতীয় ওজন পর্যন্ত যেতে হবে)।

এখন যদি আমার সিস্টেমে গ্লাবসি ২.২27 রয়েছে, আমি চালাব:

sed -n 's/\(.*;[^[:blank:]]*\).*/\1/p' /usr/share/i18n/locales/iso14651_t1_common |
  sort -k2 | uniq -Df1

আপনি লক্ষ্য করবেন যে বেশ কয়েকটি অক্ষর রয়েছে যা ঠিক একই 4 টি ওজনের সাথে সংজ্ঞায়িত করা হয়েছে। বিশেষত, আমাদের এর মতো ওজন রয়েছে:

<U01DD> <e>;<PCL>;<MIN>;IGNORE
<U0259> <e>;<PCL>;<MIN>;IGNORE
<U025B> <e>;<PCL>;<MIN>;IGNORE

এবং যথেষ্ট নিশ্চিত:

$ printf '%s\n' $'\u01DD' $'\u0259' $'\u025B' | sort -u
ǝ
$ expr ɛ = ǝ
1

এটি GNU libc লোকেলগুলির বাগ হিসাবে দেখা যায়। অন্যান্য বেশিরভাগ সিস্টেমে, লোকেলগুলি নিশ্চিত করে যে শেষ পর্যন্ত সমস্ত পৃথক অক্ষরের আলাদা বাছাই ক্রম রয়েছে। গনুহ লোকেল, এটি, এমনকি খারাপ হিসাবে অক্ষর আছে যা একটি সাজানোর ক্রম হবে না এবং একই বাছাই শেষ সহস্র (ভঙ্গ মত সমস্যার সমস্ত প্রকারের ঘটাচ্ছে comm, join, lsবা অ- নির্ণায়ক আদেশ থাকার globs ... ), অত: পর সুপারিশ ব্যবহার LC_ALL=Cযারা বিষয় প্রায় কাজ করতে

মন্তব্যগুলিতে @ নিনজালজ দ্বারা উল্লিখিত হিসাবে, আগস্ট 2018 এ প্রকাশিত গ্লিবসি ২.২৮ এএফএইচএস যদিও এর সামনের কিছু উন্নতি নিয়েছে, এখনও কিছু চরিত্র বা মিলনকারী উপাদানগুলি একই ধরণের বাছাইয়ের ক্রম দিয়ে সংজ্ঞায়িত হয়েছে। উবুন্টুতে 18.10 glibc 2.28 এবং একটি en_GB.UTF-8 লোকালেতে।

$ expr $'L\ub7' = $'L\u387'
1

(কেন ইউ +00 বি 7 কে কেবলমাত্র ? L/ l!! এর সাথে সংযুক্ত হলে ইউ +0387 এর সমতুল্য বিবেচনা করা হবে ?)।

এবং:

$ perl -lC -e 'for($i=0; $i<0x110000; $i++) {$i = 0xe000 if $i == 0xd800; print chr($i)}' | sort > all-chars-sorted
$ uniq -d all-chars-sorted | wc -l
4
$ uniq -D all-chars-sorted | wc -l
1061355

(এখনও 1 মিলিয়নেরও বেশি অক্ষর (ইউনিকোড পরিসরের 95%, ২.২ in-এর 98% থেকে কম) অন্য অক্ষরের মতো বাছাই করার ক্রমটি নির্ধারণ করা হয়নি)।

আরো দেখুন:


3
আমি ঠিক এটিই খুঁজছিলাম! সম্পূর্ণতার জন্য, কি <PCL>জন্য দাঁড়ানো? অন্যরা ক্যাপিটাল, মিনিস্কুল এবং বেসিক বলে মনে হচ্ছে?
ড্রাকনিস

3
@ ড্র্যাকোনিস, কোলিং -প্রতীক <পি সি এল> # 16 বিশদ /
স্টাফেন চেজেলাস

প্রকৃতপক্ষে আমরা যদি একটি গুচ্ছ করা eaএবং ɛaএকটি ফাইলে মিশ্র একসাথে আমরা দেখতে sortসমস্ত প্রকারের eaসামনে গুলি ɛaগুলি।
বাকুরিউ

2
জন্য glibc 2.28 থেকে, কোডপয়েন্ট একটি 4 র্থ স্তর ওজন একটি ফলব্যাক হিসাবে ব্যবহার করা উচিত, দেখুন sourceware.org/git/... sourceware.org/bugzilla/show_bug.cgi?id=14095
ninjalj

1
@ বিড়াল, দুঃখিত, আমি বোঝাতে চেয়েছি strcoll(), সম্পাদনা দেখুন।
স্টাফেন চেজেলাস 21

15

ম্যান সাজান:

   ***  WARNING  ***  The locale specified by the environment affects sort
   order.  Set LC_ALL=C to get the traditional sort order that uses native
   byte values.

সুতরাং চেষ্টা কর: LC_ALL=C sort file.txt


1
ওই কাজগুলো! তবে ডিফল্ট লোকেল কেন এই সম্পূর্ণ পৃথক কোডপয়েন্টগুলিকে একই বলে মনে করে? আমি কেন আগ্রহী তা জানতে আগ্রহী।
ড্রাকনিস

@ ড্রাকনিস "ডিফল্ট লোকেল" কী?
কামিল ম্যাকিয়েরোভস্কি

@ কামিলম্যাসিওরওস্কি পরিবেশের পরিবর্তনশীলের একটি খালি মূল্য; কোন স্থানীয় লোকের সাথে এটি মিলছে তা আমি নিশ্চিত নই।
ড্রাকোনিস

3
@ ড্র্যাকোনিস যদি LC_ALLখালি থাকে তবে sortঅন্যান্য LC_*ভেরিয়েবল LANGবা কিছু কনফিগারেশন ফাইল ব্যবহার করতে পারে ।
নিডজেজেকব

1
LC_COLLATEস্ট্রিং-সারণি-নির্দিষ্ট এক, LANGঅতিরিক্ত-সাধারণ general
শ্যাডোর্যাঞ্জার

8

অক্ষর e ই এর সমান নয়, তবে কিছু লোকেল এই চিহ্নগুলি একসাথে জড়ো করে সংগ্রহ করতে পারে। এর কারণ ভাষা নির্দিষ্ট, তবে কিছু historicalতিহাসিক এমনকি রাজনৈতিক পটভূমিও রয়েছে। উদাহরণস্বরূপ, বেশিরভাগ লোকেরা সম্ভবত আশা করেন যে € ইউরো মুদ্রা অভিধানে ইউরোপের নিকটে আসে ।

যাইহোক আপনি বর্তমানে কোন ধরণের রান ব্যবহার করছেন তা দেখার জন্য locale, এটি locale -aআপনাকে সিস্টেমে উপলব্ধ লোকালগুলির তালিকা দেবে এবং কোলেশন পরিবর্তন করতে Cকেবল একটি বাছাইয়ের জন্য বলুন LC_COLLATE=C sort file। অবশেষে দেখতে দেখতে কীভাবে বিভিন্ন লোকেল আপনার ফাইলকে চেষ্টা সাজিয়ে রাখতে পারে

for loc in $(locale -a)
    do echo ____"${loc}"____
    LC_COLLATE="$loc" sort file
done

আপনার প্রয়োজনীয়তার সাথে খাপ খায় এমন লোকেল চয়ন করতে ফলাফলটি কোনও গ্রেপিংয়ের সরঞ্জামে পাইপ করুন।


এটি একটি দুর্দান্ত ব্যাখ্যা, তবে প্রতীকগুলি কেবল একসাথেই নয়, অভিন্ন বলে মনে হয়।
ড্রাকনিস

1
না, তারা অভিন্ন হিসাবে বিবেচিত হয় না। eaফাইলটিতে একটি সরল রেখা যুক্ত করুন, তারপরে sort -uআপনি eaএবং ɛaআউটপুট উভয়ই পাবেন । সেরা কৌশল বনাম কোলেটেট ( এড়ানোexport LC_COLLATE=C ) হ'ল । তা না হলে, অনেক কুশ্রী জিনিস ঘটবে (যেমন। /tmp/[a-z]bashম্যাচ হবে /tmp/aএবং /tmp/Aকিন্তু /tmp/Z)।
মস্কি

@ মোসভি হু, আকর্ষণীয় ... তাই আদেশের উদ্দেশ্যে যেমন তারা বিবেচিত হয় তবে স্বতন্ত্রতার জন্য নয়?
ড্রাকনিস

তারা একই বিবেচনা করা হয় না। এটি সম্পর্কে এখানে একটি ব্যাখ্যা দেখুন ।
মশবির

1
@ নিনজালজ, এটি গ্লিবসি এবং রেজিএক্সপেক্স রেঞ্জগুলিতে স্থির থাকতে পারে fnmatch()তবে এর মতো কিছু নয় bashযা নিজে ব্যবহার করে এর ব্যাপ্তি প্রয়োগ করে strcoll()। ksh93 এর ক্ষেত্রে কখনই সমস্যা হয়নি কারণ এর ব্যাপ্তি বাস্তবায়ন ব্যবহার করে strcoll()এবং ব্যাপ্তি শেষের ক্ষেত্রেও পরীক্ষা করে এবং উভয় প্রান্তই যদি ছোট হয় তবে কেবল ছোট হাতের অক্ষরে মেলে। স্ট্রোকল () নয়, কোড পয়েন্টের ভিত্তিতে সম্পন্ন হওয়ায় zsh রেঞ্জগুলির সমস্যা নেই।
স্টাফেন চেজেলাস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.