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.1.tar.gz (17.5 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.1-py3-none-any.whl (16.0 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: uzbektokenization-1.2.1.tar.gz
  • Upload date:
  • Size: 17.5 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.1.tar.gz
Algorithm Hash digest
SHA256 797eeae91dc1abb0582b6d4b8bc788c5644b83cd84a04f88551c8b1a93f27829
MD5 92ecb52b5a739007035c4a6c85ab5a39
BLAKE2b-256 f04c290c0f465b5ddf06957d4f7fbecde43e1c85c9d8beea7f2cb13e37a53a42

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for UzbekTokenization-1.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 4649530454b17d4afef5bc86c2446f6320d342c8f87069c3429591e295edba72
MD5 62dc2313c2f7399633869c7494b75c1e
BLAKE2b-256 9c12f23626e5d568abd2559ea65bd0061cf62cd74c3e490342182f69e0166215

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