[developers] MRS in PET SVN with selective packing

Ben Waldron bmw20 at cl.cam.ac.uk
Thu Nov 2 14:25:23 CET 2006


I've checked in Eric's comment-it-out fix to problem 2 below. On the one 
hand, the RMRS spec specifies that an RMRS should possess global 'cfrom' 
and 'cto' values. The semantics associated with these values, I think, 
should associate the RMRS description with the (character) span in the 
source text to which the parser input corresponds. This seems worth 
having. On the  other hand, since the span to be associated with an RMRS 
is precisely the span in the source text of the input to the parser, the 
application calling the parser already knows the span to which any 
output (R)MRS corresponds. This makes the global 'cfrom' and 'cto' 
values potentially redundant.

I suggest either (i) adopting a principled solution in which the 
required values are provided to the RMRS contsruction code via the input 
MRS (which involves augmenting the MRS spec with the necesary slots) or 
(ii) dropping the global 'cfrom' and 'cto' from the RMRS spec. In the 
meantime, RMRS's will (again) look like this:

<rmrs cfrom='-1' cto='-1'>
...
<ep cfrom='0' cto='4'><gpred>prop-or-ques_m_rel</gpred><label 
vid='1'/><var sort='e' vid='2' tense='present'/></ep>
...
</rmrs>

- Ben

Eric Nichols wrote:
> Greetings,
>
> After a bit more prodding, Francis and I think we have found the 
> source(s) of our problems.
>
> 1) ECL couldn't access anything in rmrs/convert.lisp. Francis noticed 
> that there was another
>     file named convert.lisp in the ppcre directory. ECL compiles both 
> of these into object files
>     named convert.o. Both object files are them compiled into 
> libmrs.a. This has the effect that
>     one of them becomes inaccessable. The fix for this problem is to 
> rename rmrs/convert.lisp
>     to rmrs/rmrs-convert.lisp and change system/mrs.system to reflect 
> this change.
>
> 2) Once ECL was able to find the mrs to rmrs conversion code, we 
> encountered another problem:
>     When running cheap with -mrs=xml, ECL complains about not being 
> able to find the variable
>     lkb::*tchart*:
>
> eric at wsd-m:~/tmp [14:13:52] [5673]
> :) cheap -mrs=xml /usr/share/delphin/grammars
> /erg/english
> reading `/usr/share/delphin/grammars/erg/pet/english.set'... including 
> `/usr/share/delphin/grammars/erg/pet/common.set'... 
> `/usr/share/delphin/grammars/erg/pet/global.set'...
> loading `/usr/share/delphin/grammars/erg/english.grm' (LinGO 
> (18-Jul-06)) reading ME model 
> `/usr/share/delphin/grammars/erg/jh.mem'... [31519 features] Unknown 
> type/instance `v_nbar_idm_le' in feature #577
> ...
> 61364 types in 6 s
> fish fish
> (1) `fish fish' [0] --- 6 (0.00|0.01s) <16:84> (630.7K) [0.0s]
> derivation[1] (0.9809):fish fish
> The variable LKB::*TCHART* is unbound.
> 0 is an illegal frs index.
> ...
> 0 is an illegal frs index.
> zsh: segmentation fault  cheap -mrs=xml 
> /usr/share/delphin/grammars/erg/english
>
> This call is made from the function mrs-to-rmrs which, of course, 
> resides in rmrs/convert.lisp --
> the file causing problems in 1). If I understand the code correctly, 
> it appears that some changes
> were made recently to try and correctly calculate cto and cfrom in 
> RMRS for the entire sentence.
> Commenting out the lines that reference the variable tchart-edges 
> (given in red below) allows
> cheap to produce RMRS again (albeit with cfrom and cto equal to -1 for 
> the sentence). This is
> actually a line-by-line reversion of the CVS change introduced on 
> 2006/7/27.
>
> (defun mrs-to-rmrs (mrs)
>   (if *rel-handel-path*
>       (progn
>         (initialize-rmrs-variables-plus)
>         (let ((lzt (psoa-liszt mrs))
>               (new-lzt nil)
>               (new-args nil)
>               (label-recs nil)
>               (ings nil)
>               ;;(tchart-edges (lkb::get-edges lkb::*tchart*)) ;; [bmw] 
> see below
>               )
>           (dolist (rel lzt)
>             (multiple-value-bind (ep rmrs-args new-label-recs)
>                 (parsonify-rel rel label-recs)
>               (push ep new-lzt)
>               (setf new-args (append new-args rmrs-args))
>               (setf label-recs new-label-recs)))
>               (setf ings (construct-converted-in-groups label-recs))
>           (make-rmrs   :top-h (psoa-top-h mrs)
>                        :h-cons (construct-converted-hcons
>                                 (psoa-h-cons mrs) ings)
>                        :liszt (nreverse new-lzt)
>                        :in-groups ings
>                        :rmrs-args new-args
>                        ;; [bmw] hack to obtain standoff points
>                        ;; (which are NOT provided by the input mrs...)
>                        ;;:cfrom (lkb::get-min-edge-cfrom tchart-edges)
>                        ;;:cto (lkb::get-max-edge-cto tchart-edges)
>                        :origin :erg)))))
>
> #|
> bindings aren't set, since the assumption is that all variable
> equalities are known.  So the code simply has to walk down the list
> of rels in the lzt, converting them to simple eps plus rmrs-args
> |#
>
> Francis and I would be grateful if Ben (or someone else more familiar 
> than us with the inner workings
> ofLKB's MRS code) would take a look at this problem and try to come up 
> with a more workable solution.
>
> Thank you in advance,
>
> Eric
>
> On 11/1/06, *Eric Nichols* <eric-n at is.naist.jp 
> <mailto:eric-n at is.naist.jp>> wrote:
>
>     Hello again,
>
>     Actually, the changes seem to have solved the problem for two out
>     of four cases:
>     -mrs=mrs and -mrs=mrx work fine.  However, -mrs=rmrs and -mrs=xml
>     fail to work.
>
>     Turning on debug gives the following output:
>     61364 types in 3.6 s
>     fish fish.
>     (1) `fish fish.' [0] --- 6 (0.00|0.01s) <16:87> (631.3K) [0.0s]
>     derivation[1] (1.165):fish fish.
>     The function MRS::MRS-TO-RMRS is undefined.
>     0 is an illegal frs index.
>     ....
>     0 is an illegal frs index.
>     zsh: segmentation fault  cheap -mrs=rmrs
>     /usr/share/delphin/grammars/erg/english
>
>     rrms/convert.lisp (where mrs-to-rmrs is defined) seems to be being
>     compiled and linked OK. 
>
>     nm libmrs.a
>     ...
>     0000006b t L2mrs_to_rmrs
>     ...
>
>     so it seens to be in there,  However, when I drop into ecl by
>     killing cheap with ^C, mrs::mrs-to-rmrs is indeed undefined.
>     Console interrupt.
>     Top level.
>     MT> (mrs::mrs-to-rms)
>     The function MRS::MRS-TO-RMS is undefined.
>     Broken at EVAL.
>     MT>>
>
>     I must admit I am baffled.
>
>     -- 
>     Francis Bond, writing as Eric Nichols 
>
>
>
>
> -- 
> --Eric Nichols 




More information about the developers mailing list