মরিচা + টোকি পোনা
কোন ভাষা গৃহীত, তাই আমি একটি প্রোগ্রাম লেখেন মরচে যে কিছু বাক্য উত্পন্ন ত্বকী পোনা ।
টোকি পোনা একটি ন্যূনতম প্রাকৃতিক ভাষা তৈরি করার চেষ্টা এবং এটির একটি দুর্দান্ত সাধারণ এবং নিয়মিত ব্যাকরণ রয়েছে। এটি এই প্রতিযোগিতার জন্য খুব দরকারী সম্পত্তি!
use std::rand;
#[deriving(Rand)]
struct Phrase { a: Option<~GNominal>, b: ~Sujet, c: ~Predicat }
#[deriving(Rand)]
enum Sujet { A(~GNominal), B(~SCompose) }
#[deriving(Rand)]
enum Predicat { C(~GVerbal), D(~PCompose) }
#[deriving(Rand)]
struct SCompose { a: ~Sujet, b: ~Sujet }
#[deriving(Rand)]
struct PCompose { a: ~Predicat, b: ~Predicat }
#[deriving(Rand)]
struct GNominal { a: ~nom::Nom, b: Multi<~adjectif::Adjectif> }
#[deriving(Rand)]
struct GVerbal { a: ~verbe::Verbe, b: Multi<~adjectif::Adjectif>, c: Multi<~ODirect> }
#[deriving(Rand)]
struct ODirect { a: ~GNominal}
#[deriving(Rand)]
enum Multi<T> { Zero, One(T), Two((T,T)) }
mod nom {
#[deriving(Rand)]
#[deriving(ToStr)]
pub enum Nom {akesi,ala,ale,anpa,ante,ijo,ike,ilo,insa,jaki,jan,jo,kala,kalama,kama,kasi,ken,kili,kiwen,ko,kon,kule,kulupu,lape,lawa,len,lete,linja,lipu,luka,lupa,ma,mama,mani,meli,mi,mije,moku,moli,monsi,mun,musi,mute,nanpa,nasin,nena,nimi,noka,oko,olin,ona,pakala,pali,palisa,pana,pilin,pimeja,pini,pipi,poka,poki,pona,seli,selo,sewi,sijelo,sike,sina,sinpin,sitelen,sona,soweli,suli,suno,supa,suwi,tan,tawa,telo,tenpo,toki,tomo,tu,unpa,uta,utala,walo,wan,waso,wawa,weka,wile}
}
mod verbe {
#[deriving(Rand)]
#[deriving(ToStr)]
pub enum Verbe {ante,awen,ijo,ike,jaki,jan,jo,kalama,kama,ken,kepeken,kule,kute,lape,lawa,lete,lili,lon,lukin,moku,moli,musi,mute,nasa,olin,open,pakala,pali,pana,pilin,pimeja,pini,pona,seli,sin,sitelen,sona,suli,suwi,tawa,telo,toki,tu,unpa,utala,wan,wawa,weka,wile,}
}
mod adjectif {
#[deriving(Rand)]
#[deriving(ToStr)]
pub enum Adjectif {ala,ale,anpa,ante,awen,ike,insa,jaki,jan,jelo,kama,kin,kiwen,kon,kule,kute,kulupu,lape,laso,lawa,lete,lili,linja,loje,luka,lukin,mama,meli,mi,mije,moli,monsi,mun,musi,mute,nasa,ni,olin,ona,pali,pimeja,pini,poka,pona,sama,seli,sewi,sike,sin,sina,suli,suwi,taso,tawa,toki,tomo,unpa,uta,walo,wan,wawa,weka,wile,}
}
impl ToStr for Phrase {
fn to_str(&self) -> ~str {
self.a.as_ref().map_or(~"", |g| format!("{:s} la ", g.to_str()))
+ format!("{:s} li {:s}", self.b.to_str(), self.c.to_str())
}
}
impl ToStr for Sujet {
fn to_str(&self) -> ~str {
match *self {
A(ref v) => v.to_str(),
B(ref v) => v.to_str(),
}
}
}
impl ToStr for Predicat {
fn to_str(&self) -> ~str {
match *self {
C(ref v) => v.to_str(),
D(ref v) => v.to_str(),
}
}
}
impl ToStr for SCompose {
fn to_str(&self) -> ~str {
format!("{:s} en {:s}", self.a.to_str(), self.b.to_str())
}
}
impl ToStr for PCompose {
fn to_str(&self) -> ~str {
format!("{:s} li {:s}", self.a.to_str(), self.b.to_str())
}
}
impl ToStr for GNominal {
fn to_str(&self) -> ~str {
format!("{:s} {:s}", self.a.to_str(), self.b.to_str())
}
}
impl ToStr for GVerbal {
fn to_str(&self) -> ~str {
format!("{:s} {:s} {:s}", self.a.to_str(), self.b.to_str(), self.c.to_str())
}
}
impl ToStr for ODirect {
fn to_str(&self) -> ~str {
format!("e {:s}", self.a.to_str())
}
}
impl<T: ToStr> ToStr for Multi<~T> {
fn to_str(&self) -> ~str {
match *self {
Zero => ~"",
One(ref v) => v.to_str(),
Two((ref v,ref w)) => format!("{:s} {:s}", v.to_str(), w.to_str()),
}
}
}
fn main() {
let phrase = rand::random::<Phrase>();
println!("{:s}\n{:?}", phrase.to_str(), phrase);
}
আমি টোকি পোনা কথা বলি না, তবে উইকিপিডিয়ায় টোকি পোনা সিন্টেক্সটি বিএনএফ নিয়মের একটি সেট হিসাবে পেয়েছি । আমি প্রতিটি বিএনএফ নিয়মের জন্য একটি স্ট্রাক্ট বা এনাম তৈরি করেছি এবং আমি এগুলি দিয়ে এ্যানোটেট করেছিলাম deriving(Rand)
, যা আমাকে Phrase
বিনামূল্যে একটি এলোমেলো কাঠামো উত্পন্ন করার উপায় দেয় ! তারপরে, আমি ToStr
এগুলির প্রতিটি স্ট্রিংয়ে রূপান্তর করার জন্য প্রয়োগ করেছি ।
আমি ইচ্ছাকৃতভাবে কাঠামোর নামগুলি ফরাসিতে রেখেছি, কারণ আমার কাছে পাওয়া বিএনএফ বিধিগুলি ফরাসি ভাষায় রয়েছে, এবং এটি আমার জমা দেওয়ার বহুভাষিক প্রকৃতিটিকে পুনরায় স্থান দেয় বলেও!
নমুনা আউটপুট
কিছু ফলাফল এবং তাদের অনুবাদ, যা আমি বিএনএফ নিয়ম এবং একটি টোকি পোনা অভিধানের উপর ভিত্তি করে করেছি । আমি নিশ্চিত যে এই অনুবাদগুলি বেশিরভাগই ভুল, তবে টোকি পোনা আসলে একটি বাক্যটির ব্যাখ্যার জন্য প্রচুর জায়গা ছেড়ে যায়।
নাসিন মী তওয়া লা জান লি জাকি
আমার ভ্রমণের সময়, কেউ দূষিত
মুনসি লি জাকি লি জান ইকে মুসি
বাটটি মলিন এবং মজার খারাপ ব্যক্তি
সিনা লি তাওয়া আলে জেলো ই কিলি তাওয়া ই ইনসা
আপনি ফল এবং কেন্দ্রটিকে হলুদ মহাবিশ্বে সরিয়ে নিয়েছেন
সমস্যা
- আমি কোন ক্রিয়াটি সংক্রামক কিনা তা পরীক্ষা করে দেখছি না, সুতরাং কিছু বাক্য ব্যাকরণগতভাবে ভুল।
- কিছু স্ট্রাকগুলি পুনরাবৃত্ত হয় এবং যখন কোনও নিয়ম পুনরাবৃত্তি করা যায় তখন আমি এলোমেলোভাবে 0, 1 বা 2 উপাদান আউটপুট চয়ন করি। এটি হাজার হাজার শব্দের সমন্বয়ে দীর্ঘকালীন বাক্যগুলিকে দেখায় ...
- আমি আউটপুটটির সত্যতা সত্যতা যাচাই করতে পারি না, আমি পুরোপুরি বিএনএফএফ সিনট্যাক্স, অভিধান এবং আমার নিজের বন্য অনুমানের উপর নির্ভর করি :)