O‘zbek tilining “ Milliy korpusini ” dasturiy ta’minotini yaratish
Sharipov.M.S,Kurbanova.L.U
Hozirgi kunda nafaqat tilshunoslikda, balki tarjima nazariyasi va amaliyotida ham korpus lingvistikasi, milliy korpus terminlari keng qo‘llanilib,bu sohada ingliz, ispan, fransuz, nemis, rus va boshqa ko‘plab tillarda axborot texnologiyalariga asoslangan samarali nazariy va amaliy ishlar, tadqiqotlar, loyihalar bajarildi va bajarilmoqda. O‘zbek tilida esa bu borada ko‘zga ko‘rinarli hech qanday ish qilinmagani achinarli[2].
Korpus-bu matn yoki nutq bo‘lib,u muloqot doirasida ham yuzaga kelishi mumkin.Badiiy adabiyotlar,turli xil gazeta nashriyotidagi ma’lumotlar,internet sahifasi ma’lumotlari ham korpus bo‘la oladi. Ko‘rpuslarning turlari ko‘p va u har bir yaratuvchining fantaziyasidan kelib chiqqan holda qonun qoidalar asosida yaratiladi.
O‘zbek tilining milliy korpusi uchun dastur yaratish maqsadida Python dasturlash tilining tabiiy tillar bilan ishlash uchun mo`ljallangan kutubxona (NLTK-Natural Language Toolkit)ni o`rganish va uning yordamida dastur yaratish maqasad qilib qo`yildi. Maqsadga erishish uchun quyidagilarni amalga oshirish kerak:
1. Hozirgacha yaratilgan mavjud boshqa tillarning korpuslarini yartilish usullarini o`rganib chiqish va yaratish texnologiyalarini tanlash;
2.Python dasturlash tilini va NLTK kutubxonasini o`rnatish va sozlashni amalga oshorish;
3.Korpus uchun tanlangan matnlar bazasini tshkil qilish va guruhlashtirish;
4.Dasturiy ta’minot uchun algoritm ishlab chiqish;
5.Dasturni yaratish va undan foydalanish bo`yicha ko`rsatma yozish;
Maqsadga erishish uchun amalga oshirilgan ishlarni sanab o`tamiz:
Ingliz tilidagi birinchi korpus bu Brown korpusi bo’lib,u 1961-yilda Amerika Qo‘shma Shtatlarining Braun universitetida yaratilgan. Brown korpusi ingliz tilidagi birinchi million so‘zli korpus bo‘lib,u 500 manbadan iborat matnni o‘z ichiga olgan va manbalar, yangiliklar, tahririyat kabi janr bo‘yicha tasniflangan. Biz korpusga so‘zlar ro‘yxati yoki jumlalar ro‘yxati sifatida kirishimiz mumkin(bu yerda bir jumlanng o‘zi so‘zlarning ro‘yxati). Korpusdan ma`lumotlarni o‘qish uchun muayyan toifalar yoki fayllarni belgilashimiz mumkin masalan:
>>> from nltk.corpus import brown
>>> brown.categories()
['adventure', 'belles_lettres', 'editorial', 'fiction', 'government', 'hobbies',
'humor', 'learned', 'lore', 'mystery', 'news', 'religion', 'reviews', 'romance',
'science_fiction']
>>> brown.words(categories='news')
['The', 'Fulton', 'County', 'Grand', 'Jury', 'said', ...]
>>> brown.words(fileids=['cg22'])
['Does', 'our', 'society', 'have', 'a', 'runaway', ',', ...]
>>> brown.sents(categories=['news', 'editorial', 'reviews'])
[['The', 'Fulton', 'County'...], ['The', 'jury', 'further'...], ...]
Yuqoridagi kodlar bajarilgandan keyin korpusni yuklab olinadi, va kategoriyalar ro`yxati chiqariladi, kerakli kategoriyalar tanlab olinadi.
Brown Corpus-bu stilistik deb nomlanadigan tilshunoslik so‘rovining bir turi, janrlar orasidagi muntazam farqlarni o‘rganish uchun qulay manba. Modal fe’llardan foydalanishdagi janrlarni taqqoslaylik. Birinchi qadam ma’lum bir janr uchun hisoblarni ishlab chiqishdir. Quydagi ammallarni bajarishdan oldin nltk dasturi import qilinishi lozim.
>>> from nltk.corpus import brown
>>> news_text = brown.words(categories='news')
>>> fdist = nltk.FreqDist([w.lower() for w in news_text])
>>> modals = ['can', 'could', 'may', 'might', 'must', 'will']
>>> for m in modals:
... print m + ':', fdist[m],
...
can: 94 could: 87 may: 93 might: 38 must: 53 will: 389
Keyingi galda biz Brown corpusining boshqa qismini tanladik va oldingi misolga moslab oldik, masalan yuqoridagi modal fe`llarning korpusda qatnashishlar sonini aniqlab oldik. Endi navbatda biz kesh janri uchun hisob-kitoblarni olishimiz kerak. Biz shartli chastatalarni taqsimlash uchun NLTK-ning yordamidan foydalanamiz va quydagi kod satrlarini ajratib olamiz va natijani ko‘rishimiz mumkin.
>>> cfd = nltk.ConditionalFreqDist(
... (genre, word)
... for genre in brown.categories()
... for word in brown.words(categories=genre))
>>> genres = ['news', 'religion', 'hobbies', 'science_fiction', 'romance', 'humor']
>>> modals = ['can', 'could', 'may', 'might', 'must', 'will']
>>> cfd.tabulate(conditions=genres, samples=modals)
can could may might must will
news 93 86 66 38 50 389
religion 82 59 78 12 54 71
hobbies 268 58 131 22 83 264
science_fiction 16 49 4 12 8 16
romance 74 193 11 51 45 43
humor 16 30 8 8 9 13
Yangiliklar janrida eng ko‘p uchraydigan modal, romantik janrda eng kam uchraydigan modal bo‘lishi mumkinligiga e’tibor bering. Buni bashorat qilgan bo’larmidingiz? So‘zlar soni janrlani ajratib turadi.
Reuters Corpus jami 1,3 million so‘zni o‘z ichiga olgan 10888 yangilik hujjatlarni o‘z ichiga oladi. Hujjatlar 90 ta mavzularga bo‘lingan va “Mashq qilish” va “Test” deb nomlangan ikkita to‘plamga guruhlangan; Shunday qilib “test/14826” faylli matn test to‘plamidan olingan hujjatdir.
>>> from nltk.corpus import reuters
>>> reuters.fileids()
['test/14826', 'test/14828', 'test/14829', 'test/14832', ...]
>>> reuters.categories()
['acq', 'alum', 'barley', 'bop', 'carcass', 'castor-oil', 'cocoa',
'coconut', 'coconut-oil', 'coffee', 'copper', 'copra-cake', 'corn',
'cotton', 'cotton-oil', 'cpi', 'cpu', 'crude', 'dfl', 'dlr', ...]
Brown korpusidan farqli o‘lroq, Reuters Corpus kategoryalari bilan bir-biriga zid keladi, chunki yangiliklar ko‘pincha bir nechta mavzularni qamrab oladi. Bu corpusning yana bitta qulayligi shundaki u bitta faylni yoki fayllar ro‘yxatini qabul qiladi, shu sababdan fayllar yoki kategoryalar nuqtai nazaridan biz o‘zimizga kerakli bo‘lgan so‘zlarni yoki jumlalarni belgilashimiz mumkin.
>>> reuters.categories('training/9865')
['barley', 'corn', 'grain', 'wheat']
>>> reuters.categories(['training/9865', 'training/9880'])
['barley', 'corn', 'grain', 'money-fx', 'wheat']
>>> reuters.fileids('barley')
['test/15618', 'test/15649', 'test/15676', 'test/15728', 'test/15871', ...]
>>> reuters.fileids(['barley', 'corn'])
['test/14832', 'test/14858', 'test/15033', 'test/15043', 'test/15106',
'test/15287', 'test/15341', 'test/15618', 'test/15618', 'test/15648', ...]
Ushbu har bir matndagi so‘zlar sarlavhalar bo‘lib,ular qonun qoida bo‘yicha bosh harf sifatida saqlanadi.
>>> reuters.words('training/9865')[:14]
['FRENCH', 'FREE', 'MARKET', 'CEREAL', 'EXPORT', 'BIDS',
'DETAILED', 'French', 'operators', 'have', 'requested', 'licences', 'to', 'export']
>>> reuters.words(['training/9865', 'training/9880'])
['FRENCH', 'FREE', 'MARKET', 'CEREAL', 'EXPORT', ...]
>>> reuters.words(categories='barley')
['FRENCH', 'FREE', 'MARKET', 'CEREAL', 'EXPORT', ...]
>>> reuters.words(categories=['barley', 'corn'])
['THAI', 'TRADE', 'DEFICIT', 'WIDENS', 'IN', 'FIRST', ...]
2.Python dasturlash tilini va NLTK kutubxonasini o`rnatish va sozlashni amalga oshorish;
Biz ishni python dasturlsh tilini o`rnatish va sozlasdan boshlaymiz. Browser orqali http://python.org/ saytdan kompyuterimizning operatsion sistemasiga mos bo‘lgan python dasturlash tilining so‘ngi versiyasini yuklab olamiz va uni o`rnatamiz. Python dasturlash tilining o`rnatilganligini tekshirish uchun cmd rejimiga o`tib python deb yozsak ishga tushishi kerak va ekranda “>>>” taklif belgisi paydo boladi.
NLTK kutubxonasini o`rnatishni quyidagicha amalga oshiramiz:
>>>import nltk
>>>nltk.dowland()
Showing info http://www.nltk.org/nltk_data/
True
>>>from ntk.tokenize import word_tokenize
>>>word_tokenize(“ Salom quyosh”)
[“Salom” ,“quyosh”]
>>>
Har safar nltk kutubxonasini import qilish kerak.
3.Korpus uchun tanlangan matnlar bazasini tshkil qilish va guruhlashtirish uchun bizga *.txt kengayrmali fayllar kerak bo`ladi. Tayyorlangan fayllarni “ C:\users\user\nltk.data\corpora ” katalogiga yozamiz va undan keyin korpus uchun ishlatiladigan nltk ning hamma funksiyalari bizning korpus uchun ham ishladigan boladi. Buni quyidagi dastur yordamida tekshirib ko`rishimiz mumkin:
Do'stlaringiz bilan baham: |