(****************************************************************) (* Module [Linkgrammar]: Provides an Ocaml interface to *) (* LinkGrammar - A parser for english sentences *) (* *) (* For more info on LinkGrammar *) (* refer: http://abisource.com/projects/link-grammar/ *) (* *) (* Author: Ramu Ramamurthy ramu_ramamurthy at yahoo dot com *) (* (C) 2006 *) (* *) (* This is released under the BSD license *) (****************************************************************) (** {b ------parse options and operations on it------} *) type parseOptions ;; external poCreateBase: unit -> parseOptions = "po_create";; external freePo : parseOptions -> unit = "free_po";; let poCreate () = let v = poCreateBase () in let () = Gc.finalise freePo v in v ;; external poGetVerbosity : parseOptions -> int = "po_get_verbosity";; external poSetVerbosity : parseOptions -> int -> unit = "po_set_verbosity";; external poGetLinkageLimit : parseOptions -> int = "po_get_linkage_limit";; external poSetLinkageLimit : parseOptions -> int -> unit = "po_set_linkage_limit";; external poGetDisjunctCost : parseOptions -> int = "po_get_disjunct_cost";; external poSetDisjunctCost : parseOptions -> int -> unit = "po_set_disjunct_cost";; external poGetMinNullCount : parseOptions -> int = "po_get_min_null_count";; external poSetMinNullCount : parseOptions -> int -> unit = "po_set_min_null_count";; external poGetMaxNullCount : parseOptions -> int = "po_get_max_null_count";; external poSetMaxNullCount : parseOptions -> int -> unit = "po_set_max_null_count";; external poGetNullBlock : parseOptions -> int = "po_get_null_block";; external poSetNullBlock : parseOptions -> int -> unit = "po_set_null_block";; external poGetShortLength : parseOptions -> int = "po_get_short_length";; external poSetShortLength : parseOptions -> int -> unit = "po_set_short_length";; external poGetIslandsOk : parseOptions -> int = "po_get_islands_ok";; external poSetIslandsOk : parseOptions -> int -> unit = "po_set_islands_ok";; external poGetMaxParseTime : parseOptions -> int = "po_get_max_parse_time";; external poSetMaxParseTime : parseOptions -> int -> unit = "po_set_max_parse_time";; external poTimerExpired : parseOptions -> int = "po_get_timer_expired";; external poResetResources : parseOptions -> unit = "po_reset_resources";; external poGetAllowNull : parseOptions -> int = "po_get_allow_null";; external poSetAllowNull : parseOptions -> int -> unit = "po_set_allow_null";; external poGetAllShortConnectors : parseOptions -> int = "po_get_all_short_connectors";; external poSetAllShortConnectors : parseOptions -> int -> unit = "po_set_all_short_connectors";; (** {b -------dictionary and operations on it--------} *) type dictionary;; external dictCreateBase : string -> dictionary = "dict_create";; external freeDict : dictionary -> unit = "free_dict";; let dictCreate s1 = let v = dictCreateBase s1 in let () = Gc.finalise freeDict v in v ;; (** {b -------sentences and operations on it--------} *) type sentence;; external sentCreateBase : string -> dictionary -> sentence = "sent_create";; external freeSent : sentence -> unit = "free_sentence";; let sentCreate dict s = let v = sentCreateBase s dict in let () = Gc.finalise freeSent v in v ;; external sentParse : sentence -> parseOptions -> int = "sent_parse";; external sentLength : sentence -> int = "sent_length";; external sentNullCount : sentence -> int = "sent_null_count";; external sentNumLinkagesFound : sentence -> int = "sent_num_linkages_found";; external sentNumValidLinkages : sentence -> int = "sent_num_valid_linkages";; external sentNumLinkagesPP : sentence -> int = "sent_num_linkages_post_processed";; external sentNumViolations : sentence -> int -> int = "sent_num_violations";; external sentDisjunctCost : sentence -> int -> int = "sent_disjunct_cost";; (** {b -------linkage and operations on it--------} *) type linkage external linkageCreateBase : sentence -> int -> parseOptions -> linkage = "link_create";; external freeLinkage : linkage -> unit = "free_linkage";; let linkageCreate sent ith po = let v = linkageCreateBase sent ith po in let () = Gc.finalise freeLinkage v in v ;; external linkageGetNumWords : linkage -> int = "link_get_num_words";; external linkageGetWord : linkage -> int -> string = "link_get_word";; let linkageGetWords link = let wList = ref [] in let () = for i = 0 to ((linkageGetNumWords link) - 1) do wList := List.append !wList [linkageGetWord link i] done in !wList ;; external linkageGetNumLinks : linkage -> int = "link_get_num_links";; external linkageGetLinkLength : linkage -> int -> int = "link_get_link_length";; external linkageGetLinkLword : linkage -> int -> int = "link_get_link_lword";; external linkageGetLinkRword : linkage -> int -> int = "link_get_link_rword";; external linkageGetLinkLabel : linkage -> int -> string = "link_get_link_label";; external linkageGetLinkLlabel : linkage -> int -> string = "link_get_link_llabel";; external linkageGetLinkRlabel : linkage -> int -> string = "link_get_link_rlabel";; external linkagePrintDiagram : linkage -> string = "link_print_diagram";; external linkagePrintPostscript : linkage -> int -> string = "link_print_postscript";; external linkagePrintLinksAndDomains : linkage -> string = "link_print_links_and_domains";; external linkageGetNumDomains : linkage -> int -> int = "link_get_link_num_domains" external linkageGetLinkDomainNameI : linkage -> int -> int -> string = "link_get_link_domain_name_i" external linkageGetViolationName : linkage -> string = "link_get_violation_name" let linkageGetLinkDomainNames linkage link_ind = let wList = ref [] in let () = for i = 0 to ((linkageGetNumDomains linkage link_ind) - 1) do wList := List.append !wList [linkageGetLinkDomainNameI linkage link_ind i] done in !wList ;; external linkageUnusedWordCost : linkage -> int = "link_unused_word_cost" external linkageDisjunctCost : linkage -> int = "link_disjunct_cost" external linkageLinkCost : linkage -> int = "link_link_cost"