Grammalecte  Hex Artifact Content

Artifact a7e2785f6350329c1595621203d72554621c26526798f96bb07ed962fef15c25:


0000: 23 21 70 79 74 68 6f 6e 33 0a 0a 23 20 4c 65 78  #!python3..# Lex
0010: 69 63 6f 6e 20 62 75 69 6c 64 65 72 0a 0a 69 6d  icon builder..im
0020: 70 6f 72 74 20 61 72 67 70 61 72 73 65 0a 66 72  port argparse.fr
0030: 6f 6d 20 64 69 73 74 75 74 69 6c 73 20 69 6d 70  om distutils imp
0040: 6f 72 74 20 64 69 72 5f 75 74 69 6c 0a 0a 69 6d  ort dir_util..im
0050: 70 6f 72 74 20 67 72 61 6d 6d 61 6c 65 63 74 65  port grammalecte
0060: 2e 64 61 77 67 20 61 73 20 66 73 61 0a 66 72 6f  .dawg as fsa.fro
0070: 6d 20 67 72 61 6d 6d 61 6c 65 63 74 65 2e 69 62  m grammalecte.ib
0080: 64 61 77 67 20 69 6d 70 6f 72 74 20 49 42 44 41  dawg import IBDA
0090: 57 47 0a 0a 0a 64 65 66 20 62 75 69 6c 64 20 28  WG...def build (
00a0: 73 70 66 53 72 63 2c 20 73 4c 61 6e 67 4e 61 6d  spfSrc, sLangNam
00b0: 65 2c 20 73 44 69 63 4e 61 6d 65 2c 20 62 4a 53  e, sDicName, bJS
00c0: 4f 4e 3d 46 61 6c 73 65 2c 20 63 53 74 65 6d 6d  ON=False, cStemm
00d0: 69 6e 67 4d 65 74 68 6f 64 3d 22 53 22 2c 20 6e  ingMethod="S", n
00e0: 43 6f 6d 70 72 65 73 73 4d 65 74 68 6f 64 3d 31  CompressMethod=1
00f0: 29 3a 0a 20 20 20 20 22 74 72 61 6e 73 66 6f 72  ):.    "transfor
0100: 6d 20 61 20 74 65 78 74 20 6c 65 78 69 63 6f 6e  m a text lexicon
0110: 20 61 73 20 61 20 62 69 6e 61 72 79 20 69 6e 64   as a binary ind
0120: 65 78 61 62 6c 65 20 64 69 63 74 69 6f 6e 61 72  exable dictionar
0130: 79 22 0a 20 20 20 20 6f 44 41 57 47 20 3d 20 66  y".    oDAWG = f
0140: 73 61 2e 44 41 57 47 28 73 70 66 53 72 63 2c 20  sa.DAWG(spfSrc, 
0150: 73 4c 61 6e 67 4e 61 6d 65 2c 20 63 53 74 65 6d  sLangName, cStem
0160: 6d 69 6e 67 4d 65 74 68 6f 64 29 0a 20 20 20 20  mingMethod).    
0170: 64 69 72 5f 75 74 69 6c 2e 6d 6b 70 61 74 68 28  dir_util.mkpath(
0180: 22 67 72 61 6d 6d 61 6c 65 63 74 65 2f 5f 64 69  "grammalecte/_di
0190: 63 74 69 6f 6e 61 72 69 65 73 22 29 0a 20 20 20  ctionaries").   
01a0: 20 6f 44 41 57 47 2e 77 72 69 74 65 49 6e 66 6f   oDAWG.writeInfo
01b0: 28 22 67 72 61 6d 6d 61 6c 65 63 74 65 2f 5f 64  ("grammalecte/_d
01c0: 69 63 74 69 6f 6e 61 72 69 65 73 2f 22 20 2b 20  ictionaries/" + 
01d0: 73 44 69 63 4e 61 6d 65 20 2b 20 22 2e 69 6e 66  sDicName + ".inf
01e0: 6f 2e 74 78 74 22 29 0a 20 20 20 20 6f 44 41 57  o.txt").    oDAW
01f0: 47 2e 63 72 65 61 74 65 42 69 6e 61 72 79 28 22  G.createBinary("
0200: 67 72 61 6d 6d 61 6c 65 63 74 65 2f 5f 64 69 63  grammalecte/_dic
0210: 74 69 6f 6e 61 72 69 65 73 2f 22 20 2b 20 73 44  tionaries/" + sD
0220: 69 63 4e 61 6d 65 20 2b 20 22 2e 62 64 69 63 22  icName + ".bdic"
0230: 2c 20 69 6e 74 28 6e 43 6f 6d 70 72 65 73 73 4d  , int(nCompressM
0240: 65 74 68 6f 64 29 29 0a 20 20 20 20 69 66 20 62  ethod)).    if b
0250: 4a 53 4f 4e 3a 0a 20 20 20 20 20 20 20 20 64 69  JSON:.        di
0260: 72 5f 75 74 69 6c 2e 6d 6b 70 61 74 68 28 22 67  r_util.mkpath("g
0270: 72 61 6d 6d 61 6c 65 63 74 65 2d 6a 73 2f 5f 64  rammalecte-js/_d
0280: 69 63 74 69 6f 6e 61 72 69 65 73 22 29 0a 20 20  ictionaries").  
0290: 20 20 20 20 20 20 6f 44 69 63 20 3d 20 49 42 44        oDic = IBD
02a0: 41 57 47 28 73 44 69 63 4e 61 6d 65 20 2b 20 22  AWG(sDicName + "
02b0: 2e 62 64 69 63 22 29 0a 20 20 20 20 20 20 20 20  .bdic").        
02c0: 6f 44 69 63 2e 77 72 69 74 65 41 73 4a 53 4f 62  oDic.writeAsJSOb
02d0: 6a 65 63 74 28 22 67 72 61 6d 6d 61 6c 65 63 74  ject("grammalect
02e0: 65 2d 6a 73 2f 5f 64 69 63 74 69 6f 6e 61 72 69  e-js/_dictionari
02f0: 65 73 2f 22 20 2b 20 73 44 69 63 4e 61 6d 65 20  es/" + sDicName 
0300: 2b 20 22 2e 6a 73 6f 6e 22 29 0a 0a 0a 64 65 66  + ".json")...def
0310: 20 6d 61 69 6e 20 28 29 3a 0a 20 20 20 20 78 50   main ():.    xP
0320: 61 72 73 65 72 20 3d 20 61 72 67 70 61 72 73 65  arser = argparse
0330: 2e 41 72 67 75 6d 65 6e 74 50 61 72 73 65 72 28  .ArgumentParser(
0340: 29 0a 20 20 20 20 78 50 61 72 73 65 72 2e 61 64  ).    xParser.ad
0350: 64 5f 61 72 67 75 6d 65 6e 74 28 22 73 72 63 5f  d_argument("src_
0360: 6c 65 78 69 63 6f 6e 22 2c 20 74 79 70 65 3d 73  lexicon", type=s
0370: 74 72 2c 20 68 65 6c 70 3d 22 70 61 74 68 20 61  tr, help="path a
0380: 6e 64 20 66 69 6c 65 20 6e 61 6d 65 20 6f 66 20  nd file name of 
0390: 74 68 65 20 73 6f 75 72 63 65 20 6c 65 78 69 63  the source lexic
03a0: 6f 6e 22 29 0a 20 20 20 20 78 50 61 72 73 65 72  on").    xParser
03b0: 2e 61 64 64 5f 61 72 67 75 6d 65 6e 74 28 22 6c  .add_argument("l
03c0: 61 6e 67 5f 6e 61 6d 65 22 2c 20 74 79 70 65 3d  ang_name", type=
03d0: 73 74 72 2c 20 68 65 6c 70 3d 22 6c 61 6e 67 75  str, help="langu
03e0: 61 67 65 20 6e 61 6d 65 22 29 0a 20 20 20 20 78  age name").    x
03f0: 50 61 72 73 65 72 2e 61 64 64 5f 61 72 67 75 6d  Parser.add_argum
0400: 65 6e 74 28 22 64 69 63 5f 6e 61 6d 65 22 2c 20  ent("dic_name", 
0410: 74 79 70 65 3d 73 74 72 2c 20 68 65 6c 70 3d 22  type=str, help="
0420: 64 69 63 74 69 6f 6e 61 72 79 20 66 69 6c 65 20  dictionary file 
0430: 6e 61 6d 65 20 28 77 69 74 68 6f 75 74 20 65 78  name (without ex
0440: 74 65 6e 73 69 6f 6e 29 22 29 0a 20 20 20 20 78  tension)").    x
0450: 50 61 72 73 65 72 2e 61 64 64 5f 61 72 67 75 6d  Parser.add_argum
0460: 65 6e 74 28 22 2d 6a 73 22 2c 20 22 2d 2d 6a 73  ent("-js", "--js
0470: 6f 6e 22 2c 20 68 65 6c 70 3d 22 42 75 69 6c 64  on", help="Build
0480: 20 64 69 63 74 69 6f 6e 61 72 79 20 69 6e 20 4a   dictionary in J
0490: 53 4f 4e 22 2c 20 61 63 74 69 6f 6e 3d 22 73 74  SON", action="st
04a0: 6f 72 65 5f 74 72 75 65 22 29 0a 20 20 20 20 78  ore_true").    x
04b0: 50 61 72 73 65 72 2e 61 64 64 5f 61 72 67 75 6d  Parser.add_argum
04c0: 65 6e 74 28 22 2d 73 22 2c 20 22 2d 2d 73 74 65  ent("-s", "--ste
04d0: 6d 6d 69 6e 67 22 2c 20 68 65 6c 70 3d 22 73 74  mming", help="st
04e0: 65 6d 6d 69 6e 67 20 6d 65 74 68 6f 64 3a 20 53  emming method: S
04f0: 3d 73 75 66 66 69 78 65 73 2c 20 41 3d 61 66 66  =suffixes, A=aff
0500: 69 78 65 73 2c 20 4e 3d 6e 6f 20 73 74 65 6d 6d  ixes, N=no stemm
0510: 69 6e 67 22 2c 20 74 79 70 65 3d 73 74 72 2c 20  ing", type=str, 
0520: 63 68 6f 69 63 65 73 3d 5b 22 53 22 2c 20 22 41  choices=["S", "A
0530: 22 2c 20 22 4e 22 5d 2c 20 64 65 66 61 75 6c 74  ", "N"], default
0540: 3d 22 53 22 29 0a 20 20 20 20 78 50 61 72 73 65  ="S").    xParse
0550: 72 2e 61 64 64 5f 61 72 67 75 6d 65 6e 74 28 22  r.add_argument("
0560: 2d 63 22 2c 20 22 2d 2d 63 6f 6d 70 72 65 73 73  -c", "--compress
0570: 22 2c 20 68 65 6c 70 3d 22 63 6f 6d 70 72 65 73  ", help="compres
0580: 73 69 6f 6e 20 6d 65 74 68 6f 64 3a 20 31 2c 20  sion method: 1, 
0590: 32 20 28 62 65 74 61 29 2c 20 33 2c 20 28 62 65  2 (beta), 3, (be
05a0: 74 61 29 22 2c 20 74 79 70 65 3d 69 6e 74 2c 20  ta)", type=int, 
05b0: 63 68 6f 69 63 65 73 3d 5b 31 2c 20 32 2c 20 33  choices=[1, 2, 3
05c0: 5d 2c 20 64 65 66 61 75 6c 74 3d 31 29 0a 20 20  ], default=1).  
05d0: 20 20 78 41 72 67 73 20 3d 20 78 50 61 72 73 65    xArgs = xParse
05e0: 72 2e 70 61 72 73 65 5f 61 72 67 73 28 29 0a 20  r.parse_args(). 
05f0: 20 20 20 62 75 69 6c 64 28 78 41 72 67 73 2e 73     build(xArgs.s
0600: 72 63 5f 6c 65 78 69 63 6f 6e 2c 20 78 41 72 67  rc_lexicon, xArg
0610: 73 2e 6c 61 6e 67 5f 6e 61 6d 65 2c 20 78 41 72  s.lang_name, xAr
0620: 67 73 2e 64 69 63 5f 6e 61 6d 65 2c 20 78 41 72  gs.dic_name, xAr
0630: 67 73 2e 6a 73 6f 6e 29 0a 20 20 20 20 0a 0a 69  gs.json).    ..i
0640: 66 20 5f 5f 6e 61 6d 65 5f 5f 20 3d 3d 20 27 5f  f __name__ == '_
0650: 5f 6d 61 69 6e 5f 5f 27 3a 0a 20 20 20 20 6d 61  _main__':.    ma
0660: 69 6e 28 29 0a                                   in().