Nekromanti Program för att generera slumpmässiga texter

stenhöna

tellstory
Joined
5 Oct 2002
Messages
964
Location
Hamburg
Hej!

Jag knepat ihop ett litet program som genererar texter utifrån en XML-fil. Exempel:

Code:
<?xml version="1.0" encoding="UTF-8"?>
<story>
  <sentence>
    This is a
    <alt> sentence.</alt>
    <alt> joke.</alt>
    <alt> big nothing.</alt>
  </sentence>
  <sentence>
    This is another
    <alt> sentence.</alt>
    <alt> joke.</alt>
    <alt> big nothing.</alt>
  </sentence>
</story>
Denna fil kommer skapa texter som:
  • This is a big nothing. This is another joke.
  • This is a sentence. This is another sentence.
  • This is a sentence. This is another big nothing.
Osv. Detta kan användas istället för slumptabeller, för mer variation och flexibilitet.

Planerade features:
  • Vikta alternativen, så vissa får högre eller lägre sannolikhet:
    Code:
    <alt weight=10> another alt</alt>
  • Flaggor som gör det möjligt att generera en mening om ett alternativ blev valt tidigare:
    Code:
    <alt setFlag="flag1"> that happened</alt> ... <if flag="flag1">...</if>
Tanker, idéer? Kanske finns ett liknande program redan?

Länken till program: https://github.com/olleharstedt/tellstory
Byggt på Ubuntu, kan skicka binär eller ge bygginstruktioner om någon vill pröva.
 

stenhöna

tellstory
Joined
5 Oct 2002
Messages
964
Location
Hamburg
Eller så kan man istället för att slumpa ett alternativ låta användaren välja ett, och på så sätt låta det bli ett verktyg för att skapa interaktiva berättelser. Och så kan man göra ett online-interface med, och skapa ett community för det.
 

stenhöna

tellstory
Joined
5 Oct 2002
Messages
964
Location
Hamburg
Implementerade funktionaliteten med flaggor, och här är några exempelgenereringar från en XML-fil. Jag är inte helt övertygad...

Ni går på en väg. Efter en dag kommer ni fram till en stuga. Inuti sitter en ung man. Han säger: "Tiden är ute. Han ni förberett allt?" Nej, det har ni inte. Mannen reser sig upp och frågar om ni är beväpnade. Ni drar era vapen. En kort strid följer. En person dör.

Nästa dag torkar ni av blodet från era vapen och går vidare.
Ni går på en skogsstig. Efter en dag kommer ni fram till ett hotell. Inuti sitter en ung man. Han säger: "Tiden är ute. Han ni förberett allt?" Nej, det har ni inte. Mannen reser sig upp och blundar. Ni frågar om ni gjort något fel. "Vad spelar det för roll?"

Nästa dag går ni vidare med en känsla av att ha glömt något.
Ni går på en väg. Efter en dag kommer ni fram till en polisstation. Inuti sitter en ung kvinna. Hon säger: "Tiden är ute. Han ni förberett allt?" Ja, det har ni. Kvinnan reser sig upp och ser på er. Ni frågar om ni gjort något fel. "Se här." Hon räcker fram ett brev. Ni läser det och förstår allt.

Nästa dag går ni vidare för att återlämna brevet.
Edit: Här är själva XML-filen: https://github.com/olleharstedt/tellstory/blob/master/example2.xml
 

Feuflux

omjonasson.se
Joined
8 Jan 2001
Messages
5,025
Location
Linköping
Kul grej, men blir det inte ett oöverskådligt svårt jobb att populera xml-filen med vettig data i tillräcklig mängd?
 

stenhöna

tellstory
Joined
5 Oct 2002
Messages
964
Location
Hamburg
Feuflux;n76444 said:
Kul grej, men blir det inte ett oöverskådligt svårt jobb att populera xml-filen med vettig data i tillräcklig mängd?
Det beror på vilka ambitioner man har! För min del vill jag göra xml-filer som kan generera rymdskepp och klaner, var för sig. Så istället för att bygga tabeller där man slår tärningar kan man samla allt på ett ställe, och använda beskrivande brödtext istället för siffror.

Mest tänkt som ett inspirerande redskap för SL, eller kanske underlag för improvisation.
 

stenhöna

tellstory
Joined
5 Oct 2002
Messages
964
Location
Hamburg
Hurra för att nekrobumpa sina egna trådar! \o/

Ny feature: makron.

Ett makro kan användas för att "injicera" alternativ i en mening, så man slipper skriva samma alternativ om och om igen. Om man gör en text för att generera skattetabeller kan makron t.ex. användas för material:

Code:
<story>
  <macro name="material">
    <alt>sten</alt>
    <alt>trä</alt>
    <alt>brons</alt>
    <alt>koppar</alt>
  </macro>

  <sentence>
    1. Du hittar en låda av
    <alt useMacro="material"></alt>
  </sentence>
</story>
Detta genererar alltså liknande texter:

1. Du hittar en låda av sten

1. Du hittar en låda av brons
Osv.
 

Genesis

Ni dés ni maître
Joined
17 Aug 2000
Messages
15,523
Location
Göteborg
Har du kollat in Abulafia? http://www.random-generator.com . Där finns en hel hög med sådana generatorer. Man kan dessutom anropa andra generatorer i sin egen generator och därmed bygga meta-generatorer, lite som dina makron.
 

stenhöna

tellstory
Joined
5 Oct 2002
Messages
964
Location
Hamburg
Ja men se där. Identisk idé. Men ändå värt besväret för min del, eftersom jag behöver privat material.
 

stenhöna

tellstory
Joined
5 Oct 2002
Messages
964
Location
Hamburg
OK, en liten uppdatering till. (Mod kan flytta tråden till promotion om det känns relevant.)

Har implementerat variabler och records. Variabler används för att spara ett slumpmässigt genererat ord eller mening för att kunna användas igen. Records används på liknande sätt, men man kan samla många relaterade variabler i ett och samma "paket". Skillnaden till makros är att makros alltid slumpgenereras, varje gång de används; variabler och records gör det alltså inte.

Variabler kan användas för att spara namn. Records kan användas för personliga pronomen relaterade till kön (för oss som ännu inte gått över till "hen", dvs. :wink: ).

Här är ett exempel. Filen nedan kommer printa meningar i denna stil:

Josefin told her self: "I am a woman".
John told him self: "I am a man".
Utifrån denna struktur:

Code:
{hero} told {gender.himself}: "I am a {gender.gender}".
Fullständig kod:

HTML:
<story>

  <!-- Store pronouns in record. Choose either man or woman. -->
  <record name="gender">
    <alt setFlag="woman">
      <gender>woman</gender>
      <himself>her self</himself>
    </alt>
    <alt setFlag="man">
      <gender>man</gender>
      <himself>him self</himself>
    </alt>
  </record>

  <!-- List of possible male names. -->
  <macro name="man_name">
    <alt>John</alt>
    <alt>Jim</alt>
  </macro>

  <!-- List of possible female names. -->
  <macro name="woman_name">
    <alt>Jenny</alt>
    <alt>Josefin</alt>
  </macro>

  <variable name="hero">
    <alt ifSet="man" useMacro="man_name"></alt>
    <alt ifSet="woman" useMacro="woman_name"></alt>
  </variable>

  <sentence>{hero} told {gender.himself}: "I am a {gender.gender}". </sentence>

</story>
 

stenhöna

tellstory
Joined
5 Oct 2002
Messages
964
Location
Hamburg
Ny feature: Inlining, dvs använda slumpmässiga redskap direkt i meningar utan att skriva massa XML-taggar.

Exempel:

HTML:
<story>
  <sentence>This is a story using inlining - choose between {#macro|variable|record.something|"ordinary content"}.</sentence>
</story>
I meningen ovan så väljs antingen macrot, variabeln, record eller innehållet "ordinary content".

En annan feature är bättre logik för att hantera flaggor: Nu kan man exakt beskriva vilka villkor som gäller, t.ex.
HTML:
<alt ifSet="flag1 AND flag2">some content</alt>
kommer genereras om flagga ett och flagga två är satta. Liknande verktyg finns för OR och NOT.

Nästa plandera feature: Kortlekar, så man t.ex. kan generera en hög karaktärer med unika namn utan att ett namn riskerar komma med mer än en gång.

Hoppas kunna komma med ett större use-case snart, men det är några grejer till som måste fixas...
 

hyperdrive

Veteran
Joined
6 Jun 2000
Messages
193
Location
Uppsala
Det vore roligt med en graf som beskriver händelser för en förläning eller handelshus. Större organisationer blir ofta alldeles för komplicerade att skapa detaljerade regler för men samtidigt är det hysteriskt roligt att låta rollpersoner lyckas erövra något dylikt (precis som i många populära datorspel med RPG-tema). Tror du att du skulle kunna anpassa din idé till något liknande? Dvs jag som spelledare väljer en grundmall för "liten förläning med borg", kombinerar ett par grundmallar för händelseutveckling "Stråtrövare", "Drake", "Missväxt", "Mästersmed", och hokus-pokus, så får jag en tidslinje med en intressant utveckling över ett år som fungerar som äventyrsgenerator. Går det? :)~
 

stenhöna

tellstory
Joined
5 Oct 2002
Messages
964
Location
Hamburg
Graf är en riktigt bra och intressant idé!

Det du beskriver låter som drag-n-drop, där man väljer "förläning", bestämmer några egenskaper och sedan lägger till "moduler" efter tycke och smak. Det är ju enkelt att låta "Stråtrövare" och "Drake" vara slumpmässiga, isolerade händelser genererade, men det riktigt intressanta skulle vara om de kunde påverka varandra! Så att beskrivningen av rövarna påverkas av om det är en drake i trakten eller inte. Nej, det här får jag tänka på! :)
 

stenhöna

tellstory
Joined
5 Oct 2002
Messages
964
Location
Hamburg
Ny feature: Kortlek (deck) för att slumpa utan upprepning.

Use-case: Bra för karaktärsgenerering där man inte vill att samma namn ska dyka upp mer än en gång.

Birte loves Olle more than Olle loves Birte. Horror!
XML-fil för texten ovan:

HTML:
<?xml version="1.0" encoding="UTF-8"?>
<story>

  <deck name="names">
    <alt>Olle</alt>
    <alt>Birte</alt>
  </deck>

  <!-- Use deck in variable -->
  <variable name="you">
    <alt useDeck="names"></alt>
  </variable>

  <!-- Same thing but inline -->
  <variable name="me">
    <alt>{$names}</alt>
  </variable>

  <macro name="reaction">
    <alt>Horror!</alt>
    <alt>Oh noes!</alt>
    <alt>Yey!</alt>
    <alt>Whatever...</alt>
  </macro>

  <sentence>{me} loves {you} more than {you} loves {me}. {#reaction}</sentence>

</story>
 

stenhöna

tellstory
Joined
5 Oct 2002
Messages
964
Location
Hamburg
hyperdrive;n85677 said:
Det vore roligt med en graf som beskriver händelser för en förläning eller handelshus. Större organisationer blir ofta alldeles för komplicerade att skapa detaljerade regler för men samtidigt är det hysteriskt roligt att låta rollpersoner lyckas erövra något dylikt (precis som i många populära datorspel med RPG-tema). Tror du att du skulle kunna anpassa din idé till något liknande? Dvs jag som spelledare väljer en grundmall för "liten förläning med borg", kombinerar ett par grundmallar för händelseutveckling "Stråtrövare", "Drake", "Missväxt", "Mästersmed", och hokus-pokus, så får jag en tidslinje med en intressant utveckling över ett år som fungerar som äventyrsgenerator. Går det? :)~
OK, jag gjorde ett utkast till detta. Det kanske inte blev så jäkla bra... Men här är ett par exempel på genereringar:

Setting: pub. The harvest this year was bad. A thief breaks in the pub and steals apple. The best smith in the hole pub is called Simon. The thief steals material and gives to the smith.
Setting: pub. The harvest this year was horrible. A dragon comes to the pub. The best smith in the hole pub is called John. Did the dragon want to talk to the smith? Did they have something in common, a history together of danger and adventure?
Setting: village. A thief breaks in the village and steals sword. The best smith in the hole village is called Ariel. The thief stole something from the smith. A dragon comes to the village. The thief steals the dragons treasure and hides it under the village.
Ganska krasst...

Det funkar så här: Det finns fyra "kort": dragon, harvest, thief, smith. För varje generering dras tre kort + en "basic setting". Korten reagerar delvis på varandra, på så sätt att om tjuven dras efter draken så skrivs det ut något specifikt om deras relation.

Rent textmässigt är det fem XML-filer: en huvudfil kallad "main.xml" och sen en fil för varje kort. All text finns här: https://github.com/olleharstedt/tellstory/tree/master/examples/usecase_hyperdrive

Nästa planerad feature: namespace, men det är en ganska teknisk historia. Om någon har fler idéer på use-cases gör jag gärna fler experiment. :)
 

hyperdrive

Veteran
Joined
6 Jun 2000
Messages
193
Location
Uppsala
Ser intressant ut tycker jag! Jag har fortfarande lite tekniska problem med att få till alla deps för att bygga koden dock. Kanske får man önska en websida med interaktivt interface? :)
 
Top