Commit 063ae46921873e68ede2d6e9f3416bb1f28cbc96

Authored by Wojciech Jaworski
2 parents 2fa90bbd 4c20a73a

Merge branch 'corpora'

Too many changes to show.

To preserve performance only 5 of 8 files are displayed.

corpora/CONLL.ml 0 → 100644
  1 +(*open Types*)
  2 +
  3 +let string_of_token token =
  4 + String.concat "\t" [string_of_int token.c_id;
  5 + token.c_orth;
  6 + token.c_lemma;
  7 + token.c_cat;
  8 + token.c_cat;
  9 + (if token.c_interp = []
  10 + then "_"
  11 + else String.concat "|" token.c_interp);
  12 + (if token.c_super = -1
  13 + then "_"
  14 + else string_of_int token.c_super);
  15 + (if token.c_label = ""
  16 + then "_"
  17 + else token.c_label);
  18 + "_";"_"]
  19 +
  20 +let string_of_sentence sentence =
  21 + String.concat "\n" (sentence.s_id :: (List.map string_of_token sentence.s_tokens)) ^ "\n"
  22 +
  23 +(******************)
  24 +
  25 +exception Empty_line
  26 +exception Empty_sentence
  27 +exception Id_line of string
  28 +
  29 +let load_token stream =
  30 + let line = input_line stream in
  31 + if line = ""
  32 + then raise Empty_line
  33 + else if line.[0] = '#'
  34 + then
  35 + let id = String.sub line 8 ((String.length line)-17) in
  36 + raise (Id_line id)
  37 + else
  38 + let pom = Str.split (Str.regexp "\t") line in
  39 + { c_id = int_of_string (List.nth pom 0);
  40 + c_orth = List.nth pom 1;
  41 + c_lemma = List.nth pom 2;
  42 + c_cat = List.nth pom 3;
  43 + c_interp = (let interp = List.nth pom 5 in
  44 + if interp = "_"
  45 + then []
  46 + else Str.split (Str.regexp "|") interp);
  47 + c_super = -1; c_label = ""; c_beg = -1; c_len = -1}
  48 +
  49 +let load_sentence stream =
  50 + let rec pom rev_tokens id =
  51 + try
  52 + let token = load_token stream in
  53 + pom (token :: rev_tokens) id
  54 + with Id_line new_id -> pom rev_tokens new_id
  55 + | Empty_line -> rev_tokens, id
  56 + | End_of_file -> if rev_tokens = []
  57 + then raise Empty_sentence
  58 + else rev_tokens, id in
  59 + let rev_tokens, id = pom [] "" in
  60 + {s_id = id; s_text = ""; s_tokens = (List.rev rev_tokens)}
  61 +
  62 +
  63 +let load_corpus stream =
  64 + let rec pom res =
  65 + try
  66 + let conll_sentence = load_sentence stream in
  67 + pom (conll_sentence :: res)
  68 + with _ -> res in
  69 + pom []
  70 +
  71 +(******************)
  72 +
  73 +exception ErrorInfoFile
  74 +
  75 +module Info =
  76 + struct
  77 + type t = string
  78 + let compare a b = Pervasives.compare a b
  79 + end
  80 +
  81 +module InfoMap = Map.Make(Info)
  82 +
  83 +let info_file = "resources/info_sentences.txt"
  84 +
  85 +let file_in filename f =
  86 + let file = open_in filename in
  87 + let x = f file in
  88 + close_in file;
  89 + x
  90 +
  91 +let load_file filename =
  92 + let size = (Unix.stat filename).Unix.st_size in
  93 + let buf = Bytes.create size in
  94 + file_in filename (fun file ->
  95 + ignore (really_input file buf 0 size));
  96 + buf
  97 +
  98 +let info = Str.split (Str.regexp "\n\n") @@ load_file info_file
  99 +
  100 +let add_to_map map info_str =
  101 + match Str.split (Str.regexp "\n") info_str with
  102 + [id; text; info_token] -> InfoMap.add info_token (id, text) map
  103 + | _ -> raise ErrorInfoFile
  104 +
  105 +let info_map =
  106 + List.fold_left add_to_map InfoMap.empty info
  107 +
  108 +let match_sentence sentence =
  109 + let info_token = String.concat " " @@ List.map (fun x -> x.c_orth) sentence.s_tokens in
  110 + try
  111 + let id, text = InfoMap.find info_token info_map in
  112 + {s_id = id; s_text = text; s_tokens = sentence.s_tokens}
  113 + with _ -> sentence
  114 +
  115 +let match_corpus corpus =
  116 + List.map match_sentence corpus
... ...
corpora/conllParser.ml 0 → 100644
  1 +(*open Types*)
  2 +
  3 +let skladnica_zaleznosciowa_filename = "resources/skladnica_zaleznosciowa.conll"
  4 +
  5 +let oc = open_out "resources/info_sentences.txt"
  6 +
  7 +let empty_token = { c_id = 0; c_orth = ""; c_lemma = ""; c_cat = "";
  8 + c_interp = []; c_super = 0; c_label = ""; c_beg = 0; c_len = 0}
  9 +
  10 +let quote_open = ref false
  11 +
  12 +let hyphenated = ref false
  13 +
  14 +let reset () =
  15 + quote_open := false;
  16 + hyphenated := false
  17 +
  18 +let maybe_add_space pre_previous previous token next =
  19 + if previous.c_orth = "" && token.c_orth = "\""
  20 + then quote_open := true;
  21 + if token.c_cat = "aglt" ||
  22 + (token.c_orth = "by" && previous.c_cat = "praet") ||
  23 + (previous.c_orth = "\"" && !quote_open) ||
  24 + previous.c_orth = "(" ||
  25 + previous.c_orth = "„" ||
  26 + previous.c_orth = "" ||
  27 + token.c_orth = "ń" || (* wyrażenie nań *)
  28 + (token.c_orth = "że" && (previous.c_orth = "czym" || previous.c_orth = "Czym")) || (*wyrażenie czymże*)
  29 +(* (token.c_orth = "r" && token.c_cat = "brev") || (*skrót r. - np. 1991r. *) *)
  30 + (pre_previous.c_cat = "adj" && previous.c_orth = "." && token.c_cat = "num" && token.c_interp = ["pl";"nom";"f";"rec"]) (* godzina - np 13.15*)
  31 + then token.c_orth
  32 + else if !hyphenated
  33 + then (hyphenated := false; token.c_orth)
  34 + else match token.c_orth with
  35 + "." -> "."
  36 + | "…" -> "…"
  37 + | "?" -> "?"
  38 + | "!" -> "!"
  39 + | "," -> ","
  40 + | ":" -> ":"
  41 + | ";" -> ";"
  42 + | ")" -> ")"
  43 + | "”" -> "”"
  44 + | "-" -> if previous.c_cat = "adja" ||
  45 + (previous.c_cat = "subst" && next.c_cat = "subst" && previous.c_interp = next.c_interp)
  46 + then (hyphenated := true; "-")
  47 + else " -"
  48 + | "\"" -> if !quote_open
  49 + then (quote_open := false; "\"")
  50 + else (quote_open := true; " \"")
  51 + | s -> " "^s
  52 +(*FIXME: cudzysłowy*)
  53 +
  54 +let getSentence tokens =
  55 + let rec fold4 acc = function
  56 + a::b::c::d::t -> fold4 (acc^maybe_add_space a b c d) (b::c::d::t)
  57 + | a::b::c::[] -> fold4 (acc^maybe_add_space a b c empty_token) (b::c::[])
  58 + | a::b::[] -> acc in
  59 + reset ();
  60 + fold4 "" (empty_token::empty_token::tokens)
  61 +
  62 +let split_word stringname =
  63 + let pom = Str.split (Str.regexp "\t") stringname in
  64 + { c_id = int_of_string (List.nth pom 0);
  65 + c_orth = List.nth pom 1;
  66 + c_lemma = List.nth pom 2;
  67 + c_cat = List.nth pom 3;
  68 + c_interp = (Str.split (Str.regexp "|") (List.nth pom 5));
  69 + c_super = int_of_string (List.nth pom 6);
  70 + c_label = List.nth pom 7;
  71 + c_beg = -1;
  72 + c_len = -1}
  73 +
  74 +let any_difference string1 string2 = if string1 = string2
  75 + then false
  76 + else (String.sub string2 0 (String.length string2 -1)) ^ " " ^ (String.sub string2 (String.length string2 -1) 1) <> string1
  77 +
  78 +let find_info tokens =
  79 + let text_generated = getSentence tokens in
  80 + try
  81 + let sentence = (*Resources.*)InfoMap.find (List.map (fun token -> token.c_orth) tokens) (*Resources.*)conll_info in
  82 + let id, text = sentence.s_id, sentence.s_text in
  83 + (*if any_difference text text_generated && text <> "not_found"
  84 + then print_endline (text ^ "\n" ^ text_generated ^ "\n\n");*)
  85 + if text = "not_found"
  86 + then { s_id = id;
  87 + s_text = "Auto-generated text: "^text_generated;
  88 + s_tokens = tokens}
  89 + else { s_id = id;
  90 + s_text = text;
  91 + s_tokens = tokens}
  92 + with _ -> (*prerr_endline ("Id not found\n" ^ text_generated ^ "\n\n");*) { s_id = "Id not found";
  93 + s_text = text_generated;
  94 + s_tokens = tokens}
  95 +
  96 +let process_sentence sentenceString =
  97 + let pom = Str.split (Str.regexp "\n") sentenceString in
  98 + let tokens = List.map (fun word -> split_word word) pom in
  99 + find_info tokens
  100 +
  101 +let print_info sentence =
  102 + let sentence = process_sentence sentence in
  103 + let form_sequence = String.concat " " @@ List.map (fun token -> token.c_orth) sentence.s_tokens in
  104 + output_string oc (sentence.s_id^"\n"^sentence.s_text^"\n"^form_sequence^"\n\n");
  105 + flush oc
  106 +
  107 +let processSkladnica =
  108 + List.iter (fun sentence -> print_info sentence) (Str.split (Str.regexp "\n\n") ((*Resources.*)load_file skladnica_zaleznosciowa_filename))
... ...
corpora/resources.ml 0 → 100644
  1 +(*open Types*)
  2 +
  3 +module Id =
  4 + struct
  5 + type t = string
  6 + let compare a b = Pervasives.compare a b
  7 + end
  8 +
  9 +module IdMap = Map.Make(Id)
  10 +
  11 +let skladnica_frazowa_filename = "resources/skladnica_walencyjna"
  12 +
  13 +let get_filenames path =
  14 + List.fold_left
  15 + (fun files_list1 folder1 -> if folder1 = ".DS_Store" then files_list1 else
  16 + List.fold_left
  17 + (fun files_list2 folder2 -> if folder2 = ".DS_Store" then files_list2 else
  18 + List.fold_left
  19 + (fun files_list3 file -> if file = ".DS_Store" then files_list3 else
  20 + (path ^ "/" ^ folder1 ^ "/" ^ folder2 ^ "/" ^file) :: files_list3)
  21 + files_list2
  22 + (Array.to_list (Sys.readdir (path ^ "/" ^ folder1 ^ "/" ^ folder2))))
  23 + files_list1
  24 + (Array.to_list (Sys.readdir (path ^ "/" ^ folder1))))
  25 + []
  26 + (Array.to_list (Sys.readdir path))
  27 +
  28 +let add_to_map map = function
  29 + Xml.Element("forest",("sent_id",sent_id) :: _,
  30 + Xml.Element("text",[],[Xml.PCData text]) :: _) -> IdMap.add sent_id text map
  31 + | _ -> failwith "add_to_map"
  32 +
  33 +let i = ref 1
  34 +
  35 +(* map(id,text) *)
  36 +let sentencesIdText = List.fold_left (fun acc filename -> print_endline (string_of_int !i); i := !i + 1; add_to_map acc (Xml.parse_file filename)) IdMap.empty (get_filenames skladnica_frazowa_filename)
  37 +
  38 +let number_of_sentences_skladnica_frazowa = List.length (get_filenames skladnica_frazowa_filename)
  39 +
  40 +(*************************************************************************************************************)
  41 +
  42 +module Info =
  43 + struct
  44 + type t = string list
  45 + let compare a b = Pervasives.compare a b
  46 + end
  47 +
  48 +module InfoMap = Map.Make(Info)
  49 +
  50 +let krzaki_filename = "resources/krzaki.conll"
  51 +
  52 +let file_in filename f =
  53 + let file = open_in filename in
  54 + let x = f file in
  55 + close_in file;
  56 + x
  57 +
  58 +let load_file filename =
  59 + let size = (Unix.stat filename).Unix.st_size in
  60 + let buf = Bytes.create size in
  61 + file_in filename (fun file ->
  62 + ignore (really_input file buf 0 size));
  63 + buf
  64 +
  65 +let load_krzaki filename = Str.split (Str.regexp "\n\n") (load_file filename)
  66 +(* let krzaki = Str.split (Str.regexp "\n\n") (load_file filename) in
  67 + rev_map (fun krzak ->
  68 + print_endline ("krzak: " ^ krzak); krzak) krzaki *)
  69 +
  70 +let split_word stringname =
  71 + let pom = Str.split (Str.regexp "\t") stringname in
  72 + { c_id = int_of_string (List.nth pom 0);
  73 + c_orth = List.nth pom 1;
  74 + c_lemma = List.nth pom 2;
  75 + c_cat = List.nth pom 3;
  76 + c_interp = (Str.split (Str.regexp "|") (List.nth pom 5));
  77 + c_super = int_of_string (List.nth pom 6);
  78 + c_label = List.nth pom 7;
  79 + c_beg = -1;
  80 + c_len = -1}
  81 +
  82 +let split_krzak stringname =
  83 + let pom = Str.split (Str.regexp "\n") stringname in
  84 + let s_id = String.sub stringname 8 ((String.length @@ List.hd pom)-17) in
  85 + { s_id = s_id;
  86 + s_text =
  87 + (try
  88 + IdMap.find s_id sentencesIdText
  89 + with _ -> prerr_endline s_id; "not_found");
  90 + s_tokens = List.map (fun word -> split_word word) (List.tl pom)}
  91 +
  92 +let parse_krzaki list_of_string =
  93 + List.map (fun krzak -> split_krzak krzak) list_of_string
  94 +
  95 +let number_of_sentences_krzaki = List.length (load_krzaki krzaki_filename)
  96 +
  97 +(* conll_sequence list *)
  98 +let data_conll = parse_krzaki (load_krzaki krzaki_filename)
  99 +
  100 +(* map(form_sequence,conll_sentence) *)
  101 +let conll_info = List.fold_left (fun map sentence ->
  102 + InfoMap.add (List.map (fun token -> token.c_orth) sentence.s_tokens) sentence map) InfoMap.empty data_conll
  103 +
  104 +(*let info_file () =
  105 + let oc = open_out "info_sentences.txt" in
  106 + List.iter (fun (key, sentence) ->
  107 + output_string oc (sentence.s_id^"\n"^sentence.s_text^"\n"^(String.concat " " key)^"\n\n")) (InfoMap.bindings conll_info)*)
  108 +
  109 +(*let frazowa_info =
  110 + let got_info = List.map (fun (_, sentence) -> sentence.s_id, sentence.s_text) (InfoMap.bindings conll_info) in
  111 + List.fold_left (fun map (id, text) -> if List.mem (id, text) got_info
  112 + then map
  113 + else IdMap.add text id map) IdMap.empty (IdMap.bindings sentecesIdText) *)
... ...
corpora/resources/bledy_w_spacjach.txt 0 → 100644
  1 +zdania z błędami w spacjach
  2 +
  3 +W opinii tej było tyleż przesady, ilepodziwu dla niepokornych górali, którzy pozostawali wierni i lojalni, dopóki stara przyjaźń nie zaczynała dla nich samych stanowić zagrożenia.
  4 +
  5 +W opinii tej było tyleż przesady, ile podziwu dla niepokornych górali, którzy pozostawali wierni i lojalni, dopóki stara przyjaźń nie zaczynała dla nich samych stanowić zagrożenia.
  6 +
  7 +
  8 +
  9 +
  10 +
  11 +Nanim samym zaś czas nie odcisnął piętna.
  12 +
  13 +Na nim samym zaś czas nie odcisnął piętna.
  14 +
  15 +
  16 +
  17 +
  18 +
  19 +Wszyscy będą dorana.
  20 +
  21 +Wszyscy będą do rana.
  22 +
  23 +
  24 +
  25 +
  26 +
  27 +Wszedł do wagonu, w przejściu natknął się na konduktora - służbistę, który zrobił mu wykład o niebezpieczeństwie związanym ze wskakiwaniem do pociągu w biegu.
  28 +
  29 +Wszedł do wagonu, w przejściu natknął się na konduktora-służbistę, który zrobił mu wykład o niebezpieczeństwie związanym ze wskakiwaniem do pociągu w biegu.
  30 +
  31 +
  32 +
  33 +
  34 +
  35 +Najbardziej alergogennymskładnikiem kosmetyków są środki zapachowe.
  36 +
  37 +Najbardziej alergogennym składnikiem kosmetyków są środki zapachowe.
  38 +
  39 +
  40 +
  41 +
  42 +
  43 +W oddzielnych grupach ćwiczą panie i panowie, później znów spotykają się i odbywają wspólnie zajęcia choreograficzno - taneczne.
  44 +
  45 +W oddzielnych grupach ćwiczą panie i panowie, później znów spotykają się i odbywają wspólnie zajęcia choreograficzno-taneczne.
  46 +
  47 +
  48 +
  49 +
  50 +
  51 +Dzięki jego zaangażowaniu w naszym mieście nadal funkcjonuje sekcja piłki nożnej na odpowiednim poziomie sportowym, promująca Jarosław na terenie Polski południowo - wschodniej.
  52 +
  53 +Dzięki jego zaangażowaniu w naszym mieście nadal funkcjonuje sekcja piłki nożnej na odpowiednim poziomie sportowym, promująca Jarosław na terenie Polski południowo-wschodniej.
  54 +
  55 +
  56 +
  57 +
  58 +
  59 +Nie było by może przez to głupich córek i skończył by się problem aborcji.
  60 +
  61 +Nie byłoby może przez to głupich córek i skończyłby się problem aborcji.
  62 +
  63 +
  64 +
  65 +
  66 +
  67 +Ja na miejscu Pana Giertycha wprowadził bym zakaz rodzenia głupim matkom.
  68 +
  69 +Ja na miejscu Pana Giertycha wprowadziłbym zakaz rodzenia głupim matkom.
  70 +
  71 +
  72 +
  73 +
  74 +
  75 +Witraże projektował Jerzy Skąpski, a wykonali w 1991r. Anna i Ireneusz Zarzyccy.
  76 +
  77 +Witraże projektował Jerzy Skąpski, a wykonali w 1991 r. Anna i Ireneusz Zarzyccy.
  78 +
  79 +
  80 +
  81 +
  82 +
  83 +Po raz kolejny Port Lotniczy Szczecin - Goleniów zanotował dwucyfrowy przyrost ilości odprawionych pasażerów.
  84 +
  85 +Po raz kolejny Port Lotniczy Szczecin-Goleniów zanotował dwucyfrowy przyrost ilości odprawionych pasażerów.
... ...
corpora/resources/id_not_found.txt 0 → 100644
  1 +NKJP_1M_SuperExpress/morph_527-p/morph_527.25-s
  2 +- Przez 40 lat płaciliśmy składki na służbę zdrowia, a teraz, kiedy jej na-prawdę potrzebujemy, wypinają się na nas.
  3 +
  4 +
  5 +NKJP_1M_1102000021/morph_5-p/morph_5.54-s
  6 +Jednak główną rolę w pracy nad brzmieniem płyty odegrały gitarzystka Wendy Melvoin i grająca na instrumentach klawiszowych Lisa Coleman.
  7 +
  8 +
  9 +NKJP_1M_2002000015/morph_5-p/morph_5.26-s
  10 +- Tu potrzebny jest ktoś młody, energicz–ny.
  11 +
  12 +
  13 +NKJP_1M_4scal-NIE/morph_188-p/morph_188.31-s
  14 +Zazwyczaj są to ich 6­9-letni synowie, których trzeba wyżywić.
  15 +
  16 +
  17 +NKJP_1M_4scal-NIE/morph_97-p/morph_97.38-s
  18 +Bronił eksmitowanych na bruk, naprawiając błędy przyjętej przez koalicję SLD­PSL ustawy, grzmiał na globalistów i świeżych krajowych, drapieżnych kapitalistów.
  19 +
  20 +
  21 +Id not found
  22 +Czemu ryba nic nie gada?
  23 +
  24 +
  25 +Id not found
  26 +Czemu mięsa nie je?
  27 +
  28 +
  29 +Id not found
  30 +Czemu kogut głośno pieje?
  31 +
  32 +
  33 +Id not found
  34 +Czemu wielki dziób ma wrona?
  35 +
  36 +
  37 +NKJP_1M_1202900130/morph_6-p/morph_6.56-s
  38 +Zachęcamy, aby również w czasie Wielkiego Tygodnia zrezygnować z oglądania telewizji.
  39 +
  40 +
  41 +NKJP_1M_2002000158/morph_1-p/morph_1.33-s
  42 +Na ekranie TV, na zatrzymanej stop–klatce Jurka Kilera idą napisy końcowe programu.
  43 +
  44 +
  45 +NKJP_1M_3102000008/morph_28-p/morph_28.8-s
  46 +Dochodzi 5–ta i zaległa cisza.
  47 +
  48 +
  49 +NKJP_1M_2002000063/morph_14-p/morph_14.55-s
  50 +Resa pośpieszyła do Ab–Rama, czekającego niecierpliwie w swoim namiocie.
  51 +
  52 +
  53 +NKJP_1M_2002000072/morph_5-p/morph_5.11-s
  54 +Późna wiosna była dla księdza proboszcza najbardziej znienawidzoną porą roku.
  55 +
  56 +
  57 +NKJP_1M_1302900005/morph_46-p/morph_46.36-s
  58 +Wczoraj w nocy zziębnięci złodzieje skradli mu kilkadziesiąt skórzanych ubrań o wartości ponad 65000 zł.
  59 +
  60 +
  61 +NKJP_1M_1303900004/morph_29-p/morph_29.77-s
  62 +W pół godziny po wylądowaniu samolot wystartował do Londynu, z pełną 185-osobową obsadą na pokładzie.
  63 +
  64 +
  65 +Id not found
  66 +- Musimy zebrać ludzi, którzy chcą dokończyć rozpoczęte w 1981 roku dzieło.
  67 +
  68 +
  69 +NKJP_1M_1303900001/morph_127-p/morph_127.44-s
  70 +Klub warszawski nie jest pierwszy.
  71 +
  72 +
  73 +NKJP_1M_1303900001/morph_511-p/morph_511.42-s
  74 +Według KPN budżet państwa traci na [import]cie paliw, a zasady koncesjonowania są niejasne.
  75 +
  76 +
  77 +NKJP_1M_1303900001/morph_511-p/morph_511.58-s
  78 +KPN chce zaproponować własne rozwiązania tego problemu i dlatego żąda od resortu danych o imporcie.
  79 +
  80 +
  81 +NKJP_1M_1303900001/morph_511-p/morph_511.66-s
  82 +We wtorek posłowie przyszli po te informacje.
  83 +
  84 +
  85 +NKJP_1M_1303900001/morph_60-p/morph_60.17-s
  86 +Ostatnio dał 18-latce na urodziny swoją dżinsową koszulę z niezmywalnym autografem.
  87 +
  88 +
  89 +NKJP_1M_1303900001/morph_60-p/morph_60.5-s
  90 +Minister wciąż ma wielbicieli.
  91 +
  92 +
  93 +NKJP_1M_1303900001/morph_209-p/morph_209.67-s
  94 +Koalicja jest zbyt liczna, by pozwolić sobie na komasację resortów, a jeszcze może dojść do jej rozszerzenia...
  95 +
  96 +
  97 +NKJP_1M_0302000000010/morph_11-p/morph_11.16-s
  98 +Dalsze zachowanie Widmara przypominało beznadziejny obłęd.
... ...