svoid test_RecursiveProbabilisticParser1() { new RecursiveProbabilisticParser1 p; p.requireQuotedProductions = false; p.loadRules(" has a => => has($1, $2)"); assertEqualsVerbose(ll([[has("the farmer", "pig")]]), p.parse("the farmer has a pig")); test_RecursiveProbabilisticParser1_2(); } svoid test_RecursiveProbabilisticParser1_2() { new RecursiveProbabilisticParser1 p; p.loadRules([[ "Ein/eine/der/die/das führt (nach/in/hin zu/ins) " => satz => $1 leads to $2 "zimmer " => zimmer => room $1 "der/die/dem/das/den " => nomen => the $1 ]]); p.sentenceClass = "satz"; p.useRoundBrackets = true; assertEqualsVerbose(ll("(Haustür) leads to (the (room (Flur)))"), p.parse("Die Haustür führt in das Zimmer Flur")); test_RecursiveProbabilisticParser1_3(); } svoid test_RecursiveProbabilisticParser1_3() { new RecursiveProbabilisticParser1 p; p.loadRules([[ "vom/... kommt/gelangt man in/nach/... " => satz => $1 connects to $2 "zimmer " => zimmer => room $1 "der/die/dem/das/den " => nomen => the $1 ]]); p.sentenceClass = "satz"; p.useRoundBrackets = true; assertEqualsVerbose(ll("(Flur) connects to (the (room (GästeWC)))"), p.parse("Vom Flur kommt man (auch) in das Zimmer GästeWC")); test_RecursiveProbabilisticParser1_4(); } svoid test_RecursiveProbabilisticParser1_4() { new RecursiveProbabilisticParser1 p; p.loadRules([[ "Ein/eine/der/die/das führt (nach/in/hin zu/ins) " => satz => $1 leads to $2 "Ein/eine/der/die/das führt von/vom (nach/in/hin zu/ins) " => satz => $1 leads from $2 to $3 "Ein/eine/der/die/das führt von/vom nach (in/hin zu/ins) " => satz => $1 leads from $2 to $3 to $4 "der/die/dem/das/den " => nomen => the $1 "der/die/dem/das/den des/der " => nomen => $1 of $2 " in/im " => ding => $1 in $2 "erster/erste/ersten " => nomen => first $1 "zimmer " => zimmer => room $1 zimmer => ort ding => nomen ort => nomen bereich => ort "auch " => nomen => also $1 "ein/eine/einen/einem " => nomen => a $1 "kein/keine/keinen/keinem " => nomen => no $1 "bereich " => bereich => area $1 "der/... zwischen und " => ding => the $1 between $2 and $3 " geht nach auf" => satz => $1 opens to the $2 " und " => nomen => $1 and $2 "vom/... kommt/gelangt man in/nach/... " => satz => $1 connects to $2 "von da aus kommt/gelangt man in/nach/... " => satz => last mentioned place connects to $1 " hat " => satz => $1 has $2 " hat einen Bereich " => satz => $1 has an area $2 ]]); p.sentenceClass = "satz"; p.useRoundBrackets = true; assertEqualsVerbose(ll("(the (room (Hauptkeller))) has (a (area (Heizungsanlage)))"), p.parse("Das Zimmer Hauptkeller hat einen Bereich Heizungsanlage")); }