Seite 1 von 1

Dynamische Missionstexte

Verfasst: 02.02.2011, 10:39
von Bubble10
Hallo,

gesucht hab ich zwar schon ein wenig aber wahrscheinlich nach den falschen Begriffen.

Mein Problem ist folgendes, ich möchte ein dynamischen Missionsgenerator programmieren für eine endlose Fülle an Missionen. Jetzt habe ich eine Anzahl an Items welche dazu verwendet werden können. In der momentanen Datenbank sieht das wie folgt aus:
  • Einzahl - Mehrzahl - Einheit
    Stein - Steine - Stück
    Holz - Hölzer - Stück
    Geld - Gelder - Yen
    usw.
und als Beispielaufgabe etwas wie:
"Hallo AKTUELLER CHARAKTER wir haben ein Problem... uns sind die ITEMS ausgegangen. Könntest du ANZAHL besorgen?"

Meine erste Idee war folgende Struktur:
"Hallo [current_character] wir haben ein Problem... uns sind die [item:1] ausgegangen. Könntest du [item_amount] besorgen?"

Nun ist das Problem das die deutsch Sprache in den Punkten kompliziert ist...
In Bezug auf Einzahl, Mehrzahl, Geschlecht des Items usw.
Da es sich sonst unschön anhört:
"Hallo Bubble wir haben ein Problem... uns sind die Stein ausgegangen. Könntest du 20 besorgen?"

Darauf folgte der Gedanke wie:
"Hallo [current_character] wir haben ein Problem... uns sind die [item:1] ausgegangen. Könntest du [item_amount] [item:1:unit] besorgen?"
"Hallo Bubble wir haben ein Problem... uns sind die Stein ausgegangen. Könntest du 20 Stück besorgen?"

Das Problem bleibt weiterhin bei "...sind die Stein..."

Gibt's da irgendwie Anregungen wie man so etwas besser umsetzten kann?

Gruß Bubble

Re: Dynamische Missionstexte

Verfasst: 02.02.2011, 10:55
von Despotist
Bubble10 hat geschrieben: ich möchte ein dynamischen Missionsgenerator programmieren für eine endlose Fülle an Missionen
Was du machst sind aber nicht verschiedene Missionen sondern dieselbe Mission mit anderen Werten/Items. Oder soll das auch für verschiedene Missionstemplates benutzt werden?
Bubble10 hat geschrieben: uns sind die Stein ausgegangen.
Du hast doch die Mehrzahl davon schon in deiner Tabelle enthalten. Wenn die Anzahl größer als 1 ist musst du sie naütrlich verwenden. Und wenn du ausschließt dass Anzahl 1 ist kannst du immer mit Mehrzahl arbeiten. Gelder klingt übrigens blöd.

Um solche sprachlichen Probleme zu vermeiden musst du vielleicht einfach eine andere Struktur wählen.
Hallo Bubble. Ein Lieferant hat nicht geliefert/Ein Sturm hat die Arbeiter behindert/Die Sonne hat die Ernte verdorrt.
Wir benötigen:
3 Stück Steine.
4 Stück Eier.
5 kg Mehl.
Am einfachst wäre es natürlich wenn du von allem einfach Einheiten hast. 5 Einheiten Mehl und 50 Einheiten Gold (Rohware oder Münzen?). Dann kannst du einfach den Begriff in Einzahl ohne Artikel verwenden.

Wenn du deine Struktur beibehalten willst wirst du nicht umhin kommen den gesamten Teilsatz mitzuspeichern.

Re: Dynamische Missionstexte

Verfasst: 02.02.2011, 13:14
von Firoball
Also ich wäre da eifnach faul.
Ich würde den Spieler einfach nicht wegen einem Stein loslaufen lassen und deswegen immer zwei oder mehr bestellen. Somit hätte man dann immer Mehrzahl :)

Ansonsten musst du im Hintergrund Einzahl und Mehrzahl Strings getrennt führen (mit Artikel) und den Item Amount überprüfen, um zu wissen, welches Wort du nehmen musst.

Re: Dynamische Missionstexte

Verfasst: 02.02.2011, 13:20
von Schrompf
Und falls Du jemals eine Lokalisierung anstrebst: im Russischen gibt es zum Beispiel mehrere Mehrzahlformen. 1, 2 - 4 Stück, 5 - 20 Stück, ab da wiederholend, glaube ich. Viel Spaß :-)

Re: Dynamische Missionstexte

Verfasst: 02.02.2011, 13:26
von RustySpoon
Schrompf hat geschrieben:Und falls Du jemals eine Lokalisierung anstrebst: im Russischen gibt es zum Beispiel mehrere Mehrzahlformen. 1, 2 - 4 Stück, 5 - 20 Stück, ab da wiederholend, glaube ich. Viel Spaß :-)
Und im Japanischen gibt es keine Unterscheidung zwischen Singular und Plural, dafür jede Menge lustige Zählsuffixe. Was für ein Spaß!

Re: Dynamische Missionstexte

Verfasst: 02.02.2011, 13:37
von Chromanoid
http://pcg.wikidot.com/pcg-algorithm:pr ... generation
http://www.interactivestory.net/#publications
und hier aus unserer Ressourcen-Section
The Quest in a Generated World

Alles eher Einstiege und nicht unbedingt genau das was du suchst, aber vielleicht findest du ja darüber noch interessante Artikel. Falls du welche findest würde ich mich freuen, wenn du sie hier verlinkst: http://zfx.info/viewtopic.php?f=11&t=381

Re: Dynamische Missionstexte

Verfasst: 02.02.2011, 23:13
von Matze
@Bubble10

Generell würde ich im "uns sind die ... ausgegangen" Teil nicht zwischen Einzahl und Mehrzahl unterscheiden. Man sagt ja schließlich nicht "uns ist der Stein ausgegangen", sondern "uns sind die Steine ausgegangen" oder "uns ist das Geld ausgegangen" anstatt "uns sind die Gelder ausgegangen". Da kannst du dich also einfach für eine passende Form entscheiden.

Deine Datenbanktabelle könnte dann so aussehen
id - Ressource - Einheit
#1 Steine - Stück
#2 Holz - Stück
#3 Geld - Yen
#4 Gold - Klumpen
#5 Wein - Liter
etc.

Dann machst du dir noch eine Hilfstabelle mit den möglichen Artikeln und Formen des Verbs "sein", etwa so:
id - Präfix
#a "sind die"
#b "ist das"
#c "ist der"
etc.

Und dann verknüpfst du die Ressourcen mit den jeweiligen Präfixen mit Hilfe einer dritten Tabelle

id_ressource - id_präfix
#1 #a
#2 #b
#3 #b
#4 #b
#5 #c
etc.

Dein Text könnte dann z.B. so aussehen: "Hallo [current_character] wir haben ein Problem... uns [item:1:prefix] [item:1] ausgegangen. Könntest du [item_amount] [item:1:unit] besorgen?"

Die Tags musst du dann innerhalb deines Programms nur mit den ausgelesenen Sachen aus der Datenbank befüllen.

Oder du schreibst halt doch alles in eine Tabelle:

id - Ressource - Einheit - Präfix
#1 Steine - Stück - "sind die"
#2 Holz - Stück - "ist das"
#3 Geld - Yen - "ist das"
#4 Gold - Klumpen - "ist das"
#5 Wein - Liter - "ist der"
etc.

Wenn du auf die Unterscheidung zwischen Einzahl und Mehrzahl nicht verzichten willst, baust du deine Tabelle anders auf und benutzt serialisierte Arrays für jede Alternative:

id - Ressource - Bezeichnung - Einheiten
#1 - Stein - "sind die Steine" - {"einen Stein", " Steine"}
#2 - Wein - "ist der Wein" - {"eine Flasche", " Flaschen"}
etc.

Dein Text ändert sich dann zu: "Hallo [current_character] wir haben ein Problem... uns [item:1:bezeichnung] ausgegangen. Könntest du [item_amount] [item:1:einheit] besorgen?"

Im Programm ermittelst du dann zuerst die gewünschte Anzahl und machst eine Fallunterscheidung:

Pseudocode:
amount = random(20);
itemid = 1;
data = DB_GetDataForID(itemid);
if(amount > 1)
{
[item_amount] = amount;
[item:itemid:bezeichnung] = data["Bezeichnung"];
[item:itemid:einheit] = data["Einheiten"][1];
}
else
{
[item_amount] = ""; // leer, da die Anzahl schon in der DB steht
[item:itemid:bezeichnung] = data["Bezeichnung"];
[item:itemid:einheit] = data["Einheiten"][0];
}

So oder so ähnlich sollte es funktionieren.


Gruß,
Matze

Re: Dynamische Missionstexte

Verfasst: 03.02.2011, 18:03
von Zudomon
Huhu!
Sorry, ich habe im moment sehr wenig Zeit und deswegen auch nicht alles gelesen, nur den Eingangspost.

Gut kann ich dir da nicht weiter helfen, nur sagen, dass grundsätzlich dass, was du vorhast, funktioniert und dass ich es auch so vor habe.
Ich hatte damals mal eine Freundin, die wohnte in China und der wollte ich gerne Deutsch beibringen... doch die Frage ist... wie? Hatte dann mal angefangenm mit Wörtern, die in Deutsch, Englisch und Chinesisch dargestellt wurden. Es konnten Nomen durchdekliniert und Verben durchkonjugiert dargestellt werden.
Das besondere an dem Programm, außer dass es alle paar Sekunden abstürzt, dass es einen Modus gab, wo man Sätze bilden konnte. Es gab dann die Wahl, dass man für einen Satz Subjekte, Verben, Dativobjekte, Akkusativobjekte auswählen konnte... auch mehrere und zu jedem konnte auch gewählt werden, ob Singular oder Plural... und wie der Satz aufgebaut sein soll... und Genitivobjekte... bei mehreren stürzt er wohl auch ab... naja... da konnte man dann auch einstellen, ob es "Die Hände des Drachen" oder ganz poetisch "Des Drachen Hände" heißen soll... ( der Wortschatz ist leider sehr begrenzt )
Ich habe davon weder den Quellcode noch, noch weiß ich noch genau, wie ich das damals gemacht habte ( 2004 )... aber funtkioniert hat es... da bräuchte dann später nur ein Missionsgenerator die Informationen in die richtigen Slots stecken und es kämen vernünftige Sätze raus...

Wie gesagt, wenn man in Kauf nimmt, dass es immer wieder abstürzt, dann kann man Sätze bilden wie: (direkt aus dem Generator)

- Der Drache, die Gans und der Fuchs lieben die Strahlen der Sonne.
- Der Drache, die Gans und der Fuchs lieben der Sonne Strahlen.
- Lieben der Drache, die Gans und der Fuchs der Sonne Strahlen?
- Des Drachen Hände malen den Mond und die Sterne.
- Schenkt der Fuchs den Gänsen Bücher?

Ich hängs mal an... viel Spass beim rumprobieren... und hoffentlich Ideen sammeln... :D (unter Sätze bilden mit Rechtsklick die Wörter einfügen)
Vielleicht ist das mit Kanonen auf Spatzen geschossen, aber ich finde die Vorstellung geil, wenn ein Rechner seine Informationen in ganz gewöhnlicher deutscher Sprache ausdrüchen kann... am geilsten wäre es für folgendes Szenario... hoffentlich werd ich mal dazu kommen, dass irgendwann so umzusetzen:

* KI erstellt Informationen
* Informationen werden in besagte Slots gefüllt -> deutscher Satz
* Dieser wird durch Text to Speech vorgelesen

und schon hätte man sprechende Charaktere, die individuell reden können...
ger01.zip
(218.42 KiB) 260-mal heruntergeladen
Viele Grüße
Zudo

Re: Dynamische Missionstexte

Verfasst: 04.02.2011, 16:20
von pUnkOuter
Der Text-to-speech Ansatz wäre wirklich sehr geil, aber ich denke bei einem einigermassen brauchbaren Wortschatz wird es extrem aufwändig.

Re: Dynamische Missionstexte

Verfasst: 04.02.2011, 16:36
von Despotist
pUnkOuter hat geschrieben: Der Text-to-speech Ansatz wäre wirklich sehr geil, aber ich denke bei einem einigermassen brauchbaren Wortschatz wird es extrem aufwändig.
Nicht besonders aufwändig: http://www.naturalreaders.com/index.htm

Wenn du einzeln gesprochene Worte in der generierten Reihenfolge zusammenpappst klingt das auch nicht besser da die "Melodie" von Worten sich schon durch den Kontext und Redefluss unterscheidet.

Re: Dynamische Missionstexte

Verfasst: 04.02.2011, 16:36
von Alexander Kornrumpf
Ist das ok, wenn ich als Student der Linguistik ein wenig über deine/eure Naivität schmunzeln muss? Ich mein es ist sehr domainspezifisch nicht unmöglich da was zu reißen, aber einfach ist es nicht.

Die Bibel auf dem Gebiet wäre wohl das hier:

http://www.amazon.com/Building-Natural- ... ap_title_0

Re: Dynamische Missionstexte

Verfasst: 04.02.2011, 23:55
von pUnkOuter
Despotist hat geschrieben:
pUnkOuter hat geschrieben: Der Text-to-speech Ansatz wäre wirklich sehr geil, aber ich denke bei einem einigermassen brauchbaren Wortschatz wird es extrem aufwändig.
Nicht besonders aufwändig: http://www.naturalreaders.com/index.htm

Wenn du einzeln gesprochene Worte in der generierten Reihenfolge zusammenpappst klingt das auch nicht besser da die "Melodie" von Worten sich schon durch den Kontext und Redefluss unterscheidet.
Ich meine nicht das Text-to-speech, welches aufwändig wäre, sondern die Logik, die die Sätze zusammenbastelt. Ich hatte mal einen Kollegen, der Computerlinguistik studiert hat, und was er mir so vorgeführt hat, war jedenfalls weit weg von der hier präsentierten Idealvorstellung.

Re: Dynamische Missionstexte

Verfasst: 07.02.2011, 12:09
von joeydee
Zur Vollständigkeit sei noch auf Bell/Braben's dynamische Planetenbeschreibungen für Elite verwiesen a la "The planet XY is reasonably notable for its inhabitants' exceptional shyness but ravaged by lethal disease."
Hier ist das Prinzip ganz gut erklärt:
http://www.aegidian.org/bb/viewtopic.php?p=33877#p33877
Keine neue Idee in diesem Thread, aber schön zu sehen wie vielfältig das werden kann wenn man geschickt verschachtelt.
Zur Anpassung der Grammatik war dort allerdings nur der Platzhalter "%I" verwedet, der an den Planetennamen bei Bedarf ein "-ian" anhängte.

Re: Dynamische Missionstexte

Verfasst: 13.02.2011, 04:42
von Krishty
Nochmal was nachschieben
http://www.strchr.com/plural_forms

Re: Dynamische Missionstexte

Verfasst: 14.02.2011, 14:58
von Jaw
Oder aber du machst es ganz faul oder geschickt, je nach Sichtweise, und bildest Sätze die ganz ohne die Nennung der Ressource auskommen. So etwas wie "Uns sind die Ressourcen ausgegangen. Wir brauchen unbedingt Nachschub! Kannst du uns helfen?" Und darunter kommt dann ein Block wo die konkrete Aufgabe eingeblendet wird, wie x Steine, y Holz, etc. So kann man auch Aufgaben machen, die mehrere Dinge erfordern. Wenn du jetzt noch mit Bildchen arbeitest, brauchst du nur noch 10 x (Stein Icon), 5 x (Holz Icon) darstellen.

Grüße
-JAW

Re: Dynamische Missionstexte

Verfasst: 14.02.2011, 19:17
von pUnkOuter
Ja, aber das wirkt eben viel weniger gut als wenn der Missionstext als natürliche Sprache daherkommt. Die Leute werden den Text vor den Icons vielleicht nur die ersten paar Missionen lesen, dann nie mehr.

Re: Dynamische Missionstexte

Verfasst: 14.02.2011, 23:59
von Jonathan
Die Frage ist: Sobald der Spieler kapiert hat, dass alle Missionen nach einen von 3-4 Mustern ablaufen, will er da schöne Texte lesen, die doch immer das selbe sagen, oder einfach schnell wissen, was zu tun ist?
Meiner Meinung nach, lohnt es sich nur Texte zu lesen, wenn sie wirklich etwas neues bieten, und die kann man dann schlecht zufällig generieren. Ich meine, ein paar mal mögen generierten Texte funktioneiren, aber wenn man das 20ste mal den fast gleichen Text liest, wirds auch irgendwie doof.

Re: Dynamische Missionstexte

Verfasst: 15.02.2011, 16:06
von pUnkOuter
Genau darum ist's ja auch so schwierig. Erstens müssen die Sätze grammatikalisch richtig sein, und zweitens sollten sie auch so divers sein, dass der Spieler sich nicht wie in einem Sandkasten vorkommt. Meiner Meinung nach ist das zu aufwändig für ein Hobbyprojekt.

Re: Dynamische Missionstexte

Verfasst: 03.03.2011, 14:13
von Schrompf
Randbemerkung, weil ich gerade selbst danach gesucht habe: boost::locale unterstützt auch Mehrzahlformen, Zahlen- und Währungsformatierungen und natürlich den ganzen Satz UTF8-Zeichenkonvertierungen und sowas. Ich hatte schon befürchtet, dass ich das selbst schreiben muss, aber wie immer rettet boost den Tag.

Re: Dynamische Missionstexte

Verfasst: 04.03.2011, 11:19
von Biolunar
Hey danke für den Link! Die Lib sieht auf den ersten Blick nett aus.