সিগুয়ালাইজ করতে - কোনও শব্দকে বহুবচন করার জন্য সি # তে কি কোনও অ্যালগরিদম আছে?


106

সি # তে সিঙ্গুলারাইজ করার জন্য কি কোনও অ্যালগরিদম রয়েছে - কোনও শব্দকে বহুবচন করুন (ইংরেজী ভাষায়) অথবা এটি করার জন্য একটি নেট লাইব্রেরির উপস্থিতি রয়েছে (বিভিন্ন ভাষায়ও হতে পারে)?

উত্তর:


182

আপনার কাছে System.Data.Entity.Design.PluraizationServices.PluraizationService রয়েছে

আপডেট : পুরানো উত্তর আপডেটের দাবি রাখে। হিউম্যানাইজার এখন রয়েছে: https://github.com/MehdiK/Humanizer


2
হুম আপনি কি কোনও ডিজাইন ডিএলএলকে পুনরায় বিতরণ করতে, বা কেবল ব্যবহার করার অনুমতি দিচ্ছেন? আমি এটি জিজ্ঞাসা করেছি কারণ আমি জানি যে ডেভ এক্সপ্রেসের লাইসেন্স কোনও। ডিজাইন ডিএলএল পুনরায় বিতরণ নিষিদ্ধ করে।
পিয়েরে-আলাইন ভিজিয়েন্ট

58
আইএলএসপিএস সহ কোড খোলার মাধ্যমে ইংলিশপ্লুরিয়েশন সার্ভিস নামে একটি শ্রেণি দেখানো হয়েছে, যার প্রচুর ব্যতিক্রমী কেস সংজ্ঞায়িত হয়েছে এবং আকর্ষণীয় পড়ার জন্য তৈরি করে। আমি বিশেষত 'নিউমোনাল্ট্রামিকোসকোপিকসিলিকোভলকানোকোনিওসিস' পছন্দ করি, যা আমি নিজেকে আমার সত্তার মডেলগুলিতে সর্বদা ব্যবহার করে দেখতে পাই ...
8o

7
আমি কীভাবে এটি যুক্ত হয়েছিল তা অনুমান করতে পারি। একজন পরীক্ষক দেবের উপর একটি বাগ দায়ের করে বলেছিলেন যে এটি কথার সাথে কাজ করে না। দেব ঠিক করে দিয়েছেন। দুজনেই হাসি ভাগ করে নিল।
মার্লিনবার্ড

2
@ এমআরকেওয়্যাটকিন্স আরও বেশি 'সুপারকালিফ্রাগিলিস্টিসপিয়ালিডোসিয়াস' এর মতো শোনায়
করস্টিয়ান বোর্ম্যান

1
হিউম্যানাইজার একটি দুর্দান্ত সুপারিশ। আমি অবশ্যই এটির 15% এর মতো বাস্তবায়ন করেছি এটির অস্তিত্ব খুঁজে পাওয়ার আগে।
কেসি

18

আমি এটি কোনও বিশেষ ক্ষেত্রে ছাড়াই এস্পেরান্তোর জন্য করতে পারি!

string plural(string noun) { return noun + "j"; }

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


5
আপনি যদি কোনও ক্রিয়া বা ক্রিয়াবিধিতে উত্তীর্ণ হন তবে আপনার এটি ফেলে দেওয়া উচিত!
টিমভি

1
@ ম্যাট: অবশ্যই এটি মনোনয়নের ক্ষেত্রে উপযুক্ত; আমি বিশ্বাস করি যে অভিব্যক্তির ক্ষেত্রে এই পদ্ধতিটি প্রসারিত করা একজন চটজলদি পাঠকের পক্ষে সহজ for
গ্রেগ হিউগিল

14

বেশিরভাগ ওআরএম এর এতে ছুরিকাঘাত থাকে, যদিও তারা সাধারণত নিখুঁত হয় না। আমি জানি ক্যাসলের রয়েছে ইফ্লেক্টর ক্লাস, আপনি সম্ভবত আশপাশ করতে পারেন। এটি "নিখুঁতভাবে" করা সহজ কাজ নয় যদিও (ইংরেজি "নিয়ম" আসলে নিয়ম নয় :)), সুতরাং এটি নির্ভর করে যদি আপনি "যুক্তিসঙ্গত অনুমান" পদ্ধতির সাথে খুশি হন।


আপনার পরামর্শ থেকে আমি "ইনফ্লেক্টর" সন্ধান করেছি এবং এই অ্যান্ড্রুপেটারস নেট / ইনফ্লেকর্নেটটি পেয়েছি যা মূলত ক্যাসলের মতোই হবে
রনি

4
আসলে এটি মূলত একরকম নয়, এটির অভিন্ন।
ডেভিড ফেফার

12

আমি জাভাতে প্রতারণা করেছি - "আমি সেখানে কিছু ছিল" এর জন্য একটি সঠিক স্ট্রিং তৈরি করতে সক্ষম হতে চাই, তাই ফলসটি লিখেছিলাম। সামান্য ওভারলোড হওয়া ইউটিলিটি পদ্ধতি:

static public String pluralize(int val, String sng) {
    return pluralize(val,sng,(sng+"s"));
    }

static public String pluralize(int val, String sng, String plu) {
    return (val+" "+(val==1 ? sng : plu)); 
    }

অনুরোধ করা হয়েছে

System.out.println("There were "+pluralize(count,"something"));
System.out.println("You have broken "+pluralize(count,"knife","knives"));

এটি কেবল ব্যাকরণের একটি ছোট্ট অংশকে কভার করে, যদিও এটি কুইজ, পার্টি, অর্ধ, ইঁদুর, সূচক ইত্যাদির মতো শব্দের জন্য অ্যাকাউন্ট করে না এটি একটি ভাল প্রথম ছুরিকাঘাত, তবে আরও অনেক নিয়ম রয়েছে যা সম্ভবত প্রথমে প্রক্রিয়া করা উচিত should ।
জেরেমি এস

4
@ জেরেমি: কেন নয় ?: প্রিন্টলন ("আপনি পাস করেছেন" + একবচনপ্রকাশ (গণনা, "কুইজ", "কুইজ") + "এখন পর্যন্ত")
লরেন্স ডল

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

3
@ জেরেমি: অতএব "আমি প্রতারণা করেছি ..." এর নেতৃত্ব - কোনও ডাউনভোটের নিশ্চয়তা দেবে বলে মনে হয় না।
লরেন্স ডল

1
একমত। আমি আরও মনে করি যে প্রদত্ত তথ্যগুলি কার্যকর ছিল, সে কারণেই কোনও ডাউনওয়েট আমার কাছ থেকে আসে নি। আমি "এক ব্যক্তির জঞ্জাল ..." এর পংক্তিতে সাধারণভাবে কমে যাই না।
জেরেমি এস

10

আমি এর জন্য একটি নেট লাইব্রেরি তৈরি করেছি। নেট (সি #), যাকে বহুবচনকারী (আশ্চর্যজনকভাবে) বলা হয়।

এটি সম্পূর্ণ বাক্যগুলির সাথে কাজ করা বোঝায়, স্ট্রিংয়ের মতো কিছু For ফর্ম্যাট করে।

এটি মূলত এটির মতো কাজ করে:

var target = new Pluralizer();
var str = "There {is} {_} {person}.";

var single = target.Pluralize(str, 1);
Assert.AreEqual("There is 1 person.", single);

// Or use the singleton if you're feeling dirty:
var several = Pluralizer.Instance.Pluralize(str, 47);
Assert.AreEqual("There are 47 people.", several);

এটি এর চেয়ে আরও বেশি কিছু করতে পারে। আমার ব্লগে এটি সম্পর্কে আরও পড়ুন । এটি নুগেটেও উপলব্ধ।



4
হ্যাঁ, সেই লাইব্রেরিটি কেবলমাত্র একক শব্দ এবং কেবল বিশেষ্য (যদিও বহুবচনকারী অভ্যন্তরীণভাবে সেই শ্রেণিটি ব্যবহার করে)। এই গ্রন্থাগারটি সম্পূর্ণ বাক্যগুলি লেখার পক্ষে সহজ করে তোলে। আরও উদাহরণের জন্য আমার ব্লগ দেখুন। বহুবচনকারী.ইনস্ট্যান্স.প্লুরাইজ করুন ("{সে}} তার কাছে চলে যাচ্ছে | তাদের নিজ নিজ} {বাড়ি}।", 5)
জে কুইরিডো

শন উইলসন - আমার কম্পিউটার বর্তমানে অংশে আছে। আমি তা ফিরে পেতে ছুটে যাচ্ছি এবং এক বা দুদিনের মধ্যে আপডেট হয়ে যাব। মাঝামাঝি
জে কুইরিডো

8

আমি একসাথে বেত্রাঘাতের বহুবচনের উপর ভিত্তি করে বেত্রাঘাত করেছি। আপনি আমার ব্লগ পোস্টটি এখানে , বা গিথুব এ দেখতে পারেন

output = Formatting.Pluralization(100, "sausage"); 

3
ভাগ করে নেওয়ার জন্য ধন্যবাদ. খুশী আমার আর কোনও সমাবেশ উল্লেখ করার দরকার নেই reference
hofnarwillie

1
সহজ এবং সুন্দর !, কিন্তু এটি ব্যার্থ পৃথক বা আলাদা করা কার্যকারিতা
AMD

5

যেহেতু প্রশ্নটি সি # এর ছিল, সফ্টওয়্যার বানরের সমাধানের জন্য এখানে একটি দুর্দান্ত পার্থক্য রয়েছে (আবার কিছুটা "প্রতারণা" হলেও আমার পক্ষে এটি করার সবচেয়ে বাস্তব এবং পুনরায় ব্যবহারযোগ্য উপায়):

    public static string Pluralize(this string singularForm, int howMany)
    {
        return singularForm.Pluralize(howMany, singularForm + "s");
    }

    public static string Pluralize(this string singularForm, int howMany, string pluralForm)
    {
        return howMany == 1 ? singularForm : pluralForm;
    }

ব্যবহার নিম্নলিখিত:

"Item".Pluralize(1) = "Item"
"Item".Pluralize(2) = "Items"

"Person".Pluralize(1, "People") = "Person"
"Person".Pluralize(2, "People") = "People"

3

সাবসোনিক 3 এর একটি Inflectorশ্রেণি রয়েছে যা আমাকে পরিণত Personকরে মুগ্ধ করেছিলPeople । আমি উত্সটিতে উঁকি মেরে দেখেছি যে এটি একটি হার্ডকোডযুক্ত তালিকার সাথে স্বাভাবিকভাবেই কিছুটা প্রতারণা করে তবে ইংরেজিতে এটি করার একমাত্র উপায় এবং মানুষ কীভাবে তা করে - আমরা প্রতিটি শব্দের একবচন এবং বহুবচন মনে রাখি এবং কেবল কোনও নিয়ম প্রয়োগ করি না । পুংলিঙ্গ / মেয়েলি (/ নিরপেক্ষ) মিশ্রণটি যুক্ত করার জন্য এটি অনেক সহজ it's

এখানে একটি স্নিপেট রয়েছে:

AddSingularRule("^(ox)en", "$1");
AddSingularRule("(vert|ind)ices$", "$1ex");
AddSingularRule("(matr)ices$", "$1ix");
AddSingularRule("(quiz)zes$", "$1");

AddIrregularRule("person", "people");
AddIrregularRule("man", "men");
AddIrregularRule("child", "children");
AddIrregularRule("sex", "sexes");
AddIrregularRule("tax", "taxes");
AddIrregularRule("move", "moves");

AddUnknownCountRule("equipment");

এটি সরঞ্জামের উদাহরণের মতো কিছু শব্দের বহুবচন সমতুল্য না হিসাবে অ্যাকাউন্ট করে। আপনি সম্ভবত বলতে পারেন এটি একটি সহজ করে তোলেRegex 1 ব্যবহার প্রতিস্থাপন করে।

আপডেট করুন:
মনে হচ্ছে শব্দ অপেক্ষা ধীরগামী এর InflectorInfact হয় কাসল ActiveRecordInflector বর্গ!


2

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

[TestFixture]
public class PluralizationServiceTests
{
    [Test]
    public void Test01()
    {
        var service = PluralizationService.CreateService(CultureInfo.CurrentCulture);

        Assert.AreEqual("tigers", service.Pluralize("tiger"));
        Assert.AreEqual("processes", service.Pluralize("process"));
        Assert.AreEqual("fungi", service.Pluralize("fungus"));

        Assert.AreNotEqual("syllabi", service.Pluralize("syllabus")); // wrong pluralization
    }
}


1

মাইক্রোসফ্টের নর্থ উইন্ড উদাহরণ উদাহরণস্বরূপ:

 System.Data.Entity.Design.PluralizationServices.PluralizationService.CreateService(new System.Globalization.CultureInfo("en-US"));

সিঙ্গুলারিজ "অর্ডার_ডিটেলস" সিঙ্গুলারিজ করে না sএটি শেষে "অর্ডার_ডিটেলস" প্রদান করে । আশেপাশে কী কাজ?


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

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