HELP TPARSE Aaron Sloman, May 1986
lib tparse;
This is a variant of LIB GRAMMAR which is somewhat more general in that
it will find all the parses of a list of words corresponding to a
non-terminal. In order to do this it makes use of the POP-11 process
mechanism. (See HELP * PROCESS).
See HELP * GRAMMAR for a brief summary of LIB * GRAMMAR, TEACH * GRAMMAR
gives more details.
LIB TPARSE assumes that a grammar and a lexicon have been set up, as for
LIB GRAMMAR.
E.g.
vars grammar lexicon;
[
[s [np vp] ]
[vp [v np] [v np prep np] ]
[np [pn] [det noun] [np and np] [np prep np]]
] -> grammar;
[
[noun cat dog mouse man girl boy book tree]
[pn fred aaron steve john sharon]
[v liked killed thanked bought ate put]
[prep on over in at under]
[det each every the a some]
] -> lexicon;
The procedure setup makes these the grammar and lexicon for use by the
program:
setup(grammar,lexicon);
Several procedures are available. showparses takes a non-terminal symbol
and a list of words, and prints out all possible parses of initial
segments of the list, and the corresponding unused words. E.g.
showparses("s", [the man ate the dog ]);
** [s [np [det the] [noun man]] [vp [v ate] [np [det the] [noun dog]]]]
** [unused []]
** [no more parses]
showparses("s", [the man ate the dog and the mouse]);
** [s [np [det the] [noun man]] [vp [v ate] [np [det the] [noun dog]]]]
** [unused [and the mouse]]
** [s [np [det the] [noun man]]
[vp [v ate]
[np [np [det the] [noun dog]] and [np [det the] [noun mouse]]]]]
** [unused []]
** [no more parses]
listallparses is similar, except that it makes a list of two element
lists, each containing a parse tree and a list of unused words, e.g.
listallparses("s", [the man ate the dog and the mouse])==>
** [[[s [np [det the] [noun man]] [vp [v ate] [np [det the] [noun dog]]]]
[and the mouse]]
[[s [np [det the] [noun man]]
[vp [v ate]
[np [np [det the] [noun dog]] and [np [det the] [noun mouse]]]]]
[]]]
Whereas listparses makes a list of parse trees for the whole list of
words: e.g.
listparses("s", [the man ate the dog and the mouse])==>
** [[s [np [det the] [noun man]]
[vp [v ate]
[np [np [det the] [noun dog]] and [np [det the] [noun mouse]]]]]]
Not that this list contains just one parse tree:
(Warning - this may take a minute or two to complete)
listparses("s", [the man put the cat on the book in the tree]) ==>
** [[s [np [det the] [noun man]]
[vp [v put]
[np [np [det the] [noun cat]]
[prep on]
[np [np [det the] [noun book]]
[prep in]
[np [det the] [noun tree]]]]]]
[s [np [det the] [noun man]]
[vp [v put]
[np [np [np [det the] [noun cat]]
[prep on]
[np [det the] [noun book]]]
[prep in]
[np [det the] [noun tree]]]]]
[s [np [det the] [noun man]]
[vp [v put]
[np [det the] [noun cat]]
[prep on]
[np [np [det the] [noun book]]
[prep in]
[np [det the] [noun tree]]]]]
[s [np [det the] [noun man]]
[vp [v put]
[np [np [det the] [noun cat]]
[prep on]
[np [det the] [noun book]]]
[prep in]
[np [det the] [noun tree]]]]]
listallparses("s", [the man put the cat on the book in the tree]) ==>
** [[[s [np [det the] [noun man]] [vp [v put] [np [det the] [noun cat]]]]
[on the book in the tree]]
[[s [np [det the] [noun man]]
[vp [v put]
[np [np [det the] [noun cat]]
[prep on]
[np [det the] [noun book]]]]]
[in the tree]]
[[s [np [det the] [noun man]]
[vp [v put]
[np [np [det the] [noun cat]]
[prep on]
[np [np [det the] [noun book]]
[prep in]
[np [det the] [noun tree]]]]]]
[]]
[[s [np [det the] [noun man]]
[vp [v put]
[np [np [np [det the] [noun cat]]
[prep on]
[np [det the] [noun book]]]
[prep in]
[np [det the] [noun tree]]]]]
[]]
[[s [np [det the] [noun man]]
[vp [v put]
[np [det the] [noun cat]]
[prep on]
[np [det the] [noun book]]]]
[in the tree]]
[[s [np [det the] [noun man]]
[vp [v put]
[np [det the] [noun cat]]
[prep on]
[np [np [det the] [noun book]]
[prep in]
[np [det the] [noun tree]]]]]
[]]
[[s [np [det the] [noun man]]
[vp [v put]
[np [np [det the] [noun cat]]
[prep on]
[np [det the] [noun book]]]
[prep in]
[np [det the] [noun tree]]]]
[]]]
The basic procedure is called appparses:
appparses(symbol, list of words, procedure);
i.e. for every initial segment of list which is an instance of symbol,
the procedure is applied to the parse-tree and the list of unused words.
Thus this could be used to define listparses as follows:
define listparses(symbol,wordlist);
[%
appparses(symbol,
wordlist,
procedure(tree,wordlist);
if null(wordlist) then tree endif
endprocedure)
%]
enddefine;
--- C.all/help/tparse
--- Copyright University of Sussex 1996. All rights reserved.Author: Aaron Sloman, May 1986