Code Monkey home page Code Monkey logo

millify's Introduction

Millify - ədədi yazılı formaya çevirən alqoritmlər and more

natural ədədləri yazılı formaya çevirən minimal alqoritm (python):

names = ('sıfır', 'bir', 'iki', 'üç', 'dörd', 'beş', 'altı', 'yeddi', 'səkkiz', 'doqquz',
          'on', 'iyirmi', 'otuz', 'qırx', 'əlli', 'altmış', 'yetmiş', 'səksən', 'doxsan', 'yüz',
          'min', 'milyon', 'milyard', 'trilyon', 'kvadrilyon', 'kvintilyon', )

def num_to_words(num, bank_mode=False, rank=0):
    if num == 0 and rank == 0:
        return names[0]
    if num == 0:
        return ''
    digit = num % 10
    tail = ''
    if digit != 0 and (bank_mode or not (digit == 1 and (rank % 3 == 2 or rank == 3 and num % 1000 < 10))):
        tail = names[9 * (rank % 3 % 2) + digit] + ' '
    if rank % 3 == 2 and digit > 0:
        tail += names[19] + ' '
    if rank > 0 and rank % 3 == 0 and num % 1000 > 0:
        tail += names[19 + rank // 3] + ' '
    return num_to_words(num // 10, bank_mode, rank + 1) + tail

istifadə:

print(num_to_words(35566)) # otuz beş min beş yüz altmış altı 
print(num_to_words(987654321)) # doqquz yüz səksən yeddi milyon altı yüz əlli dörd min üç yüz iyirmi bir 

Toplam imkanlar:

============================== number to words ==============================
0 -> sıfır
1 -> bir
2 -> iki
3 -> üç
3.14 -> üç tam yüzdə on dörd
86.6 -> səksən altı tam onda altı
99.99 -> doxsan doqquz tam yüzdə doxsan doqquz
-273.15 -> mənfi iki yüz yetmiş üç tam yüzdə on beş
9001001 -> doqquz milyon min bir
4294967296 -> dörd milyard iki yüz doxsan dörd milyon doqquz yüz altmış yeddi min iki yüz doxsan altı
============================== ordinals ==============================
1 -> 1-ci
2 -> 2-ci
3 -> 3-cü
4 -> 4-cü
5 -> 5-ci
6 -> 6-cı
10 -> 10-cu
50 -> 50-ci
100 -> 100-cü
1995 -> 1995-ci
============================== ordinals (full) ==============================
1 -> birinci
2 -> ikinci
3 -> üçüncü
4 -> dördüncü
5 -> beşinci
6 -> altıncı
10 -> onuncu
50 -> əllinci
100 -> yüzüncü
1995 -> min doqquz yüz doxsan beşinci
============================== num_to_currency ==============================
50 -> əlli manat
12.5 -> on iki manat əlli qəpik
0.2 -> iyirmi qəpik
99.99 -> doxsan doqquz manat doxsan doqquz qəpik
============================== words to number ==============================
on -> 10
yetmiş yeddi -> 77
səksən altı tam onda altı -> 86.6
mənfi iki yüz iyirmi iki tam on mində yüz iyirmi beş -> -222.0125

vəə biraz fun

Maksimum əlçatanlıq üçün aşağıdaki dillərdə kodlar əlavə etdim:

Təbii vs Bank mode

Alqoritm həm təbii, həm də "bank" modunu dəstəkləyir. Təbii danışıqda 1001000 uyğun olaraq "yüz""min" kimi işlənsə də, bir çox rəsmi sənədlərdə, həmçinin bank çıxarışlarında bir yüz, bir min kimi yazılır. Bu, birmənalılığı saxlamağa xidmət edir. Ya da ki, proqramçılar üçün bucür yazmaq daha straightforward olub :)

Nümunə üçün:

Ədəd Təbii Bank mode
100 yüz bir yüz
125 yüz iyirmi beş bir yüz iyirmi beş
250 iki yüz əlli iki yüz əlli
1024 min iyirmi dörd bir min iyirmi dörd
51000 əlli bir min əlli bir min
1000000 bir milyon bir milyon

Mümkün tətbiqləri

Mətn səsləndirilməsində (text-to-speech)

Səsləndirilmədən əvvəl mətnlər normalizasiya olunur. Bu zaman ədədlər yazılı formaya keçməli olur. Bu məqsədlə alqoritm yerli NLP sistemlərimizin text-to-speech moduluna tətbiq oluna bilər.

Əfsanəvi dilmanc sistemi (http://dilmanc.az/az/metnin-seslendirmesi) yalnız 1 milyondan aşağı ədədləri səsləndirə bilir. Onluq kəsr hissənin səsləndirilməsi yoxdur. Təbii səsləndirmə stabil işləmir (məs: 120 - yüz iyirmi, amma 120000 - bir yüz iyirmi min kimi səslənir)

Bununla yanaşı, əks alqoritm - words_to_num speech-to-text modulunda istifadə ola bilər.

Elektron sənəd generasiyasında

Elektron sənədlərdə məbləğ və digər miqdarları yazılı formaya programmatically çevirmək.

PS. Excel funksiya kimi yazmaq faydalı olardı. Mən excel üçün macro yazmağa çalışdım, amma Visual Basic sintaksisi beyin xərçənginə yol açırdı deyə davam edə bilmədim.

Səsli növbə sisteminin qurulmasında

Tested?

Əks alqorimtlər (num_to_wordswords_to_num ) bir birini sıfırdan bir milyona qədər tam ədədlərlə test edib. Həmçinin, edge case-ləri yoxlamaq üçün 100+ test var (c#, xUnit)

Limitasiyalar

Kəsr hissəyə aid alqoritmlər experimentaldır. Onluq kəsrləri floating point sistemə xətasız keçirmək olmur. Kəsr ədədi string kimi qəbul edərək bu məsələni həll etmək olar.

Min və sonrakı bütün minlik mərtəbələrdə əmsallaşdırma məntiqini eyni olduğu üçün alqoritm çox böyük ədədlərlə də işləyəcək. Nəzəri olaraq istənilən qədər minlik mərtəbə əlavə etmək olar. Mərtəbənin adını adlar siyahısına əlavə etmək kifayətdir.

millify's People

Contributors

sanan-fataliyev avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Forkers

haziyevv huseyn

millify's Issues

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.