Automatic book machien

01mrt09

Een boek is basically een bende woorden die elkaar opvolgen in een volgorde die de auteur bepaalt. De woorden voor dit boek hebben we ondertussen. We verzamelden met name 93820 unieke woord-tokens van www.decontrabas.com. Deze kwamen in 188107 zinnen voor met in totaal 4850163 woorden.
Nu enkel nog de volgorde bepalen van deze woorden en we hebben een boek.

  • Stap 1 daarbij is de opbouw van de zinnen voor ons boek. Hoe gaat dat in zijn werk.

In een eenvoudige eerste approach kan je alle kansen oplijsten dat 2 woorden in combinatie voorkomen na elkaar (een Bigram heet dit). We deden dit even en genereerden zo een tekst. Hoe? Door te beginnen met het random woord “vruchten” en als volgende woord te nemen een woord dat volgde op het woord “vruchten” in een van alle mogelijke bigrammen en zo iteratief te werken. Hier een extract van de gegenereerde tekst.

>>> generate_text(conditional_freq_dist, “vruchten“, 100)
vruchten rijpen aan Wouter Hillaert staat blijkt voorlopig is nothing going the register van Kundera betoogt dat nu gekozen bestuur bijzonder genoten blijkbaar moet bezitten ze spraken op 29 GEDICHTEN Vertaalde dichtbundels gelezen kan overkomen met Bert Anciaux gericht om jouw leeftijd bedraagt inclusief Juan ( 100 vijzen een blanke man telt dat Nietzsches eis van leeggelopen over culturele hoeken en taalkunde aan acquisitie ? Doorheen de bloemlezig die woordenstromen bekoelt die Kostwinder : Psyche ‘ overwinning even halt houden tot as adolescents , Krushnamurti jaloers naar pagina zeg eens was omhulde te dik boek genoemd kan overzien.

We deden hetzelfde met het woord flarf.

>>> generate_text(cfd, “flarf“, 100)
flarf itself would seem less than we beiden verenigt wat Han daar roepen . Verrukkelijk . More often credited as in grootvaders voor liefde al diskwalificeren ; * Years later poogde De laatsten der Plas ‘ Dat woord vier regels onderling afhankelijk zijn tegengesteld want nog wakkere zwaluwen: onnatuurlijk voorkwamen , resucitada . Zonde dat groepje jongeren geen mode van Vogelaars werk verlichten nog opinies die volgde in meinem Krug den boze blikken ontbijtborden . Arroyo y noche empedrada , yine , zette hij over nog pijn van gedetailleerde

Het resultaat is nogal onsamenhangend. Maar om door te gaan als FLARF net genoeg vooral dan “Nietzsches eis van leeggelopen” en “boze blikken ontbijtborden“. Het kan natuurlijk anders (andere varianten van modellen zoals Hidden Markov Models, BrillRule, Trigrams, N-grams, combinaties daarvan, …) maar het kan ook beter. Hoe?

  • Stap 2: Met zinsontleding of grammatica (bweeeurk) begot. Of ook wel Part-of-Speech (POS) tagging genoemd in computational linguistics. Meer info op wikipedia.

howtowriteabookpart3docHoe gebeurt dit. Je neemt een corpus dat al ooit ge-Part-of-Speech tagged was (we nemen de Alpino treebank corpus, die bevat een pak gedigitaliseerde artikels van de krant de Telegraaf) we trainen een Part-of-Speech-tagger en passen die toe op de verzamelde woorden van de contrabas. Easy as kattepis. Dit geeft ons voor elk van de 4850163 woorden in de 188107 zinnen van de contrabas of het een zelfstandig naamwoord was, een werkwoord, een voltooid deelwoord, een voltooid verleden tijd enz. We geven 2 voorbeelden.

>>> ‘ ‘.join(decontrabas.sents()[3])
Daarnaast wordt op deze speciale website een uniek en blijvend online overzicht geboden van alle in 2006 bij reguliere uitgeverijen gepubliceerde Nederlandse en Vlaamse bundels .’
>>> text = ‘ ‘.join(decontrabas.sents()[3])
>>> tokens = text.split()
>>> tagged_sentence = tagger.tag(tokens)
>>> tagged_sentence
[(‘Daarnaast’, ‘adv’), (‘wordt’, ‘verb’), (‘op’, ‘prep’), (‘deze’, ‘det’), (‘speciale’, ‘adj’), (‘website’, ‘noun’), (‘een’, ‘det’), (‘uniek’, ‘adj’), (‘en’, ‘vg’), (‘blijvend’, ‘noun’), (‘online’, ‘noun’), (‘overzicht’, ‘noun’), (‘geboden’, ‘verb’), (‘van’, ‘prep’), (‘alle’, ‘det’), (‘in’, ‘prep’), (‘2006’, ‘noun’), (‘bij’, ‘prep’), (‘reguliere’, ‘noun’), (‘uitgeverijen’, ‘noun’), (‘gepubliceerde’, ‘noun’), (‘Nederlandse’, ‘noun’), (‘en’, ‘vg’), (‘Vlaamse’, ‘adj’), (‘bundels’, ‘noun’), (‘.’, ‘punct’)]
>>> ‘ ‘.join(decontrabas.sents()[1001])
‘Hij is van 1929 , dus niet meer zo piep .’
>>> text = ‘ ‘.join(decontrabas.sents()[1001])
>>> tokens = text.split()
>>> tagged_sentence = tagger.tag(tokens)
>>> tagged_sentence
[(‘Hij’, ‘noun’), (‘is’, ‘verb’), (‘van’, ‘prep’), (‘1929’, ‘noun’), (‘,’, ‘noun’), (‘dus’, ‘adv’), (‘niet’, ‘adv’), (‘meer’, ‘adv’), (‘zo’, ‘adv’), (‘piep’, ‘noun’), (‘.’, ‘punct’)]

Waarom is dit nodig hoor ik u denken. Omdat we een grammatica zullen opstellen. We zullen dan de grammaticale regels toepassen op de woorden van de contrabas. Nu we zullen de grammatica niet zelf opstellen (veel te veel werk we zijn lui). We zullen de computer de grammatica laten leren. Elke grammatica is mogelijk, van gelijk welke schrijver. Wij nemen als voorbeeld gewoon de grammatica van de Telegraaf uit de Alpino treebank corpus. Deze is gemakkelijk te bewerken.

howtowriteabookpart3doc2

  • Stap 3: We stellen een grammatica op (yes I know, writing is sooo booooring).

Een grammatica is een syntax tree waarbij we aangeven welke combinaties en opeenvolging van Part-of-Speech tags toegelaten zijn. Boven zie je zo’n syntax tree van een zin uit de Alpino treebank corpus. Eenmaal die grammatica opgesteld, passen we die gewoon toe en zullen we ook werken aan het verhaal. Morgen meer.



5 Responses to “Automatic book machien”

  1. 1 ki?

    amai its like wordwar(:
    ma de woordcombinaties vallen echt al goegeschift hier en daar.. tmoet er maar opkomen, da machien!
    ..en da gij de blaadjes door de bomen vant bos nog zie:o go jan goo jaan!!

  2. Meer bikkelharde blikken dozen, graag. Go Jan.

  3. 3 schaufestspiele

    momentje, ik heb problemen met wat Prolog programma’s, ik hoop die opgelost te hebben in het weekend

  4. Zit er een kink in de book machien?

  5. 5 schaufestspiele

    nee, beetje lui geweest, geen tijd gehad dees week.
    Kheb BVBA gestart en daar kruipt wat tijd in. Ik doe verder dit weekend.


Plaats een reactie