diff --git a/LCGlexicon/ENIAM_LCGlexicon.ml b/LCGlexicon/ENIAM_LCGlexicon.ml index bb87133..eb101f6 100644 --- a/LCGlexicon/ENIAM_LCGlexicon.ml +++ b/LCGlexicon/ENIAM_LCGlexicon.ml @@ -74,6 +74,16 @@ let assign_semantics (selectors,(bracket,quant,syntax),(rule,weight)) = with Not_found -> BasicSem(Xlist.map quant fst) in selectors,(bracket,quant,syntax),(semantics,weight) +let rec add_x_args_rec = function + Imp(s,d,t) -> Imp(add_x_args_rec s,d,t) + | ImpSet(s,l) -> ImpSet(add_x_args_rec s,l) + | Tensor[Atom "<conll_root>"] -> Tensor[Atom "<conll_root>"] + | Tensor l -> ImpSet(Tensor l,[Backward,Maybe(Tensor[Atom "X"]);Forward,Maybe(Tensor[Atom "X"])]) + | t -> failwith ("add_x_args_rec: " ^ ENIAM_LCGstringOf.grammar_symbol 0 t) + +let add_x_args (selectors,(bracket,quant,syntax),(semantics,weight)) = + (selectors,(bracket,quant,add_x_args_rec syntax),(semantics,weight)) + let rec extract_category pat rev = function (cat,rel,v) :: l -> if cat = pat then rel,v,(List.rev rev @ l) else extract_category pat ((cat,rel,v) :: rev) l | [] -> raise Not_found @@ -93,10 +103,11 @@ let dict_of_grammar grammar = StringMap.add_inc dict2 lemma [rule] (fun l -> rule :: l)),l in StringMap.add dict pos (dict2,l))) -let make_rules filename = +let make_rules x_flag filename = let lexicon = ENIAM_LCGlexiconParser.load_lexicon filename in let lexicon = List.rev (Xlist.rev_map lexicon assign_quantifiers) in let lexicon = List.rev (Xlist.rev_map lexicon assign_semantics) in + let lexicon = if x_flag then List.rev (Xlist.rev_map lexicon add_x_args) else lexicon in dict_of_grammar lexicon let find_rules rules cats = diff --git a/LCGlexicon/resources/lexicon-pl.dic b/LCGlexicon/resources/lexicon-pl.dic index 3f8307b..b997ea1 100644 --- a/LCGlexicon/resources/lexicon-pl.dic +++ b/LCGlexicon/resources/lexicon-pl.dic @@ -265,13 +265,6 @@ lemma=),pos=interp: rparen; lemma=],pos=interp: rparen2; pos=unk: np*number*case*gender*person; -# | ".","interp",[] -> [LCGrenderer.make_frame_simple [] ["dot"] c (make_node "." "interp" c.weight 0 [])] # FIXME: to jest potrzebne przy CONLL -# | "<conll_root>","interp",[] -> -# let batrs = (make_node "<conll_root>" "interp" c.weight 0 []) in -# let schema_list = [[schema_field CLAUSE "Clause" Forward [Phrase IP;Phrase (CP(Int,CompUndef));Phrase (NP(Case "voc"));Phrase (Lex "interj")]]] in -# [LCGrenderer.make_frame false tokens lex_sems [] schema_list ["<conll_root>"] d batrs] -# | lemma,c,l -> failwith ("process_interp: " ^ lemma ^ ":" ^ c ^ ":" ^ (String.concat ":" (Xlist.map l (String.concat ".")))) in - lemma=<conll_root>,pos=interp: <conll_root>/(ip*T*T*T+cp*int*T+np*sg*voc*T*T+interj); pos=sinterj: BRACKET interj; diff --git a/LCGlexicon/test.ml b/LCGlexicon/test.ml index 04cee75..a80ad47 100644 --- a/LCGlexicon/test.ml +++ b/LCGlexicon/test.ml @@ -20,8 +20,8 @@ open ENIAM_LCGlexiconTypes open ENIAM_LCGtypes -let rules = ENIAM_LCGlexicon.make_rules ENIAM_LCGlexiconTypes.rules_filename -(* let rules = ENIAM_LCGlexicon.make_rules "resources/lexicon-pl.dic" *) +let rules = ENIAM_LCGlexicon.make_rules false ENIAM_LCGlexiconTypes.rules_filename +(* let rules = ENIAM_LCGlexicon.make_rules false "resources/lexicon-pl.dic" *) let examples = [ "kot",[ diff --git a/LCGparser/ENIAM_LCGrules.ml b/LCGparser/ENIAM_LCGrules.ml index 25d02f7..952244f 100644 --- a/LCGparser/ENIAM_LCGrules.ml +++ b/LCGparser/ENIAM_LCGrules.ml @@ -446,8 +446,8 @@ let backward_cross_composition references args functs = let rules = [ backward_application; forward_application; - (* backward_cross_composition; *) - (* forward_cross_composition; *) + (*backward_cross_composition; + forward_cross_composition;*) ] let rec flatten_functor2 l seml = function diff --git a/LCGparser/TODO b/LCGparser/TODO index e69de29..6244544 100644 --- a/LCGparser/TODO +++ b/LCGparser/TODO @@ -0,0 +1 @@ +- sprawdzić czy krzyżowe kompozycje działają w zdaniu "Ponownie musiał użyć ręcznika" diff --git a/corpora/test_conll2.ml b/corpora/test_conll2.ml index 8d3d909..eccaa37 100644 --- a/corpora/test_conll2.ml +++ b/corpora/test_conll2.ml @@ -22,7 +22,8 @@ open ENIAM_LCGlexiconTypes open ENIAM_LCGtypes open ENIAMsubsyntaxTypes -let rules = ENIAM_LCGlexicon.make_rules ENIAM_LCGlexiconTypes.rules_filename +let rules = ENIAM_LCGlexicon.make_rules false ENIAM_LCGlexiconTypes.rules_filename +let dep_rules = ENIAM_LCGlexicon.make_rules true ENIAM_LCGlexiconTypes.rules_filename let examples = [ (* "Szpak","Szpak śpiewa.";*) @@ -81,7 +82,7 @@ let create_dep_chart tokens lex_sems paths = ENIAM_LCGrenderer.reset_variable_names (); ENIAM_LCGrenderer.add_variable_numbers (); let cats = clarify_categories ["X"] t in - let l = ENIAM_LCGlexicon.create_entries rules id t.ENIAMtokenizerTypes.orth cats s.ENIAMlexSemanticsTypes.schemata in + let l = ENIAM_LCGlexicon.create_entries dep_rules id t.ENIAMtokenizerTypes.orth cats s.ENIAMlexSemanticsTypes.schemata in IntMap.add nodes i l) in dep_create_rec nodes sons 0