Dynamische Missionstexte

Einstiegsfragen, Mathematik, Physik, künstliche Intelligenz, Engine Design
Antworten
Benutzeravatar
Bubble10
Beiträge: 4
Registriert: 28.01.2011, 18:10

Dynamische Missionstexte

Beitrag 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
See ya in the next dimension!
PHP - Mysql Entwickler
Despotist
Establishment
Beiträge: 394
Registriert: 19.02.2008, 16:33

Re: Dynamische Missionstexte

Beitrag 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.
Firoball
Beiträge: 92
Registriert: 24.03.2002, 23:21

Re: Dynamische Missionstexte

Beitrag 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.
Benutzeravatar
Schrompf
Moderator
Beiträge: 4854
Registriert: 25.02.2009, 23:44
Benutzertext: Lernt nur selten dazu
Echter Name: Thomas Ziegenhagen
Wohnort: Dresden
Kontaktdaten:

Re: Dynamische Missionstexte

Beitrag 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ß :-)
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
Benutzeravatar
RustySpoon
Establishment
Beiträge: 298
Registriert: 17.03.2009, 13:59
Wohnort: Dresden

Re: Dynamische Missionstexte

Beitrag 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ß!
Benutzeravatar
Chromanoid
Moderator
Beiträge: 4256
Registriert: 16.10.2002, 19:39
Echter Name: Christian Kulenkampff
Wohnort: Lüneburg

Re: Dynamische Missionstexte

Beitrag 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
Matze
Moderator
Beiträge: 107
Registriert: 26.02.2009, 18:28

Re: Dynamische Missionstexte

Beitrag 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
Benutzeravatar
Zudomon
Establishment
Beiträge: 2254
Registriert: 25.03.2009, 07:20
Kontaktdaten:

Re: Dynamische Missionstexte

Beitrag 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) 256-mal heruntergeladen
Viele Grüße
Zudo
pUnkOuter
Establishment
Beiträge: 303
Registriert: 15.04.2002, 15:59

Re: Dynamische Missionstexte

Beitrag 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.
Ein Zeiger ins Blaue ist wie ein Wegweiser nach <SEGFAULT>. Wenn du denkst, mein Name hat was mit abgefuckter Kleidung und bunten Haaren zu tun, dann kehr besser um.
Despotist
Establishment
Beiträge: 394
Registriert: 19.02.2008, 16:33

Re: Dynamische Missionstexte

Beitrag 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.
Zuletzt geändert von Despotist am 04.02.2011, 16:38, insgesamt 1-mal geändert.
Alexander Kornrumpf
Moderator
Beiträge: 2112
Registriert: 25.02.2009, 13:37

Re: Dynamische Missionstexte

Beitrag 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
pUnkOuter
Establishment
Beiträge: 303
Registriert: 15.04.2002, 15:59

Re: Dynamische Missionstexte

Beitrag 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.
Ein Zeiger ins Blaue ist wie ein Wegweiser nach <SEGFAULT>. Wenn du denkst, mein Name hat was mit abgefuckter Kleidung und bunten Haaren zu tun, dann kehr besser um.
joeydee
Establishment
Beiträge: 1044
Registriert: 23.04.2003, 15:29
Kontaktdaten:

Re: Dynamische Missionstexte

Beitrag 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.
Benutzeravatar
Krishty
Establishment
Beiträge: 8238
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Dynamische Missionstexte

Beitrag von Krishty »

Nochmal was nachschieben
http://www.strchr.com/plural_forms
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Jaw
Beiträge: 54
Registriert: 14.07.2004, 01:00
Wohnort: Raum Düsseldorf

Re: Dynamische Missionstexte

Beitrag 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
pUnkOuter
Establishment
Beiträge: 303
Registriert: 15.04.2002, 15:59

Re: Dynamische Missionstexte

Beitrag 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.
Ein Zeiger ins Blaue ist wie ein Wegweiser nach <SEGFAULT>. Wenn du denkst, mein Name hat was mit abgefuckter Kleidung und bunten Haaren zu tun, dann kehr besser um.
Benutzeravatar
Jonathan
Establishment
Beiträge: 2367
Registriert: 04.08.2004, 20:06
Kontaktdaten:

Re: Dynamische Missionstexte

Beitrag 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.
Lieber dumm fragen, als dumm bleiben!
https://jonathank.de/games/
pUnkOuter
Establishment
Beiträge: 303
Registriert: 15.04.2002, 15:59

Re: Dynamische Missionstexte

Beitrag 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.
Ein Zeiger ins Blaue ist wie ein Wegweiser nach <SEGFAULT>. Wenn du denkst, mein Name hat was mit abgefuckter Kleidung und bunten Haaren zu tun, dann kehr besser um.
Benutzeravatar
Schrompf
Moderator
Beiträge: 4854
Registriert: 25.02.2009, 23:44
Benutzertext: Lernt nur selten dazu
Echter Name: Thomas Ziegenhagen
Wohnort: Dresden
Kontaktdaten:

Re: Dynamische Missionstexte

Beitrag 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.
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
Benutzeravatar
Biolunar
Establishment
Beiträge: 154
Registriert: 27.06.2005, 17:42
Alter Benutzername: dLoB

Re: Dynamische Missionstexte

Beitrag von Biolunar »

Hey danke für den Link! Die Lib sieht auf den ersten Blick nett aus.
Antworten