Register to post in forums, or Log in to your existing account
 

Play RetroMUD
Post new topic  Reply to topic     Home » Forums » zMUD General Discussion
gim
Newbie


Joined: 10 Aug 2005
Posts: 6

PostPosted: Wed Aug 10, 2005 8:03 pm   

Parsing a Line and map the Nouns in it
 
Hi there!

Im wondering how i can parse a whole line and add all the nouns(always with a capital letter in germany) into an array/string list. Yes, I am trying to build a quest script.

my dirty solution is:

#REGEX {([A-Z]+[a-z]+)} {#additem wordlist %1} "" {case}
for lines that contain ONE noun

and

#REGEX {([A-Z]+[a-z]+).*([A-Z]+[a-z]+)} {
#additem wordlist %1;
#additem wordlist %2} "" {case}
for lines that contain TWO nouns

and so on...

i know i can trigger all nouns with:
#TRIGGER {[A-Z][a-z]} {} "" {case}
but that doesn't help since zmud cannot map the triggered items afaik


waiting impatiently for help .. thanks in advance :)

gim
Reply with quote
Vitae
Enchanter


Joined: 17 Jun 2005
Posts: 673
Location: New York

PostPosted: Thu Aug 11, 2005 12:10 am   
 
might help to have a few examples of the mud output for quests.
I can't help ya, but someone might be able to if they see examples
_________________
http://www.Aardwolf.com
Reply with quote
gim
Newbie


Joined: 10 Aug 2005
Posts: 6

PostPosted: Thu Aug 11, 2005 6:33 am   
 
alright, here we go with an example:

mud output:

Du stehst in einem grossen, schwarzen Wuerfel. Allerdings kannst du nichts
Besonderes hier entdecken, ausser einem kleinen, weissen Zettel auf dem Boden.


what i like to do is: save all words with capital letters into a string-list ->

Du|Wuerfel|Allerdings|Besonderes|......

how do i parse each line of the mud output for saving the capitalized words?

gim
Reply with quote
Vijilante
SubAdmin


Joined: 18 Nov 2001
Posts: 5182

PostPosted: Thu Aug 11, 2005 8:58 am   
 
You will have to produce another #TRIGGER or #ALIAS that turns on the class with #T+ and clears the variable. As well as something that turns it off again with #T-

#CLASS QuestCapture {disable}
#VAR Capitalized {} {}
#TRIGGER {*} {Capitalized=%concat(@Capitalized,"|",%replace(%line," ","|"))}
#TRIGGER {^$} {#FORALL @Capitalized {#IF (%ascii("%i")>90) {#DELITEM Capitalized {%i}}}}
#CLASS 0
_________________
The only good questions are the ones we have never answered before.
Search the Forums
Reply with quote
gim
Newbie


Joined: 10 Aug 2005
Posts: 6

PostPosted: Thu Aug 11, 2005 3:17 pm   
 
didn't work for me, but thanks for help

based on your idea i tried this:


#TRIGGER {*} {
#var zeile %replace( %replace( %replace( %replace( %replace( %replace( %line, " ", "|"), "."), ","), "?"), "!"), ":") {} {forschen}; //removes . and , and that stuff from the line
#FORALL @zeile {#IF (%ascii( %i)>90) {#DELITEM zeile {%i}}};
//removes items that start with ascii>90
#FORALL @zeile {#ADDITEM WortListe {%i}}
//adds items from zeile to WortListe without duplicates!
}


it's much better than my first try but if i type in "look" and get some lines from the mud it ONLY saves the nouns from the last line.. why is that??

gim
Reply with quote
TonDiening
GURU


Joined: 26 Jul 2001
Posts: 1958
Location: Canada

PostPosted: Thu Aug 11, 2005 7:18 pm   
 
Untested ideas

How about changing the trigger pattern to #TRIGGER {*$} and try and ensure you are triggering on a line.
With the overhead of the 2 #FORALL, maybe try a #additem zeile %replace(... as you might be overwriting zeile with the speed of the input.

That or capture the entire paragraph first then send it for processing.
Reply with quote
gim
Newbie


Joined: 10 Aug 2005
Posts: 6

PostPosted: Thu Aug 11, 2005 7:49 pm   
 
how do i capture a whole paragraph?
Reply with quote
TonDiening
GURU


Joined: 26 Jul 2001
Posts: 1958
Location: Canada

PostPosted: Fri Aug 12, 2005 1:16 am   
 
What does your mudoutput look like some lines before and after a paragraph?

ie:

L33T>

You are located in a large, black cube. However you cannot discover anything special here, except a small, white note on the soil.
No obvious exits:

L33T>
Reply with quote
gim
Newbie


Joined: 10 Aug 2005
Posts: 6

PostPosted: Fri Aug 12, 2005 8:10 am   
 
something like this.. sorry for the german language.


Der grosse Raum mit seiner niedrigen Decke und den grob geschnittenen
Querbalken hat Platz fuer sehr viele Personen. Knarrende Dielen erzaehlen
ueber Heldentaten laengst vergessener Abenteurer, beruehmter als mancher
Weise unserer Zeit.
Abenteurer, aber auch andere Bewohner dieser Welt kommen hierher, um
sich zu informieren, ihre Erfahrungen auszutauschen oder sich in den
verschiedensten Wissenschaften zu verbessern.
Durch die immer offene Tuer scheint die aufgehende Sonne herein und fuellt
den Raum mit ihrem goldenen Licht. Sonst gibt es hier nur noch den Ausgang
im Westen, welcher hinaus in die Welt fuehrt und Bilder an den Waenden,
mit Zeichnungen und Gemaelden vom TestSilber@micha. Eins der Bilder erlaeutert
die Funktion der Gilde und eine grosse Uhr an der Wand zeigt, was die
Stunde schlaegt.
Es gibt einen sichtbaren Ausgang: westen. //exits
Merlin, der Urvater aller Magier. //stuff in the room
Ein Zettel mit Hinweisen.
Eine Zeitung.
>
Reply with quote
TonDiening
GURU


Joined: 26 Jul 2001
Posts: 1958
Location: Canada

PostPosted: Fri Aug 12, 2005 12:42 pm   
 
You didn`t provide something that could be used determine where a paragraph/room description starts so I`ll default with your prompt.

We can search continuously from your prompt till we see the line about the visible exits then we send off what was captured to a processing alias:
#TRIGGER "ParagraphGrabber" {^~>} {#temp ParagraphGrabberEnd {^Es gibt einen sichtbaren Ausgang} {#co 31;#state ParagraphGrabber 0;ProcessParagraphGrabber}}
#COND {} {#additem V_ParagraphGrabber %line} {looppat}

All the captured lines get added into V_ParagraphGrabber and are processed by ProcessParagraphGrabber.

Changed it a little to remove %null entries and to remove your prompt if we capture it. Its goal is to stack the possibles into zeile then stacks WortListe with the capitalized words. You probably can simpify things.

#ALIAS ProcessParagraphGrabber {#var zeile %replace( %replace( %replace( %replace( %replace( %replace( %replace( %replace( {@V_ParagraphGrabber}, " ", "|"), "."), ","), "?"), "!"), ":"), ">"), "||") _nodef {forschen};#var V_ProcessParagraphGrabber %null;#FORALL @zeile {#IF (%ascii( %i)>90) {#DELITEM zeile {%i}}};#FORALL @zeile {#ADDITEM WortListe {%i}}}

Something like that should work.
Reply with quote
Display posts from previous:   
Post new topic   Reply to topic     Home » Forums » zMUD General Discussion All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum

© 2009 Zugg Software. Hosted by Wolfpaw.net