Grammalecte  Hex Artifact Content

Artifact 510a35b7df0a26bd6cbf6a13f0fccfeff2904fc8c6afab8d901d060f5d6d3d98:


0000: 23 21 70 79 74 68 6f 6e 33 0a 0a 69 6d 70 6f 72  #!python3..impor
0010: 74 20 6f 73 0a 69 6d 70 6f 72 74 20 73 79 73 0a  t os.import sys.
0020: 69 6d 70 6f 72 74 20 72 65 0a 0a 69 6d 70 6f 72  import re..impor
0030: 74 20 67 72 61 6d 6d 61 6c 65 63 74 65 2e 69 62  t grammalecte.ib
0040: 64 61 77 67 20 61 73 20 69 62 64 61 77 67 0a 0a  dawg as ibdawg..
0050: 6f 44 69 63 74 20 3d 20 69 62 64 61 77 67 2e 49  oDict = ibdawg.I
0060: 42 44 41 57 47 28 22 46 72 65 6e 63 68 2e 62 64  BDAWG("French.bd
0070: 69 63 22 29 0a 0a 0a 64 65 66 20 72 65 61 64 46  ic")...def readF
0080: 69 6c 65 20 28 73 70 66 29 3a 0a 20 20 20 20 69  ile (spf):.    i
0090: 66 20 6f 73 2e 70 61 74 68 2e 69 73 66 69 6c 65  f os.path.isfile
00a0: 28 73 70 66 29 3a 0a 20 20 20 20 20 20 20 20 77  (spf):.        w
00b0: 69 74 68 20 6f 70 65 6e 28 73 70 66 2c 20 22 72  ith open(spf, "r
00c0: 22 2c 20 65 6e 63 6f 64 69 6e 67 3d 22 75 74 66  ", encoding="utf
00d0: 2d 38 22 29 20 61 73 20 68 53 72 63 3a 0a 20 20  -8") as hSrc:.  
00e0: 20 20 20 20 20 20 20 20 20 20 66 6f 72 20 73 4c            for sL
00f0: 69 6e 65 20 69 6e 20 68 53 72 63 3a 0a 20 20 20  ine in hSrc:.   
0100: 20 20 20 20 20 20 20 20 20 20 20 20 20 79 69 65               yie
0110: 6c 64 20 73 4c 69 6e 65 0a 20 20 20 20 65 6c 73  ld sLine.    els
0120: 65 3a 0a 20 20 20 20 20 20 20 20 70 72 69 6e 74  e:.        print
0130: 28 22 23 20 45 72 72 6f 72 3a 20 66 69 6c 65 20  ("# Error: file 
0140: 6e 6f 74 20 66 6f 75 6e 64 2e 22 29 0a 0a 0a 64  not found.")...d
0150: 65 66 20 63 72 65 61 74 65 46 69 6c 65 20 28 73  ef createFile (s
0160: 70 66 53 72 63 2c 20 73 70 66 44 73 74 29 3a 0a  pfSrc, spfDst):.
0170: 20 20 20 20 77 69 74 68 20 6f 70 65 6e 28 73 70      with open(sp
0180: 66 44 73 74 2c 20 22 77 22 2c 20 65 6e 63 6f 64  fDst, "w", encod
0190: 69 6e 67 3d 22 75 74 66 2d 38 22 29 20 61 73 20  ing="utf-8") as 
01a0: 68 44 73 74 3a 0a 20 20 20 20 20 20 20 20 66 6f  hDst:.        fo
01b0: 72 20 73 4c 69 6e 65 20 69 6e 20 72 65 61 64 46  r sLine in readF
01c0: 69 6c 65 28 73 70 66 53 72 63 29 3a 0a 20 20 20  ile(spfSrc):.   
01d0: 20 20 20 20 20 20 20 20 20 73 4c 69 6e 65 20 3d           sLine =
01e0: 20 73 4c 69 6e 65 2e 73 74 72 69 70 28 29 0a 20   sLine.strip(). 
01f0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 73 4c             if sL
0200: 69 6e 65 3a 0a 20 20 20 20 20 20 20 20 20 20 20  ine:.           
0210: 20 20 20 20 20 66 6f 72 20 73 57 6f 72 64 20 69       for sWord i
0220: 6e 20 73 4c 69 6e 65 2e 73 70 6c 69 74 28 29 3a  n sLine.split():
0230: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
0240: 20 20 20 20 20 69 66 20 6e 6f 74 20 6f 44 69 63       if not oDic
0250: 74 2e 69 73 56 61 6c 69 64 28 73 57 6f 72 64 29  t.isValid(sWord)
0260: 3a 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  : .             
0270: 20 20 20 20 20 20 20 20 20 20 20 68 44 73 74 2e             hDst.
0280: 77 72 69 74 65 28 73 57 6f 72 64 2b 22 5c 6e 22  write(sWord+"\n"
0290: 29 0a 0a 0a 64 65 66 20 63 72 65 61 74 65 4c 65  )...def createLe
02a0: 78 53 74 61 74 46 69 6c 65 20 28 73 70 66 2c 20  xStatFile (spf, 
02b0: 64 53 74 61 74 29 3a 0a 20 20 20 20 64 57 6f 72  dStat):.    dWor
02c0: 64 20 3d 20 7b 7d 0a 20 20 20 20 66 6f 72 20 69  d = {}.    for i
02d0: 2c 20 73 4c 69 6e 65 20 69 6e 20 65 6e 75 6d 65  , sLine in enume
02e0: 72 61 74 65 28 72 65 61 64 46 69 6c 65 28 73 70  rate(readFile(sp
02f0: 66 29 29 3a 0a 20 20 20 20 20 20 20 20 69 66 20  f)):.        if 
0300: 6e 6f 74 20 73 4c 69 6e 65 2e 73 74 61 72 74 73  not sLine.starts
0310: 77 69 74 68 28 22 23 22 29 3a 0a 20 20 20 20 20  with("#"):.     
0320: 20 20 20 20 20 20 20 73 57 6f 72 64 20 3d 20 73         sWord = s
0330: 4c 69 6e 65 2e 73 74 72 69 70 28 29 0a 20 20 20  Line.strip().   
0340: 20 20 20 20 20 20 20 20 20 69 66 20 73 57 6f 72           if sWor
0350: 64 20 6e 6f 74 20 69 6e 20 64 57 6f 72 64 3a 0a  d not in dWord:.
0360: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0370: 64 57 6f 72 64 5b 73 57 6f 72 64 5d 20 3d 20 64  dWord[sWord] = d
0380: 53 74 61 74 2e 67 65 74 28 73 57 6f 72 64 2c 20  Stat.get(sWord, 
0390: 30 29 0a 20 20 20 20 20 20 20 20 70 72 69 6e 74  0).        print
03a0: 28 69 2c 20 65 6e 64 3d 22 5c 72 22 29 0a 0a 20  (i, end="\r").. 
03b0: 20 20 20 77 69 74 68 20 6f 70 65 6e 28 73 70 66     with open(spf
03c0: 2b 22 2e 72 65 73 2e 74 78 74 22 2c 20 22 77 22  +".res.txt", "w"
03d0: 2c 20 65 6e 63 6f 64 69 6e 67 3d 22 75 74 66 2d  , encoding="utf-
03e0: 38 22 29 20 61 73 20 68 44 73 74 3a 0a 20 20 20  8") as hDst:.   
03f0: 20 20 20 20 20 66 6f 72 20 73 57 6f 72 64 2c 20       for sWord, 
0400: 6e 56 61 6c 20 69 6e 20 73 6f 72 74 65 64 28 64  nVal in sorted(d
0410: 57 6f 72 64 2e 69 74 65 6d 73 28 29 2c 20 6b 65  Word.items(), ke
0420: 79 3d 6c 61 6d 62 64 61 20 78 3a 20 28 78 5b 31  y=lambda x: (x[1
0430: 5d 2c 20 78 5b 30 5d 29 2c 20 72 65 76 65 72 73  ], x[0]), revers
0440: 65 3d 54 72 75 65 29 3a 0a 20 20 20 20 20 20 20  e=True):.       
0450: 20 20 20 20 20 69 66 20 6e 6f 74 20 6f 44 69 63       if not oDic
0460: 74 2e 69 73 56 61 6c 69 64 28 73 57 6f 72 64 29  t.isValid(sWord)
0470: 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  :.              
0480: 20 20 68 44 73 74 2e 77 72 69 74 65 28 73 57 6f    hDst.write(sWo
0490: 72 64 20 2b 20 22 20 22 20 2b 20 73 74 72 28 6e  rd + " " + str(n
04a0: 56 61 6c 29 20 2b 20 22 5c 6e 22 29 0a 0a 0a 64  Val) + "\n")...d
04b0: 65 66 20 72 65 61 64 53 74 61 74 46 69 6c 65 20  ef readStatFile 
04c0: 28 73 70 66 2c 20 64 53 74 61 74 29 3a 0a 20 20  (spf, dStat):.  
04d0: 20 20 70 72 69 6e 74 28 22 72 65 61 64 20 73 74    print("read st
04e0: 61 74 73 3a 20 22 20 2b 20 73 70 66 29 0a 20 20  ats: " + spf).  
04f0: 20 20 66 6f 72 20 73 4c 69 6e 65 20 69 6e 20 72    for sLine in r
0500: 65 61 64 46 69 6c 65 28 73 70 66 29 3a 0a 20 20  eadFile(spf):.  
0510: 20 20 20 20 20 20 69 66 20 6e 6f 74 20 73 4c 69        if not sLi
0520: 6e 65 2e 73 74 61 72 74 73 77 69 74 68 28 22 23  ne.startswith("#
0530: 22 29 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20  "):.            
0540: 73 57 6f 72 64 2c 20 73 43 6f 75 6e 74 20 3d 20  sWord, sCount = 
0550: 73 4c 69 6e 65 2e 73 70 6c 69 74 28 29 0a 20 20  sLine.split().  
0560: 20 20 20 20 20 20 20 20 20 20 64 53 74 61 74 5b            dStat[
0570: 73 57 6f 72 64 5d 20 3d 20 64 53 74 61 74 2e 67  sWord] = dStat.g
0580: 65 74 28 73 57 6f 72 64 2c 20 30 29 20 2b 20 69  et(sWord, 0) + i
0590: 6e 74 28 73 43 6f 75 6e 74 29 0a 20 20 20 20 72  nt(sCount).    r
05a0: 65 74 75 72 6e 20 64 53 74 61 74 0a 0a 0a 64 65  eturn dStat...de
05b0: 66 20 6d 61 69 6e 20 28 29 3a 0a 20 20 20 20 64  f main ():.    d
05c0: 53 74 61 74 20 3d 20 7b 7d 0a 20 20 20 20 72 65  Stat = {}.    re
05d0: 61 64 53 74 61 74 46 69 6c 65 28 22 73 74 61 74  adStatFile("stat
05e0: 73 31 2e 74 78 74 22 2c 20 64 53 74 61 74 29 0a  s1.txt", dStat).
05f0: 20 20 20 20 72 65 61 64 53 74 61 74 46 69 6c 65      readStatFile
0600: 28 22 73 74 61 74 73 32 2e 74 78 74 22 2c 20 64  ("stats2.txt", d
0610: 53 74 61 74 29 0a 20 20 20 20 72 65 61 64 53 74  Stat).    readSt
0620: 61 74 46 69 6c 65 28 22 73 74 61 74 73 33 2e 74  atFile("stats3.t
0630: 78 74 22 2c 20 64 53 74 61 74 29 0a 20 20 20 20  xt", dStat).    
0640: 63 72 65 61 74 65 4c 65 78 53 74 61 74 46 69 6c  createLexStatFil
0650: 65 28 22 70 72 6f 70 6f 73 69 74 69 6f 6e 73 2e  e("propositions.
0660: 74 78 74 22 2c 20 64 53 74 61 74 29 0a 20 20 20  txt", dStat).   
0670: 20 0a 0a 69 66 20 5f 5f 6e 61 6d 65 5f 5f 20 3d   ..if __name__ =
0680: 3d 20 27 5f 5f 6d 61 69 6e 5f 5f 27 20 3a 0a 20  = '__main__' :. 
0690: 20 20 20 6d 61 69 6e 28 29 0a                       main().