diff --git a/LCGparser/ENIAM_LCG_XMLof.ml b/LCGparser/ENIAM_LCG_XMLof.ml new file mode 100644 index 0000000..1619e20 --- /dev/null +++ b/LCGparser/ENIAM_LCG_XMLof.ml @@ -0,0 +1,62 @@ +(* + * ENIAM_LCGparser, a parser for Logical Categorial Grammar formalism + * Copyright (C) 2016-2017 Wojciech Jaworski <wjaworski atSPAMfree mimuw dot edu dot pl> + * Copyright (C) 2016-2017 Institute of Computer Science Polish Academy of Sciences + * + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + *) + +open ENIAM_LCGtypes + +let rec linear_term = function + Var v -> Xml.Element("Var",[],[Xml.PCData v]) + | Tuple l -> Xml.Element("Tuple",[],Xlist.map l linear_term) + | Variant(e,l) -> + Xml.Element("Variant",["label",e],Xlist.map l (fun (i,t) -> + Xml.Element("option",["number",i],[linear_term t]))) + | VariantVar(v,t) -> Xml.Element("VariantVar",["var",v],[linear_term t]) + | ProjVar(v,t) -> Xml.Element("ProjVar",["var",v],[linear_term t]) + | SubstVar v -> Xml.Element("SubstVar",[],[Xml.PCData v]) + | Subst(s,v,t) -> Xml.Element("Subst",["var",v],[linear_term s;linear_term t]) + | Inj(n,t) -> Xml.Element("Inj",["option",string_of_int n],[linear_term t]) + | Case(t,l) -> + Xml.Element("Case",[], + Xml.Element("matched",[],[linear_term t]) :: + Xlist.map l (fun (v,t) -> Xml.Element("option",["var",v],[linear_term t]))) + | Lambda(v,t) -> Xml.Element("Lambda",["var",v],[linear_term t]) + | LambdaSet(l,t) -> Xml.Element("LambdaSet",[],Xlist.map l (fun v -> Xml.Element("var",[],[Xml.PCData v])) @ [linear_term t]) + | LambdaRot(n,t) -> Xml.Element("LambdaRot",["number",string_of_int n],[linear_term t]) + | App(s,t) -> Xml.Element("App",[],[linear_term s;linear_term t]) + | Dot -> Xml.Element("Dot",[],[]) + | Val s -> Xml.Element("Val",[],[Xml.PCData s]) + | SetAttr(e,s,t) -> Xml.Element("SetAttr",["label",v],[linear_term s;linear_term t]) + | Fix(s,t) -> Xml.Element("Fix",[],[linear_term s;linear_term t]) + | Empty t -> Xml.Element("Empty",[],[linear_term t]) + | Apply t -> Xml.Element("Apply",[],[linear_term t]) + | Insert(s,t) -> Xml.Element("Insert",[],[linear_term s;linear_term t]) + | Node t -> + Xml.Element("Node",["orth",t.orth;"lemma",t.lemma;"pos",t.pos; + "weight",string_of_float t.weight;"id",string_of_int t.id;"arg_dir",t.arg_dir], + [Xml.Element("symbol",[],[linear_term t.symbol]); + Xml.Element("arg_symbol",[],[linear_term t.arg_symbol]); + Xml.Element("attrs",[],Xlist.map t.attrs (fun (k,v) -> Xml.Element("attr",["name",k],[linear_term v]))); + Xml.Element("args",[],[linear_term t.args])]) + | Ref i -> Xml.Element("Ref",["index",string_of_int i],[]) + | Cut t -> Xml.Element("Cut",[],[linear_term t]) + +let linear_term_array a = + let l = Int.fold 0 (Array.length a - 1) [] (fun l i -> + Xml.Element("element",["index",string_of_int i],[linear_term a.(i)]) :: l) in + Xml.Element("array",[],List.rev l) + diff --git a/LCGparser/eniam-lcg-parser-2.2.tar.bz2 b/LCGparser/eniam-lcg-parser-2.2.tar.bz2 new file mode 100644 index 0000000..01114ba --- /dev/null +++ b/LCGparser/eniam-lcg-parser-2.2.tar.bz2 diff --git a/exec/ENIAMexecXMLof.ml b/exec/ENIAMexecXMLof.ml new file mode 100644 index 0000000..904a02c --- /dev/null +++ b/exec/ENIAMexecXMLof.ml @@ -0,0 +1,74 @@ +(* + * ENIAMexec implements ENIAM processing stream + * Copyright (C) 2016 Wojciech Jaworski <wjaworski atSPAMfree mimuw dot edu dot pl> + * Copyright (C) 2016 Institute of Computer Science Polish Academy of Sciences + * + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + *) + +open ENIAMexecTypes +open Printf + +let eniam_sentence (result : eniam_parse_result) = + match result.status with + Parsed -> [ENIAM_LCG_XMLof.linear_term_array result.dependency_tree6b] + | SemParsed -> [ENIAMsemXMLof.linear_term result.semantic_graph12] + | _ -> [] + +let token_extarray t = + Xml.Element("tokens",[], List.rev (Int.fold 0 (ExtArray.size t - 1) [] (fun l id -> + ENIAMtokens.xml_of_token_env id (ExtArray.get t id) :: l))) + +let token_list paths msg = + if msg = "" then Xml.Element("tokens",[],Xlist.map paths (fun t -> ENIAMtokens.xml_of_token_env (-1) t)) + else Xml.Element("error",[],[Xml.PCData msg]) + +let xml_of_dep_sentence paths = + List.rev (Int.fold 0 (Array.length paths - 1) [] (fun l conll_id -> + let id,super,label = paths.(conll_id) in + Xml.Element("edge",["conll_id",string_of_int conll_id;"id",string_of_int id] @ + (if super = (-1) then [] else ["super",string_of_int super]) @ + (if label = "" then [] else ["label",label]),[]) :: l)) + +let xml_of_edge (id,lnode,rnode) = + Xml.Element("edge",["id",string_of_int id;"lnode",string_of_int lnode;"rnode",string_of_int rnode],[]) + +let set_mode m = + if m = "" then [] else ["mode",m] + +let rec sentence m = function + RawSentence s -> Xml.Element("RawSentence",set_mode m,[Xml.PCData s]) + | StructSentence(paths,last) -> Xml.Element("StructSentence",(set_mode m) @ ["last",string_of_int last],Xlist.map paths xml_of_edge) + | DepSentence paths -> failwith "ENIAMsubsyntaxXMLof.sentence: ni" (*Xml.Element("DepSentence", + (set_mode m) @ ["size",string_of_int (Array.length paths)],xml_of_dep_sentence paths)*) (* FIXME *) + | ENIAMSentence result -> Xml.Element("ENIAMSentence",set_mode m @ ["status",ENIAMvisualization.string_of_status result.status],eniam_sentence result) + | QuotedSentences sentences -> + Xml.Element("QuotedSentences",set_mode m,Xlist.map sentences (fun p -> + Xml.Element("Sentence",["id",p.id;"beg",string_of_int p.beg;"len",string_of_int p.len;"next",string_of_int p.next],[sentence "" p.sentence]))) + | AltSentence l -> Xml.Element("AltSentence",set_mode m,Xlist.map l (fun (m,t) -> sentence (ENIAMvisualization.string_of_mode m) t)) + +let rec paragraph m = function + RawParagraph s -> Xml.Element("RawParagraph",set_mode m,[Xml.PCData s]) + | StructParagraph sentences -> + Xml.Element("StructParagraph",set_mode m,Xlist.map sentences (fun p -> + Xml.Element("Sentence",["id",p.id;"beg",string_of_int p.beg;"len",string_of_int p.len;"next",string_of_int p.next],[sentence "" p.sentence]))) + | AltParagraph l -> Xml.Element("AltParagraph",set_mode m,Xlist.map l (fun (m,t) -> paragraph (ENIAMvisualization.string_of_mode m) t)) + +let rec text m = function + RawText s -> Xml.Element("RawText",set_mode m,[Xml.PCData s]) + | StructText paragraphs -> Xml.Element("StructText",set_mode m,Xlist.map paragraphs (paragraph "")) + | AltText l -> Xml.Element("AltText",set_mode m,Xlist.map l (fun (m,t) -> text (ENIAMvisualization.string_of_mode m) t)) + +let message msg = + Xml.Element("error",[],[Xml.PCData msg]) diff --git a/exec/makefile b/exec/makefile index 671865d..429c5b6 100755 --- a/exec/makefile +++ b/exec/makefile @@ -9,21 +9,21 @@ OCAMLOPTFLAGS=$(INCLUDES) unix.cmxa xml-light.cmxa str.cmxa nums.cmxa zip.cmxa b eniam-mst-disambiguation.cmxa eniam-lexSemantics.cmxa eniam-semantics.cmxa eniam-exec.cmxa INSTALLDIR=`ocamlc -where`/eniam -SOURCES= ENIAMexecTypes.ml ENIAMexec.ml ENIAMselectSent.ml ENIAMvisualization.ml +SOURCES= ENIAMexecTypes.ml ENIAMexec.ml ENIAMselectSent.ml ENIAMvisualization.ml ENIAMexecXMLof.ml all: eniam-exec.cma eniam-exec.cmxa install: all mkdir -p $(INSTALLDIR) cp eniam-exec.cmxa eniam-exec.a eniam-exec.cma $(INSTALLDIR) - cp ENIAMexecTypes.cmi ENIAMexec.cmi ENIAMselectSent.cmi ENIAMvisualization.cmi $(INSTALLDIR) - cp ENIAMexecTypes.cmx ENIAMexec.cmx ENIAMselectSent.cmx ENIAMvisualization.cmx $(INSTALLDIR) + cp ENIAMexecTypes.cmi ENIAMexec.cmi ENIAMselectSent.cmi ENIAMexecXMLof.cmi ENIAMvisualization.cmi $(INSTALLDIR) + cp ENIAMexecTypes.cmx ENIAMexec.cmx ENIAMselectSent.cmx ENIAMexecXMLof.cmx ENIAMvisualization.cmx $(INSTALLDIR) install-local: all mkdir -p $(INSTALLDIR) cp eniam-exec.cmxa eniam-exec.a eniam-exec.cma $(INSTALLDIR) - cp ENIAMexecTypes.cmi ENIAMexec.cmi ENIAMselectSent.cmi ENIAMvisualization.cmi $(INSTALLDIR) - cp ENIAMexecTypes.cmx ENIAMexec.cmx ENIAMselectSent.cmx ENIAMvisualization.cmx $(INSTALLDIR) + cp ENIAMexecTypes.cmi ENIAMexec.cmi ENIAMselectSent.cmi ENIAMexecXMLof.cmi ENIAMvisualization.cmi $(INSTALLDIR) + cp ENIAMexecTypes.cmx ENIAMexec.cmx ENIAMselectSent.cmx ENIAMexecXMLof.cmx ENIAMvisualization.cmx $(INSTALLDIR) eniam-exec.cma: $(SOURCES) ocamlc -linkall -a -o eniam-exec.cma $(OCAMLFLAGS) $^ diff --git a/exec/parser.ml b/exec/parser.ml index c5f3070..27cb5d7 100644 --- a/exec/parser.ml +++ b/exec/parser.ml @@ -23,7 +23,7 @@ open Xstd let rules = ENIAM_LCGlexicon.make_rules false ENIAM_LCGlexiconTypes.rules_filename let dep_rules = ENIAM_LCGlexicon.make_rules true ENIAM_LCGlexiconTypes.rules_filename -type output = (*Text | Xml |*) Html | Marsh (*| Graphviz*) +type output = (*Text |*) Xml | Html | Marsh (*| Yaml | Graphviz*) let output = ref Html let comm_stdio = ref true @@ -43,10 +43,11 @@ let perform_integration = ref false let spec_list = [ "-i", Arg.Unit (fun () -> comm_stdio:=true), "Communication using stdio (default)"; "-p", Arg.Int (fun p -> comm_stdio:=false; port:=p), "<port> Communication using sockets on given port number"; - (*"-t", Arg.Unit (fun () -> output:=Text), "Output as plain text (default)"; - "-x", Arg.Unit (fun () -> output:=Xml), "Output as XML";*) + (*"-t", Arg.Unit (fun () -> output:=Text), "Output as plain text (default)";*) + "-x", Arg.Unit (fun () -> output:=Xml), "Output as XML"; "-m", Arg.Unit (fun () -> output:=Marsh), "Output as marshalled Ocaml data structure"; "-h", Arg.Unit (fun () -> output:=Html), "Output as HTML (default)"; + (* "-y", Arg.Unit (fun () -> output:=Yaml), "Output as YAML"; *) (*"-g", Arg.Unit (fun () -> output:=Graphviz; sentence_split:=false), "Output as graphviz dot file; turns sentence split off";*) (* "-r", Arg.String (fun p -> ENIAMtokenizerTypes.set_resource_path p; @@ -124,6 +125,7 @@ let rec main_loop sub_in sub_out in_chan out_chan = if msg <> "" then (match !output with | Html -> Printf.fprintf out_chan "%s\n%!" msg + | Xml -> Printf.fprintf out_chan "%s\n%!" (Xml.to_string_fmt (ENIAMexecXMLof.message msg)) | Marsh -> Marshal.to_channel out_chan (text,tokens,lex_sems,msg) []; flush out_chan) else ( let text = ENIAMexec.translate_text text in let text = ENIAMexec.parse !timeout !verbosity rules dep_rules tokens lex_sems text in @@ -132,6 +134,7 @@ let rec main_loop sub_in sub_out in_chan out_chan = let text = if !semantic_processing_flag then ENIAMexec.semantic_processing !verbosity tokens lex_sems text else text in (match !output with | Html -> ENIAMvisualization.print_html_text !output_dir "parsed_text" text !img !verbosity tokens + | Xml -> Printf.fprintf out_chan "%s\n%!" (Xml.to_string_fmt (ENIAMexecXMLof.text "" text)) | Marsh -> Marshal.to_channel out_chan (text,tokens,lex_sems,msg) []; flush out_chan)); prerr_endline "Done!"; main_loop sub_in sub_out in_chan out_chan) diff --git a/integration/opis_do_dzieła.txt b/integration/opis_do_dzieła.txt new file mode 100644 index 0000000..a2bc38a --- /dev/null +++ b/integration/opis_do_dzieła.txt @@ -0,0 +1,2 @@ +W katalogach exec oraz integration zawarte są moduły ENIAMexec oraz ENIAMintegration, które w ramach wykonania dzieła zostały rozszerzone do postaci umożliwiającej integrację z gramatyką POLFIE. Uruchamiany jest parser XLE wraz z gramatyką POLFIE-OT, będącą rezultatem projektu Clarin-pl 1, poszczególne zdania przetwarzanego tekstu przekazywane są do tego parsera, w wyniku czego powstają pliki z wygenerowanymi na ich podstawie c-strukturami i f-strukturami, które następnie wczytywane są przez parser zintegrowany. +Parsowanie za pomocą POLFIE można włączać bądź wyłączać za pomocą parametrów uruchomieniowych parsera. Kiedy parsowanie za pomocą POLFIE jest włączone powyższe moduły do swojego działania wymagają zainstalowanego parsera XLE. diff --git a/semantics/ENIAMsemXMLof.ml b/semantics/ENIAMsemXMLof.ml new file mode 100644 index 0000000..c93cab0 --- /dev/null +++ b/semantics/ENIAMsemXMLof.ml @@ -0,0 +1,70 @@ +(* + * ENIAMsemantics implements semantic processing for ENIAM + * Copyright (C) 2016-2017 Wojciech Jaworski <wjaworski atSPAMfree mimuw dot edu dot pl> + * Copyright (C) 2016-2017 Institute of Computer Science Polish Academy of Sciences + * + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + *) + +open ENIAMsemTypes + +let rec linear_term = function + | Tuple l -> Xml.Element("Tuple",[],Xlist.map l linear_term) + | Variant(e,l) -> + Xml.Element("Variant",["label",e],Xlist.map l (fun (i,t) -> + Xml.Element("option",["number",i],[linear_term t]))) + | Dot -> Xml.Element("Dot",[],[]) + | Val s -> Xml.Element("Val",[],[Xml.PCData s]) + | Node t -> + Xml.Element("Node",["orth",t.orth;"lemma",t.lemma;"pos",t.pos; + "weight",string_of_float t.weight;"id",string_of_int t.id;"arg_dir",t.arg_dir;"gf",t.gf; + "role",t.role;"role_attr",t.role_attr;"arole",t.arole;"arole_attr",t.arole_attr; + "arev",string_of_bool t.arev;"label",t.label;"def_label",t.def_label], + [Xml.Element("symbol",[],[linear_term t.symbol]); + Xml.Element("arg_symbol",[],[linear_term t.arg_symbol]); + Xml.Element("attrs",[],Xlist.map t.attrs (fun (k,v) -> Xml.Element("attr",["name",k],[linear_term v]))); + Xml.Element("args",[],[linear_term t.args]); + Xml.Element("selprefs",[],[linear_term t.selprefs]); + Xml.Element("meaning",[],[linear_term t.meaning]); + Xml.Element("sem_args",[],[linear_term t.sem_args])]) + | Ref i -> Xml.Element("Ref",["index",string_of_int i],[]) + | Concept c -> + Xml.Element("Concept",["local_quant",string_of_bool c.c_local_quant; + "label",c.c_label;"def_label",c.c_def_label; + "variable",fst c.c_variable ^ "_" ^ snd c.c_variable;"pos",string_of_int c.c_pos], + [Xml.Element("sense",[],[linear_term c.c_sense]); + Xml.Element("name",[],[linear_term c.c_name]); + Xml.Element("quant",[],[linear_term c.c_quant]); + Xml.Element("relations",[],[linear_term c.c_relations]); + Xml.Element("cat",[],[linear_term c.c_cat])]) + | Context c -> + Xml.Element("Context", + ["variable",fst c.cx_variable ^ "_" ^ snd c.cx_variable;"pos",string_of_int c.cx_pos], + [Xml.Element("sense",[],[linear_term c.cx_sense]); + Xml.Element("contents",[],[linear_term c.cx_contents]); + Xml.Element("relations",[],[linear_term c.cx_relations]); + Xml.Element("cat",[],[linear_term c.cx_cat])]) + | Relation(r,a,c) -> Xml.Element("Relation",["role",r;"role_attribute",a],[linear_term c]) + | RevRelation(r,a,c) -> Xml.Element("RevRelation",["role",r;"role_attribute",a],[linear_term c]) + | SingleRelation r -> Xml.Element("SingleRelation",[],[linear_term r]) + | AddRelation(t,r,a,s) -> + Xml.Element("AddRelation",["role",r;"role_attribute",a], + [Xml.Element("",[],[linear_term t]);Xml.Element("",[],[linear_term s])]) + | RemoveRelation(r,a,t) -> Xml.Element("RemoveRelation",["role",r;"role_attribute",a],[linear_term t]) + | SetContextName(s,t) -> + Xml.Element("SetContextName",[],[linear_term s;linear_term t]) + | CreateContext(s,t) -> + Xml.Element("CreateContext",[],[linear_term (Context s);linear_term t]) + | ManageCoordination(t,r) -> + Xml.Element("ManageCoordination",[],[linear_term (Node t);linear_term r]) diff --git a/semantics/makefile b/semantics/makefile index 7bad6ac..6f1ccb4 100755 --- a/semantics/makefile +++ b/semantics/makefile @@ -9,23 +9,23 @@ OCAMLOPTFLAGS=$(INCLUDES) unix.cmxa xml-light.cmxa str.cmxa nums.cmxa zip.cmxa b eniam-lexSemantics.cmxa #eniam-semantics.cmxa INSTALLDIR=`ocamlc -where`/eniam -SOURCES= ENIAMsemTypes.ml ENIAMsemLexicon.ml ENIAMsemValence.ml ENIAMdisambiguation.ml ENIAMcoreference.ml ENIAMsemStringOf.ml ENIAMsemGraph.ml ENIAMsemLatexOf.ml ENIAMsemGraphOf.ml +SOURCES= ENIAMsemTypes.ml ENIAMsemLexicon.ml ENIAMsemValence.ml ENIAMdisambiguation.ml ENIAMcoreference.ml ENIAMsemStringOf.ml ENIAMsemXMLof.ml ENIAMsemGraph.ml ENIAMsemLatexOf.ml ENIAMsemGraphOf.ml all: eniam-semantics.cma eniam-semantics.cmxa install: all mkdir -p $(INSTALLDIR) cp eniam-semantics.cmxa eniam-semantics.a eniam-semantics.cma $(INSTALLDIR) - cp ENIAMsemTypes.cmi ENIAMsemLexicon.cmi ENIAMsemValence.cmi ENIAMdisambiguation.cmi ENIAMcoreference.cmi ENIAMsemStringOf.cmi ENIAMsemGraph.cmi ENIAMsemLatexOf.cmi ENIAMsemGraphOf.cmi $(INSTALLDIR) - cp ENIAMsemTypes.cmx ENIAMsemLexicon.cmx ENIAMsemValence.cmx ENIAMdisambiguation.cmx ENIAMcoreference.cmx ENIAMsemStringOf.cmx ENIAMsemGraph.cmx ENIAMsemLatexOf.cmx ENIAMsemGraphOf.cmx $(INSTALLDIR) + cp ENIAMsemTypes.cmi ENIAMsemLexicon.cmi ENIAMsemValence.cmi ENIAMdisambiguation.cmi ENIAMcoreference.cmi ENIAMsemStringOf.cmi ENIAMsemGraph.cmi ENIAMsemXMLof.cmi ENIAMsemLatexOf.cmi ENIAMsemGraphOf.cmi $(INSTALLDIR) + cp ENIAMsemTypes.cmx ENIAMsemLexicon.cmx ENIAMsemValence.cmx ENIAMdisambiguation.cmx ENIAMcoreference.cmx ENIAMsemStringOf.cmx ENIAMsemGraph.cmx ENIAMsemXMLof.cmx ENIAMsemLatexOf.cmx ENIAMsemGraphOf.cmx $(INSTALLDIR) mkdir -p /usr/share/eniam/semantics cp resources/* /usr/share/eniam/semantics install-local: all mkdir -p $(INSTALLDIR) cp eniam-semantics.cmxa eniam-semantics.a eniam-semantics.cma $(INSTALLDIR) - cp ENIAMsemTypes.cmi ENIAMsemLexicon.cmi ENIAMsemValence.cmi ENIAMdisambiguation.cmi ENIAMcoreference.cmi ENIAMsemStringOf.cmi ENIAMsemGraph.cmi ENIAMsemLatexOf.cmi ENIAMsemGraphOf.cmi $(INSTALLDIR) - cp ENIAMsemTypes.cmx ENIAMsemLexicon.cmx ENIAMsemValence.cmx ENIAMdisambiguation.cmx ENIAMcoreference.cmx ENIAMsemStringOf.cmx ENIAMsemGraph.cmx ENIAMsemLatexOf.cmx ENIAMsemGraphOf.cmx $(INSTALLDIR) + cp ENIAMsemTypes.cmi ENIAMsemLexicon.cmi ENIAMsemValence.cmi ENIAMdisambiguation.cmi ENIAMcoreference.cmi ENIAMsemStringOf.cmi ENIAMsemGraph.cmi ENIAMsemXMLof.cmi ENIAMsemLatexOf.cmi ENIAMsemGraphOf.cmi $(INSTALLDIR) + cp ENIAMsemTypes.cmx ENIAMsemLexicon.cmx ENIAMsemValence.cmx ENIAMdisambiguation.cmx ENIAMcoreference.cmx ENIAMsemStringOf.cmx ENIAMsemGraph.cmx ENIAMsemXMLof.cmx ENIAMsemLatexOf.cmx ENIAMsemGraphOf.cmx $(INSTALLDIR) mkdir -p /usr/local/share/eniam/semantics cp resources/* /usr/local/share/eniam/semantics