si.ml 13.4 KB
(********************************************************)
(*                                                      *)
(*  Copyright 2013 Wojciech Jaworski.                   *)
(*                                                      *)
(*  All rights reserved.                                *)
(*                                                      *)
(********************************************************)

open Xstd

let hipo_roots = [
  "coś", "28358";
  "CZASOWNIK", "55268";
  "GERUNDIUM", "102594";
  "rezultat", "5195";
  "czynność", "10765";
  "cecha", "323";
  "zjawisko", "5371";
  "okoliczności", "4673";
  "miejsce", "4750";
  "informacja", "1088";
  "wydarzenie", "6526";
  "negatywny", "105767";
  "pozytywny", "105768";
  "przestrzeń", "4897";
  "działalność", "10956";
  "inny-3", "428387";
  "inny-1", "236059";
  "dobrze", "452661";
  "sprecyzowany", "2148";
  "niezwykle", "455526";
  "własność", "1648";
  "okres", "50721";
  "podobny", "9182";
  "inaczej", "461347";
  "negatywnie", "454949";

  (*"istota", "1027";
  "całość.txt", "2129";
  "materia.txt", "247979";
  "część.txt", "104936";
  "środek.txt", "28294";
  "ilość.txt", "1078";
  "ciąg.txt", "247194";
  "proces_ruchu.txt", "105004";
  "podmiot.txt", "228023";
  "czyn.txt", "50840";
  "zależność.txt", "4659";
  "jakiś.txt", "9558";
  "właściwość.txt", "2270";
  "rzecz.txt", "103550";
  "przedmiot-cel.txt", "5508";
  "rzadkość.txt", "247904";
  "byt.txt", "304";*)
  ]

(*
let _ =
  let lumap,synmap,lr,sr,rtmap = PlWordnet.load_data PlWordnet.plwordnet_filename in
  print_endline "data loaded";
  (* PlWordnet.check_lexical_units_fields lumap; *)
  (* PlWordnet.print_lexical_units_full "results/lu_" lumap; *)
  (* PlWordnet.check_lu_syn_consistency lumap synmap; *)
  let synmap = PlWordnet.merge_lu_syn lumap synmap in
  let lu_syn = PlWordnet.make_lu_syn_map synmap in
(*  let rel_count = PlWordnet.count_relations StringQMap.empty rtmap lr in
  let rel_count = PlWordnet.count_relations rel_count rtmap sr in
  PlWordnet.print_rt_map "results/rt.csv" rel_count rtmap;
  PlWordnet.print_lu_relations "results/lr_" lumap lr;
  PlWordnet.print_syn_relations "results/sr_" synmap sr;*)
  let hipero = PlWordnet.create_relation_map "10" sr in (* klucz (parent) jest hiponimem *)
  let hipo = PlWordnet.create_relation_map "11" sr in (* klucz (parent) jest hiperonimem *)
  let synmap = PlWordnet.assign_no_hipo synmap hipo in
  (* PlWordnet.test_rel_pos_consistency synmap hipero; *)
  (* print_endline "hipo";
  PlWordnet.test_reverse_rel hipero hipo;
  print_endline "hipero";
  PlWordnet.test_reverse_rel hipo hipero; *)
  let synmap = PlWordnet.remove_pwn synmap in
  let holo = PlWordnet.create_relation_map "20" sr in (* część -> całość *) (* Holonimy (części) *)
  let holo3 = PlWordnet.create_relation_map "22" sr in (* część -> całość *) (* Holonimy (miejsca) *)
  let holo2 = PlWordnet.create_relation_map "23" sr in (* Holonimy (elementy kolekcji) *)
  let blisk = PlWordnet.create_relation_map "60" sr in (* bliskoznaczność *) (* Bliskoznaczne z *)
  let stan = PlWordnet.rev_relation (PlWordnet.create_relation_map "92" sr) in (* Stanowość (stanowość V-Adj) *)
  let typy = PlWordnet.create_relation_map "106" sr in (* Typy *)
  let caus = PlWordnet.rev_relation (PlWordnet.create_relation_map "124" sr) in (* Kauzacja (kauzacja procesu DK-Adj) *)
  let caus2 = PlWordnet.rev_relation (PlWordnet.create_relation_map "126" sr) in (* Kauzacja (kauzacja procesu NDK-Adj) *)
  let attr = PlWordnet.create_relation_map "145" sr in (* klucz (parent) jest cechą, wartość - wartością cechy *) (* Wartości cechy *)
(*let syn_rel = PlWordnet.create_relation_map_lex lu_syn "141" lr in (* verb -> noun *)
  let fuzzy = PlWordnet.create_relation_map_lex lu_syn "19" lr in (* verb -> noun *)
  let anton = PlWordnet.create_relation_map_lex lu_syn "104" lr in (* verb -> noun *)
  let part = PlWordnet.create_relation_map_lex lu_syn "20" lr in (* verb -> noun *)
  let syn_adv_adj = PlWordnet.create_relation_map_lex lu_syn "244" lr in (* verb -> noun *)
  PlWordnet.print_relation "results/syn_adv_adj.tab" synmap syn_adv_adj;
  let chr = PlWordnet.create_relation_map_lex lu_syn "149" lr in (* verb -> noun czy to powinno być traktowane jako strukturalne? *)
  PlWordnet.print_relation "results/chr.tab" synmap chr;*)
  let fem = PlWordnet.create_relation_map_lex lu_syn "53" lr in (* formy żeńskie *) (* Nazwy żeńskie *)
  let demi = PlWordnet.create_relation_map_lex lu_syn "56" lr in (* zdrobnienia *) (* Nacechowanie (deminutywy) *)
  let aug = PlWordnet.create_relation_map_lex lu_syn "57" lr in (* zdrobnienia *) (* Nacechowanie ( augmentatywność) *)
  let deryw = PlWordnet.create_relation_map_lex lu_syn "59" lr in (* Derywatywy *)
  let rel2 = PlWordnet.create_relation_map_lex lu_syn "62" lr in (* Synonimy międzyparadygmatyczne (synonimia międzyparadygmatyczna V-N) *)
  let grad = PlWordnet.create_relation_map_lex lu_syn "151" lr in (* Stopniowanie (stopień wyższy) *)
  let rel = PlWordnet.create_relation_map_lex lu_syn "169" lr in (* adj -> noun *) (* Synonimy międzyparadygmatyczne (relacyjne) *) (*wanilinowy-2*)
  let rel3 = PlWordnet.create_relation_map_lex lu_syn "244" lr in (* adv -> adj *) (* Synonimy międzyparadygmatyczne (Adv-Adj) *)
(*  PlWordnet.print_relation "results/demi.tab" synmap demi;
  let place = PlWordnet.create_relation_map "22" sr in (*  *)
  PlWordnet.print_relation "results/place.tab" synmap place;*)
  let ex_hipero = Xlist.fold [attr; holo; holo2; holo3; blisk; rel; rel2; rel3; (*chr;*) fem; demi; stan; typy; aug; deryw; caus; caus2; grad] hipero PlWordnet.sum_relation in
(*  let ex_hipo = Xlist.fold [attr; holo; blisk; rel; chr; fem; demi] hipo (fun ex_hipo r -> PlWordnet.sum_relation ex_hipo (PlWordnet.rev_relation r)) in*)
  let max_syn = PlWordnet.get_maximal_synsets synmap ex_hipero in
  (* PlWordnet.print_synset_names "results/max_syn.tab" synmap max_syn hipo; *)
  (* let max_syn = PlWordnet.get_maximal_synsets synmap hipero in
  PlWordnet.print_synset_names "results/max_syn_hipero.tab" synmap max_syn hipo; *)
(*  let max_syn = PlWordnet.get_maximal_not_isolated_synsets synmap ex_hipero ex_hipo in
  PlWordnet.print_synset_names "results/max_syn_non_iso_ex.tab" synmap max_syn;*)
  (*  PlWordnet.print_rels "results/plWordnet_hipero.csv" "10" sr;
    PlWordnet.print_rels "results/plWordnet_hipo.csv" "11" sr;*)
   (*PlWordnet.count_relation_map hipo;*)
(*  PlWordnet.print_syn_map "results/plWordnet_syn.csv" synmap;
  PlWordnet.print_lu_map "results/plWordnet_lu.csv" lumap;*)
  (* let verbs = PlWordnet.get_subtree hipo "55268" StringSet.empty in
  Printf.printf "no verbs=%d\n" (StringSet.size verbs); *)
(*   let leafs = PlWordnet.get_subtree_leafs hipo verbs in *)
  (* PlWordnet.print_subtree "results/verbs_100_abstract.txt" 100 hipo synmap lumap "55268";
  let hipo = StringMap.add hipo "55268" (List.rev (StringMap.find hipo "55268")) in
  PlWordnet.print_subtree "results/verbs_100_abstract2.txt" 100 hipo synmap lumap "55268";
  PlWordnet.print_subtree "results/verbs_1_abstract2.txt" 1 hipo synmap lumap "55268"; *)
  (* PlWordnet.print_subtree "results/tree_istota.txt" treshold hipo synmap lumap "1027";
  PlWordnet.print_subtree "results/tree_całość.txt" treshold hipo synmap lumap "2129";
  PlWordnet.print_subtree "results/tree_materia.txt" treshold hipo synmap lumap "247979";
  PlWordnet.print_subtree "results/tree_część.txt" treshold hipo synmap lumap "104936";
  PlWordnet.print_subtree "results/tree_środek.txt" treshold hipo synmap lumap "28294";
  PlWordnet.print_subtree "results/tree_ilość.txt" treshold hipo synmap lumap "1078";
  PlWordnet.print_subtree "results/tree_ciąg.txt" treshold hipo synmap lumap "247194";
  PlWordnet.print_subtree "results/tree_proces_ruchu.txt" treshold hipo synmap lumap "105004";
  PlWordnet.print_subtree "results/tree_podmiot.txt" treshold hipo synmap lumap "228023";
  PlWordnet.print_subtree "results/tree_czyn.txt" treshold hipo synmap lumap "50840";
  PlWordnet.print_subtree "results/tree_zależność.txt" treshold hipo synmap lumap "4659";
  PlWordnet.print_subtree "results/tree_jakiś.txt" treshold hipo synmap lumap "9558";
  PlWordnet.print_subtree "results/tree_właściwość.txt" treshold hipo synmap lumap "2270";
  PlWordnet.print_subtree "results/tree_rzecz.txt" treshold hipo synmap lumap "103550";
  PlWordnet.print_subtree "results/tree_przedmiot-cel.txt" treshold hipo synmap lumap "5508";
  PlWordnet.print_subtree "results/tree_rzadkość.txt" treshold hipo synmap lumap "247904";
  PlWordnet.print_subtree "results/tree_byt.txt" treshold hipo synmap lumap "304"; *)
  (* Xlist.iter hipo_roots (fun (name,id) ->
    PlWordnet.print_subtree ("results/tree_100_" ^ name ^ ".txt") 100 hipo synmap lumap id);
  Xlist.iter hipo_roots (fun (name,id) ->
    PlWordnet.print_subtree ("results/tree_1_" ^ name ^ ".txt") 1 hipo synmap lumap id); *)
  (* Xlist.iter hipo_roots (fun (name,id) ->
    PlWordnet.print_subtree_xml ("results/tree_" ^ name ^ ".xml") hipo synmap lumap id); *)
  let conn = PlWordnet.find_connected_components (PlWordnet.sum_relation hipo hipero) 100 synmap in
  (*let conn = PlWordnet.remove_conn conn "55268" in
  let conn = PlWordnet.remove_conn conn "102594" in*)
  (* let conn = PlWordnet.select_conn conn "28358" in *)
  Printf.printf "|conn|=%d\n%!" (Xlist.size conn);
  PlWordnet.print_hipo_graph "results/" "hipo_graph" 100 synmap hipo conn;
  ()
*)
(*
let _ =
  let lumap,synmap,lr,sr,rtmap = PlWordnet.load_data PlWordnet.plwordnet_filename in
  let hipero = PlWordnet.create_relation_map "10" sr in (* klucz (parent) jest hiponimem *)
  PlWordnet.print_hipero "results/hipero.tab" hipero;
  PlWordnet.print_lexical_units "results/lexical_units/" lumap;
  PlWordnet.print_synsets "results/synsets.tab" synmap;
  ()
*)

let print_maximal_ids synmap hipo pos =
  let pos_ids = PlWordnet.select_pos synmap pos in
  let hipo = Graph.select_node_set hipo pos_ids in
  let maximal_ids = Graph.select_maximal_ids hipo in
  PlWordnet.print_synset_names ("results/max_syn_hipo_" ^ pos ^ ".tab") synmap maximal_ids;
  ()

let print_subtree synmap hipo name pos threshold lr id =
  let pos_ids = PlWordnet.select_pos synmap pos in
  let hipo = Graph.select_node_set hipo pos_ids in
  let big_synset_ids = PlWordnet.select_big_synsets synmap threshold in
  let hipo = Graph.select_node_set hipo big_synset_ids in
  let chidlren_ids = Graph.get_children_ids hipo IntSet.empty id in
  let hipo2 = Graph.select_node_set hipo chidlren_ids in
  Graph.print_graph "results/" ("hipo_graph_" ^ name ^ "_" ^ string_of_int threshold) lr hipo2 (fun id ->
    let syn = IntMap.find synmap id in
    Printf.sprintf "%s\\n%d" (PlWordnet.syn_name_single syn) syn.PlWordnet.syn_no_hipo);
  ()


let _ =
  let lumap,synmap,lr,sr,rtmap = PlWordnet.load_data PlWordnet.plwordnet_filename in
  print_endline "data loaded";
  let synmap = PlWordnet.merge_lu_syn lumap synmap in
  let lumap = PlWordnet.merge_lu_syn2 lumap synmap in
  let hipero = PlWordnet.create_relation_map 10 sr in (* klucz (parent) jest hiponimem *)
  let hipo = PlWordnet.create_relation_map 11 sr in (* klucz (parent) jest hiperonimem *)
  let synmap = PlWordnet.assign_no_hipo synmap hipo in
  (* print_maximal_ids synmap hipo "rzeczownik"; *)
(*  print_subtree synmap hipo "coś" "rzeczownik" 50 true 28358;
  print_subtree synmap hipo "GERUNDIUM" "rzeczownik" 50 true 102594;
  print_subtree synmap hipo "organizm" "rzeczownik" 40 true 6731;
  print_subtree synmap hipo "istota" "rzeczownik" 50 true 1027;
  print_subtree synmap hipo "rezultat" "rzeczownik" 40 true 5195;
  print_subtree synmap hipo "całość" "rzeczownik" 30 true 2129;
  print_subtree synmap hipo "czynność" "rzeczownik" 30 true 10765;
  print_subtree synmap hipo "cecha" "rzeczownik" 30 true 323;
  print_subtree synmap hipo "zjawisko" "rzeczownik" 30 true 5371;
  print_subtree synmap hipo "materia" "rzeczownik" 30 true 247979;
  print_subtree synmap hipo "część" "rzeczownik" 20 true 104936;
  print_subtree synmap hipo "środek" "rzeczownik" 20 true 28294;
  print_subtree synmap hipo "okoliczności" "rzeczownik" 20 true 4673;
  print_subtree synmap hipo "miejsce" "rzeczownik" 20 true 4750;
  print_subtree synmap hipo "informacja" "rzeczownik" 20 true 1088;
  print_subtree synmap hipo "ilość" "rzeczownik" 10 true 1078;
  print_subtree synmap hipo "ciąg" "rzeczownik" 10 true 247194;
  print_subtree synmap hipo "wydarzenie" "rzeczownik" 10 true 6526;
  print_subtree synmap hipo "proces_fizykalny" "rzeczownik" 10 true 105004;
  print_subtree synmap hipo "przestrzeń" "rzeczownik" 10 true 4897;
  print_subtree synmap hipo "działalność" "rzeczownik" 10 true 10956;
  print_subtree synmap hipo "podmiot" "rzeczownik" 10 true 228023;
  print_subtree synmap hipo "czyn" "rzeczownik" 10 true 50840;
  print_subtree synmap hipo "mienie" "rzeczownik" 10 true 1648;
  print_subtree synmap hipo "czas" "rzeczownik" 10 true 50721;
  print_subtree synmap hipo "dziedzina" "rzeczownik" 10 true 8078;
  print_subtree synmap hipo "zależność" "rzeczownik" 10 true 4659;
  print_subtree synmap hipo "rzecz" "rzeczownik" 10 true 5540;
  print_subtree synmap hipo "tkanka" "rzeczownik" 10 true 5999;
  print_subtree synmap hipo "właściwość" "rzeczownik" 10 true 2270;
  print_subtree synmap hipo "czynności" "rzeczownik" 10 true 105438;
  print_subtree synmap hipo "sedno" "rzeczownik" 10 true 1129;
  print_subtree synmap hipo "zachowanie" "rzeczownik" 10 true 105543;*)
  (*print_maximal_ids synmap hipo "przymiotnik";
  print_maximal_ids synmap hipo "czasownik";
  print_maximal_ids synmap hipo "przysłówek";*)
  ()