String এবং Character Handling (স্ট্রিং এবং ক্যারেক্টার হ্যান্ডলিং)

প্রোলগ প্রোগ্রামিং (Prolog Programming) - Computer Programming

284

প্রোলগে স্ট্রিং (strings) এবং ক্যারেক্টারস (characters) সাধারণত অ্যাটমস (atoms) এবং লিস্টস (lists) আকারে ব্যবহৃত হয়। যদিও প্রোলগের জন্য স্ট্রিং এবং ক্যারেক্টারগুলির নিজস্ব গঠন নেই, তবে অ্যাটমস এবং লিস্টস প্রায়ই স্ট্রিং এবং ক্যারেক্টারের প্রতিনিধিত্ব হিসাবে ব্যবহৃত হয়। প্রোলগে স্ট্রিং এবং ক্যারেক্টার হ্যান্ডলিং করতে আমরা কিছু বিল্ট-ইন প্রেডিকেট এবং অপারেটর ব্যবহার করতে পারি।


১. স্ট্রিং এবং ক্যারেক্টার কী (What are Strings and Characters in Prolog)

  1. স্ট্রিং (String): প্রোলগে স্ট্রিং হল একাধিক ক্যারেক্টারের (characters) একটি সিকোয়েন্স। এটি একটি অ্যাটম হিসেবে ব্যবহৃত হয়, এবং এতে একটি বা একাধিক ক্যারেক্টার থাকতে পারে।
  2. ক্যারেক্টার (Character): এটি সাধারণত একক অক্ষর বা চিহ্নের প্রতিনিধিত্ব। প্রোলগে একক ক্যারেক্টার এ্যাটম হিসেবেই ব্যবহৃত হয়।

প্রোলগে স্ট্রিং বা ক্যারেক্টার মূলত এ্যাটমস এবং লিস্টস আকারে ম্যানিপুলেট করা হয়। যেমন, 'hello' একটি স্ট্রিং, যা এ্যাটম হিসেবে ব্যবহৃত হয়, এবং [104, 101, 108, 108, 111] হলো একটি লিস্ট যেটি ক্যারেক্টার কোডের প্রতিনিধিত্ব।


২. স্ট্রিং এবং ক্যারেক্টার সংজ্ঞা (Defining Strings and Characters)

প্রোলগে স্ট্রিং এবং ক্যারেক্টার সংজ্ঞায়িত করতে আমরা এ্যাটমস এবং লিস্টস ব্যবহার করতে পারি:

  1. স্ট্রিং (Atom as String): প্রোলগে স্ট্রিংগুলি এ্যাটম হিসেবেই ব্যবহৃত হয়। যেমন:

    'hello'.

    এটি একটি স্ট্রিং যা hello শব্দের প্রতিনিধিত্ব।

  2. ক্যারেক্টার (Character as Atom): একক ক্যারেক্টার প্রোলগে এ্যাটম হিসাবে ব্যবহৃত হয়:

    'a'.

    এটি একটি ক্যারেক্টার যা a চিহ্নের প্রতিনিধিত্ব।

  3. ক্যারেক্টার লিস্ট (Character List): প্রোলগে ক্যারেক্টারগুলি একটি লিস্ট হিসেবেও হতে পারে। যেমন:

    [104, 101, 108, 108, 111].

    এখানে 104, 101, 108, 108, 111 হলো ASCII কোড যা স্ট্রিং hello এর জন্য।


৩. স্ট্রিং এবং ক্যারেক্টার ম্যানিপুলেশন (Manipulating Strings and Characters)

প্রোলগে স্ট্রিং এবং ক্যারেক্টার ম্যানিপুলেশন করতে কিছু বিল্ট-ইন প্রেডিকেট এবং ফাংশন ব্যবহৃত হয়।

১. স্ট্রিং এবং ক্যারেক্টার ম্যাচিং (String and Character Matching)

এ্যাটম এবং স্ট্রিং এর মধ্যে ম্যাচিং করতে = অপারেটর ব্যবহার করা হয়।

?- 'hello' = 'hello'.

ফলাফল:

true.

এটি বলে যে, 'hello' এবং 'hello' দুটি স্ট্রিং একে অপরের সমান।

২. স্ট্রিং এর দৈর্ঘ্য (Length of a String)

প্রোলগে স্ট্রিং বা লিস্টের দৈর্ঘ্য বের করতে length/2 প্রেডিকেট ব্যবহার করা হয়।

?- length('hello', Length).

ফলাফল:

Length = 5.

এখানে, 'hello' স্ট্রিংটির দৈর্ঘ্য ৫।

৩. স্ট্রিং কনক্যাটেনেশন (String Concatenation)

স্ট্রিং যোগ করতে প্রোলগে append/3 প্রেডিকেট ব্যবহার করা হয়। এটি দুটি লিস্ট বা স্ট্রিংকে একত্রিত করে একটি নতুন স্ট্রিং তৈরি করে।

?- append('hello', ' world', Result).

ফলাফল:

Result = 'hello world'.

এখানে, 'hello' এবং 'world' স্ট্রিং দুটি যোগ করা হয়েছে এবং ফলস্বরূপ 'hello world' পাওয়া গেছে।

৪. ক্যারেক্টার কোড থেকে স্ট্রিং তৈরি (Creating String from Character Code)

একটি ক্যারেক্টার কোড ব্যবহার করে স্ট্রিং তৈরি করতে char_code/2 ব্যবহার করা হয়।

?- char_code('a', Code).

ফলাফল:

Code = 97.

এখানে, 'a' ক্যারেক্টারের ASCII কোড 97

৫. স্ট্রিং বা ক্যারেক্টারকে লিস্টে রূপান্তর (Convert String to List)

স্ট্রিংকে একটি ক্যারেক্টার লিস্টে রূপান্তর করতে প্রোলগে সরাসরি স্ট্রিং হিসাবে একটি লিস্ট প্রদান করা যায়।

?- string_chars('hello', List).

ফলাফল:

List = ['h', 'e', 'l', 'l', 'o'].

এখানে, 'hello' স্ট্রিংটি ['h', 'e', 'l', 'l', 'o'] লিস্টে রূপান্তরিত হয়েছে।


৪. স্ট্রিং এবং ক্যারেক্টার সম্পর্কিত অন্যান্য প্রেডিকেটস

  1. atom_chars/2: একটি এ্যাটম কে ক্যারেক্টার লিস্ট তে রূপান্তর করে।

    ?- atom_chars('hello', Chars).

    ফলাফল:

    Chars = ['h', 'e', 'l', 'l', 'o'].
  2. char_code/2: একটি ক্যারেক্টার কে তার ASCII কোড এ রূপান্তর করে বা একটি ASCII কোডকে তার ক্যারেক্টার তে রূপান্তর করে।

    ?- char_code('a', Code).

    ফলাফল:

    Code = 97.
  3. string_concat/3: দুটি স্ট্রিংকে যোগ করে একটি নতুন স্ট্রিং তৈরি করে।

    ?- string_concat('hello', ' world', Result).

    ফলাফল:

    Result = 'hello world'.

সারসংক্ষেপ

স্ট্রিং এবং ক্যারেক্টার হ্যান্ডলিং প্রোলগে সহজ এবং কার্যকরী। প্রোলগে স্ট্রিং ও ক্যারেক্টার ম্যানিপুলেশন করার জন্য এ্যাটমস, লিস্টস, এবং কিছু বিল্ট-ইন প্রেডিকেট যেমন length/2, append/3, char_code/2, string_chars/2 ব্যবহার করা হয়। প্রোলগে স্ট্রিং এবং ক্যারেক্টার হ্যান্ডলিংয়ের মাধ্যমে আমরা অনেক লজিক্যাল সম্পর্ক এবং ডেটা প্রসেসিং সহজে করতে পারি।

Content added By

প্রোলগে স্ট্রিং ব্যবহারের জন্য কিছু বিশেষ পদ্ধতি এবং ফাংশন আছে। যদিও প্রোলগ ঐতিহ্যগতভাবে স্ট্রিংয়ের সাথে কাজ করতে সরাসরি ডিজাইন করা হয়নি, তবে এটি চরিত্রের তালিকা (character lists) বা অ্যাটম (atom) হিসেবে স্ট্রিং ব্যবহার করতে পারে। প্রোলগে স্ট্রিং হল এক বা একাধিক চরিত্রের একটি লম্বা সিকোয়েন্স, যা অ্যাটম বা চরিত্রের লিস্ট হিসেবে কাজ করতে পারে। স্ট্রিং এবং অ্যাটম ব্যবহারের মধ্যে কিছু পার্থক্য থাকে, তবে সাধারণভাবে, প্রোলগে স্ট্রিং অ্যাটম হিসেবে প্রক্রিয়া করা হয়।

স্ট্রিং এর ব্যবহার:

  1. স্ট্রিং তৈরি:
    প্রোলগে স্ট্রিং তৈরি করার সময় সাধারণত এটি অ্যাটম বা লিস্ট হিসেবে ব্যবহৃত হয়। যেমন:

    ?- Atom = 'hello'.

    এখানে, 'hello' একটি অ্যাটম। অ্যাটমের মধ্যে কোনও স্থান বা বিশেষ চরিত্র ব্যবহার করা হলে সেগুলি স্ট্রিং হিসেবেই কাজ করবে।

  2. স্ট্রিংকে লিস্টে রূপান্তর:
    প্রোলগে স্ট্রিং হলো আসলে একটি চরিত্রের লিস্ট, যার প্রতিটি উপাদান একটি চরিত্র (character)।

    উদাহরণ:

    ?- String = "hello".
    String = [104, 101, 108, 108, 111].

    এখানে, "hello" স্ট্রিংটি আসলে একটি চরিত্রের লিস্ট [104, 101, 108, 108, 111] রূপে কনভার্ট হয়, যেখানে প্রতিটি সংখ্যা একটি ASCII ভ্যালু

  3. স্ট্রিংকে অ্যাটমে রূপান্তর:
    প্রোলগে স্ট্রিং এবং অ্যাটমের মধ্যে পার্থক্য থাকে, তবে সাধারণত atom_string/2 ব্যবহার করে স্ট্রিংকে অ্যাটমে রূপান্তর করা যায়।

    উদাহরণ:

    ?- atom_string(hello, "hello").
    true.

    এখানে, atom_string/2 ব্যবহার করে "hello" স্ট্রিংকে hello অ্যাটমে রূপান্তর করা হয়েছে।


স্ট্রিং এর সাথে কাজ করার কিছু প্রাথমিক ফাংশন:

  1. অ্যাটম এবং স্ট্রিং এর মধ্যে রূপান্তর:
    • atom_string/2: অ্যাটমকে স্ট্রিংয়ে রূপান্তর করতে।

      atom_string(Atom, String).
    • string_atom/2: স্ট্রিংকে অ্যাটমে রূপান্তর করতে।

      string_atom(String, Atom).
  2. স্ট্রিং এর দৈর্ঘ্য বের করা:
    স্ট্রিং এর দৈর্ঘ্য বের করতে string_length/2 ব্যবহার করা হয়।

    string_length("hello", Length).

    আউটপুট:

    Length = 5.
  3. স্ট্রিংয়ের উপাদান অ্যাক্সেস করা:
    স্ট্রিংয়ের কোনো নির্দিষ্ট চরিত্রে অ্যাক্সেস করতে sub_atom/5 ব্যবহার করা হয়।

    sub_atom("hello", 1, 3, _, Substring).

    এখানে, 1 হল শুরু, 3 হল দৈর্ঘ্য, এবং Substring হবে "ell"

  4. স্ট্রিংয়ের অংশ বের করা:
    sub_string/5 ব্যবহার করে স্ট্রিংয়ের একটি অংশ বের করা যায়।

    sub_string("hello", 1, 3, _, Substring).

    আউটপুট:

    Substring = "ell".
  5. স্ট্রিংয়ে ক্যারেক্টার যোগ করা:
    স্ট্রিংয়ে নতুন ক্যারেক্টার যোগ করার জন্য string_concat/3 ব্যবহার করা হয়।

    string_concat("hello", " world", FullString).

    আউটপুট:

    FullString = "hello world".
  6. স্ট্রিং গঠন:
    প্রোলগে স্ট্রিং গঠন করতে string/1 ব্যবহার করা হয়, যা বিভিন্ন উপাদানকে একত্রিত করে একটি স্ট্রিং তৈরি করতে সাহায্য করে।

    string([104, 101, 108, 108, 111], String).

    আউটপুট:

    String = "hello".

স্ট্রিং এবং অ্যাটমের মধ্যে পার্থক্য:

  • স্ট্রিং সাধারণত চরিত্রের লিস্ট (character list) হিসেবে প্রতিনিধিত্ব করা হয় এবং এর মধ্যে স্পেস বা বিশেষ চরিত্র থাকতে পারে।
  • অ্যাটম প্রোলগের জন্য একটি মৌলিক একক হিসেবে ব্যবহৃত হয় এবং সাধারণত এটি একা শব্দ বা প্রতীক হিসেবে ব্যবহৃত হয়। একটি অ্যাটম স্পেস বা বিশেষ চরিত্র ধারণ করতে পারে না।
  • স্ট্রিং যদি স্পেস বা বিশেষ চরিত্র ধারণ করে, তবে এটি লিস্ট বা অ্যাটম এর তুলনায় আলাদা।

সারসংক্ষেপ:

প্রোলগে স্ট্রিং এবং অ্যাটম দুটি আলাদা ধারণা হলেও, স্ট্রিং মূলত চরিত্রের লিস্ট হিসেবে ব্যবহৃত হয় এবং প্রোলগের গাণিতিক ও যুক্তির কাজ করার জন্য স্ট্রিংয়ের সাথে কাজ করা সহজ। প্রোলগে স্ট্রিং অপারেশন যেমন দৈর্ঘ্য বের করা, অংশ বের করা, স্ট্রিংয়ে ক্যারেক্টার যোগ করা ইত্যাদি কিছু সহজ ফাংশনের মাধ্যমে করা সম্ভব। string/1, string_length/2, string_concat/3 ইত্যাদি ফাংশন ব্যবহার করে আপনি স্ট্রিংয়ের সাথে কাজ করতে পারেন।

Content added By

প্রোলগে Strings এবং Character Lists ম্যানিপুলেশন গুরুত্বপূর্ণ ভূমিকা পালন করে, বিশেষ করে যখন প্রোগ্রামিংয়ে টেক্সট, ডেটা প্রক্রিয়াকরণ এবং পাঠ্য বিশ্লেষণ (text parsing) এর কাজ করা হয়। প্রোলগে, Strings আসলে Character Lists (অথবা অ্যাটম) হিসাবে সংরক্ষিত হয় এবং তাদেরকে কার্যকরীভাবে ম্যানিপুলেট করা হয়।

এখানে আমরা প্রোলগে Strings এবং Character Lists ম্যানিপুলেট করার কিছু সাধারণ কৌশল এবং উদাহরণ দেখব।


Character Lists in Prolog

প্রোলগে Character Lists আসলে একটি লিস্ট যেখানে প্রতিটি উপাদান একটি **অক্ষর (character)**। প্রোলগে Character List বলতে সাধারণত একটি লিস্ট (যেমন, [a, b, c]) বোঝানো হয়, যেখানে প্রতিটি উপাদান একটি অক্ষর বা চরিত্র।

Character List তৈরি:

একটি সোজাসুজি character list তৈরি করা যেতে পারে:

?- List = [a, b, c].

এখানে, List হবে [a, b, c], যা একটি Character List


Strings in Prolog

Strings প্রোলগে আসলে Character Lists হিসেবেই কাজ করে। একটি string হল একটি তালিকা যার প্রতিটি উপাদান একটি চরিত্র (character), এবং এটি একটি এ্যাটম (atom) হিসাবে ধারণ করা হয়। যেমন, "hello" প্রোলগে একটি string হিসেবে [h, e, l, l, o] এর সমান।

String তৈরি:

?- String = "hello".

এখানে, String হবে [h, e, l, l, o]


Strings এবং Character Lists ম্যানিপুলেশন:

১. String Length বের করা:

আপনি string length বা character list length বের করতে পারেন length/2 predicate ব্যবহার করে:

?- length("hello", Length).

আউটপুট:

Length = 5.

এখানে, "hello" এর দৈর্ঘ্য ৫।

২. String এর প্রথম এবং শেষ অক্ষর বের করা:

আপনি একটি Character List বা String থেকে প্রথম এবং শেষ অক্ষর বের করতে পারেন।

প্রথম অক্ষর বের করা:

?- string_chars("hello", [Head|_]).

আউটপুট:

Head = h.

শেষ অক্ষর বের করা:

?- string_chars("hello", [_|Tail]), last(Tail, Last).

আউটপুট:

Last = o.

৩. String যোগ করা (Concatenation):

আপনি string গুলিকে concat বা যোগ করতে পারেন append/3 ব্যবহার করে:

?- append("hello", " world", Result).

আউটপুট:

Result = "hello world".

এখানে, "hello" এবং " world" যোগ হয়ে "hello world" হবে।

৪. String থেকে Character List বের করা:

আপনি একটি String থেকে Character List তৈরি করতে পারেন বা বিপরীত কাজ করতে পারেন।

String থেকে Character List তৈরি:

?- string_chars("hello", List).

আউটপুট:

List = [h, e, l, l, o].

৫. Character List থেকে String তৈরি:

একটি Character List থেকে আবার একটি String তৈরি করতে string_chars/2 ব্যবহার করা হয়।

?- string_chars(String, [h, e, l, l, o]).

আউটপুট:

String = "hello".

৬. String বা Character List এর মধ্যে সাবস্ট্রিং খোঁজা (Substring Search):

আপনি একটি substring খুঁজে বের করতে পারেন sub_string/5 ব্যবহার করে:

?- sub_string("hello world", 0, 5, _, SubStr).

আউটপুট:

SubStr = "hello".

এখানে, sub_string/5 প্রথম ৫টি অক্ষর "hello" কে আলাদা করে।

৭. Character List থেকে শব্দ বিভক্ত করা:

আপনি একটি character list বা string থেকে বিভিন্ন অংশ বিভক্ত করতে পারেন। উদাহরণস্বরূপ, একটি স্ট্রিং থেকে শব্দ বিভক্ত করতে split_string/4 ব্যবহার করা যেতে পারে:

?- split_string("hello world prolog", " ", "", List).

আউটপুট:

List = ["hello", "world", "prolog"].

এখানে, split_string/4 ফাংশনটি স্ট্রিংটি স্পেস দিয়ে বিভক্ত করেছে এবং ফলস্বরূপ একটি list of words তৈরি হয়েছে।

৮. String Replace করা:

একটি স্ট্রিংয়ে শব্দ প্রতিস্থাপন করতে replace/4 ব্যবহার করতে পারেন:

?- sub_string("hello world", Before, Length, After, "world").

এটি "world" কে "hello" থেকে মুছে "world" এর অবস্থান বের করবে।


String এবং Character List এর মধ্যে পার্থক্য:

  • String প্রোলগে Character List হিসেবে প্রতিনিধিত্ব করা হয়। একটি স্ট্রিং আসলে একটি [h, e, l, l, o] টাইপের চরিত্রের লিস্ট।
  • Strings কে " " (ডাবল কোট) দিয়ে ধারণ করা হয়, এবং Character Lists কে [ ] (স্কোয়ার ব্র্যাকেট) দিয়ে।

সারসংক্ষেপ:

প্রোলগে Strings এবং Character Lists ম্যানিপুলেশন অনেক গুরুত্বপূর্ণ এবং প্রোগ্রামিংয়ের বিভিন্ন ক্ষেত্রে বিশেষভাবে টেক্সট প্রক্রিয়াকরণে ব্যবহৃত হয়। আপনি strings এবং character lists এর দৈর্ঘ্য বের করা, সংযোগ করা, সাবস্ট্রিং খুঁজে বের করা, এবং আরও অনেক কাজ করতে পারেন। প্রোলগের string_chars/2, append/3, sub_string/5, split_string/4 ইত্যাদি ফাংশন এবং অপারেটরগুলো ব্যবহার করে সহজে এই ম্যানিপুলেশনগুলো করা যায়।

Content added By

প্রোলগ মূলত লজিক্যাল প্রোগ্রামিং ভাষা হলেও এটি স্ট্রিং ম্যানিপুলেশন সম্পর্কিত কিছু মৌলিক কাজ যেমন string concatenation, substring extraction, এবং pattern matching করতে সক্ষম। এই কাজগুলো সাধারণত লিস্ট বা এটম হিসেবে স্টোর করা স্ট্রিং-এর মাধ্যমে করা হয়। প্রোলগে স্ট্রিং ম্যানিপুলেশন কিভাবে করা যায় তা নিম্নে আলোচনা করা হয়েছে।

১. String Concatenation (স্ট্রিং কনক্যাটেনেশন)

স্ট্রিং কনক্যাটেনেশন বা দুটি স্ট্রিংকে একত্রিত করা প্রোলগে সাধারণত লিস্ট বা এটম হিসাবে ব্যবহৃত হয়। append/3 প্রেডিকেট ব্যবহার করে আপনি দুটি লিস্ট বা স্ট্রিং কনক্যাটেনেট করতে পারেন।

String Concatenation এর উদাহরণ:

স্ট্রিং_কনক্যাটেনেশন(X, Y, Z) :- append(X, Y, Z).

এখানে, append/3 প্রেডিকেটটি দুইটি লিস্ট বা এটম X এবং Y একত্রিত করে একটি নতুন লিস্ট বা স্ট্রিং Z তৈরি করে।

উদাহরণ:

?- append('Hello', 'World', X).

আউটপুট:

X = 'HelloWorld'.

এখানে, দুটি স্ট্রিং 'Hello' এবং 'World' একত্রিত হয়ে 'HelloWorld' তৈরি হয়েছে।

২. Substring (স্ট্রিং সাবস্ট্রিং)

প্রোলগে সাবস্ট্রিং বের করার জন্য sub_atom/5 প্রেডিকেট ব্যবহার করা হয়। এটি একটি স্ট্রিং থেকে একটি অংশ বের করার জন্য ব্যবহার করা হয়।

Substring Extraction এর উদাহরণ:

substring(Original, Start, Length, Substring) :- sub_atom(Original, Start, Length, _, Substring).

এখানে, sub_atom/5 এর মাধ্যমে Original স্ট্রিং থেকে Start পজিশন থেকে Length দৈর্ঘ্যের সাবস্ট্রিং Substring বের করা হয়।

উদাহরণ:

?- sub_atom('HelloWorld', 0, 5, _, Substring).

আউটপুট:

Substring = 'Hello'.

এখানে, HelloWorld স্ট্রিংয়ের প্রথম 5 অক্ষর বের করা হয়েছে, ফলে 'Hello' সাবস্ট্রিং পাওয়া গেছে।

Substrings with Remaining Part:

sub_atom/5 প্রেডিকেটটি স্ট্রিং থেকে সাবস্ট্রিং বের করার পাশাপাশি বাকি অংশও বের করতে পারে। এর মাধ্যমে আপনি বাকি অংশের position বা length নির্ধারণ করতে পারেন।

উদাহরণ:

?- sub_atom('HelloWorld', 0, 5, 5, Substring).

আউটপুট:

Substring = 'Hello'.

এখানে, প্রথম 5 অক্ষরের সাবস্ট্রিং 'Hello' বের করা হয়েছে এবং বাকি অংশ 'World' দ্বারা নির্ধারিত।

৩. Pattern Matching (স্ট্রিং প্যাটার্ন ম্যাচিং)

প্রোলগে স্ট্রিং প্যাটার্ন ম্যাচিং সাধারণত sub_atom/5 প্রেডিকেটের মাধ্যমে করা হয়, যেখানে একটি স্ট্রিংয়ের মধ্যে কোনো নির্দিষ্ট প্যাটার্ন খুঁজে বের করা হয়। আপনি একটি স্ট্রিংয়ে নির্দিষ্ট প্যাটার্ন খুঁজে বের করতে sub_atom/5 ব্যবহার করতে পারেন।

Pattern Matching এর উদাহরণ:

স্ট্রিং_প্যাটার্ন_ম্যাচ(Original, Pattern) :-
    sub_atom(Original, _, _, _, Pattern).

এখানে, sub_atom/5 এর মাধ্যমে আমরা Pattern নামক সাবস্ট্রিংটি Original স্ট্রিংয়ের মধ্যে খুঁজে বের করছি।

উদাহরণ:

?- স্ট্রিং_প্যাটার্ন_ম্যাচ('HelloWorld', 'World').

আউটপুট:

true.

এখানে, 'World' প্যাটার্ন 'HelloWorld' স্ট্রিংয়ের মধ্যে মিলে গেছে, তাই আউটপুট true রিটার্ন করেছে।

Pattern Matching with Start and Length:

আপনি যদি স্ট্রিংয়ের মধ্যে কোথায় প্যাটার্ন শুরু হচ্ছে এবং তার দৈর্ঘ্য জানতে চান, তাহলে sub_atom/5 ব্যবহার করে এটি বের করতে পারেন।

উদাহরণ:

?- sub_atom('HelloWorld', Start, Length, _, 'World').

আউটপুট:

Start = 5,
Length = 5.

এখানে, 'World' প্যাটার্ন 'HelloWorld' স্ট্রিংয়ের 5 তম পজিশনে শুরু হচ্ছে এবং তার দৈর্ঘ্য 5।

String Manipulation Related Operators:

  • atom_concat/3: দুটি এটমকে একত্রিত করে একটি নতুন এটম তৈরি করে।
  • atom_length/2: একটি এটমের দৈর্ঘ্য বের করে।
  • sub_atom/5: একটি স্ট্রিং বা এটম থেকে সাবস্ট্রিং বের করার জন্য ব্যবহৃত হয়।

সারসংক্ষেপ:

প্রোলগে String Concatenation, Substring এবং Pattern Matching গুরুত্বপূর্ণ স্ট্রিং ম্যানিপুলেশন অপারেশন যা আপনাকে স্ট্রিংয়ের সাথে কাজ করার জন্য বিভিন্ন সুবিধা প্রদান করে। append/3, sub_atom/5, এবং atom_concat/3 প্রেডিকেটগুলির মাধ্যমে আপনি স্ট্রিং যুক্ত করতে, সাবস্ট্রিং বের করতে, এবং স্ট্রিং প্যাটার্নের সাথে মেলাতে পারবেন। এগুলি প্রোগ্রামিংয়ে স্ট্রিং ম্যানিপুলেশনকে সহজ এবং কার্যকরী করে তোলে।

Content added By

টেক্সট প্রোসেসিং এবং ন্যাচারাল ল্যাঙ্গুয়েজ পার্সিং (Natural Language Parsing) প্রোলগের জন্য একটি অত্যন্ত শক্তিশালী ক্ষেত্র, কারণ প্রোলগের লজিক্যাল প্রোগ্রামিং ক্ষমতা এবং প্যাটার্ন ম্যাচিং সুবিধা এই ধরনের সমস্যার সমাধানে খুবই উপকারী। প্রোলগকে ব্যবহার করে আপনি টেক্সট, স্ট্রিং, ডেটা বা ব্যাকট্র্যাকিংয়ের মাধ্যমে লজিক্যাল সম্পর্ক অনুসন্ধান করতে পারেন, যা বিভিন্ন ভাষাগত প্রক্রিয়া এবং ভাষা বিশ্লেষণে সহায়তা করে।

টেক্সট প্রোসেসিং (Text Processing)

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

প্রোলগে টেক্সট প্রোসেসিংয়ের কিছু কৌশল:

  1. স্ট্রিং ম্যানিপুলেশন:
    প্রোলগে স্ট্রিং বা টেক্সটের উপর বিভিন্ন অপারেশন করা যেতে পারে, যেমন স্ট্রিং ম্যাচিং, সাবস্ট্রিং খোঁজা, স্ট্রিংয়ের দৈর্ঘ্য বের করা ইত্যাদি।
    • স্ট্রিংয়ের দৈর্ঘ্য বের করা:

      স্ট্রিং_দৈর্ঘ্য(String, Length) :- string_length(String, Length).
    • স্ট্রিং সাবস্ট্রিং খোঁজা:

      সাবস্ট্রিং(Substring, String) :- sub_string(String, _, _, _, Substring).
    • স্ট্রিংয়ের অক্ষর মাপা:

      প্রথম_অক্ষর(String, Char) :- sub_string(String, 0, 1, _, Char).
  2. টেক্সটের প্রতিস্থাপন:
    প্রোলগে স্ট্রিংয়ের কিছু অংশ পরিবর্তন করতে string_replace/4 প্রেডিকেট ব্যবহার করা যায়।

    ?- string_replace("hello world", "world", "universe", Result).
    Result = "hello universe".
  3. টেক্সট ফাইলের সাথে কাজ করা:
    প্রোলগে আপনি টেক্সট ফাইল থেকে ডেটা পড়তে, লিখতে এবং ফাইলের মধ্যে কিছু পরিবর্তন করতে পারেন।
    • ফাইল পড়া:

      read_file(FileName, Content) :-
          open(FileName, read, Stream),
          read_string(Stream, _, Content),
          close(Stream).
    • ফাইল লেখা:

      write_to_file(FileName, Content) :-
          open(FileName, write, Stream),
          write(Stream, Content),
          close(Stream).

ন্যাচারাল ল্যাঙ্গুয়েজ পার্সিং (Natural Language Parsing)

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

প্রোলগে ন্যাচারাল ল্যাঙ্গুয়েজ পার্সিংয়ের কৌশল:

  1. Context-Free Grammar (CFG):
    প্রোলগে আপনি Context-Free Grammar (CFG) ব্যবহার করে সিনট্যাক্টিক বিশ্লেষণ করতে পারেন। এর মাধ্যমে একটি বাক্যের গঠনগত কাঠামো নির্ধারণ করা যায়। এটি ভাষার বিভিন্ন অংশের সম্পর্ক স্থাপন করতে সহায়তা করে।

    • উদাহরণস্বরূপ, একটি সাধারণ বাক্য গঠন:

      sentence(S) --> noun_phrase(NP), verb_phrase(VP).
      noun_phrase(NP) --> [the], noun(N).
      verb_phrase(VP) --> verb(V), noun_phrase(NP).
      noun(N) --> [dog]; [cat].
      verb(V) --> [chases]; [catches].

    এখানে, sentence হলো একটি বাক্য যা noun_phrase এবং verb_phrase দ্বারা গঠিত, এবং তাদের সংজ্ঞা দেওয়া হয়েছে noun এবং verb দিয়ে।

    কোয়ারি:

    ?- phrase(sentence, [the, dog, chases, the, cat]).

    আউটপুট:

    true.
  2. পার্সিং ট্রি (Parsing Tree):
    প্রোলগে আপনি একটি বাক্যের পার্সিং ট্রি তৈরি করতে পারেন, যা বাক্যের গঠন বিশ্লেষণ করে। এটি বিশেষভাবে ব্যবহারকারীকে বাক্যের কাঠামো বোঝাতে সাহায্য করে।
    • উদাহরণ:

      sentence(S) --> noun_phrase(NP), verb_phrase(VP), {S =.. [sentence, NP, VP]}.
      noun_phrase(NP) --> [the], noun(N), {NP = [the, N]}.
      verb_phrase(VP) --> verb(V), noun_phrase(NP), {VP = [V, NP]}.
      noun(N) --> [dog]; [cat].
      verb(V) --> [chases]; [catches].

      এখানে, S =.. [sentence, NP, VP] একটি পার্সিং ট্রি তৈরি করবে।

  3. Semantic Parsing:
    প্রোলগের সাহায্যে আপনি সেমান্টিক পার্সিংও করতে পারেন, যেখানে ভাষার গঠন বিশ্লেষণের পর তার মান বের করা হয়। এর জন্য আপনি rule-based systems ব্যবহার করতে পারেন।
    • উদাহরণস্বরূপ, noun_phrase এবং verb_phrase সম্পর্কের জন্য একটি সেমান্টিক মান বের করা:

      noun_phrase(NP, N) --> [the], noun(N), {NP = N}.
      verb_phrase(VP, V) --> verb(V), noun_phrase(NP, N), {VP = [V, N]}.

      এখানে, একটি সেমান্টিক মান সঠিকভাবে বের করা হচ্ছে বাক্যের noun_phrase এবং verb_phrase থেকে।


সারসংক্ষেপ:

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

Content added By
Promotion

Are you sure to start over?

Loading...