Энэ хагас бүтэн сайнд aspell хэмээх үг үсгийн алдаа шалгагч програмд оруулсан монгол хэлнийхээ дэмжилтийг сайжруулж өнжив. Энэ удаад зөвхөн үгийн санг сайжруулж, нэмэхээс гадна монгол хэлний угтвар, дагаврын дүрмийг оруулах нь гол зорилго байгаа билээ.
Тиймээс монгол хэлнийхээ (ядаж) энгийн дүрмүүдийг хамарсан загварыг гаргах шаардлагатай юм. Түүнийг гаргачих санаатай аль эртнээс бодож явсан боловч 3 сарын өмнө монгол хэлний үгийн сан үүсгэх зорилготой вэбээр үг түүгч програм бичих үедээ үг шалгахдаа нэгмөсөн оруулчих гээд нэлээн барьж авч оролдов. Эхнээс нь ганц нэг дүрмийн загвар гаргаж байтал хэтэрхий их онцгой тохиолдол, гажилтууд гарч ирээд байхаар нь дургүй хүрээд бүтэхгүй нь гээд хаячихсан байснаа өнөөдөр нэг гоё санаа орж ирээд жаал нухав. Энэ санаа бол ерөнхий дүрэмд захирагдах универсал загвар гаргах нь бараг бүтэшгүй эд юм гэж үзээд дүрмүүдээ гажилтууд тооцохгүй загварчлаад түүсэн үгийн баазтайгаа үгээ ангилан холбох эсвэл бүр үг тус бүрээр нь флаг тодорхойлон (myspell, ispell шиг) холбох нь монгол хэлний дүрмийн асуудлыг ямар ч гэсэн бүрэн шийдэх боломжтой гэдгийг олж харсан явдал юм. Тун энгийн боловч гоё санаа. Формал тодорхойлолт ашиглаад баталж болох байх. Хэн нэг нь хийвэл их баярлана. 😉 Харин үгийн баазаа маш сайн чанартай бүрдүүлэх хэрэг гарч байгаа юм. ОпенМН-ы шинэ вэбийг дуусах үед би үг түүгчээ холбосон байх ба хүн бүр ороод үг шалгахад оролцох боломжтой болохоор ямар ч гэсэн энэ ажил амжилттай болох байх гэж найдаж байна. Ингээд дүрмүүдээ гажилт тооцохгүй загварчилж сууна.
Үг түүгч болон онлайн орчуулгын програмаа Perl болон PHP хэл ашиглан хийж байгаа тул эдгээр хэлний форматад тохируулан энгийн илэрхийллүүдээ (regular expression) бичиж байна. Зарим энгийн илэрхийллүүдийг бичихэд нэлээн хүндрэл гарч цаг нэлээн алдаж сууна.
Ер нь үг үсэг, тэмдэгт мөртэй ажиллахад хамгийн их хэрэг болдог одоогоор хамгийн хүчирхэг хэрэгсэл бол энгийн илэрхийлэл “regular expression” юм. Хэрэв өөр хэрэгсэл байдаг бол сэтгэгдэлд үдээнэ үү. 😉
Ингээд энгийн илэрхийллийн хэдэн мета тэмдэгтийг тайлбарлавал хэрэг болох байх гэж бодоод жагсаая. Эдгээр нь Posix стандартыг барьсан болно.

. – Цэг. Цэг нь ямар нэг дан тэмдэгтүүд орлоно. Харин дөрвөлжин хаалт [ ] дотор бол энгийн цэг гэсэн утгаараа үлдэнэ. Жишээлбэл: “a.cd” нь “abcd” илэрхийлэх бол [a.cd] нь “a” эсвэл “.” эсвэл “c” эсвэл “d” байж болно.
[ ] – Дөрвөлжин хаалт нь хаалт доторх тэмдэгтүүдээс нэг дан тэмдэгтийг илэрхийлнэ.
Жишээлбэл [abc] нь “a”, “b”, эсвэл “c”. байна. [a-z] нь ямар нэг жижиг латин үсгийг илэрхийлнэ. Харин монгол үсэг тэмдэглэх бол кодоор нь бичих хэрэгтэй болно. Жишээлбэл “\xd0\xb0” нь жижиг юникод кирил а -г илэрхийлнэ.
[^ ] – Хаалттай малгай нь хаалт дотор байхгүй нэг дан тэмдэгтийг илэрхийлнэ. Жишээлбэл: [^abc] нь “a”, “b”, эсвэл “c” -с бусад тэмдэгтийг илэрхийлнэ.
^ – Малгай нь мөрийн эхлэлийг илэрхийлнэ. Олон мөртэй бол ямар нэг мөрийн эхлэл.
$ – Доллар нь мөрийн төгсгөлийг заана.
( ) – Хаалт нь дэд илэрхийлэл буюу тухайн энгийн илэрхийлэл доторх блокийг илэрхийлдэг.
\n – Латин н нь 1-9 цифр байвал n дүгээр дэд илэрхийлэл буюу блокийг илэрхийлнэ. Энэ бүтэц нь үнэндээ онолын хувьд энгийн бус илэрхийлэл тул өргөтгөсөн энгийн илэрхийлэлд хэрэглэгдэхгүй санахад илүүдэхгүй.
* – Ямар нэг тэмдэгтийн ардаас Од орвол тухайн тэмдэгтийн тэг болон олон хуулбарыг илэрхийлдэг. Жишээлбэл “ab*c” нь “ac”, “abc”, “abbbc” гэх мэтээр цааш заах ба “[abc]*” matches “”, “a”, “b”, “ca”, “cba” гэх мэтээр заана. Дээр дурдсан мета тэмдэгтүүдтэй хоршин хэрэглэгдэнэ.
За цааш нь Гүүглээс дэлгэрүүлэн харж олж үзэж болно.

Үг үсгийн дүрэм шалгах загвараа http://www.shuleg.org дээр тавигдсан хэлний материалыг ашиглан гаргаж байгаа тул үүнийг оруулсан хүмүүст талархал илэрхийлье. Жигтэйхэн их алдаатай бичдэг нөхөр болохоороо би энэ тал дээр их анхаарал хандуулж байгаа юм болов уу.

Categories: Aspell

0 Comments

Leave a Reply

Avatar placeholder

Your email address will not be published. Required fields are marked *