Neseniai užmačiau vienąArtūro projektų. Iš karto prisiminiau, kad turiu nebaigtą blogo funkciją žodžių vertimui iš daugiskaitos į vienaskaitą:

def dgs(number, word=''):
    """Pluralization for Lithuanian (works partially)
 
       Kaip argumentą pateikite daugiskaitos vardininką
        - Pvz1: {{ 10|dgs:"Komentarai"}}
        - Pvz2: {{ 21|dgs:"Knygos"}}
    """
    if number in range(11,20) or (number % 10) == 0:
        #masculine and feminine forms are the same
        word = word[:-2] + u"ų"
 
    elif number == 1 or (number % 10) == 1:
        if word[-2:] == "ai":
            #masculine form
            word = word[:-2] + "as"
        elif word[-2:] == "os":
            #feminine form
            word = word[:-2] + "a"
 
    #default value is used in all other cases
    return "%d %s" % (number, word)

Nusprendžiau patobulinti taip, kad veiktų su bet kokiu daiktavardžiu, turinčiu vienaskaitos ir daugiskaitos formas (atkrenta tokie žodžiai kaip pienas, alus, durys, miltai).

Procesas buvo gan ilgas, Tomas astsiuntė žodžių sąrašą, su Python jį išparsinau, tada sekė duomenų analizavimas bei abstrakcija, o galiausiai programavimas (lengviausia dalis ;)

Šiaip rekomenduoju visiems pasižiūrėti į kodą ir prisitaikyti savuose projektuose. Kažkaip susidaro įspūdis, jog programuotojai bijo Lietuvių kalbos. Kur tik pažiūrėsi, vis matai “10 Komentarai (-ų)”, “5 Prekių (-ės)” ir pan. Tikrai nėra taip sunku parinkti tinkamą žodžio formą.

P.S. nebijokit Python’o, jis kaip pseudo-kodas :)

P.P.S. Žinau, kad mano unit testas nėra labai rafinuotas, tad kitą kartą pasitengsiu labiau :D