Muhammad al-xorazmiy nomidagi tatu urganch filiali
Dissertation Rustambek
- Bu sahifa navigatsiya:
- III.2-§.Korpus boyicha soʻzlar portfeleni yaratish(Bag of Words) Bag of Words (So’zlar sumkasi) modeli
- 1-Qadam: So ‘zlarni ajratish
- 2-Qadam: So ‘zlar chastotasini lug ‘at shaklida yaratamiz
- 3-Qadam: So‘zlar sumkasi modelini qurish
- Pythonda Bag of Words modelini dasturini qurish.
- UrlReader.py
- UzbekCorporaAnalysis.py
- Class qishloq_xojaligi
TOTAL
|
7754 |
292304 |
3887913 | ||
261879 | |||||
|
|
|
|
|
|
Jadvaldagi boshqa janrlar boʻlimiga quyidagilar kiradi: diniy, badiiy asarlar, fan va ta’lim, qonun hujjatlari, tibbiyot, qishloq xoʻjaligi.
III.2-§.Korpus boyicha soʻzlar portfeleni yaratish(Bag of Words)
Bag of Words (So’zlar sumkasi) modeli
Ko‘pchilik statistik (machine learning va deep learning) algoritmlar sonlar bilan ishlaydi, shunday ekan matnlar ustida ishlashda uni songa o‘tkazishga to‘g‘ri keladi. Buni amalga oshirish uchun bir qancha yondashuvlar mavjud. Bulardan eng mashhurlari Bag of Words, TF-IDF, va word2vec. Matnni sonlarga o‘tkazish uchun juda samarali modellaridan biri So‘zlar sumkasi (Bag of Words (BOW)) modeli hisoblanadi. So‘zlar sumkasi modeli yondashuvini tushunish uchun namuna sifatida quyidagi matnni qaraylik.
Faraz qilaylik bizda quyidagi 3 ta gapdan iborat korpus bo‘lsin :
"Men kitob oʻqishni yoqtiraman"
"Siz kutubxonada kitob oʻqishni yoqtirasizmi?"
"Lola va Laylo kitob oʻqishni yoqtirmaydi"
1-Qadam: So‘zlarni ajratish
Dastlab korpusni so‘zlarga o‘tkazib olamiz va gapdagi so‘zlarni alohida ajratib olamiz. Quyidagi jadvalda:
Gap 1 |
Gap 2 |
Gap 3 |
Men |
Siz |
Lola |
Kitob |
Kutubxonada |
Va |
O‘qishni |
Kitob |
Layo |
Yoqtiraman |
O‘qishni |
Kitob |
|
Yoqtirasizmi |
O‘qishni |
|
|
Yoqtirmaydi |
2-Qadam: So‘zlar chastotasini lug‘at shaklida yaratamiz
Bu qadamda so‘zlar chastotasini yaratib olamiz. Ya’ni korpusdagi so‘zlar lug‘atning kaliti, ushbu so‘zlarning uchrash soni esa uning qiymati sifatida kiritamiz. Bunda korpusdagi so‘zlar gistogrammasini hosil bo‘ladi. Quyidagi jadvalda:
So’z |
Chastota |
Men |
1 |
Kitob |
3 |
O‘qishni |
3 |
Yoqtiraman |
1 |
Yoqtirasizmi |
1 |
Yoqtirmaydi |
1 |
Siz |
1 |
Kutubxonada |
1 |
Lola |
1 |
Va |
1 |
Laylo |
1 |
Endi chastotasi boʻyicha tartiblaymiz:
So’z |
Chastota |
Kitob |
3 |
O‘qishni |
3 |
Men |
1 |
Yoqtiraman |
1 |
Yoqtirasizmi |
1 |
Yoqtirmaydi |
1 |
Siz |
1 |
Kutubxonada |
1 |
Lola |
1 |
Va |
1 |
Laylo |
1 |
3-Qadam: So‘zlar sumkasi modelini qurish
WOB modelini qurish uchun, ustunlari lug’atimizdagi ko’p qatnashgan so’zlardan va satrlari gap (dokument)lardan iborat bo’lgan matritsani qurib olamiz.
Agar lug’atdagi 8 ta eng ko’p uchragan soz’lar olsak, matritsamiz quyidagi ko’rinishni oladi:
|
Kitob |
O‘qishni |
Men |
Yoqtiraman |
Yoqtirasizmi |
Yoqtirmaydi |
Siz |
Kutubxonada |
Lola |
Va |
Laylo |
Gap-1 |
1 |
1 |
1 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
Gap-2 |
1 |
1 |
0 |
0 |
1 |
0 |
1 |
1 |
0 |
0 |
0 |
Gap-3 |
1 |
1 |
0 |
0 |
0 |
1 |
0 |
0 |
1 |
1 |
1 |
Har bir satrda tegishli gap uchun sonli tasvirlanishi mavjud. Bu sonli tasvirlanishdan statistik modellar uchun kiruvchi ma’lumot sifatida foydalnish mumkin. So‘zlar sumkasi modeli tabiiy tilni qayta ishlash va axborotni qidirishda (IR) ishlatiladigan soddalashtirilgan tasvirdir.
So‘zlar sumkasi modeli odatda hujjatlarni tasniflash(sinflarga ajratish) usullarida qo‘llaniladi, bu erda har bir so‘zning matnda uchrashi (chastotasi) klassifikatorni tayyorlash uchun xususiyat sifatida ishlatiladi.
Pythonda Bag of Words modelini dasturini qurish.
Yuqorida biz uchta jumladan iborat so‘zlar sumkasini qo‘lda yaratdik. Biroq, haqiqiy ma’lumotlar to‘plamlari millionlab so‘zlar bilan juda katta boʻladi. Tasodifiy korpusni topishning eng yaxshi usuli bu Vikipediya hisoblanadi.
article_text = ' Men kitob oʻqishni yoqtiraman Siz kutubxonada kitob oʻqishni yoqtirasizmi? Lola va Laylo kitob oʻqishni yoqtirmaydi '
corpus = nltk.sent_tokenize(article_text)
wordfreq = {}#dictionary
for sentence in corpus:
tokens = nltk.word_tokenize(sentence)
for token in tokens:
if token not in wordfreq.keys():
wordfreq[token] = 1
else:
wordfreq[token] += 1
most_freq = heapq.nlargest(200, wordfreq, key=wordfreq.get)
sentence_vectors = []
for sentence in corpus:
sentence_tokens = nltk.word_tokenize(sentence)
sent_vec = []
for token in most_freq:
if token in sentence_tokens:
sent_vec.append(1)
else:
sent_vec.append(0)
sentence_vectors.append(sent_vec)
sentence_vectors = np.asarray(sentence_vectors)
print(sentence_vectors)
Bu ro‘yhat (yoki vektor) da asl gaplardagi so‘zlarning o‘rni saqlangan holda tasvirlanmasligi mumkin. Bu Bag-of-words modelini asosiy hususiyatlaridan biri. Bunday turdagi tasvirlanish bir qancha muvaffaqiyatli dasturlarda foydalanilib kelinyapti, misol uchun email filtering.
Aslida matnlarni tasvirlashda so‘zlarning uchrash chastotasi muhim emas. Ko‘p uchraydigan so‘zlar ( masalan ingliz tilida"the", "a", "to“) matnda juda yuqori sonda uchraydi. Bu so‘zlar ko‘p sonda uchragani bilan bular muhim ma’no anglatmaydi. Bu masalaga bog‘liq, so‘zlar chastotasi normallashtirish uchun TF-IDF usuli ma’lum.
III.3-§ Korpusning yaratishning dasturiy ta’minoti.
Biz yaratayotgan UzbekCorpora dasturiy ta’minoti 3 ta asosiy .py (moduldan)faylidan iborat bo‘lib ular quyidagilardan tashkil topgan:
UrlReader.py - web sahifadan materiallarni o‘qib olish va XML fayllarga yozish uchun ishlatiladi;
ServiceUzbekWords.py – berilgan matnni statistik tahlil qilish (gaplar, so‘zlar , takrorlanmaydigan so‘zlar soni, so‘zlar chastotasi) uchun;
UzbekCorporaAnalysis.py – Local corpora (XML fayllar)dan ma’lumotlarni o‘qib olish hamda ServiceUzbekWords.py dan olingan natijalarni TXT fayllarga yozish uchun foydalaniladi.
UrlReader.py modulining tuzilishi quyidagicha:
Class darakchi – www.darakchi.uz sayti materiallarini o‘qib olish va XML fayllarga yozish uchun mo‘ljallangan bo‘lib category metodidan iborat:
def category(url_link, start_page, count_page, file_name)
url_link - o‘qib olinishi kerak bo‘lgan categoriya url adresi;
start_page - boshlang‘ich sahifa nomeri;
count_page - o‘qib olish kerak bo‘lgan sahifalar soni;
file_name - o‘qib olingan materiallarni yozish uchun yaratiladigan XML fayl nomi.
Class qishloq_xojaligi - www.argo.uz sayti materiallarini o‘qib olish va XML fayllarga yozish uchun mo‘ljallangan bo‘lib, writeXML va url_category metodlaridan iborat:
def writeXML(dto, file_name)
dto – web saytdan o‘qib olingan materiallar saqlangan dict turidagi to‘plam;
file_name - o‘qib olingan materiallarni yozish uchun yaratiladigan XML fayl nomi
def url_category(url_link, file_name, count_page)
url_link - o‘qib olinishi kerak bo‘lgan categoriya url adresi;
start_page - boshlang‘ich sahifa nomeri;
count_page - o‘qib olish kerak bo‘lgan sahifalar soni;
file_name - o‘qib olingan materiallarni yozish uchun yaratiladigan XML fayl nomi.
ServiceUzbekWords.py modulining tuzilishi quyidagicha:
def isword(word)
so‘z yoki so‘z emasligini aniqlovchi metod, so‘z bo‘lsa True, aks holda False qiymat qaytaradi.
def word_normalize(raw)
raw satrni qayta ishlovchi metod bo‘lib satrdagi `’ '‘‘‘’‘ belgilarni bir hil belgiga almashtirish, qo‘shilib ketgan so‘zlarni ajratish, kata harflarni kichik harflar bilan almashtiradi.
def analysis_article(raw)
raw matnni tahlil qiluvchi metod bo‘lib, matndagi gaplar soni, so‘zlar soni, takrorlanmaydigan so‘zlar soni, hamda so‘zlar chastotasini qaytaradi.
return sent_count, all_words_count, unique_words_count, sort_frequency
def krill_lotin(raw)
krilcha matnlarni lotinchaga o‘giruvchi metod.
Do'stlaringiz bilan baham:
ma'muriyatiga murojaat qiling