Grammalecte  Hex Artifact Content

Artifact 7c766445e193b8bda9b2b781922f5617b323e6cdb799b902e5740ea4d340b55a:


0000: 22 22 22 0a 56 65 72 79 20 73 69 6d 70 6c 65 20  """.Very simple 
0010: 74 6f 6b 65 6e 69 7a 65 72 0a 75 73 69 6e 67 20  tokenizer.using 
0020: 72 65 67 75 6c 61 72 20 65 78 70 72 65 73 73 69  regular expressi
0030: 6f 6e 73 0a 22 22 22 0a 0a 69 6d 70 6f 72 74 20  ons."""..import 
0040: 72 65 0a 0a 5f 50 41 54 54 45 52 4e 53 20 3d 20  re.._PATTERNS = 
0050: 7b 0a 20 20 20 20 22 64 65 66 61 75 6c 74 22 3a  {.    "default":
0060: 0a 20 20 20 20 20 20 20 20 28 0a 20 20 20 20 20  .        (.     
0070: 20 20 20 20 20 20 20 72 27 28 3f 50 3c 46 4f 4c         r'(?P<FOL
0080: 44 45 52 55 4e 49 58 3e 2f 28 3f 3a 62 69 6e 7c  DERUNIX>/(?:bin|
0090: 62 6f 6f 74 7c 64 65 76 7c 65 74 63 7c 68 6f 6d  boot|dev|etc|hom
00a0: 65 7c 6c 69 62 7c 6d 6e 74 7c 6f 70 74 7c 72 6f  e|lib|mnt|opt|ro
00b0: 6f 74 7c 73 62 69 6e 7c 74 6d 70 7c 75 73 72 7c  ot|sbin|tmp|usr|
00c0: 76 61 72 7c 42 75 72 65 61 75 7c 44 6f 63 75 6d  var|Bureau|Docum
00d0: 65 6e 74 73 7c 49 6d 61 67 65 73 7c 4d 75 73 69  ents|Images|Musi
00e0: 71 75 65 7c 50 75 62 6c 69 63 7c 54 c3 a9 6c c3  que|Public|T..l.
00f0: a9 63 68 61 72 67 65 6d 65 6e 74 73 7c 56 69 64  .chargements|Vid
0100: c3 a9 6f 73 29 28 3f 3a 2f 5b 5c 77 2e 28 29 2d  ..os)(?:/[\w.()-
0110: 5d 2b 29 2a 29 27 2c 0a 20 20 20 20 20 20 20 20  ]+)*)',.        
0120: 20 20 20 20 72 27 28 3f 50 3c 46 4f 4c 44 45 52      r'(?P<FOLDER
0130: 57 49 4e 3e 5b 61 2d 7a 41 2d 5a 5d 3a 5c 5c 28  WIN>[a-zA-Z]:\\(
0140: 3f 3a 50 72 6f 67 72 61 6d 20 46 69 6c 65 73 28  ?:Program Files(
0150: 3f 3a 20 5b 28 5d 78 38 36 5b 29 5d 7c 29 7c 5b  ?: [(]x86[)]|)|[
0160: 5c 77 2e 28 29 5d 2b 29 28 3f 3a 5c 5c 5b 5c 77  \w.()]+)(?:\\[\w
0170: 2e 28 29 2d 5d 2b 29 2a 29 27 2c 0a 20 20 20 20  .()-]+)*)',.    
0180: 20 20 20 20 20 20 20 20 72 27 28 3f 50 3c 50 55          r'(?P<PU
0190: 4e 43 3e 5b 5d 5b 2c 2e 3b 3a 21 3f e2 80 a6 c2  NC>[][,.;:!?....
01a0: ab c2 bb e2 80 9c e2 80 9d e2 80 98 e2 80 99 22  ..............."
01b0: 28 29 7b 7d c2 b7 e2 80 93 e2 80 94 5d 29 27 2c  (){}........])',
01c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 27 28  .            r'(
01d0: 3f 50 3c 41 43 52 4f 4e 59 4d 3e 5b 41 2d 5a 5d  ?P<ACRONYM>[A-Z]
01e0: 5b 2e 5d 5b 41 2d 5a 5d 5b 2e 5d 28 3f 3a 5b 41  [.][A-Z][.](?:[A
01f0: 2d 5a 5d 5b 2e 5d 29 2a 29 27 2c 0a 20 20 20 20  -Z][.])*)',.    
0200: 20 20 20 20 20 20 20 20 72 27 28 3f 50 3c 4c 49          r'(?P<LI
0210: 4e 4b 3e 28 3f 3a 68 74 74 70 73 3f 3a 2f 2f 7c  NK>(?:https?://|
0220: 77 77 77 5b 2e 5d 7c 5c 77 2b 5b 40 2e 5d 5c 77  www[.]|\w+[@.]\w
0230: 5c 77 2b 5b 40 2e 5d 29 5c 77 5b 5c 77 2e 2f 3f  \w+[@.])\w[\w./?
0240: 26 21 25 3d 2b 2a 22 5c 27 40 24 23 2d 5d 2b 29  &!%=+*"\'@$#-]+)
0250: 27 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ',.            r
0260: 27 28 3f 50 3c 48 41 53 48 54 41 47 3e 5b 23 40  '(?P<HASHTAG>[#@
0270: 5d 5b 5c 77 2d 5d 2b 29 27 2c 0a 20 20 20 20 20  ][\w-]+)',.     
0280: 20 20 20 20 20 20 20 72 27 28 3f 50 3c 48 54 4d         r'(?P<HTM
0290: 4c 3e 3c 5c 77 2b 2e 2a 3f 3e 7c 3c 2f 5c 77 2b  L><\w+.*?>|</\w+
02a0: 20 2a 3e 29 27 2c 0a 20 20 20 20 20 20 20 20 20   *>)',.         
02b0: 20 20 20 72 27 28 3f 50 3c 50 53 45 55 44 4f 48     r'(?P<PSEUDOH
02c0: 54 4d 4c 3e 5c 5b 2f 3f 5c 77 2b 5c 5d 29 27 2c  TML>\[/?\w+\])',
02d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 27 28  .            r'(
02e0: 3f 50 3c 48 4f 55 52 3e 5c 64 5c 64 3f 68 5c 64  ?P<HOUR>\d\d?h\d
02f0: 5c 64 5c 62 29 27 2c 0a 20 20 20 20 20 20 20 20  \d\b)',.        
0300: 20 20 20 20 72 27 28 3f 50 3c 4e 55 4d 3e 2d 3f      r'(?P<NUM>-?
0310: 5c 64 2b 28 3f 3a 5b 2e 2c 5d 5c 64 2b 29 29 27  \d+(?:[.,]\d+))'
0320: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 27  ,.            r'
0330: 28 3f 50 3c 53 49 47 4e 3e 5b 25 e2 80 b0 2b 3d  (?P<SIGN>[%...+=
0340: 2a 2f 3c 3e e2 a9 be e2 a9 bd 2d 5d 29 27 2c 0a  */<>......-])',.
0350: 20 20 20 20 20 20 20 20 20 20 20 20 72 22 28 3f              r"(?
0360: 50 3c 57 4f 52 44 3e 5c 77 2b 28 3f 3a 5b e2 80  P<WORD>\w+(?:[..
0370: 99 27 60 2d 5d 5c 77 2b 29 2a 29 22 0a 20 20 20  .'`-]\w+)*)".   
0380: 20 20 20 20 20 29 2c 0a 20 20 20 20 22 66 72 22       ),.    "fr"
0390: 3a 0a 20 20 20 20 20 20 20 20 28 0a 20 20 20 20  :.        (.    
03a0: 20 20 20 20 20 20 20 20 72 27 28 3f 50 3c 46 4f          r'(?P<FO
03b0: 4c 44 45 52 55 4e 49 58 3e 2f 28 3f 3a 62 69 6e  LDERUNIX>/(?:bin
03c0: 7c 62 6f 6f 74 7c 64 65 76 7c 65 74 63 7c 68 6f  |boot|dev|etc|ho
03d0: 6d 65 7c 6c 69 62 7c 6d 6e 74 7c 6f 70 74 7c 72  me|lib|mnt|opt|r
03e0: 6f 6f 74 7c 73 62 69 6e 7c 74 6d 70 7c 75 73 72  oot|sbin|tmp|usr
03f0: 7c 76 61 72 7c 42 75 72 65 61 75 7c 44 6f 63 75  |var|Bureau|Docu
0400: 6d 65 6e 74 73 7c 49 6d 61 67 65 73 7c 4d 75 73  ments|Images|Mus
0410: 69 71 75 65 7c 50 75 62 6c 69 63 7c 54 c3 a9 6c  ique|Public|T..l
0420: c3 a9 63 68 61 72 67 65 6d 65 6e 74 73 7c 56 69  ..chargements|Vi
0430: 64 c3 a9 6f 73 29 28 3f 3a 2f 5b 5c 77 2e 28 29  d..os)(?:/[\w.()
0440: 2d 5d 2b 29 2a 29 27 2c 0a 20 20 20 20 20 20 20  -]+)*)',.       
0450: 20 20 20 20 20 72 27 28 3f 50 3c 46 4f 4c 44 45       r'(?P<FOLDE
0460: 52 57 49 4e 3e 5b 61 2d 7a 41 2d 5a 5d 3a 5c 5c  RWIN>[a-zA-Z]:\\
0470: 28 3f 3a 50 72 6f 67 72 61 6d 20 46 69 6c 65 73  (?:Program Files
0480: 28 3f 3a 20 5b 28 5d 78 38 36 5b 29 5d 7c 29 7c  (?: [(]x86[)]|)|
0490: 5b 5c 77 2e 28 29 5d 2b 29 28 3f 3a 5c 5c 5b 5c  [\w.()]+)(?:\\[\
04a0: 77 2e 28 29 2d 5d 2b 29 2a 29 27 2c 0a 20 20 20  w.()-]+)*)',.   
04b0: 20 20 20 20 20 20 20 20 20 72 27 28 3f 50 3c 50           r'(?P<P
04c0: 55 4e 43 3e 5b 5d 5b 2c 2e 3b 3a 21 3f e2 80 a6  UNC>[][,.;:!?...
04d0: c2 ab c2 bb e2 80 9c e2 80 9d e2 80 98 e2 80 99  ................
04e0: 22 28 29 7b 7d c2 b7 e2 80 93 e2 80 94 5d 29 27  "(){}........])'
04f0: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 27  ,.            r'
0500: 28 3f 50 3c 41 43 52 4f 4e 59 4d 3e 5b 41 2d 5a  (?P<ACRONYM>[A-Z
0510: 5d 5b 2e 5d 5b 41 2d 5a 5d 5b 2e 5d 28 3f 3a 5b  ][.][A-Z][.](?:[
0520: 41 2d 5a 5d 5b 2e 5d 29 2a 29 27 2c 0a 20 20 20  A-Z][.])*)',.   
0530: 20 20 20 20 20 20 20 20 20 72 27 28 3f 50 3c 4c           r'(?P<L
0540: 49 4e 4b 3e 28 3f 3a 68 74 74 70 73 3f 3a 2f 2f  INK>(?:https?://
0550: 7c 77 77 77 5b 2e 5d 7c 5c 77 2b 5b 40 2e 5d 5c  |www[.]|\w+[@.]\
0560: 77 5c 77 2b 5b 40 2e 5d 29 5c 77 5b 5c 77 2e 2f  w\w+[@.])\w[\w./
0570: 3f 26 21 25 3d 2b 2a 22 5c 27 40 24 23 2d 5d 2b  ?&!%=+*"\'@$#-]+
0580: 29 27 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  )',.            
0590: 72 27 28 3f 50 3c 48 41 53 48 54 41 47 3e 5b 23  r'(?P<HASHTAG>[#
05a0: 40 5d 5b 5c 77 2d 5d 2b 29 27 2c 0a 20 20 20 20  @][\w-]+)',.    
05b0: 20 20 20 20 20 20 20 20 72 27 28 3f 50 3c 48 54          r'(?P<HT
05c0: 4d 4c 3e 3c 5c 77 2b 2e 2a 3f 3e 7c 3c 2f 5c 77  ML><\w+.*?>|</\w
05d0: 2b 20 2a 3e 29 27 2c 0a 20 20 20 20 20 20 20 20  + *>)',.        
05e0: 20 20 20 20 72 27 28 3f 50 3c 50 53 45 55 44 4f      r'(?P<PSEUDO
05f0: 48 54 4d 4c 3e 5c 5b 2f 3f 5c 77 2b 5c 5d 29 27  HTML>\[/?\w+\])'
0600: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 22  ,.            r"
0610: 28 3f 50 3c 45 4c 50 46 58 3e 28 3f 3a 6c 7c 64  (?P<ELPFX>(?:l|d
0620: 7c 6e 7c 6d 7c 74 7c 73 7c 6a 7c 63 7c c3 a7 7c  |n|m|t|s|j|c|..|
0630: 6c 6f 72 73 71 75 7c 70 75 69 73 71 75 7c 6a 75  lorsqu|puisqu|ju
0640: 73 71 75 7c 71 75 6f 69 71 75 7c 71 75 29 5b 27  squ|quoiqu|qu)['
0650: e2 80 99 60 5d 29 22 2c 0a 20 20 20 20 20 20 20  ...`])",.       
0660: 20 20 20 20 20 72 27 28 3f 50 3c 4f 52 44 49 4e       r'(?P<ORDIN
0670: 41 4c 3e 5c 64 2b 28 3f 3a 65 72 73 3f 7c 6e 64  AL>\d+(?:ers?|nd
0680: 73 3f 7c 65 73 3f 7c 64 65 73 3f 7c 69 c3 a8 6d  s?|es?|des?|i..m
0690: 65 73 3f 7c c3 a8 6d 65 73 3f 7c 65 6d 65 73 3f  es?|..mes?|emes?
06a0: 7c e1 b5 89 ca b3 cb a2 3f 7c e2 81 bf e1 b5 88  |.......?|......
06b0: cb a2 3f 7c e1 b5 89 cb a2 3f 7c e1 b5 88 e1 b5  ..?|.....?|.....
06c0: 89 cb a2 3f 29 5c 62 29 27 2c 0a 20 20 20 20 20  ...?)\b)',.     
06d0: 20 20 20 20 20 20 20 72 27 28 3f 50 3c 48 4f 55         r'(?P<HOU
06e0: 52 3e 5c 64 5c 64 3f 68 5c 64 5c 64 5c 62 29 27  R>\d\d?h\d\d\b)'
06f0: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 27  ,.            r'
0700: 28 3f 50 3c 4e 55 4d 3e 2d 3f 5c 64 2b 28 3f 3a  (?P<NUM>-?\d+(?:
0710: 5b 2e 2c 5d 5c 64 2b 7c 29 29 27 2c 0a 20 20 20  [.,]\d+|))',.   
0720: 20 20 20 20 20 20 20 20 20 72 27 28 3f 50 3c 53           r'(?P<S
0730: 49 47 4e 3e 5b 25 e2 80 b0 2b 3d 2a 2f 3c 3e e2  IGN>[%...+=*/<>.
0740: a9 be e2 a9 bd 2d 5d 29 27 2c 0a 20 20 20 20 20  .....-])',.     
0750: 20 20 20 20 20 20 20 72 22 28 3f 50 3c 57 4f 52         r"(?P<WOR
0760: 44 3e 5c 77 2b 28 3f 3a 5b e2 80 99 27 60 2d 5d  D>\w+(?:[...'`-]
0770: 5c 77 2b 29 2a 29 22 0a 20 20 20 20 20 20 20 20  \w+)*)".        
0780: 29 0a 7d 0a 0a 0a 63 6c 61 73 73 20 54 6f 6b 65  ).}...class Toke
0790: 6e 69 7a 65 72 3a 0a 20 20 20 20 22 54 6f 6b 65  nizer:.    "Toke
07a0: 6e 69 7a 65 72 3a 20 74 72 61 6e 73 66 6f 72 6d  nizer: transform
07b0: 73 20 61 20 74 65 78 74 20 69 6e 20 61 20 6c 69  s a text in a li
07c0: 73 74 20 6f 66 20 74 6f 6b 65 6e 73 22 0a 0a 20  st of tokens".. 
07d0: 20 20 20 64 65 66 20 5f 5f 69 6e 69 74 5f 5f 20     def __init__ 
07e0: 28 73 65 6c 66 2c 20 73 4c 61 6e 67 29 3a 0a 20  (self, sLang):. 
07f0: 20 20 20 20 20 20 20 73 65 6c 66 2e 73 4c 61 6e         self.sLan
0800: 67 20 3d 20 73 4c 61 6e 67 0a 20 20 20 20 20 20  g = sLang.      
0810: 20 20 69 66 20 73 4c 61 6e 67 20 6e 6f 74 20 69    if sLang not i
0820: 6e 20 5f 50 41 54 54 45 52 4e 53 3a 0a 20 20 20  n _PATTERNS:.   
0830: 20 20 20 20 20 20 20 20 20 73 65 6c 66 2e 73 4c           self.sL
0840: 61 6e 67 20 3d 20 22 64 65 66 61 75 6c 74 22 0a  ang = "default".
0850: 20 20 20 20 20 20 20 20 73 65 6c 66 2e 7a 54 6f          self.zTo
0860: 6b 65 6e 20 3d 20 72 65 2e 63 6f 6d 70 69 6c 65  ken = re.compile
0870: 28 20 22 28 3f 69 29 22 20 2b 20 27 7c 27 2e 6a  ( "(?i)" + '|'.j
0880: 6f 69 6e 28 73 52 65 67 65 78 20 66 6f 72 20 73  oin(sRegex for s
0890: 52 65 67 65 78 20 69 6e 20 5f 50 41 54 54 45 52  Regex in _PATTER
08a0: 4e 53 5b 73 4c 61 6e 67 5d 29 20 29 0a 0a 20 20  NS[sLang]) )..  
08b0: 20 20 64 65 66 20 67 65 6e 54 6f 6b 65 6e 73 20    def genTokens 
08c0: 28 73 65 6c 66 2c 20 73 54 65 78 74 2c 20 62 53  (self, sText, bS
08d0: 74 61 72 74 45 6e 64 54 6f 6b 65 6e 3d 46 61 6c  tartEndToken=Fal
08e0: 73 65 29 3a 0a 20 20 20 20 20 20 20 20 22 67 65  se):.        "ge
08f0: 6e 65 72 61 74 6f 72 3a 20 74 6f 6b 65 6e 69 7a  nerator: tokeniz
0900: 65 20 3c 73 54 65 78 74 3e 22 0a 20 20 20 20 20  e <sText>".     
0910: 20 20 20 69 20 3d 20 30 0a 20 20 20 20 20 20 20     i = 0.       
0920: 20 69 66 20 62 53 74 61 72 74 45 6e 64 54 6f 6b   if bStartEndTok
0930: 65 6e 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20  en:.            
0940: 79 69 65 6c 64 20 7b 20 22 69 22 3a 20 30 2c 20  yield { "i": 0, 
0950: 22 73 54 79 70 65 22 3a 20 22 49 4e 46 4f 22 2c  "sType": "INFO",
0960: 20 22 73 56 61 6c 75 65 22 3a 20 22 3c 73 74 61   "sValue": "<sta
0970: 72 74 3e 22 2c 20 22 6e 53 74 61 72 74 22 3a 20  rt>", "nStart": 
0980: 30 2c 20 22 6e 45 6e 64 22 3a 20 30 20 7d 0a 20  0, "nEnd": 0 }. 
0990: 20 20 20 20 20 20 20 66 6f 72 20 69 2c 20 6d 20         for i, m 
09a0: 69 6e 20 65 6e 75 6d 65 72 61 74 65 28 73 65 6c  in enumerate(sel
09b0: 66 2e 7a 54 6f 6b 65 6e 2e 66 69 6e 64 69 74 65  f.zToken.findite
09c0: 72 28 73 54 65 78 74 29 2c 20 31 29 3a 0a 20 20  r(sText), 1):.  
09d0: 20 20 20 20 20 20 20 20 20 20 79 69 65 6c 64 20            yield 
09e0: 7b 20 22 69 22 3a 20 69 2c 20 22 73 54 79 70 65  { "i": i, "sType
09f0: 22 3a 20 6d 2e 6c 61 73 74 67 72 6f 75 70 2c 20  ": m.lastgroup, 
0a00: 22 73 56 61 6c 75 65 22 3a 20 6d 2e 67 72 6f 75  "sValue": m.grou
0a10: 70 28 29 2c 20 22 6e 53 74 61 72 74 22 3a 20 6d  p(), "nStart": m
0a20: 2e 73 74 61 72 74 28 29 2c 20 22 6e 45 6e 64 22  .start(), "nEnd"
0a30: 3a 20 6d 2e 65 6e 64 28 29 20 7d 0a 20 20 20 20  : m.end() }.    
0a40: 20 20 20 20 69 66 20 62 53 74 61 72 74 45 6e 64      if bStartEnd
0a50: 54 6f 6b 65 6e 3a 0a 20 20 20 20 20 20 20 20 20  Token:.         
0a60: 20 20 20 69 45 6e 64 20 3d 20 6c 65 6e 28 73 54     iEnd = len(sT
0a70: 65 78 74 29 0a 20 20 20 20 20 20 20 20 20 20 20  ext).           
0a80: 20 79 69 65 6c 64 20 7b 20 22 69 22 3a 20 69 2b   yield { "i": i+
0a90: 31 2c 20 22 73 54 79 70 65 22 3a 20 22 49 4e 46  1, "sType": "INF
0aa0: 4f 22 2c 20 22 73 56 61 6c 75 65 22 3a 20 22 3c  O", "sValue": "<
0ab0: 65 6e 64 3e 22 2c 20 22 6e 53 74 61 72 74 22 3a  end>", "nStart":
0ac0: 20 69 45 6e 64 2c 20 22 6e 45 6e 64 22 3a 20 69   iEnd, "nEnd": i
0ad0: 45 6e 64 20 7d 0a                                End }.