Kirjainyhdistelmät

RikuR

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

6

422

    Vastaukset

    Anonyymi (Kirjaudu / Rekisteröidy)
    5000
    • phpkoodaaja

      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

    • VanhaaJuttua

      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.

    • lulululululululu

      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'

      • lululululululul

        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)))


      • lulululul
        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


    Ketjusta on poistettu 0 sääntöjenvastaista viestiä.

    Luetuimmat keskustelut

    1. Aivosyöpää sairastava Olga Temonen TV:ssä - Viimeinen Perjantai-keskusteluohjelma ulos

      Näyttelijä-yrittäjä Olga Temonen sairastaa neljännen asteen glioomaa eli aivosyöpää, jota ei ole mahdollista leikata. Hä
      Maailman menoa
      80
      2799
    2. Pelotelkaa niin paljon kuin sielu sietää.

      Mutta ei mene perille asti. Miksi Venäjä hyökkäisi Suomeen? No, tottahan se tietenkin on jos Suomi joka ei ole edes soda
      Maailman menoa
      293
      1610
    3. Mikä saa ihmisen tekemään tällaista?

      Onko se huomatuksi tulemisen tarve tosiaan niin iso tarve, että nuoruuttaan ja tietämättömyyttään pilataan loppuelämä?
      Sinkut
      246
      1517
    4. Minkä merkkisellä

      Autolla kaivattusi ajaa? Mies jota kaipaan ajaa Mersulla.
      Ikävä
      87
      1361
    5. IL - VARUSMIEHIÄ lähetetään jatkossa NATO-tehtäviin ulkomaille!

      Suomen puolustuksen uudet linjaukset: Varusmiehiä suunnitellaan Nato-tehtäviin Puolustusministeri Antti Häkkänen esittel
      Maailman menoa
      401
      1339
    6. Nyt kun Pride on ohi 3.0

      Edelliset kaksi ketjua tuli täyteen. Pidetään siis edelleen tämä asia esillä. Raamattu opettaa johdonmukaisesti, että
      Luterilaisuus
      396
      1273
    7. Esko Eerikäinen tatuoi kasvoihinsa rakkaan nimen - Kärkäs kommentti "Ritvasta" lävähti somessa

      Ohhoh! Esko Eerikäinen on ottanut uuden tatuoinnin. Kyseessä ei ole mikä tahansa kuva minne tahansa, vaan Eerikäisen tat
      Suomalaiset julkkikset
      38
      1017
    8. Kiitos nainen

      Kuitenkin. Olet sitten ajanmerkkinä. Tuskin enää sinua näen ja huomasitko, että olit siinä viimeisen kerran samassa paik
      Tunteet
      2
      979
    9. Hyväksytkö sinä sen että päättäjämme ei rakenna rauhaa Venäjän kanssa?

      Vielä kun sota ehkäpä voitaisiin välttää rauhanponnisteluilla niin millä verukkeella voidaan sanoa että on hyvä asia kun
      Maailman menoa
      329
      854
    10. Miksi Purra-graffiti ei nyt olekkaan naisvihaa?

      "Pohtikaapa reaktiota, jos vastaava graffiti olisi tehty Sanna Marinista", kysyy Tere Sammallahti. Helsingin Suvilahden
      Maailman menoa
      254
      832
    Aihe