Lähteenä olisi kaikki suomen kielen sanat taivutusmuotoineen, ja jonkunlainen luettelo järkevistä lauseista, jotta tulokset olisivat sanajärjestykseltään kelvollisia.
Miten lähdetään kehittämään? Python lienee järkevin kielivalinta?
Miten lähdetään kehittämään? Python lienee järkevin kielivalinta?
Vastaukset 71
Vanhimmat
Jos sinulla olisi jo nyt olemassa kattava sanasto, olisi sinulla mahdollisuus löytää sanaston sanoista palindromeja vaikka näin:
grep ^aa sanasto | grep aa$
tuo toisi esiin muummuassa sanan "aavaa"
tai vaikka;
grep ^el sanasto | grep le$
ele, elele, ...
Anna panna.
Löytyykö sanastostasi?
Se uupuu
Tässähän niitä olisi teille kokonainen salkullinen *pudottaa painavan salkun maahan metrin korkeudelta niin, että pöly lennähtää varaston lattialta ja avaa salkun, joka on täynnä palindromeja*
https://www.riemurasia.net/teksti/Palindromeja/63854
Palindromigeneraattorista en tiedä mutta täällä hilluu tietty porukka jolla on puppugeneraattori.
Jos vaikka katsot miten ne on netissä toteutettu!
Netti on täynnä tällaisia, ja jopa sumeksikin!
Ei löytynyt yhtään.
Katso googIesta.
Kaikki on nykyään valmiiksi tehty.
Millä tavalla vanhempasi ovat suhtautuneet älylliseen kehitykseesi.
Oletko holhouksen alainen? Ihmiset tuodaan maapallolle haikaran kyydissä.
Ja toisia kasvattavat sudet tai jopa apinat ennenkuin ihmiset lopulta löytävät ne.
Ei näyttäisi ensimmäisen sprintin aikana edistyvän tämä projekti lainkaan.
Täydellistä suomen kielen sanaluetteloa ei taida mistään saada tekstimuodossa. Ei varsinkaan, jos siinä olisi mukana myös kaikki taivutusmuodot ja niiden vaihtoehdot.
Suomen kielitoimisto varjelee omaisuuttaan tarkasti. Rahalla saa tietysti jotain tuotteita, mutta niissä joutunee aina hakemaan sana kerrallaan.
Yksi iso keskitetty ja jatkuvasti ylläpidettävä sanavarasto on tietysti ihan hyvä suurimmalle osalle käyttäjiä. Ei tarvitse hakea ensin omasta vanhasta kopiosta ja varmistaa sitten tulosta Suomen kielitoimiston sivuilta ja yrittää löytää mahdollisia muutoksia. Jos mitään ei ole muuttunut, sen varmentamiseen menee aikaa helposti useampi minuutti.
Sellainen löytyy joka kertoo näin:
grep -c ^a sanasto
67649
tai
grep -c ^k sanasto
149642
eli jotain kyllä on
ja kun muistaa ettei kieliopin mukaan kaikkea saa pienellä kirjottaa niin luvut vain kasvaa:
grep -c -i ^a sanasto
82863
grep -c -i ^k sanasto
187612
Kun randomina j:ttä yhdistellään
Jaanan jakamat jouset joutaa jokeen
Eikä sen kirjaimen aina tarvitse alussa tai lopussa olla, riittää kun on mukana:
grep -c -i i sanasto
999128
Lopeta tuo spämmääminen. Ketään ei kiinnosta.
Google on maailman turvallisin hakukone.
Kuinka tuo lajittelu pitäisi tehdä kun halutaan a:lla alkavat ja "nen" loppuiset poimia erilleen tiedostoon?
Wikipediassa on joku viritelmä https://fi.wiktionary.org/wiki/Luokka:Suomen_sanat
Wikipediasta pitäisi saada ladattua dumppikin, niin ei tarvitse erikseen joka sanaa hakea.
Tuo on kaiketi kansalaisten laatima, ja niin ollen oikoluku on tarpeen.
grep "^a.*nen$" sanasto > found.txt
Näin se tapahtuu.
Kielitoimiston sanakirja ei taida sisältää yhdyssanoja, eikä taivutuksia, pistäydyin kuikkaamassa, mutta olisi joutunut mainostenestoja purkamaan en viitsinyt pitemmälle mennä.
Kyllä kielitoimiston isosssa sanakirjassa on kaikki käytössä olevat yhdyssanat selityksineen ja esimerkkilauseineen ja paljon historiatietoa jokaisen sanan käytöstä. Pääset näkemään vain joitakin valittuja pieniä osia siitä. Eikä sitä voi edes ostaa.
Voisko toimia niin, että ensin etsit palindromit yksittäisistä sanoista?
Siitä saisit sitten suppeaman joukon, josta alkaa muodostaa lauseita . . .
Yllättävän vähän noita palindromeja yksittäisinä sanoina löytyy. Tein Bash Shell scriptin poimimaan 1671896 sanan sanastosta sanat jotka ovat etu- ja takaperin samoja. 114 kpl löyty.
Anagrammi generaattori olisi paljon helpompi tehtävä.
Sellainen on jo olemassa, niin ei maksa vaivaa keksiä pyörää uudelleen.
En kerinnyt kuin aloittaa, niin tuli seinä vastaan. Yritin löytää mitä muita anagrammeja "sanan muunnokset" sisältää, niin koneen resurssit eivät riittäneet käyttää permutations() funktiota, joutuisi kehittelemään jotain muuta tuon tilalle, tai hankkimaan muistikamman lisää.
Nythän tämä vasta alkaakin kiinnostaa, kun ei ensimmäistä yrityksestä mitään syntynyt.
"permutations() funktiota" - ?
Onko jossain ohjelmointikielessä jo valmiina permutations() funktio ?
Itse koodasin tuollaisen permutaatiofunktion Delphillä tänään.
Delphin TStringList on varsin kätevä luokka, kun sitä osaa käyttää oikein.
Oma permutaatiofunktioni siis tulostaa (syötearvolla 4) seuraavaa:
-----------alkaa------------
4321
3421
3241
3214
4231
2431
2341
2314
4213
2413
2143
2134
4312
3412
3142
3124
4132
1432
1342
1324
4123
1423
1243
1234
-----------loppuu------------
Eli arvolla 4 permutaatiofunktioni siis luo kaikki merkkijonot, joiden pituus on 4, ja joissa numerot 1..4 kukin esiintyy tasan yhden kerran.
Varsinaisen permutaatiofunktion koodaamiseen Delphillä meni 44 koodiriviä (ja niistäkin 5 tyhjää riviä, 2 kommenttiriviä eli 37 varsinaista koodiriviä, ja siitäkin 5 riviä muuttujamäärittelyitä).
Tosin: Mitä tekemistä permutaatiofunktiolla on palindromigeneraattorin kehittämisen kanssa ?
No nyt löytyi vähän muistia tarvitseva permutations() funktion korvike, nyt täytyy vielä ratkaista anagrammien oikoluku voikolla.
Kyllä tästä taitaa tulla jotain valmistakin.
No niin, sana tai sanaparit jotka eivät sisällä kahta samaa kirjainta menee hienosti läpi.
käsine, käsien, kesinä, kesäni, kesäin, sikeän, säekin, säkein, säkien, säkine, äeskin, änkesi
Mutta kun sana sisältää samoja kirjaimia useamman, toistuu listassa sama lopputulos monta kertaa. Tämä johtuu siitä permutations() funktion käsittelee vain merkkipaikkoja ei niiden sisältöä. No korjauskin on helppo, lajitellaan vain unikit jatkoon.
Eli pientä sipistelyä vaille valmis.
Muuten tuo vähemmällä muistilla toimiva permutations() funktio löytyy trotter laajennoksesta.
import trotter
Tuo trotter laajennos ei ole yhteensopiva super nopean pypy3:n kanssa, joten siltä puolen ei nopeutusta saa.
Eikö kukaan muu innostunut asiasta, olisi ollut kiva nähdä millä muulla tavalla asia on ratkaistavissa.
Vaikka tuossa on minulla aloituksen ja lopetuksen väliä 9 tuntia, ei se kaikki tuohon mennyt. Olin poissa koneelta useita tunteja.
Ja vain 16 riviä siihen tarvitaan. Harmi ettei täällä ole python ohjelmoinnista kiinnostuneita.
Tee anagrammiaiheesta uusi ketju. Tässä ketjussa suunnitellaan palindromigeneraattoria.
Kunpa se ainut suunnittelija joka tässä ketjussa on jotain asian eteen tehnyt olen minä, loput vain häiriköi tai vittuilee kuten sinä nyt.
Sitä paitsi anagrammi generaattori on jo valmis, toisekseen, en koskaan tee avauksia, siihen joutuisi avaamaan yksityisyyttä suojaavia suotimia, ellet ole huomannut, avausten tekoon on yksityisyyttään avattava sen verran että pystyvät varmuudella tunnistamaan kirjoittajan, viestien kirjoittaminen onnistuu yksityisyyttään vaarantamatta.
Olen sata varma, ellen minä tee tuota palindromigeneraattoria, ei sitä teille tee kukaan muukaan.
Se että oksentaa palstan täyteen aiheeseen liittymätöntä monologia on häiriköintiä, joka estää keskustelun varsinaisesta aiheesta.
Tee siis anagrammigeneraattorista oma aloitus, niin pysyvät puurot ja vellit erossa toisistaan.
Sulla on kyllä vaikeaa, kun ainoa mitä osaat on palstojen sotkeminen.
Sinä et osaa edes tehdä "hello world"-ohjelmaa.
Tuohon voi yhtyä!
Näin koodataan "hello world"-ohjelma Delphillä:
program helloworld;
{$Apptype console}
begin
WriteLn('hello, world!');
end.
Tuo {$Apptype console} on tarpeellinen kääntäjädirektiivi, joka kertoo Delphille että tehdään komentoriviohjelma eikä GUI -ohjelmaa. On tarpeen, koska muuten ohjelma keskeytyy WriteLn -lauseen kohdalla virheeseen, koska ns. standard output ei ole avoinna !
Itse asiassa huomasin että tuo tuolla ylempänä oleva viestini, jossa hain sanastosta yhden sanan palindromet, sisältääkin jo listaamis-suotimet, joita vain täytyy soveltaa tähän anagrammi generaattoriin, niin ollaan jo hyvin lähellä lopullista ratkaisua.
Ylläpidolle toivomus, jos mahdollista, niin poistakaa selvästi kiusanteko- ja loukkaamis-tarkoituksessa kirjoitetut viestit.
Ja kaikki ketjuun kuulumattomat häiriköintiviestit.
Tuli mieleen saisiko jotain aikaan tavu tasolla, kun voikko kykenee tavuttamaan 1558060 sanan sanaston kokonaisuudessaan 36,331 sekunnissa.
Anagrammigeneraattorissa käyttämäni funktio käy kyllä läpi joka ikisen vaihtoehdon, mutta on juuri siitä syystä hyvin hidas pitemmillä merkkijonoilla.
Eikö vieläkään ketään jonka kanssa voisi ajatuksia vaihtaa, anagrammin ydin ja listauksen suodin kyllä toimii yhdessä, mutta jo "saippuakauppias" on aivan liian pitkä merkkijono käydä läpi.
PyPy3 nostaisi nopeuden C kielen tasolle tai joissakin tapauksissa jopa ylikin, mutta kun se ei tue trotter laajennosta.
Nyt tuntuu että tämä kompastuu tuohon nopeuden puuttumiseen.
Taidan aikani kuluksi tarkistaa montako semordnilappia sanasto sisältää. Semordnilap on kuin palindromi joka kuitenkin muodostaa eri sanan riippuen kummin päin sen luet.
Semordnilapeja löytyi 1131.
Muutama esimerkki:
tukan => nakut
tukat => takut
tulleja => ajellut
elein => niele
elettiin => niittele
Monikohan huomasi tuon semordnilap nimen muodostumisen,
Palindrom => Semordnilap siinäkin on tuo käänteinen palindrom mukana.
Ja mistä tuo "Se" tulee?
Monikko muoto.
On myös numeerisia palindromeja, kuten päivämäärä- ja aikaleimat.
There are also numeric palindromes, including date/time stamps.
Projektiin tuli luova tauko.
Veikkaan että tuo ns. järkevien lauseiden luettelointi on melkoisen haastava vaihe, ja oikeastaan samassa yhteydessä voi jo poimia niiden joukosta palindromit, joten varsinaista generaattoria ei tarvinne tehdäkään.
Poimin 1732950 sanan sanastosta palindromit. Aikaa siihen kului 115 min 18 sekuntia, ja nämä löytyi:
aapaa, aavaa, aja, ajaja, ajoja, akka, ala, alla, allakalla, allilla, aneena, anna, autioitua, avaava, avattava, dvd, ele, elele, emme, emmimme, enene, enne, ette, ettette, huh, häh, iki, imaami, imi, iskuksi, isosi, isälläsi, isäsi, isääsi, iti, malajalam, naakkaan, naamaan, naamioimaan, naaraan, naavaan, nadan, nahan, naisasian, nannan, napan, navan, neitien, netoten, niin, niiniin, niittiin, nimin, nipin, nirrin, nisin, nolon, noron, nukun, nupun, nurun, nutun, nynnyn, nypyn, nälän, närän, näätään, oho, oio, olo, otto, piip, pop, saas, sadas, saippuakauppias, siis, suuruus, sylys, sytytys, taiat, takat, tallat, tammat, tapat, tarrat, tavaavat, tavat, tavattavat, teet, tiiviit, tikit, tilit, tillit, tissit, tollot, touot, tukut, tullut, tummut, tunnut, turrut, turut, tutut, tykyt, tylyt, tönöt, töpöt, utu, uupuu, ylly, yty, äijiä, äitiä, älä, ämmä, ässissä, ässä, ässässä
Huomion arvoista tässä on se että, sanasto ei sisällä erisnimiä. eikä mitään muitakaan sanoja jotka kuuluu kirjoittaa isolla tai isolla alkukirjaimella. Kaikki on voikon oikoluku hyväksynyt oikein kirjoitetuksi.
Poiminnassa käytin alla olevaa yhden rivin Bash Shell scriptiä.
while read -r l; do s=$(echo $l | rev); if [ "$l"=="$s" ]; then echo $l; fi; done < words
Vuoden paras viesti.
Olen itsekin samaa mieltä. 😂 😂 😂
Sanaston koko on nyt jo jonkin matkaa yli 2 miljoonaa, mutta edellinen palindromilista sai vain 3 uutta palindromeja (alla olevat).
Vaikka sanasto on kasvanut 1 732 950 sanasta => 2 858 446 sanaan, ei palindromit ole lisäänyneet kuin 9:llä.
aamumaa, aapaa, aavaa, aja, ajaja, ajattaja, ajoja, akka, ala, alla, allakalla, allilla, aneena, anna, autioitua, avaava, avattava, dvd, ele, elele, emme, emmimme, enene, ennallanne, enne, ette, ettette, huh, häh, iki, imaami, imi, iskuksi, isosi, isälläsi, isänäsi, isäsi, isässäsi, isääsi, iti, malajalam, naakkaan, naamaan, naamioimaan, naaraan, naavaan, nadan, nahan, naisasian, nannan, napan, navan, neitien, netoten, niin, niiniin, niittiin, nikamakin, nimin, nipin, nirrin, nisin, nolon, noron, nukun, nupun, nurun, nutun, nynnyn, nypyn, nälän, närän, näätään, oho, oio, olo, olokolo, otto, piip, pop, saas, sadas, saippuakauppias, siis, sorros, suuruus, sylys, sytytys, taiat, takat, tallat, tammat, tapat, tarrat, tavaavat, tavat, tavattavat, teet, tiiviit, tikit, tilit, tillit, tissit, tollot, touot, tukut, tullut, tummut, tunnut, turrut, turut, tutut, tykyt, tylyt, tönöt, töpöt, utu, uupuu, ylly, yty, äijiä, äitiä, älä, ämmä, ässissä, ässä, ässässä
"Miten lähdetään kehittämään? Python lienee järkevin kielivalinta?"
Sanaston ylläpito on tehty Lazaruksella, ja tämä liittymä ajaa paljon Bash Shell Scriptejä taustalla.
Oletteko koskaan miettinyt, esiintyykö a kirjain useammin sanan alussa vai sanan lopussa?
Olipa a sitten sanan alussa tai lopussa, niin kaikista useimmin se esiintyy jossakin sanan sisällä.
Sanaristikoita täyttävälle luulisi olevan hyötyä tilanteissa joissa yksi tai useampi kirjain määräytyy poikittaisten sanojen kirjaimista
?O?L?????I
Minun sanastosta tuohon löytyisi tällä hetkellä 75 eri vaihtoehtoa.
Sanasto on kasvanut mukavasti, voi jo sanoa "3 miljoonaa sanaa" sisältävä sanasto valmistuu ennen kesää.
Eipä valmistunutkaan, into sanaston kehittämiseen laimeni, tilanne nyt; 2 983 261.
Mitenhän tuon nyt sitten nopeuttais. Tietenkään jokaista sanaa ei tarvitsisi tarkastaa, vaan ainoastaan kirjaimia niin kauan kun mahdollisia sanoja löytyy. Esim vaikka alkuperäinen sana olisi 20-kirjaiminen, niin jos anagrammin ensimmäiset kirjaimet olisivat akpt niin tuskin olisi yhtäkään suomalaista sanaa joka noilla sanoilla alkais ja hakemisen vois lopettaa siihen sen sijaan että kahlais kaikki läpi. Mutta kyllähän tän varmaan kaikki tajuaa.
Mutta sitten herää kysymys, kestääkö sen aikaa säästävän skriptin kirjoittamisessa kauemmin kuin vaan brute forcettaa koko paska läpi. No, olispahan sitten skrpiti valmiina jos sitä joskus toiste tartteis eri sanaston kanssa.