ইউনিকোড অক্ষর থেকে ডায়াক্রিটিকাল চিহ্নগুলি (ń ǹ ň ñ ṅ ṅ ņ ṇ ṋ ṋ ṉ ṉ ɲ ƞ ᶇ ɳ ȵ) সরান


88

আমি একটি অ্যালগরিদম দেখছি যা ডায়াক্রিটিক্স ( টিলডে , সারফ্লেক্স , ক্যারেট , উমলাউট , ক্যারন ) এবং তাদের "সরল" চরিত্রের মধ্যে অক্ষরগুলির মধ্যে মানচিত্র তৈরি করতে পারে ।

উদাহরণ স্বরূপ:

ń  ǹ  ň  ñ  ṅ  ņ  ṇ  ṋ  ṉ  ̈  ɲ  ƞ ᶇ ɳ ȵ  --> n
á --> a
ä --> a
ấ --> a
ṏ --> o

ইত্যাদি

  1. আমি জাভাতে এটি করতে চাই, যদিও আমি সন্দেহ করি এটি কোনও ইউনিকোড-ওয়াই হওয়া উচিত এবং যেকোন ভাষায় যুক্তিযুক্তভাবে সহজেই করণীয় হওয়া উচিত।

  2. উদ্দেশ্য: ডায়াক্রিটিকাল চিহ্ন সহ শব্দগুলি সহজেই সন্ধানের জন্য। উদাহরণস্বরূপ, যদি আমার কাছে টেনিস খেলোয়াড়দের একটি ডেটাবেস থাকে এবং বিজার্ন_বার্গ প্রবেশ করানো হয় তবে আমি বজর্ন_বর্গও রাখব যাতে কেউ বোরর্নে প্রবেশ করে এবং ব্রাজারনে না প্রবেশ করে তা খুঁজে পেতে পারি।


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

15
দয়া করে সাবধান হন যে letters en.wikedia.org/wiki/%C3%91 এর মতো কিছু অক্ষর অনুসন্ধানের উদ্দেশ্যে ডায়ায়্রিটিক্স ছিনিয়ে নেওয়া উচিত নয়। গুগল স্প্যানিশ "আনো" (মলদ্বার) এবং "আও" (বছর) এর মধ্যে সঠিকভাবে পার্থক্য করে। সুতরাং আপনি যদি সত্যই কোনও ভাল অনুসন্ধান ইঞ্জিন চান তবে আপনি বেসিক ডায়াক্রিটিকাল চিহ্ন অপসারণের উপর নির্ভর করতে পারবেন না।
এডুয়ার্ডো

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

(দুর্ঘটনাক্রমে পূর্ববর্তী প্রেরণে) ফোনেটিক অনুসন্ধানকে উন্নত করতে তাদের ফোনেটিক সমতুল্যে ডায়াক্রিটিকদের ম্যাপিংয়ের জন্য জায়গা রয়েছে। উদাহরণস্বরূপ ñ => নী যদি আরও ভাল ফলাফল দেয় তবে অন্তর্নিহিত অনুসন্ধান ইঞ্জিন ফোনেটিক-ভিত্তিক (উদাহরণস্বরূপ সাউন্ডেক্স) অনুসন্ধান সমর্থন করে
আমির

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

উত্তর:


83

আমি সম্প্রতি জাভাতে এটি করেছি:

public static final Pattern DIACRITICS_AND_FRIENDS
    = Pattern.compile("[\\p{InCombiningDiacriticalMarks}\\p{IsLm}\\p{IsSk}]+");

private static String stripDiacritics(String str) {
    str = Normalizer.normalize(str, Normalizer.Form.NFD);
    str = DIACRITICS_AND_FRIENDS.matcher(str).replaceAll("");
    return str;
}

এটি আপনি নির্দিষ্ট হিসাবে করবেন:

stripDiacritics("Björn")  = Bjorn

তবে এটি উদাহরণস্বরূপ বিয়াস্টক ব্যর্থ হবে, কারণ łচরিত্রটি ডায়াক্রিটিক নয়।

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

public class StringSimplifier {
    public static final char DEFAULT_REPLACE_CHAR = '-';
    public static final String DEFAULT_REPLACE = String.valueOf(DEFAULT_REPLACE_CHAR);
    private static final ImmutableMap<String, String> NONDIACRITICS = ImmutableMap.<String, String>builder()

        //Remove crap strings with no sematics
        .put(".", "")
        .put("\"", "")
        .put("'", "")

        //Keep relevant characters as seperation
        .put(" ", DEFAULT_REPLACE)
        .put("]", DEFAULT_REPLACE)
        .put("[", DEFAULT_REPLACE)
        .put(")", DEFAULT_REPLACE)
        .put("(", DEFAULT_REPLACE)
        .put("=", DEFAULT_REPLACE)
        .put("!", DEFAULT_REPLACE)
        .put("/", DEFAULT_REPLACE)
        .put("\\", DEFAULT_REPLACE)
        .put("&", DEFAULT_REPLACE)
        .put(",", DEFAULT_REPLACE)
        .put("?", DEFAULT_REPLACE)
        .put("°", DEFAULT_REPLACE) //Remove ?? is diacritic?
        .put("|", DEFAULT_REPLACE)
        .put("<", DEFAULT_REPLACE)
        .put(">", DEFAULT_REPLACE)
        .put(";", DEFAULT_REPLACE)
        .put(":", DEFAULT_REPLACE)
        .put("_", DEFAULT_REPLACE)
        .put("#", DEFAULT_REPLACE)
        .put("~", DEFAULT_REPLACE)
        .put("+", DEFAULT_REPLACE)
        .put("*", DEFAULT_REPLACE)

        //Replace non-diacritics as their equivalent characters
        .put("\u0141", "l") // BiaLystock
        .put("\u0142", "l") // Bialystock
        .put("ß", "ss")
        .put("æ", "ae")
        .put("ø", "o")
        .put("©", "c")
        .put("\u00D0", "d") // All Ð ð from http://de.wikipedia.org/wiki/%C3%90
        .put("\u00F0", "d")
        .put("\u0110", "d")
        .put("\u0111", "d")
        .put("\u0189", "d")
        .put("\u0256", "d")
        .put("\u00DE", "th") // thorn Þ
        .put("\u00FE", "th") // thorn þ
        .build();


    public static String simplifiedString(String orig) {
        String str = orig;
        if (str == null) {
            return null;
        }
        str = stripDiacritics(str);
        str = stripNonDiacritics(str);
        if (str.length() == 0) {
            // Ugly special case to work around non-existing empty strings
            // in Oracle. Store original crapstring as simplified.
            // It would return an empty string if Oracle could store it.
            return orig;
        }
        return str.toLowerCase();
    }

    private static String stripNonDiacritics(String orig) {
        StringBuffer ret = new StringBuffer();
        String lastchar = null;
        for (int i = 0; i < orig.length(); i++) {
            String source = orig.substring(i, i + 1);
            String replace = NONDIACRITICS.get(source);
            String toReplace = replace == null ? String.valueOf(source) : replace;
            if (DEFAULT_REPLACE.equals(lastchar) && DEFAULT_REPLACE.equals(toReplace)) {
                toReplace = "";
            } else {
                lastchar = toReplace;
            }
            ret.append(toReplace);
        }
        if (ret.length() > 0 && DEFAULT_REPLACE_CHAR == ret.charAt(ret.length() - 1)) {
            ret.deleteCharAt(ret.length() - 1);
        }
        return ret.toString();
    }

    /*
    Special regular expression character ranges relevant for simplification -> see http://docstore.mik.ua/orelly/perl/prog3/ch05_04.htm
    InCombiningDiacriticalMarks: special marks that are part of "normal" ä, ö, î etc..
        IsSk: Symbol, Modifier see http://www.fileformat.info/info/unicode/category/Sk/list.htm
        IsLm: Letter, Modifier see http://www.fileformat.info/info/unicode/category/Lm/list.htm
     */
    public static final Pattern DIACRITICS_AND_FRIENDS
        = Pattern.compile("[\\p{InCombiningDiacriticalMarks}\\p{IsLm}\\p{IsSk}]+");


    private static String stripDiacritics(String str) {
        str = Normalizer.normalize(str, Normalizer.Form.NFD);
        str = DIACRITICS_AND_FRIENDS.matcher(str).replaceAll("");
        return str;
    }
}

characters মত চরিত্র সম্পর্কে কি?
মিকথোমসন

তারা পাস করা হবে - যদিও। একইভাবে সব জাপানি অক্ষর ইত্যাদি
আন্দ্রিয়াস Petersson

ধন্যবাদ আন্ড্রেয়াস এগুলি সরানোর কোনও উপায় আছে কি? Characters が な を 覚 男 (বা অন্যদের) মতো অক্ষর উত্পন্ন স্ট্রিংয়ের অন্তর্ভুক্ত হবে এবং এগুলি মূলত আউটপুটটিকে ভেঙে দেবে। আমি স্টিম-ওভারফ্লো এর প্রশ্নগুলির URL গুলির জন্য ইউআরএল জেনারেটর হিসাবে সরলীকৃত স্ট্রিং আউটপুট ব্যবহার করার চেষ্টা করছি।
মিকথমপসন

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

4
থ্যাঙ্কস আন্দ্রেস, কবজির মতো কাজ করে! (rrrr̈r'ŕřttẗţỳỹẙy'yýÿŷpp̈sss̈s̊s's̸śŝŞşšddd̈ďd'ḑf̈f̸ggg̈g'ģqĝǧḧĥj̈j'ḱkk̈k̸ǩlll̈Łłẅẍcc̈c̊c'c̸Çççćĉčvv̈v'v̸bb̧ǹnn̈n̊n'ńņňñmmmm̈m̊m̌ǵß উপর পরীক্ষা) :-)
Fortega

25

মূল java.text প্যাকেজটি এই ব্যবহারের ক্ষেত্রে (ডায়াস্রিটিক্স, কেস ইত্যাদি বিবেচনা না করে স্ট্রিংগুলির সাথে মিল রেখে) তৈরি করার জন্য ডিজাইন করা হয়েছিল।

অক্ষরের পার্থক্য Collatorবাছাই করতে একটি কনফিগার করুন PRIMARY। এটির সাথে, CollationKeyপ্রতিটি স্ট্রিংয়ের জন্য একটি তৈরি করুন । যদি আপনার সমস্ত কোড জাভাতে থাকে তবে আপনি CollationKeyসরাসরি ব্যবহার করতে পারেন । আপনার যদি কোনও ডাটাবেস বা অন্য ধরণের সূচকে কীগুলি সঞ্চয় করতে হয় তবে আপনি এটিকে বাইট অ্যারেতে রূপান্তর করতে পারেন ।

এই ক্লাসগুলি কোন অক্ষর সমতুল্য তা নির্ধারণ করতে এবং ইউনিকোড স্ট্যান্ডার্ড কেস ফোল্ডিং ডেটা ব্যবহার করে এবং বিভিন্ন পচন কৌশল সমর্থন করে ।

Collator c = Collator.getInstance();
c.setStrength(Collator.PRIMARY);
Map<CollationKey, String> dictionary = new TreeMap<CollationKey, String>();
dictionary.put(c.getCollationKey("Björn"), "Björn");
...
CollationKey query = c.getCollationKey("bjorn");
System.out.println(dictionary.get(query)); // --> "Björn"

নোট করুন যে কলাররা লোকাল-নির্দিষ্ট। এটি কারণ "বর্ণানুক্রমিক ক্রম" লোকেলের মধ্যে পৃথক (এবং সময়ের সাথে সাথে স্প্যানিশের ক্ষেত্রেও এরকম হয়েছে)। Collatorবর্গ এই নিয়ম সব ট্র্যাক তারিখ থেকে তাদের তাল মেলাতে না থাকার থেকে দূর করে দেয়।


আকর্ষণীয় শোনায়, তবে আপনি কী "বিজো%" এর মতো কোলেটেড_নাম চান এমন ব্যক্তির থেকে বেছে বেছে * আপনার ডাটাবেজে আপনার কোলেশন কীটি অনুসন্ধান করতে পারেন ??
আন্দ্রেয় পিটারসন

খুব সুন্দর, যে সম্পর্কে জানেন না। এটি চেষ্টা করে দেখুন।
আন্দ্রেয় পিটারসন

অ্যান্ড্রয়েডে কোলেশনকিগুলি ডাটাবেস অনুসন্ধানের উপসর্গ হিসাবে ব্যবহার করা যায় না। স্ট্রিংয়ের একটি কোলিশন কী a41, 1, 5, 1, 5, 0 abবাইটে পরিণত হয় , তবুও স্ট্রিংটি বাইটগুলিতে 41, 43, 1, 6, 1, 6, 0. এ পরিণত হয় These পুরো কথায় (কোলেশন কী এর জন্য বাইট অ্যারে এর জন্য কোলেশন কী এর জন্য বাইট অ্যারে aপ্রদর্শিত হবে না ab)
গ্রজেগোর্জ অ্যাডাম হানকিউইকজ

4
@ গ্রজেগোর্জএডামহানকিউইকজ কিছু পরীক্ষার পরে, আমি দেখতে পাচ্ছি যে বাইট অ্যারেগুলি তুলনা করা যেতে পারে, তবে আপনি যেমন উল্লেখ করেছেন তেমন উপসর্গ গঠন করেন না। সুতরাং, প্রিফিক্স ক্যোয়ারীটি করার মতো bjo%, আপনাকে কোলাটারগুলি> = bjoএবং < bjp(বা পরবর্তী চিহ্নটি যে লোকেলে থাকুক না কেন, এবং এটি নির্ধারণ করার মতো কোনও প্রোগ্রামিক উপায় নেই) এমন একটি পরিসীমা কোয়েরি করতে হবে।
এরিকসন

16

এটি ভার্চ হিসাবে অ্যাপাচি কমন্স ল্যাং এর অংশ । ৩.১০।

org.apache.commons.lang3.StringUtils.stripAccents("Añ");

প্রত্যাবর্তন An


4
Ø এটি আবার দেয় For
মাইক আরগেরিও

4
যে নির্দেশ করার জন্য মাইক ধন্যবাদ। পদ্ধতিটি কেবল অ্যাকসেন্টগুলি পরিচালনা করে। "Ǹ ǹ ň ñ ṅ ņ ṇ ṋ ṉ ̈ ɲ ƞ ᶇ ɳ ȵ" "এর ফলাফল" nnnnnnnnn ɲ ƞ ᶇ ɳ ȵ "
চোই

12

আপনি এর থেকে নরমালাইজার ক্লাসটি ব্যবহার করতে পারেন java.text:

System.out.println(new String(Normalizer.normalize("ń ǹ ň ñ ṅ ņ ṇ ṋ", Normalizer.Form.NFKD).getBytes("ascii"), "ascii"));

তবে এখনও কিছু কাজ করার আছে, যেহেতু জাভা অবিচ্ছিন্ন ইউনিকোড অক্ষরগুলি দিয়ে অদ্ভুত জিনিসগুলি তৈরি করে (এটি সেগুলি উপেক্ষা করে না এবং এটি একটি ব্যতিক্রমও ছুঁড়ে না)। তবে আমি মনে করি আপনি এটি একটি পয়েন্টিং হিসাবে ব্যবহার করতে পারেন।


4
এটি নন-এসকি ডায়াক্রিটিক্সের জন্য কাজ করবে না, যেমন রাশিয়ান ভাষায়, তাদের ডায়াক্রিটিক্সও রয়েছে এবং তদুপরি সমস্ত এশীয় স্ট্রিং কসাই রয়েছে। ব্যবহার করবেন না. পরিবর্তে উত্তর হিসেবে ASCII রূপান্তর, ব্যবহার \\ পি {InCombiningDiacriticalMarks} regexp এর stackoverflow.com/questions/1453171/...
আন্দ্রিয়াস Petersson

10

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

পার্ল ব্যবহার করে ডায়াক্রিটিক চিহ্নিতকারী অপসারণ সম্পর্কিত আলোচনা এবং বাস্তবায়ন এখানে ।

এই বিদ্যমান এসও প্রশ্নগুলি সম্পর্কিত:


5

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

সুইডিশ ভাষায়, å ä এবং true সত্য এবং যথাযথ প্রথম-শ্রেণীর অক্ষর, অন্য কোনও চরিত্রের কিছু "বৈকল্পিক" নয়। এগুলি অন্য সমস্ত চরিত্রের থেকে আলাদা বলে মনে হয়, এগুলি আলাদা আলাদা করে তোলে এবং শব্দের অর্থ পরিবর্তিত করে ("ম্যাট" এবং "ম্যাট" দুটি পৃথক শব্দ)।


4
যদিও সঠিক, প্রশ্নের উত্তর চেয়ে এটি একটি মন্তব্য বেশি।
সাইমন ফোর্সবার্গ

2

ইউনিকোডে নির্দিষ্ট ডায়াট্রিক অক্ষর রয়েছে (যা সম্মিলিত অক্ষর) এবং একটি স্ট্রিং রূপান্তর করা যায় যাতে অক্ষর এবং ডায়াবেটিকগুলি পৃথক হয় are তারপরে, আপনি স্ট্রিং থেকে ডায়েরাট্রসগুলি সরাতে পারেন এবং আপনি মূলত সম্পন্ন করেছেন।

সাধারণকরণ, পচন এবং সমতুল্যতার বিষয়ে আরও তথ্যের জন্য ইউনিকোডের হোম পৃষ্ঠাতে ইউনিকোড স্ট্যান্ডার্ড দেখুন

তবে, আপনি কীভাবে এটি অর্জন করতে পারবেন তা নির্ভর করে ফ্রেমওয়ার্ক / ওএস / ... এর উপরে যা আপনি কাজ করছেন on আপনি .NET ব্যবহার করেন, তাহলে আপনি ব্যবহার করতে পারেন String.Normalize পদ্ধতি গ্রহণ System.Text.NormalizationForm শুমার।


4
আমি নেট। নেট-এ এই পদ্ধতিটি ব্যবহার করি, যদিও আমাকে এখনও কিছু অক্ষর ম্যানুয়ালি ম্যাপ করতে হবে। এগুলি ডায়াক্রিটিক্স নয়, ডিগ্রাফ রয়েছে। অনুরূপ সমস্যা যদিও।
থোররিন

4
নরমালাইজেশন ফর্ম "ডি" (যেমন পচে যাওয়া) তে রূপান্তর করুন এবং বেস চরিত্রটি গ্রহণ করুন।
রিচার্ড

2

সবচেয়ে সহজ উপায় (আমার কাছে) হ'ল কেবল বিরল ম্যাপিং অ্যারে বজায় রাখা যা আপনার ইউনিকোড কোড পয়েন্টকে কেবল প্রদর্শনযোগ্য স্ট্রিংগুলিতে পরিবর্তন করে।

যেমন:

start    = 0x00C0
size     = 23
mappings = {
    "A","A","A","A","A","A","AE","C",
    "E","E","E","E","I","I","I", "I",
    "D","N","O","O","O","O","O"
}
start    = 0x00D8
size     = 6
mappings = {
    "O","U","U","U","U","Y"
}
start    = 0x00E0
size     = 23
mappings = {
    "a","a","a","a","a","a","ae","c",
    "e","e","e","e","i","i","i", "i",
    "d","n","o","o","o","o","o"
}
start    = 0x00F8
size     = 6
mappings = {
    "o","u","u","u","u","y"
}
: : :

একটি স্পারস অ্যারের ব্যবহার আপনাকে ইউনিকোড টেবিলের বিস্তৃত ব্যবধানে বিভাজনে থাকা সত্ত্বেও দক্ষতার সাথে প্রতিস্থাপনের সুযোগ দেয়। স্ট্রিং প্রতিস্থাপনগুলি সালাহী সিকোয়েন্সগুলি আপনার ডায়াক্রিটিক্সকে প্রতিস্থাপন করতে অনুমতি দেবে (যেমন æগ্রাফিয়াম হয়ে উঠছে ae)।

এটি একটি ভাষা-অজ্ঞাত উত্তর, সুতরাং আপনার যদি মনে একটি নির্দিষ্ট ভাষা থাকে তবে আরও ভাল উপায় থাকতে পারে (যদিও তারা সম্ভবত এইভাবে সর্বনিম্ন স্তরে নেমে আসবেন)।


সমস্ত সম্ভাব্য অদ্ভুত অক্ষর যুক্ত করা কোনও সহজ কাজ নয়। এটি কেবল কয়েকটি চরিত্রের জন্য করার সময় এটি একটি ভাল সমাধান।
সাইমন ফোর্সবার্গ

2

কিছু বিবেচনা করার বিষয়: আপনি যদি প্রতিটি শব্দের একটিমাত্র "অনুবাদ" পাওয়ার চেষ্টা করে চলে যান তবে আপনি কিছু সম্ভাব্য বিকল্প মিস করতে পারেন।

উদাহরণস্বরূপ, জার্মান ভাষায়, "এস-সেট" প্রতিস্থাপনের সময়, কিছু লোক "বি" ব্যবহার করতে পারে, অন্যরা "এসএস" ব্যবহার করতে পারে। বা, একটি দোলা o কে "o" বা "oe" দিয়ে প্রতিস্থাপন করা হচ্ছে। আপনি যে কোনও সমাধান নিয়ে আসেন, আদর্শভাবে, আমি মনে করি উভয়টি অন্তর্ভুক্ত করা উচিত।


2

উইন্ডোজ এবং .NET এ, আমি কেবল স্ট্রিং এনকোডিং ব্যবহার করে রূপান্তর করি। এইভাবে আমি ম্যানুয়াল ম্যাপিং এবং কোডিং এড়াতে চাই।

স্ট্রিং এনকোডিং সহ খেলতে চেষ্টা করুন।


4
আপনি কি স্ট্রিং এনকোডিংয়ের বিষয়ে বিস্তারিত বলতে পারবেন? উদাহরণস্বরূপ, একটি কোড উদাহরণ সহ।
পিটার মর্টেনসেন

2

জার্মানির ক্ষেত্রে এটি উমলাউট (ä, ö, ü) থেকে ডায়াক্রিটিক্স অপসারণ করতে চায় নি। পরিবর্তে এগুলি দুটি অক্ষরের সংমিশ্রণ দ্বারা প্রতিস্থাপিত হয় (ae, oe, ue) উদাহরণস্বরূপ, সঠিক উচ্চারণের জন্য Björn কে Bjoern (Bjorn নয়) হিসাবে লেখা উচিত।

তার জন্য আমার পরিবর্তে একটি হার্ডকোডযুক্ত ম্যাপিং থাকবে, যেখানে আপনি প্রতিটি বিশেষ চরিত্র গোষ্ঠীর জন্য পৃথকভাবে প্রতিস্থাপনের নিয়মটি সংজ্ঞায়িত করতে পারেন।


0

ভবিষ্যতের রেফারেন্সের জন্য, এখানে একটি সি # এক্সটেনশন পদ্ধতি যা অ্যাকসেন্টগুলি সরিয়ে দেয়।

public static class StringExtensions
{
    public static string RemoveDiacritics(this string str)
    {
        return new string(
            str.Normalize(NormalizationForm.FormD)
                .Where(c => CharUnicodeInfo.GetUnicodeCategory(c) != 
                            UnicodeCategory.NonSpacingMark)
                .ToArray());
    }
}
static void Main()
{
    var input = "ŃŅŇ ÀÁÂÃÄÅ ŢŤţť Ĥĥ àáâãäå ńņň";
    var output = input.RemoveDiacritics();
    Debug.Assert(output == "NNN AAAAAA TTtt Hh aaaaaa nnn");
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.