Grammalecte  Hex Artifact Content

Artifact e1ddf0b91d58575e95babbb29cb6f2b76b5d272aec6916270c2015d18e5363e0:


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 0a 64 65 66 20  import re...def 
0030: 72 65 61 64 46 69 6c 65 20 28 73 70 66 29 3a 0a  readFile (spf):.
0040: 20 20 20 20 69 66 20 6f 73 2e 70 61 74 68 2e 69      if os.path.i
0050: 73 66 69 6c 65 28 73 70 66 29 3a 0a 20 20 20 20  sfile(spf):.    
0060: 20 20 20 20 77 69 74 68 20 6f 70 65 6e 28 73 70      with open(sp
0070: 66 2c 20 22 72 22 2c 20 65 6e 63 6f 64 69 6e 67  f, "r", encoding
0080: 3d 22 75 74 66 2d 38 22 29 20 61 73 20 68 53 72  ="utf-8") as hSr
0090: 63 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20 66  c:.            f
00a0: 6f 72 20 73 4c 69 6e 65 20 69 6e 20 68 53 72 63  or sLine in hSrc
00b0: 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  :.              
00c0: 20 20 79 69 65 6c 64 20 73 4c 69 6e 65 0a 20 20    yield sLine.  
00d0: 20 20 65 6c 73 65 3a 0a 20 20 20 20 20 20 20 20    else:.        
00e0: 70 72 69 6e 74 28 22 23 20 45 72 72 6f 72 3a 20  print("# Error: 
00f0: 66 69 6c 65 20 6e 6f 74 20 66 6f 75 6e 64 2e 22  file not found."
0100: 29 0a 0a 0a 64 65 66 20 63 6f 75 6e 74 41 6e 64  )...def countAnd
0110: 57 72 69 74 65 46 69 6c 65 20 28 73 70 66 29 3a  WriteFile (spf):
0120: 0a 20 20 20 20 70 72 69 6e 74 28 73 70 66 29 0a  .    print(spf).
0130: 20 20 20 20 70 72 69 6e 74 28 22 3e 20 63 6f 75      print("> cou
0140: 6e 74 69 6e 67 2e 2e 2e 22 29 0a 20 20 20 20 64  nting...").    d
0150: 20 3d 20 7b 7d 0a 20 20 20 20 69 20 3d 20 30 0a   = {}.    i = 0.
0160: 20 20 20 20 66 6f 72 20 73 4c 69 6e 65 20 69 6e      for sLine in
0170: 20 72 65 61 64 46 69 6c 65 28 73 70 66 29 3a 0a   readFile(spf):.
0180: 20 20 20 20 20 20 20 20 73 54 6f 6b 65 6e 2c 20          sToken, 
0190: 73 59 65 61 72 2c 20 73 4f 63 63 75 72 2c 20 73  sYear, sOccur, s
01a0: 42 6f 6f 6b 20 3d 20 73 4c 69 6e 65 2e 73 74 72  Book = sLine.str
01b0: 69 70 28 29 2e 73 70 6c 69 74 28 22 5c 74 22 29  ip().split("\t")
01c0: 0a 20 20 20 20 20 20 20 20 69 66 20 73 54 6f 6b  .        if sTok
01d0: 65 6e 20 69 6e 20 64 3a 0a 20 20 20 20 20 20 20  en in d:.       
01e0: 20 20 20 20 20 64 5b 73 54 6f 6b 65 6e 5d 20 3d       d[sToken] =
01f0: 20 28 64 5b 73 54 6f 6b 65 6e 5d 5b 30 5d 2b 69   (d[sToken][0]+i
0200: 6e 74 28 73 4f 63 63 75 72 29 2c 20 64 5b 73 54  nt(sOccur), d[sT
0210: 6f 6b 65 6e 5d 5b 31 5d 2b 69 6e 74 28 73 42 6f  oken][1]+int(sBo
0220: 6f 6b 29 29 0a 20 20 20 20 20 20 20 20 65 6c 73  ok)).        els
0230: 65 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20 64  e:.            d
0240: 5b 73 54 6f 6b 65 6e 5d 20 3d 20 28 69 6e 74 28  [sToken] = (int(
0250: 73 4f 63 63 75 72 29 2c 20 69 6e 74 28 73 42 6f  sOccur), int(sBo
0260: 6f 6b 29 29 0a 20 20 20 20 20 20 20 20 20 20 20  ok)).           
0270: 20 69 20 2b 3d 20 31 0a 20 20 20 20 20 20 20 20   i += 1.        
0280: 20 20 20 20 70 72 69 6e 74 28 22 3e 20 25 64 5c      print("> %d\
0290: 72 22 20 25 20 69 2c 20 65 6e 64 3d 22 22 29 0a  r" % i, end="").
02a0: 20 20 20 20 0a 20 20 20 20 77 69 74 68 20 6f 70      .    with op
02b0: 65 6e 28 73 70 66 2b 22 2e 73 75 6d 2e 74 78 74  en(spf+".sum.txt
02c0: 22 2c 20 22 77 22 2c 20 65 6e 63 6f 64 69 6e 67  ", "w", encoding
02d0: 3d 22 75 74 66 2d 38 22 2c 20 6e 65 77 6c 69 6e  ="utf-8", newlin
02e0: 65 3d 22 5c 6e 22 29 20 61 73 20 68 44 73 74 3a  e="\n") as hDst:
02f0: 0a 20 20 20 20 20 20 20 20 70 72 69 6e 74 28 22  .        print("
0300: 3e 20 77 72 69 74 69 6e 67 2e 2e 2e 22 29 0a 20  > writing..."). 
0310: 20 20 20 20 20 20 20 68 44 73 74 2e 77 72 69 74         hDst.writ
0320: 65 28 22 23 54 6f 6b 65 6e 5c 74 73 4f 63 63 75  e("#Token\tsOccu
0330: 72 5c 74 6e 42 6f 6f 6b 5c 6e 22 29 0a 20 20 20  r\tnBook\n").   
0340: 20 20 20 20 20 66 6f 72 20 73 54 6f 6b 65 6e 2c       for sToken,
0350: 20 74 56 61 6c 20 69 6e 20 64 2e 69 74 65 6d 73   tVal in d.items
0360: 28 29 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20  ():.            
0370: 68 44 73 74 2e 77 72 69 74 65 28 73 54 6f 6b 65  hDst.write(sToke
0380: 6e 20 2b 20 22 5c 74 22 20 2b 20 73 74 72 28 74  n + "\t" + str(t
0390: 56 61 6c 5b 30 5d 29 20 2b 20 22 5c 74 22 20 2b  Val[0]) + "\t" +
03a0: 20 73 74 72 28 74 56 61 6c 5b 31 5d 29 20 2b 20   str(tVal[1]) + 
03b0: 22 5c 6e 22 29 0a 0a 0a 64 65 66 20 6d 65 72 67  "\n")...def merg
03c0: 65 46 69 6c 65 20 28 73 70 66 2c 20 68 44 73 74  eFile (spf, hDst
03d0: 29 3a 0a 20 20 20 20 70 72 69 6e 74 28 22 6d 65  ):.    print("me
03e0: 72 67 65 3a 20 22 20 2b 20 73 70 66 29 0a 20 20  rge: " + spf).  
03f0: 20 20 64 20 3d 20 7b 7d 0a 20 20 20 20 66 6f 72    d = {}.    for
0400: 20 73 4c 69 6e 65 20 69 6e 20 72 65 61 64 46 69   sLine in readFi
0410: 6c 65 28 73 70 66 29 3a 0a 20 20 20 20 20 20 20  le(spf):.       
0420: 20 69 66 20 73 4c 69 6e 65 2e 73 74 61 72 74 73   if sLine.starts
0430: 77 69 74 68 28 22 23 22 29 3a 0a 20 20 20 20 20  with("#"):.     
0440: 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 0a         continue.
0450: 20 20 20 20 20 20 20 20 73 54 6f 6b 65 6e 2c 20          sToken, 
0460: 73 4f 63 63 75 72 2c 20 73 42 6f 6f 6b 20 3d 20  sOccur, sBook = 
0470: 73 4c 69 6e 65 2e 73 74 72 69 70 28 29 2e 73 70  sLine.strip().sp
0480: 6c 69 74 28 29 0a 20 20 20 20 20 20 20 20 69 66  lit().        if
0490: 20 22 5f 22 20 69 6e 20 73 54 6f 6b 65 6e 3a 0a   "_" in sToken:.
04a0: 20 20 20 20 20 20 20 20 20 20 20 20 73 54 6f 6b              sTok
04b0: 65 6e 20 3d 20 73 54 6f 6b 65 6e 5b 3a 73 54 6f  en = sToken[:sTo
04c0: 6b 65 6e 2e 66 69 6e 64 28 22 5f 22 29 5d 0a 20  ken.find("_")]. 
04d0: 20 20 20 20 20 20 20 73 54 6f 6b 65 6e 20 3d 20         sToken = 
04e0: 73 54 6f 6b 65 6e 2e 72 73 74 72 69 70 28 22 2e  sToken.rstrip(".
04f0: 22 29 0a 20 20 20 20 20 20 20 20 69 66 20 73 54  ").        if sT
0500: 6f 6b 65 6e 2e 73 74 61 72 74 73 77 69 74 68 28  oken.startswith(
0510: 28 22 6c 27 22 2c 20 22 64 27 22 2c 20 22 73 27  ("l'", "d'", "s'
0520: 22 2c 20 22 6d 27 22 2c 20 22 74 27 22 2c 20 22  ", "m'", "t'", "
0530: 6e 27 22 2c 20 22 6a 27 22 2c 20 22 63 27 22 2c  n'", "j'", "c'",
0540: 20 22 c3 a7 27 22 29 29 3a 0a 20 20 20 20 20 20   "..'")):.      
0550: 20 20 20 20 20 20 73 54 6f 6b 65 6e 20 3d 20 73        sToken = s
0560: 54 6f 6b 65 6e 5b 32 3a 5d 0a 20 20 20 20 20 20  Token[2:].      
0570: 20 20 65 6c 69 66 20 73 54 6f 6b 65 6e 2e 73 74    elif sToken.st
0580: 61 72 74 73 77 69 74 68 28 22 71 75 27 22 29 3a  artswith("qu'"):
0590: 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 54 6f  .            sTo
05a0: 6b 65 6e 20 3d 20 73 54 6f 6b 65 6e 5b 33 3a 5d  ken = sToken[3:]
05b0: 0a 20 20 20 20 20 20 20 20 69 66 20 6e 6f 74 20  .        if not 
05c0: 73 54 6f 6b 65 6e 3a 0a 20 20 20 20 20 20 20 20  sToken:.        
05d0: 20 20 20 20 63 6f 6e 74 69 6e 75 65 0a 20 20 20      continue.   
05e0: 20 20 20 20 20 69 66 20 73 54 6f 6b 65 6e 20 6e       if sToken n
05f0: 6f 74 20 69 6e 20 64 3a 0a 20 20 20 20 20 20 20  ot in d:.       
0600: 20 20 20 20 20 64 5b 73 54 6f 6b 65 6e 5d 20 3d       d[sToken] =
0610: 20 69 6e 74 28 73 4f 63 63 75 72 29 0a 20 20 20   int(sOccur).   
0620: 20 20 20 20 20 65 6c 73 65 3a 0a 20 20 20 20 20       else:.     
0630: 20 20 20 20 20 20 20 64 5b 73 54 6f 6b 65 6e 5d         d[sToken]
0640: 20 3d 20 64 5b 73 54 6f 6b 65 6e 5d 20 2b 20 69   = d[sToken] + i
0650: 6e 74 28 73 4f 63 63 75 72 29 0a 20 20 20 20 0a  nt(sOccur).    .
0660: 20 20 20 20 66 6f 72 20 6b 2c 20 76 20 69 6e 20      for k, v in 
0670: 64 2e 69 74 65 6d 73 28 29 3a 0a 20 20 20 20 20  d.items():.     
0680: 20 20 20 68 44 73 74 2e 77 72 69 74 65 28 6b 20     hDst.write(k 
0690: 2b 20 22 20 22 20 2b 20 73 74 72 28 76 29 20 2b  + " " + str(v) +
06a0: 20 22 5c 6e 22 29 0a 0a 0a 64 65 66 20 6d 61 69   "\n")...def mai
06b0: 6e 20 28 29 3a 0a 20 20 20 20 66 6f 72 20 73 66  n ():.    for sf
06c0: 20 69 6e 20 6f 73 2e 6c 69 73 74 64 69 72 28 22   in os.listdir("
06d0: 2e 22 29 3a 0a 20 20 20 20 20 20 20 20 69 66 20  ."):.        if 
06e0: 6e 6f 74 20 73 66 2e 65 6e 64 73 77 69 74 68 28  not sf.endswith(
06f0: 28 22 2e 74 78 74 22 2c 20 22 2e 22 2c 20 22 2e  (".txt", ".", ".
0700: 70 79 22 29 29 3a 0a 20 20 20 20 20 20 20 20 20  py")):.         
0710: 20 20 20 63 6f 75 6e 74 41 6e 64 57 72 69 74 65     countAndWrite
0720: 46 69 6c 65 28 73 66 29 0a 20 20 20 20 0a 20 20  File(sf).    .  
0730: 20 20 77 69 74 68 20 6f 70 65 6e 28 22 73 74 61    with open("sta
0740: 74 73 5f 67 6f 6f 67 6c 65 5f 6e 67 72 61 6d 5f  ts_google_ngram_
0750: 35 5f 32 30 31 32 2e 74 78 74 22 2c 20 22 77 22  5_2012.txt", "w"
0760: 2c 20 65 6e 63 6f 64 69 6e 67 3d 22 75 74 66 2d  , encoding="utf-
0770: 38 22 2c 20 6e 65 77 6c 69 6e 65 3d 22 5c 6e 22  8", newline="\n"
0780: 29 20 61 73 20 68 44 73 74 3a 0a 20 20 20 20 20  ) as hDst:.     
0790: 20 20 20 66 6f 72 20 73 66 20 69 6e 20 6f 73 2e     for sf in os.
07a0: 6c 69 73 74 64 69 72 28 22 2e 22 29 3a 0a 20 20  listdir("."):.  
07b0: 20 20 20 20 20 20 20 20 20 20 69 66 20 73 66 2e            if sf.
07c0: 65 6e 64 73 77 69 74 68 28 22 2e 73 75 6d 2e 74  endswith(".sum.t
07d0: 78 74 22 29 3a 0a 20 20 20 20 20 20 20 20 20 20  xt"):.          
07e0: 20 20 20 20 20 20 6d 65 72 67 65 46 69 6c 65 28        mergeFile(
07f0: 73 66 2c 20 68 44 73 74 29 0a 20 20 20 20 0a 69  sf, hDst).    .i
0800: 66 20 5f 5f 6e 61 6d 65 5f 5f 20 3d 3d 20 27 5f  f __name__ == '_
0810: 5f 6d 61 69 6e 5f 5f 27 20 3a 0a 20 20 20 20 6d  _main__' :.    m
0820: 61 69 6e 28 29 0a                                ain().