Blame view

tokenizer/ENIAMtokenizerTypes.ml 3.97 KB
Wojciech Jaworski authored
1
2
3
4
5
6
7
8
9
10
11
12
13
(*
 *  ENIAMtokenizer, a tokenizer for Polish
 *  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
Wojciech Jaworski authored
14
 *  GNU Lesser General Public License for more details.
Wojciech Jaworski authored
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
 *
 *  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 Xstd

(* Długość pojedynczego znaku w tekście *)
let factor = 100

type token =
    SmallLetter of string 		(* orth *)
  | CapLetter of string * string	(* orth * lowercase *)
  | AllSmall of string			(* orth *)
  | AllCap of string * string * string	(* orth * lowercase * all lowercase *)
  | FirstCap of string * string * string * string	(* orth * all lowercase  * first letter uppercase  * first letter lowercase *)
  | SomeCap of string			(* orth *)
  | RomanDig of string * string		(* value * cat *)
  | Interp of string			(* orth *)
  | Symbol of string			(* orth *)
  | Dig of string * string		(* value * cat *)
  | Other of string			(* orth *)
  | Lemma of string * string * string list list list	(* lemma * cat * interp *)
  | Proper of string * string * string list list list * string list	(* lemma * cat * interp * senses *)
(*   | Sense of string * string * string list list list * (string * string * string list) list	(* lemma * cat * interp * senses *) *)
  | Compound of string * token list	(* sense * components *)
Wojciech Jaworski authored
41
  | Tokens of string * int list (*cat * token id list *)
Wojciech Jaworski authored
42
Wojciech Jaworski authored
43
type attr =
Wojciech Jaworski authored
44
    CS | MaybeCS | ReqValLemm | MWE | LemmNotVal | TokNotFound | NotValProper | LemmLowercase | Roman | Capitalics
Wojciech Jaworski authored
45
46
  | SentBeg | SentEnd | SentBegEnd
  | BrevLemma of string
Wojciech Jaworski authored
47
  | Disamb of string * string * string list list
Wojciech Jaworski authored
48
Wojciech Jaworski authored
49
50
(* Tekst reprezentuję jako zbiór obiektów typu token_record zawierających
   informacje o poszczególnych tokenach *)
Wojciech Jaworski authored
51
type token_env = {
Wojciech Jaworski authored
52
53
54
55
56
57
  orth: string;		(* sekwencja znaków pierwotnego tekstu składająca się na token *)
  corr_orth: string; (* sekwencja znaków pierwotnego tekstu składająca się na token z poprawionymi błędami *)
  beg: int; 		(* pozycja początkowa tokenu względem początku akapitu *)
  len: int; 		(* długość tokenu *)
  next: int; 		(* pozycja początkowa następnego tokenu względem początku akapitu *)
  token: token; 	(* treść tokenu *)
Wojciech Jaworski authored
58
  attrs: attr list;	(* dodatkowe atrybuty *)
Wojciech Jaworski authored
59
  weight: float;
Wojciech Jaworski authored
60
61
62
63
64
  }

(* Tokeny umieszczone są w strukturze danych umożliwiającej efektywne wyszukiwanie ich sekwencji,
   struktura danych sama z siebie nie wnosi informacji *)
type tokens =
Wojciech Jaworski authored
65
  | Token of token_env
Wojciech Jaworski authored
66
67
68
  | Variant of tokens list
  | Seq of tokens list
Wojciech Jaworski authored
69
type pat = L | CL | SL | (*SL2 |*) D of string | C of string | S of string | RD of string | O of string | I of string
Wojciech Jaworski authored
70
Wojciech Jaworski authored
71
let empty_token_env = {
Wojciech Jaworski authored
72
  orth="";corr_orth="";beg=0;len=0;next=0; token=Symbol ""; attrs=[]; weight=0.}
Wojciech Jaworski authored
73
Wojciech Jaworski authored
74
75
let resource_path =
  try Sys.getenv "ENIAM_RESOURCE_PATH"
Wojciech Jaworski authored
76
77
78
  with Not_found ->
    if Sys.file_exists "/usr/share/eniam" then "/usr/share/eniam" else
    if Sys.file_exists "/usr/local/share/eniam" then "/usr/local/share/eniam" else
Wojciech Jaworski authored
79
    if Sys.file_exists "resources" then "resources" else
Wojciech Jaworski authored
80
    failwith "resource directory does not exists"
Wojciech Jaworski authored
81
Wojciech Jaworski authored
82
let mte_filename = resource_path ^ "/tokenizer/mte_20151215.tab"
Wojciech Jaworski authored
83
let mte_filename2 = resource_path ^ "/tokenizer/mte.tab"
Wojciech Jaworski authored
84
85
86
87
88
89
90
91
92
93

module OrderedTokenEnv = struct

  type t = token_env

  let compare = compare

end

module TokenEnvSet = Xset.Make(OrderedTokenEnv)
Wojciech Jaworski authored
94
95
96
97
98
99
100
101
102
103

module OrderedAttr = struct

  type t = attr

  let compare = compare

end

module AttrQMap = Xmap.MakeQ(OrderedAttr)