আরবি শব্দটির ডায়্রিটিক্স / অ্যাকসেন্ট ছাড়া পাঠ্যে কীভাবে অনুসন্ধান করবেন?


11

আরবিতেও অন্যান্য কয়েকটি ভাষার মতো উচ্চারণ বৃদ্ধির জন্য ডায়াক্রিটিক্স বলা হয়। একক শব্দের জন্য কত ডায়রিটিক্স লিখতে হবে সে সম্পর্কে কোনও কনভেনশন নেই। কিছু উচ্চারণ উচ্চারণের জন্য ন্যূনতম (যা আমি পছন্দ করি) কেবলমাত্র যথেষ্ট ব্যবহার করি, আবার কেউ কেউ এগুলি অতিমাত্রায় বা কেবল নান্দনিক ক্যালিগ্রাফিক উদ্দেশ্যে ব্যবহার করে। সুতরাং, একটি শব্দের সাথে কী এবং কয়টি ডায়রিটিক্স যুক্ত তা নিয়ে বিস্তর ভিন্নতা রয়েছে। আমি যখন isearch-forward/backwardচাপ দিয়ে করি C-s/r, সমস্যা দেখা দেয় যখন আমি ডায়াস্রিটিক্স ছাড়াই অনুসন্ধান মিনি-বাফারে এটি টাইপ করি তখন এটি ডায়াস্রিটিক্স থাকলে পাঠ্যে একই শব্দের সাথে মেলে না,

ডায়াক্রিটিক্স সম্পর্কে অজানা সন্ধান / রেজিপ এক্স সন্ধান করার কোনও উপায় আছে কি? আমি আশা করি এমন একটি উত্তর থাকবে যা মাল্টি-ফাইল ক্ষীরের প্রকল্পগুলিতে শব্দের সন্ধানের জন্য আমি প্রায়শই হেলম-প্রজেক্টলে ব্যবহার করি regexp C-M-s/rএবং এটি grepসন্ধানের জন্য বাড়ানো যেতে পারে ।

আপডেট
এটি দেখতে ভাল লাগবে যে চাহিদা অনুসারে একটি প্রিফিক্স দ্বারা বন্ধ করা যেতে পারে এমন কোনও ডিফল্ট আচরণ হিসাবে ধাপের সাথে ম্যাচ করার আগে ইম্যাকগুলি তার সমস্ত অনুসন্ধানের ফাংশনে (অ্যাকসেন্ট / ডায়ারিটিক্স থেকে / আপনি নামটি দিয়েছিলেন) পাঠ্যটিতে স্ট্রিপিং অফ স্টেপ করছেন doing ভাষা কোন হাতে নেই matter সাধারণত, আমি যখন এমন কোনও কিছু অনুসন্ধান করি যখন আমি সেরা সম্পাদকের কাছ থেকে আশা করি না (ইমাসস) কেবল এমন কিছু ডায়রিটিক্স বা অ্যাকসেন্টের কারণে যে এই সংক্ষিপ্ত পাঠের কাজগুলি সম্পাদন করার প্রয়োজন হয় খুব কমই হয় this


1
ucs-normalize-*কার্যকারিতা দেখুন lisp/international/ucs-normalize.el। এগুলির জন্য কোনও পূর্বনির্ধারিত অনুসন্ধান ভাঁজ নেই, যেমন কেস ফোল্ডিং রয়েছে তবে আপনি কোনও অঞ্চল অনুসন্ধানের আগে কমপক্ষে তাকে স্বাভাবিক করতে পারেন। একটি ভাল বাস্তবায়ন সম্ভবত একটি মোটামুটি জটিল কাজ।
টেড জ্লাতানোভ

Superuser.com/a/675172/233868 সাহায্য করতে পারে?
নাম

@ নাম, আরবিতে উচ্চারণ / ডায়রিট্রিটিক্সের সাথে অক্ষরের সংমিশ্রণের (26) আরও অনেক সম্ভাবনা রয়েছে, সুতরাং এটি আরবি নয়। দেখে মনে হচ্ছে ভাষা-নির্দিষ্ট গ্রন্থাগারের কোনও বিকল্প নেই। আমি বিশ্বাস করতে পারি না যে এটি ইতিমধ্যে মাইক্রোসফ্ট ওয়ার্ডে প্রয়োগ করা হয়েছে এবং সেই সমস্ত বছর আগের ইম্যাকগুলিতে নয়।
ডক্টরেট

1
আরবিতে প্রায় ৮০ টি ডায়াক্রিটিকস এবং ২ 26 টি বর্ণ রয়েছে, সমস্ত সংমিশ্রণ তৈরি করা একটি কঠিন কাজ। এর ডায়ায়্রিটিক্সের পাঠ্য কেটে ফেলার কিছু উপায় থাকতে হবে যেমন phpবাস্তবায়িত হয়েছে: স্ট্যাকওভারফ্লো.com / a / 25563250 / 1288722 - এও প্রয়োগ করা হয়েছে Javascript: স্ট্যাকওভারফ্লো.com
ডক্টরেট

ভেবেছিলেন: পিএইচপি ক্লিনিজিং ফাংশনটির মাধ্যমে স্ট্রিংটি চালানো এবং তারপরে ফলাফলটির সাথে সাদৃশ্যপূর্ণ কিছু পাস করা helm-swoopকি সম্ভব নয় ?
শন অলরেড

উত্তর:


5

এই উত্তরের অক্ষরের সংমিশ্রনের তালিকার উপর ভিত্তি করে এখানে মোটামুটি শুরু (এবং তারপরে প্রসারিত)। (এটিকে সম্প্রদায় উইকি হিসাবে চিহ্নিত করা হচ্ছে - দয়া করে এটি সম্পাদনা করুন এবং উন্নত করুন!)

(defconst arabic-diacritics '(#x064b #x064c #x064d #x064e #x064f #x0650 #x0651 #x0652 #x0653 #x0654 #x0655 #x0670)
  "Unicode codepoints for Arabic combining characters.")
(defconst arabic-diacritics-regexp (regexp-opt (mapcar #'string arabic-diacritics)))

(defconst arabic-equivalents
  '(
    ;; "alef" is equivalent to "alef with hamza above" etc
    (#x0627 #x0623 #x0625 #x0622)))

;; (require 'cl-lib)    
;; (defun arabic-strip-diacritics (string)
;;   (cl-reduce (lambda (s c) (remove c s)) arabic-diacritics :initial-value string))

(defun arabic-search-without-diacritics (string)
  (interactive (list (read-string "Search for: " nil nil nil t)))
  (let ((regexp
         (apply #'concat
                (mapcar (lambda (c)
                          (let ((equivalents (assq c arabic-equivalents)))
                            (concat
                             (if equivalents
                                 (regexp-opt (mapcar #'string equivalents))
                               (regexp-quote (string c)))
                             arabic-diacritics-regexp "*")))
                        string))))
    (search-forward-regexp regexp)))

সুতরাং কোনও বাফারে যদি "الْحَمْدُ لِلَّهِ رَبِّ الْعَالَمِينَ" থাকে এবং আমি মূল্যায়ন করি (arabic-search-without-diacritics "الحمد لله رب العالمين")তবে এটি পাঠ্যটি সন্ধান করে। এটি যেমন ইন্টারঅ্যাকটিভভাবে কাজ করে M-x arabic-search-without-diacritics

বিকল্প পথ বা পন্থা:

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

(defun kill-marks (string)
  (concat (loop for c across string
                when (not (eq 'Mn (get-char-code-property c 'general-category)))
                collect c)))

(let* ((original1 "your Arabic string here")
      (normalized1 (ucs-normalize-NFKD-string original1))
      (original2 "your other Arabic string here")
      (normalized2 (ucs-normalize-NFKD-string original2)))
  (equal
   (replace-regexp-in-string "." 'kill-marks normalized1)
   (replace-regexp-in-string "." 'kill-marks normalized2)))

আমি আপনার সুন্দর তালিকায় আরবিতে সাধারণত ব্যবহৃত দুটি আরও ডায়াক্রিটিক যুক্ত করেছি। এটি সম্পূর্ণ বাছাই করা তালিকা 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1648- আপডেটের জন্য নিখরচায়।
ডক্টরেট

প্রথম ফাংশনটি arabic-search-without-diacriticsভালভাবে কাজ করে তবে কিছু শব্দের সাথে ভেঙে যায়, কেন জানি না এটির মতো الأَ। অন্যান্য সতর্কতামূলকভাবে, আমি যখন মিনি স্টাফটিতে আমার স্ট্রিংটি প্রবেশ করি তখন আমার আরবীতে সর্বদা ইনপুট-পদ্ধতিটি সেট করতে হয়, যখন isearch-forward/backwardফাংশনে এটি সেখানে থাকে।
ডক্টরেট

kill-marksহ'ল সব ধরণের অনুসন্ধানের জন্য ঝামেলা-মুক্ত পাঠ্য সরবরাহের জন্য আরও ভাল পন্থা। আমার কাছে অস্পষ্ট যা সম্পূর্ণ ব্যাফারে এবং তারপরে মাল্টিফাইলগুলিতে কীভাবে প্রয়োগ করা যায়?
ডক্টরেট

1
ধন্যবাদ! এটি কি isearch-forward/backwardসমস্ত ঘটনাকে হাইলাইট করার মতো করে তৈরি করা সম্ভব এবং বর্তমানটিকে আলাদাভাবে এবং অনুরোধ করে sএগিয়ে চলবে এবং rপিছনে সরে যাবে?
ডক্টরেট

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