Kirjainyhdistelmät

Terve kaikille!

Tossa oli aikasemmin sanayhdistelmistä joku kysellyt ja saanut vastauksenkin mutta nyt seuraavanlainen kirjainpähkinä:

Pitäisi lukea kaikkien kahden kirjaimen kirjainyhdistelmän esiintymislukumäärä(järjestyksellä siis väliä). eli aa-öö, lukumääränä max 29*29-29 = 812. Kirjaimen koolla ei ole väliä, oli se iso tai pieni.

Teksti tulisi lukea esim. tiedostosta teksti.txt ANSI muotoisena ja sisältäen ihan mitä vain symboleja, kuitenkin 99% kirjaimia ja välimerkkejä. Muita symboleja kuin kirjaimia ei tarvitse laskea ollenkaan.

Yhdistelmille voi myös antaa lisämääreen tuplavokaali, tuplakonsonatti tai seka. (esim. v, k, s)

Tulokset tulisi mahdollisesti vielä järjestää suuruusjärjestykseen kaikkien yhdistelmien osalta(, tuplavokaalien, tuplakonsonanttien osalta ja sekayhdistelmien osalta).

Tulokset tallennettaisiin esim. tulos.txt tiedostoon.

Esim. teksti: nasta astia.

as 2
st 2
na 1
ta 1
ti 1
ia 1

Tekstitiedoston koon voi rajata max 1Mt jotta siitä ei tulee liikaa ongelmia.

Siinä sitä sitten olisi haastetta jos täältä löytyy innokkaita harrastelijoita.

Itse en ole harrastaja ja vain muutaman kurssin käynyt. Voin antaa oman panokseni tehtävään mikäli tästä joku innostuu.

Osallistu keskusteluun rohkeasti, anna vinkkejä yms. T: RikuR
6489
Äänestä

Muut lukivat myös

Vastaukset 6

Vanhimmat

En tiennyt miten sisennyksen saa näkymään suomi24-viesteissä (saako mitenkään?), joten laitoin koodin URLin perään. Tässä se olisi näyttänyt aivan hirveältä.

http://www.saunalahti.fi/tkot/kirjainyhdistelmat.php.txt

Pikaisesti tehty ja testattu. Voi sisältää virheitä, mutta näyttää toimivan ainakin suppealla testiaineistolla.

Tätä ajataan siis komentoriviltä esim. komennolla
c:\php\cli\php.exe kirjainyhdistelmat.php teksti.txt > tulos.txt
jolloin tutkittava teksti on tiedostossa teksti.txt ja tulos menee tiedostoon tulos.txt

Äänestä

Aika nätin näkönen koodi kun tälläi täytenä amatöörina katsoi ja testasi. Tosi lyhyennäköiseen koodiin sai mahtumaan tosi kovan laskumaatin.

Sen verran muokkasin että tein pari uutta muuttujaa vai mikskä tota arrayta kutsutaan lisää eli tämmöset:

Tuplavokaalit: AA, EE, II, jne.
Vokaaliyhdistelmat: AE, AI, EI, jne.

Äänestä

Nyt kun en musita ihan heti kuinka suomi24 näitä erikoismerkkejä tulkitsee niin testailenpa eka. Sori spammista :)
[asdasd] #SDFSDFSDF &&&&&&

#!/usr/bin/env python
# This program adds up integers in the command line
import sys
try:
    total = sum(int(arg) for arg in sys.argv[1:])
    print 'sum =', total
except ValueError:
    print 'Please supply integer arguments'

Äänestä
  • En suoraan nähnyt vikaa edellisessä testissä joten tässä tulee pjyyttoni versio. Joku voipi tehä paremman ja nätimmän version niin halutessaan. Ehkä tästä jotain iloo kuitenkin jollekin on (jos tää nyt ees tulostuu suomi24:ssä oikein:)

    #!/usr/bin/env python
    # -*- coding: utf8 -*-

    import sys
    import codecs
    from itertools import permutations
    from collections import Counter

    AAKKOSET = u'abcdefghijklmnopqrstuvwxyzåäö'
    VOKAALIT = u'aeiouyåäö'
    KONSONANTIT = ''.join((x for x in AAKKOSET if x not in VOKAALIT))

    VOKAALIPARIT = {x+x for x in VOKAALIT}
    KONSONANTTIPARIT = {x+x for x in KONSONANTIT}


    def kirjainparit(s):
    '''generaattori joka palauttaa 2 kirjainta kerrallaan annetusta merkkijonosta'''
    a,b = None, None
    for merkki in (x for x in s if x in AAKKOSET):
    b, a = a, merkki
    if a and b:
    yield b+a


    if __name__ == '__main__':
        # kaikki mahdolliset kahden kirjaimen yhdistelmät
        kirjainyhdistelmat = permutations(AAKKOSET, 2)

        try:
            teksti = codecs.open('teksti.txt', encoding='latin1').read().lower()
        except Exception as e:
            print >>sys.stderr, e
            teksti = u'nasta astia'
            print u'Käytetään teksti="%s"' % teksti

        # lasketaan kirjainparien esiintymismäärät
        laskuri = Counter()
        for kp in kirjainparit(teksti):
            laskuri[kp] += 1

        # järjestetään tulokset esiintymistiheyden mukaan suurimmasta pienempään
        tulokset = laskuri.items()
        tulokset.sort(key=lambda tulos: tulos[1], reverse=True)

        # näytetään tulokset niin ja näin.. en jaksanut kirjottaa tiedostoon. Jääköön kotitehtäväksi jos joku haluaa
        print 'Kaikki'
        print '\n'.join(('%s %d' % x for x in tulokset))
        print
        print 'Vokaaliparit'
        print '\n'.join(('%s %d' % x for x in tulokset if x[0] in VOKAALIPARIT))
        print
        print 'Konsonanttiparit'
        print '\n'.join(('%s %d' % x for x in tulokset if x[0] in KONSONANTTIPARIT))
        print
        print 'Sekalaiset'
        print '\n'.join(('%s %d' % x for x in tulokset if (x[0] not in VOKAALIPARIT) and (x[0] not in KONSONANTTIPARIT)))

    Äänestä

  • lululululululul kirjoitti:

    En suoraan nähnyt vikaa edellisessä testissä joten tässä tulee pjyyttoni versio. Joku voipi tehä paremman ja nätimmän version niin halutessaan. Ehkä tästä jotain iloo kuitenkin jollekin on (jos tää nyt ees tulostuu suomi24:ssä oikein:)

    #!/usr/bin/env python
    # -*- coding: utf8 -*-

    import sys
    import codecs
    from itertools import permutations
    from collections import Counter

    AAKKOSET = u'abcdefghijklmnopqrstuvwxyzåäö'
    VOKAALIT = u'aeiouyåäö'
    KONSONANTIT = ''.join((x for x in AAKKOSET if x not in VOKAALIT))

    VOKAALIPARIT = {x+x for x in VOKAALIT}
    KONSONANTTIPARIT = {x+x for x in KONSONANTIT}


    def kirjainparit(s):
    '''generaattori joka palauttaa 2 kirjainta kerrallaan annetusta merkkijonosta'''
    a,b = None, None
    for merkki in (x for x in s if x in AAKKOSET):
    b, a = a, merkki
    if a and b:
    yield b+a


    if __name__ == '__main__':
        # kaikki mahdolliset kahden kirjaimen yhdistelmät
        kirjainyhdistelmat = permutations(AAKKOSET, 2)

        try:
            teksti = codecs.open('teksti.txt', encoding='latin1').read().lower()
        except Exception as e:
            print >>sys.stderr, e
            teksti = u'nasta astia'
            print u'Käytetään teksti="%s"' % teksti

        # lasketaan kirjainparien esiintymismäärät
        laskuri = Counter()
        for kp in kirjainparit(teksti):
            laskuri[kp] += 1

        # järjestetään tulokset esiintymistiheyden mukaan suurimmasta pienempään
        tulokset = laskuri.items()
        tulokset.sort(key=lambda tulos: tulos[1], reverse=True)

        # näytetään tulokset niin ja näin.. en jaksanut kirjottaa tiedostoon. Jääköön kotitehtäväksi jos joku haluaa
        print 'Kaikki'
        print '\n'.join(('%s %d' % x for x in tulokset))
        print
        print 'Vokaaliparit'
        print '\n'.join(('%s %d' % x for x in tulokset if x[0] in VOKAALIPARIT))
        print
        print 'Konsonanttiparit'
        print '\n'.join(('%s %d' % x for x in tulokset if x[0] in KONSONANTTIPARIT))
        print
        print 'Sekalaiset'
        print '\n'.join(('%s %d' % x for x in tulokset if (x[0] not in VOKAALIPARIT) and (x[0] not in KONSONANTTIPARIT)))

    pahus, kirjainparit kohdan sisennys meni pieleen kun töpeksin sen vahingossa tabulaattoreiksi ja ei sitten konvertoitunut oikein suomi24 pastea varten. No kaipa tuon osaa joku sisentää itsekin oikein jos haluaa kokeilla. Muutoin näytti tulevan tännekin ok

    Äänestä

Kommentoi aloitusta


RikuR kirjoitti:

Terve kaikille!

Tossa oli aikasemmin sanayhdistelmistä joku kysellyt ja saanut vastauksenkin mutta nyt seuraavanlainen kirjainpähkinä:

Pitäisi lukea kaikkien kahden kirjaimen kirjainyhdistelmän esiintymislukumäärä(järjestyksellä siis väliä). eli aa-öö, lukumääränä max 29*29-29 = 812. Kirjaimen koolla ei ole väliä, oli se iso tai pieni.

Teksti tulisi lukea esim. tiedostosta teksti.txt ANSI muotoisena ja sisältäen ihan mitä vain symboleja, kuitenkin 99% kirjaimia ja välimerkkejä. Muita symboleja kuin kirjaimia ei tarvitse laskea ollenkaan.

Yhdistelmille voi myös antaa lisämääreen tuplavokaali, tuplakonsonatti tai seka. (esim. v, k, s)

Tulokset tulisi mahdollisesti vielä järjestää suuruusjärjestykseen kaikkien yhdistelmien osalta(, tuplavokaalien, tuplakonsonanttien osalta ja sekayhdistelmien osalta).

Tulokset tallennettaisiin esim. tulos.txt tiedostoon.

Esim. teksti: nasta astia.

as 2
st 2
na 1
ta 1
ti 1
ia 1

Tekstitiedoston koon voi rajata max 1Mt jotta siitä ei tulee liikaa ongelmia.

Siinä sitä sitten olisi haastetta jos täältä löytyy innokkaita harrastelijoita.

Itse en ole harrastaja ja vain muutaman kurssin käynyt. Voin antaa oman panokseni tehtävään mikäli tästä joku innostuu.

Osallistu keskusteluun rohkeasti, anna vinkkejä yms. T: RikuR

Anonyymi
5000

Ilmoita asiaton sisältö

  • Sisältää materiaalia, joka on loukkaavaa, herjaavaa, rasistista, uhkailevaa tai ahdistelevaa.

  • Materiaali sisältää nimiä, yhteystietoja tai muita henkilökohtaisia tietoja. Julkisuuden henkilöistä, julkisissa viroissa toimivista ihmisistä sekä yritysten vastuuhenkilöistä saa keskustella työhön liittyen. Myös yksityiselämään liittyvistä asioista voi keskustella siltä osin, kuin niistä on julkisesti kerrottu.

  • Sisältää lapsille haitallista tai heiltä kiellettyä materiaalia. Seksuaalinen sisältö on sallittua aiheeseen tarkoitetuilla palstoilla, joiden ikäraja on 18 vuotta.

  • Lainvastaista sisältöä voi olla mm. yksityiselämää loukkaavan tiedon levitys, kiihottaminen kansanryhmää vastaan, laiton uhkaaminen, alaikäisiin liittyvä seksuaalinen sisältö/grooming, petokset, identiteettivarkaudet, kunnianloukkaukset ja tekijänoikeusrikkomukset.

  • Sisältö ei liity palstan tai keskusteluketjun aiheeseen.

  • Viesti ei ole suomea tai ruotsia (pl. International Forums), se sisältää mainontaa, se sisältää tekijänoikeuksin suojattua materiaalia, se on massapostitus tai jokin muu syy.

Jaa keskustelu