Skip to main content

O‘zbek tilida matnni belgilarga, bo‘g‘inlarga, affikslarga, so‘zlarga, gaplarga va tinish belgilariga ajratish uchun mo‘ljallangan dastur.

Project description

UzbekTokenization

O‘zbek tilidagi matnlarni belgilarga, bo‘g‘inlarga, affikslarga (qo‘shimchalarga), so‘zlarga, gaplarga va tinish belgilariga ajratish uchun mo‘ljallangan kutubxona. Ushbu kutubxona, O'zbek tilidagi matnlarni tokenlarga ajratish, so‘zlarning morfologik tuzilishini tahlil qilish va o‘zbek tilida matnni yaxshiroq tushunish uchun zarur bo‘lgan vositalarni taqdim etadi.

Maqsad

Ushbu loyiha O‘zbek tilidagi matnlarni tokenlash (ajratish) jarayonini amalga oshiradi. Tokenizatsiya – bu matnni kichikroq, tahlil qilinishi mumkin bo‘lgan qismlarga ajratish jarayonidir. Ushbu loyiha asosan tabiiy tilni qayta ishlash (NLP) sohasida ishlatilishi mumkin.

Xususiyatlar

  • Char Tokenization: Matnni belgilarga ajratish.
  • Syllable Tokenization: So‘zni bo‘g‘inlarga ajratish.
  • Affix Tokenization: So‘zni affikslarga ajratish.
  • Word Tokenization: Matnni so‘zlarga ajratish.
  • Sent Tokenization: Matnni gaplarga ajratish.
  • Punc Tokenization: Matnni tinish begilargacha ajratish.

GitHub

Loyiha bilan ishlash uchun uni GitHubdan yuklab olish mumkin:

git clone https://github.com/ddasturbek/UzbekTokenization.git

O‘rnatish

Kutubxonalarni o‘rnatish: Loyihani ishlatish uchun PyPIdan ushbu kutubxonani o‘rnating:

pip install UzbekTokenization

Foydalanish

Loyihadan foydalanish juda oson. Quyidagi kod namunalari orqali tokenlash jarayonlarini amalga oshirishingiz mumkin.

Char Tokenization

from UzCharTokenization import UzCharTokenizer as UCT

print(UCT.tokenize("o‘g‘ri"))  # ['o‘', 'g‘', 'r', 'i']
print(UCT.tokenize("choshgoh"))  # ['ch', 'o', 'sh', 'g', 'o', 'h']
print(UCT.tokenize("bodiring"))  # ['b', 'o', 'd', 'i', 'r', 'i', 'ng']
print(UCT.tokenize("Salom, dunyo!"))  # ['S', 'a', 'l', 'o', 'm', ',', 'd', 'u', 'n', 'y', 'o', '!']
print(UCT.tokenize("Salom, dunyo!", True))  # ['S', 'a', 'l', 'o', 'm', ',', ' ', 'd', 'u', 'n', 'y', 'o', '!']

Ushbu Char Tokenization dasturi O‘zbek tili harflari uchun to‘g‘ri ishlaydi, chunki O‘zbek tilida O‘o‘ G‘g‘ harf va belgilar birikmasi va ShshChchng digraflar bitta harf hisoblanadi. Agar tokenize funksiyasiga ikkinchi parametr sifatida True qiymati berilsa, bo‘sh joylarni ham inobatga olgan holda ajratadi.

Affix Tokenization

from UzAffixTokenization import UzAffixTokenizer as UAT

print(UAT.tokenize("Serquyosh"))  # Ser-quyosh
print(UAT.tokenize("KITOBLAR"))  # KITOB-LAR
print(UAT.tokenize("o‘qiganman"))  # o‘qi-gan-man
print(UAT.tokenize("Salom odamlar"))  # Salom odamlar

Ushbu Affixes Tokenization dasturi O‘zbek tili so‘zlarini affikslarga (qo‘shimchalarga) ajratadi. O‘zbek tilida qo‘shimchalar ikki xil bo‘ladi: so‘z yasovchi va shakl yasovchi. Shakl yasovchi qo‘shimchalar ham o‘z navbatida ikkiga bo‘linadi: lug‘aviy shakl yasovchi va sintaktik shakl yasovchi qo‘shimchalarga. Dastur aynan sintaktik shakl yasovchi qo‘shimchalarning ikki va undan ko‘p belgidan iborat bo‘lganlarini ajratadi. Chunki so‘z yasovchi, lug‘aviy shakl yasovchi qo‘shimchalar va bitta harfdan iborat sintaktik shakl yasovchi qo‘shimchalar so‘z tarkibidagi harflarga o‘xshash bo‘ladi, bunday holda qo‘shimcha va so‘z tarkibidagi harflarni ajratish murakkab bo‘lib qoladi. Dastur faqat so‘zlarni affikslarga ajratadi, agar matn berilsa uni o‘z holicha qaytaradi. Katta-kichik harflarga sezgir.

Syllable Tokenization

from UzSyllabTokenization import UzSyllabTokenizer as UST

print(UST.tokenize("Gul"))  # Gul
print(UST.tokenize("Yulduz"))  # Yul-duz
print(UST.tokenize("shashlik"))  # shash-lik
print(UST.tokenize("BOG‘BON"))  # BOG‘-BON
print(UST.tokenize("kelinglar"))  # ke-ling-lar
print(UST.tokenize("yangilik"))  # yan-gi-lik
print(UST.tokenize("Agglyutinativ"))  # ag-glyu-ti-na-tiv
print(UST.tokenize("Salom barchaga"))  # Salom barchaga

Ushu Syllable Tokenization dasturi O‘zbek tili so‘zlarini bo‘g‘inlarga ajratadi. Bunda O‘o‘ G‘g‘ harf va belgilar birikmasi va ShshChchng digraflarni to‘g‘ri ajratadi. Bundan tashqari ng digraf yoki n va g alohida harf bo‘lib so‘z tarkibida keladi, bunday hollarda digraf bo‘lsa ular ajralmaydi, alohida kelsa ular ajratilishi mumkin. Ba'zi murakkab so‘zlar qoidalarga tushmaydi, shuning uchun ularning ro‘yhati dastur tarkibida shakllantirilgan. Katta-kichik harflarga sezgir.

Word Tokenization

from UzWordTokenization import UzWordTokenizer as UWT

text = "Dasturlash – kompyuterlar va boshqa mikroprotsessorli elektron mashinalar uchun dasturlar tuzish"

print(UWT.tokenize(text))  # ['Dasturlash', '–', 'kompyuterlar', 'va', 'boshqa', 'mikroprotsessorli', 'elektron', 'mashinalar', 'uchun', 'dasturlar', 'tuzish']
print(UWT.tokenize(text, False))  # ['Dasturlash', 'kompyuterlar', 'va', 'boshqa', 'mikroprotsessorli', 'elektron', 'mashinalar', 'uchun', 'dasturlar', 'tuzish']

Ushbu Word Tokenization dasturi O‘zbek tili matnlarini so‘zlarga ajratadi. Bunda qo‘shma so‘zlar (fe'l, ravish, olmosh va undov) va KFSQ (ko‘makchi fe'lli so‘z qo‘shilmasi) larni birgalikda ajratib oladi, masalan, 'idrok etmoq', 'mana bu', 'hech narsa', 'sevib boshlamoq'. Bundan tashqari tokenize funksiyasiga ikkinchi parametr sifatida False qiymatini berish orqali, tinish belgilarsiz faqat so‘zlardan iborat tokenlarni olish mumkin.

Sent Tokenization

from UzSentTokenization import UzSentTokenizer as UST

text = "Bugun bog‘da sayr qildik. Atrofdagi daraxtlar yam-yashil, " \
       "qushlar esa chug‘urlab sayrayapdi. Bahorning iliq havosi butun " \
       "olamni jonlantirganday tuyuladi. Sen hech shunday sokin va go‘zal " \
       "manzarani ko‘rganmisan? Bu yerda hamma narsa ajib bir go‘zallikka " \
       "ega! Nahotki tabiat bunday mo‘jizalarni yaratishga qodir bo‘lsa? Oh, " \
       "qanday ajoyib kun! Shu lahzalarning hech qachon tugashini istamayman!"

print(UST.tokenize(text))

"""
[
    'Bugun bog‘da sayr qildik.',
    'Atrofdagi daraxtlar yam-yashil, qushlar esa chug‘urlab sayrayapdi.',
    'Bahorning iliq havosi butun olamni jonlantirganday tuyuladi.',
    'Sen hech shunday sokin va go‘zal manzarani ko‘rganmisan?',
    'Bu yerda hamma narsa ajib bir go‘zallikka ega!',
    'Nahotki tabiat bunday mo‘jizalarni yaratishga qodir bo‘lsa?',
    'Oh, qanday ajoyib kun!',
    'Shu lahzalarning hech qachon tugashini istamayman!'
]
"""

Ushbu Sent Tokenization dasturi matnlarni gaplarga ajratadi. Bunda dastur O‘zbek tili grammatikasining sintaksis qoidalariga asosan bu ishni amalga oshiradi. O‘zbek tilida gaplar, umuman ko‘p tillarda gaplar [.!?] belgilari bilan yoki ularni birgalikda ishlatish bilan tugaydi.

Punc Tokenization

from UzPuncTokenization import UzPuncTokenizer as UPT

text = """  Bugun juda qiziq voqea ro‘y berdi! Do‘stim bilan shahar bo‘ylab sayr qilayotgan edik, to‘satdan u to‘xtadi-da:

            — Hey, bu yerga qarang! — dedi hayajon bilan.
            
            Men nigohimni u ko‘rsatgan tomonga burdim... Nahotki?! Qarshimda bolalikdagi eng yaxshi do‘stim turardi. U bilan qancha yillardan beri ko‘rishmaganmiz!
            
            — Bu senmisan? — dedim hayrat bilan.
            
            U kulimsirab bosh irg‘adi:
            
            — Ha, menman! Axir, qancha vaqt o‘tdi-a?!
            
            Biz uzoq suhbatlashdik; eski xotiralarni esladik. O‘sha lahzalar men uchun unutilmas bo‘ldi...
        """

print(UPT.tokenize(text))
#  ['Bugun juda qiziq voqea ro‘y berdi', '!', 'Do‘stim bilan shahar bo‘ylab sayr qilayotgan edik', ',', 'to‘satdan u to‘xtadi', '-', 'da', ':', '—', 'Hey', ',', 'bu yerga qarang', '!', '—', 'dedi hayajon bilan', '.', 'Men nigohimni u ko‘rsatgan tomonga burdim', '.', '.', '.', 'Nahotki', '?', '!', 'Qarshimda bolalikdagi eng yaxshi do‘stim turardi', '.', 'U bilan qancha yillardan beri ko‘rishmaganmiz', '!', '—', 'Bu senmisan', '?', '—', 'dedim hayrat bilan', '.', 'U kulimsirab bosh irg‘adi', ':', '—', 'Ha', ',', 'menman', '!', 'Axir', ',', 'qancha vaqt o‘tdi', '-', 'a', '?', '!', 'Biz uzoq suhbatlashdik', ';', 'eski xotiralarni esladik', '.', 'O‘sha lahzalar men uchun unutilmas bo‘ldi', '.', '.', '.']

print(UPT.tokenize(text, False))
# ['Bugun juda qiziq voqea ro‘y berdi', 'Do‘stim bilan shahar bo‘ylab sayr qilayotgan edik', 'to‘satdan u to‘xtadi', 'da', 'Hey', 'bu yerga qarang', 'dedi hayajon bilan', 'Men nigohimni u ko‘rsatgan tomonga burdim', 'Nahotki', 'Qarshimda bolalikdagi eng yaxshi do‘stim turardi', 'U bilan qancha yillardan beri ko‘rishmaganmiz', 'Bu senmisan', 'dedim hayrat bilan', 'U kulimsirab bosh irg‘adi', 'Ha', 'menman', 'Axir', 'qancha vaqt o‘tdi', 'a', 'Biz uzoq suhbatlashdik', 'eski xotiralarni esladik', 'O‘sha lahzalar men uchun unutilmas bo‘ldi']

Ushbu Punc Tokenization dasturi matnlarni tinish belgilarigacha ajratadi. Tokenni tinish belgilarisiz chiqarish uchun esa, tokenize funksiyasiga ikkinchi parametr sifatida False qiymati berish lozim.

Litsenziya

Bu loyiha MIT License litsenziyasiga ega.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

uzbektokenization-1.2.2.tar.gz (21.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

UzbekTokenization-1.2.2-py3-none-any.whl (19.6 kB view details)

Uploaded Python 3

File details

Details for the file uzbektokenization-1.2.2.tar.gz.

File metadata

  • Download URL: uzbektokenization-1.2.2.tar.gz
  • Upload date:
  • Size: 21.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.11.3

File hashes

Hashes for uzbektokenization-1.2.2.tar.gz
Algorithm Hash digest
SHA256 795a97babc1fd300dda4ad4c0ea7fd58a310737bc1b59381b120c9b20e7e4e03
MD5 6e7fae3c4f59d57a7abacd1b2cc5c60f
BLAKE2b-256 91d765fd64f32a34160f5e2f2dc4cbd325c8eb861f121f2d635d010dab60b598

See more details on using hashes here.

File details

Details for the file UzbekTokenization-1.2.2-py3-none-any.whl.

File metadata

File hashes

Hashes for UzbekTokenization-1.2.2-py3-none-any.whl
Algorithm Hash digest
SHA256 5d2a94765f471bfcd47d201c24ab1d73a22a479f5c6207a2a55b94226b5c930b
MD5 d98aecc317995f175d2c16cb1dc96c45
BLAKE2b-256 780987508e6ea756009ece3c4b367ddedcf660e07bf041feca8d3c428f0af6eb

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page