Grammalecte  Hex Artifact Content

Artifact faeb79ed1d57ff7db7248607c49848e5a526c1eb78f1eaf2f7034160883bf634:


0000: 23 21 20 70 79 74 68 6f 6e 33 0a 23 0a 23 20 4d  #! python3.#.# M
0010: 65 74 61 67 72 61 70 68 65 0a 23 0a 23 20 42 79  etagraphe.#.# By
0020: 20 4f 6c 69 76 69 65 72 20 52 2e 20 2d 20 32 30   Olivier R. - 20
0030: 31 33 0a 0a 69 6d 70 6f 72 74 20 72 65 0a 0a 0a  13..import re...
0040: 23 20 44 69 63 74 69 6f 6e 6e 61 69 72 65 20 64  # Dictionnaire d
0050: 65 73 20 63 61 72 61 63 74 c3 a8 72 65 73 20 70  es caract..res p
0060: 6f 75 72 20 6c 61 20 70 68 6f 6e c3 a9 74 69 71  our la phon..tiq
0070: 75 65 0a 50 48 4d 41 50 20 3d 20 73 74 72 2e 6d  ue.PHMAP = str.m
0080: 61 6b 65 74 72 61 6e 73 28 7b 20 27 c3 a0 27 3a  aketrans({ '..':
0090: 20 27 61 27 2c 20 20 27 c3 a2 27 3a 20 27 61 27   'a',  '..': 'a'
00a0: 2c 20 20 27 c3 a4 27 3a 20 27 61 27 2c 20 20 27  ,  '..': 'a',  '
00b0: c3 a5 27 3a 20 27 61 27 2c 20 20 27 c4 81 27 3a  ..': 'a',  '..':
00c0: 20 27 61 27 2c 0a 20 20 20 20 20 20 20 20 20 20   'a',.          
00d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 27 c3                '.
00e0: a7 27 3a 20 27 53 27 2c 0a 20 20 20 20 20 20 20  .': 'S',.       
00f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0100: 20 27 c3 a9 27 3a 20 27 c3 a9 27 2c 20 20 27 c3   '..': '..',  '.
0110: a8 27 3a 20 27 c3 a9 27 2c 20 20 27 c3 aa 27 3a  .': '..',  '..':
0120: 20 27 c3 a9 27 2c 20 20 27 c3 ab 27 3a 20 27 c3   '..',  '..': '.
0130: a9 27 2c 20 20 27 c4 93 27 3a 20 27 c3 a9 27 2c  .',  '..': '..',
0140: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
0150: 20 20 20 20 20 20 20 20 20 27 c3 ae 27 3a 20 27           '..': '
0160: 69 27 2c 20 20 27 c3 af 27 3a 20 27 69 27 2c 20  i',  '..': 'i', 
0170: 20 27 c4 ab 27 3a 20 27 69 27 2c 0a 20 20 20 20   '..': 'i',.    
0180: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0190: 20 20 20 20 27 c3 b1 27 3a 20 27 6e 69 27 2c 0a      '..': 'ni',.
01a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
01b0: 20 20 20 20 20 20 20 20 27 c3 b4 27 3a 20 27 6f          '..': 'o
01c0: 27 2c 20 20 27 c3 b6 27 3a 20 27 6f 27 2c 20 20  ',  '..': 'o',  
01d0: 27 c5 8d 27 3a 20 27 6f 27 2c 0a 20 20 20 20 20  '..': 'o',.     
01e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
01f0: 20 20 20 27 c3 b9 27 3a 20 27 75 27 2c 20 20 27     '..': 'u',  '
0200: c3 bb 27 3a 20 27 75 27 2c 20 20 27 c3 bc 27 3a  ..': 'u',  '..':
0210: 20 27 75 27 2c 20 20 27 c5 ab 27 3a 20 27 75 27   'u',  '..': 'u'
0220: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
0230: 20 20 20 20 20 20 20 20 20 20 27 c3 bf 27 3a 20            '..': 
0240: 27 69 27 2c 0a 20 20 20 20 20 20 20 20 20 20 20  'i',.           
0250: 20 20 20 20 20 20 20 20 20 20 20 20 20 27 c3 a6               '..
0260: 27 3a 20 27 c3 a9 27 20 7d 29 0a 0a 64 65 66 20  ': '..' })..def 
0270: 67 65 74 50 68 6f 6e 65 78 20 28 73 2c 20 73 4d  getPhonex (s, sM
0280: 6f 72 70 68 29 3a 0a 20 20 20 20 22 72 65 74 75  orph):.    "retu
0290: 72 6e 73 20 61 20 73 69 6d 70 6c 69 66 69 65 64  rns a simplified
02a0: 20 70 68 6f 6e 65 74 69 63 20 73 74 72 69 6e 67   phonetic string
02b0: 22 0a 20 20 20 20 69 66 20 72 65 2e 6d 61 74 63  ".    if re.matc
02c0: 68 28 22 5b 41 2d 5a 30 2d 39 5d 7b 32 2c 7d 24  h("[A-Z0-9]{2,}$
02d0: 22 2c 20 73 29 3a 0a 20 20 20 20 20 20 20 20 72  ", s):.        r
02e0: 65 74 75 72 6e 20 73 0a 20 20 20 20 65 6c 69 66  eturn s.    elif
02f0: 20 6c 65 6e 28 73 29 20 3d 3d 20 31 3a 0a 20 20   len(s) == 1:.  
0300: 20 20 20 20 20 20 72 65 74 75 72 6e 20 73 2e 6c        return s.l
0310: 6f 77 65 72 28 29 2e 74 72 61 6e 73 6c 61 74 65  ower().translate
0320: 28 50 48 4d 41 50 29 0a 20 20 20 20 65 6c 73 65  (PHMAP).    else
0330: 3a 0a 20 20 20 20 20 20 20 20 73 20 3d 20 73 2e  :.        s = s.
0340: 6c 6f 77 65 72 28 29 2e 74 72 61 6e 73 6c 61 74  lower().translat
0350: 65 28 50 48 4d 41 50 29 0a 20 20 20 20 20 20 20  e(PHMAP).       
0360: 20 73 20 3d 20 72 65 2e 73 75 62 28 22 73 63 28   s = re.sub("sc(
0370: 3f 3d 5b 65 c3 a9 69 79 5d 29 22 2c 20 22 53 22  ?=[e..iy])", "S"
0380: 2c 20 73 29 0a 20 20 20 20 20 20 20 20 73 20 3d  , s).        s =
0390: 20 72 65 2e 73 75 62 28 22 78 5b 63 73 5d 28 3f   re.sub("x[cs](?
03a0: 3d 5b 65 c3 a9 69 79 5d 29 22 2c 20 22 6b 53 22  =[e..iy])", "kS"
03b0: 2c 20 73 29 0a 20 20 20 20 20 20 20 20 73 20 3d  , s).        s =
03c0: 20 72 65 2e 73 75 62 28 22 63 28 3f 3d 5b 65 c3   re.sub("c(?=[e.
03d0: a9 69 79 5d 29 22 2c 20 22 53 22 2c 20 73 29 0a  .iy])", "S", s).
03e0: 20 20 20 20 20 20 20 20 73 20 3d 20 72 65 2e 73          s = re.s
03f0: 75 62 28 22 63 28 3f 3d 5b 61 75 6f c5 93 5d 29  ub("c(?=[auo..])
0400: 22 2c 20 22 6b 22 2c 20 73 29 0a 20 20 20 20 20  ", "k", s).     
0410: 20 20 20 73 20 3d 20 72 65 2e 73 75 62 28 22 67     s = re.sub("g
0420: 65 28 3f 3d 5b 61 6f 5d 29 22 2c 20 22 6a 22 2c  e(?=[ao])", "j",
0430: 20 73 29 0a 20 20 20 20 20 20 20 20 73 20 3d 20   s).        s = 
0440: 72 65 2e 73 75 62 28 22 67 28 3f 3d 5b 69 65 c3  re.sub("g(?=[ie.
0450: a9 79 5d 29 22 2c 20 22 6a 22 2c 20 73 29 0a 20  .y])", "j", s). 
0460: 20 20 20 20 20 20 20 73 20 3d 20 72 65 2e 73 75         s = re.su
0470: 62 28 22 67 75 65 22 2c 20 22 67 65 22 2c 20 73  b("gue", "ge", s
0480: 29 0a 20 20 20 20 20 20 20 20 73 20 3d 20 72 65  ).        s = re
0490: 2e 73 75 62 28 22 61 6d 28 3f 3d 5b 62 70 5d 29  .sub("am(?=[bp])
04a0: 22 2c 20 22 c3 a2 22 2c 20 73 29 0a 20 20 20 20  ", "..", s).    
04b0: 20 20 20 20 73 20 3d 20 72 65 2e 73 75 62 28 22      s = re.sub("
04c0: 6f 6d 28 3f 3d 5b 62 70 74 5d 29 22 2c 20 22 c3  om(?=[bpt])", ".
04d0: b4 22 2c 20 73 29 0a 20 20 20 20 20 20 20 20 73  .", s).        s
04e0: 20 3d 20 72 65 2e 73 75 62 28 22 6f 6d 70 28 3f   = re.sub("omp(?
04f0: 3d 74 29 22 2c 20 22 c3 b4 22 2c 20 73 29 0a 20  =t)", "..", s). 
0500: 20 20 20 20 20 20 20 73 20 3d 20 72 65 2e 73 75         s = re.su
0510: 62 28 22 5b 69 79 5d 6d 28 3f 3d 5b 62 70 5d 29  b("[iy]m(?=[bp])
0520: 22 2c 20 22 31 22 2c 20 73 29 0a 20 20 20 20 20  ", "1", s).     
0530: 20 20 20 73 20 3d 20 72 65 2e 73 75 62 28 22 65     s = re.sub("e
0540: 69 6c 6c 22 2c 20 22 c3 a9 59 22 2c 20 73 29 0a  ill", "..Y", s).
0550: 20 20 20 20 20 20 20 20 73 20 3d 20 72 65 2e 73          s = re.s
0560: 75 62 28 22 61 69 6c 6c 22 2c 20 22 61 59 22 2c  ub("aill", "aY",
0570: 20 73 29 0a 20 20 20 20 20 20 20 20 73 20 3d 20   s).        s = 
0580: 72 65 2e 73 75 62 28 22 5b 61 65 5d 79 28 3f 3d  re.sub("[ae]y(?=
0590: 5b 61 65 c3 a9 69 5d 29 22 2c 20 22 c3 a9 59 22  [ae..i])", "..Y"
05a0: 2c 20 73 29 0a 20 20 20 20 20 20 20 20 73 20 3d  , s).        s =
05b0: 20 72 65 2e 73 75 62 28 22 5e 73 22 2c 20 22 53   re.sub("^s", "S
05c0: 22 2c 20 73 29 0a 20 20 20 20 20 20 20 20 73 20  ", s).        s 
05d0: 3d 20 72 65 2e 73 75 62 28 22 28 3f 3c 3d 5b 61  = re.sub("(?<=[a
05e0: 65 69 6f c3 a9 75 5d 29 73 28 3f 3d 5b 61 65 69  eio..u])s(?=[aei
05f0: 6f c3 a9 75 5d 29 22 2c 20 22 7a 22 2c 20 73 29  o..u])", "z", s)
0600: 0a 20 20 20 20 20 20 20 20 69 66 20 73 4d 6f 72  .        if sMor
0610: 70 68 2e 73 74 61 72 74 73 77 69 74 68 28 22 76  ph.startswith("v
0620: 22 29 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20  "):.            
0630: 73 20 3d 20 72 65 2e 73 75 62 28 22 61 69 65 6e  s = re.sub("aien
0640: 74 24 22 2c 20 22 c3 a9 22 2c 20 73 29 0a 20 20  t$", "..", s).  
0650: 20 20 20 20 20 20 20 20 20 20 73 20 3d 20 72 65            s = re
0660: 2e 73 75 62 28 22 65 6e 74 24 22 2c 20 22 22 2c  .sub("ent$", "",
0670: 20 73 29 0a 20 20 20 20 20 20 20 20 20 20 20 20   s).            
0680: 73 20 3d 20 72 65 2e 73 75 62 28 22 61 6e 74 24  s = re.sub("ant$
0690: 22 2c 20 22 c3 a2 22 2c 20 73 29 0a 20 20 20 20  ", "..", s).    
06a0: 20 20 20 20 20 20 20 20 73 20 3d 20 72 65 2e 73          s = re.s
06b0: 75 62 28 22 61 5b 73 74 5d 24 22 2c 20 22 61 22  ub("a[st]$", "a"
06c0: 2c 20 73 29 0a 20 20 20 20 20 20 20 20 20 20 20  , s).           
06d0: 20 73 20 3d 20 72 65 2e 73 75 62 28 22 61 69 5b   s = re.sub("ai[
06e0: 65 74 73 5d 24 22 2c 20 22 c3 a9 22 2c 20 73 29  ets]$", "..", s)
06f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 20 3d  .            s =
0700: 20 72 65 2e 73 75 62 28 22 65 7a 24 22 2c 20 22   re.sub("ez$", "
0710: c3 a9 22 2c 20 73 29 0a 20 20 20 20 20 20 20 20  ..", s).        
0720: 20 20 20 20 73 20 3d 20 72 65 2e 73 75 62 28 22      s = re.sub("
0730: 6f 6e 5b 73 74 5d 3f 24 22 2c 20 22 c3 b4 22 2c  on[st]?$", "..",
0740: 20 73 29 0a 20 20 20 20 20 20 20 20 20 20 20 20   s).            
0750: 73 20 3d 20 72 65 2e 73 75 62 28 22 65 73 3f 24  s = re.sub("es?$
0760: 22 2c 20 22 22 2c 20 73 29 0a 20 20 20 20 20 20  ", "", s).      
0770: 20 20 20 20 20 20 73 20 3d 20 72 65 2e 73 75 62        s = re.sub
0780: 28 22 c3 a9 65 3f 73 3f 24 22 2c 20 22 c3 a9 22  ("..e?s?$", ".."
0790: 2c 20 73 29 0a 20 20 20 20 20 20 20 20 20 20 20  , s).           
07a0: 20 73 20 3d 20 72 65 2e 73 75 62 28 22 69 65 3f   s = re.sub("ie?
07b0: 73 3f 24 22 2c 20 22 69 22 2c 20 73 29 0a 20 20  s?$", "i", s).  
07c0: 20 20 20 20 20 20 20 20 20 20 73 20 3d 20 72 65            s = re
07d0: 2e 73 75 62 28 22 75 65 3f 73 3f 24 22 2c 20 22  .sub("ue?s?$", "
07e0: 75 22 2c 20 73 29 0a 20 20 20 20 20 20 20 20 20  u", s).         
07f0: 20 20 20 73 20 3d 20 72 65 2e 73 75 62 28 22 75     s = re.sub("u
0800: 69 5b 74 73 5d 24 22 2c 20 22 75 69 22 2c 20 73  i[ts]$", "ui", s
0810: 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 20  ).            s 
0820: 3d 20 72 65 2e 73 75 62 28 22 61 75 74 24 22 2c  = re.sub("aut$",
0830: 20 22 6f 22 2c 20 73 29 0a 20 20 20 20 20 20 20   "o", s).       
0840: 20 20 20 20 20 73 20 3d 20 72 65 2e 73 75 62 28       s = re.sub(
0850: 22 75 74 24 22 2c 20 22 75 22 2c 20 73 29 0a 20  "ut$", "u", s). 
0860: 20 20 20 20 20 20 20 20 20 20 20 73 20 3d 20 72             s = r
0870: 65 2e 73 75 62 28 22 69 74 3f 73 3f 24 22 2c 20  e.sub("it?s?$", 
0880: 22 69 22 2c 20 73 29 0a 20 20 20 20 20 20 20 20  "i", s).        
0890: 69 66 20 73 4d 6f 72 70 68 2e 73 74 61 72 74 73  if sMorph.starts
08a0: 77 69 74 68 28 22 6e 6f 6d 22 29 20 6f 72 20 73  with("nom") or s
08b0: 4d 6f 72 70 68 2e 73 74 61 72 74 73 77 69 74 68  Morph.startswith
08c0: 28 22 61 64 6a 22 29 3a 0a 20 20 20 20 20 20 20  ("adj"):.       
08d0: 20 20 20 20 20 69 66 20 22 70 6c 22 20 69 6e 20       if "pl" in 
08e0: 73 4d 6f 72 70 68 3a 0a 20 20 20 20 20 20 20 20  sMorph:.        
08f0: 20 20 20 20 20 20 20 20 73 20 3d 20 72 65 2e 73          s = re.s
0900: 75 62 28 22 5b 73 78 5d 24 22 2c 20 22 22 2c 20  ub("[sx]$", "", 
0910: 73 29 0a 20 20 20 20 20 20 20 20 73 20 3d 20 72  s).        s = r
0920: 65 2e 73 75 62 28 22 74 69 6f 6e 24 22 2c 20 22  e.sub("tion$", "
0930: 53 69 c3 b4 22 2c 20 73 29 0a 20 20 20 20 20 20  Si..", s).      
0940: 20 20 73 20 3d 20 72 65 2e 73 75 62 28 22 65 6e    s = re.sub("en
0950: 74 24 22 2c 20 22 c3 a2 22 2c 20 73 29 0a 20 20  t$", "..", s).  
0960: 20 20 20 20 20 20 73 20 3d 20 72 65 2e 73 75 62        s = re.sub
0970: 28 22 65 75 78 24 22 2c 20 22 32 22 2c 20 73 29  ("eux$", "2", s)
0980: 0a 20 20 20 20 20 20 20 20 73 20 3d 20 72 65 2e  .        s = re.
0990: 73 75 62 28 22 65 61 75 78 24 22 2c 20 22 6f 22  sub("eaux$", "o"
09a0: 2c 20 73 29 0a 20 20 20 20 20 20 20 20 73 20 3d  , s).        s =
09b0: 20 72 65 2e 73 75 62 28 22 65 5b 72 74 5d 24 22   re.sub("e[rt]$"
09c0: 2c 20 22 c3 a9 22 2c 20 73 29 0a 20 20 20 20 20  , "..", s).     
09d0: 20 20 20 73 20 3d 20 72 65 2e 73 75 62 28 22 5b     s = re.sub("[
09e0: 65 61 5d 69 6e 65 24 22 2c 20 22 c3 a9 6e 22 2c  ea]ine$", "..n",
09f0: 20 73 29 0a 20 20 20 20 20 20 20 20 73 20 3d 20   s).        s = 
0a00: 72 65 2e 73 75 62 28 22 61 74 24 22 2c 20 22 61  re.sub("at$", "a
0a10: 22 2c 20 73 29 0a 20 20 20 20 20 20 20 20 73 20  ", s).        s 
0a20: 3d 20 72 65 2e 73 75 62 28 22 6f 6e 28 3f 3d 5b  = re.sub("on(?=[
0a30: 62 63 64 66 67 68 6a 6b 6c 6d 70 71 72 73 53 74  bcdfghjklmpqrsSt
0a40: 76 77 78 7a 5d 29 22 2c 20 22 c3 b4 22 2c 20 73  vwxz])", "..", s
0a50: 29 0a 20 20 20 20 20 20 20 20 73 20 3d 20 72 65  ).        s = re
0a60: 2e 73 75 62 28 22 61 6e 5b 73 74 5d 3f 24 22 2c  .sub("an[st]?$",
0a70: 20 22 c3 a2 22 2c 20 73 29 0a 20 20 20 20 20 20   "..", s).      
0a80: 20 20 73 20 3d 20 72 65 2e 73 75 62 28 22 61 6e    s = re.sub("an
0a90: 28 3f 3d 5b 62 63 64 66 67 68 6a 6b 6c 6d 70 71  (?=[bcdfghjklmpq
0aa0: 72 73 53 74 76 77 78 7a 5d 29 22 2c 20 22 c3 a2  rsStvwxz])", "..
0ab0: 22 2c 20 73 29 0a 20 20 20 20 20 20 20 20 73 20  ", s).        s 
0ac0: 3d 20 72 65 2e 73 75 62 28 22 69 65 6e 73 3f 24  = re.sub("iens?$
0ad0: 22 2c 20 22 69 31 22 2c 20 73 29 0a 20 20 20 20  ", "i1", s).    
0ae0: 20 20 20 20 73 20 3d 20 72 65 2e 73 75 62 28 22      s = re.sub("
0af0: 28 3f 3c 21 69 29 65 6e 73 3f 24 22 2c 20 22 c3  (?<!i)ens?$", ".
0b00: a2 22 2c 20 73 29 0a 20 20 20 20 20 20 20 20 73  .", s).        s
0b10: 20 3d 20 72 65 2e 73 75 62 28 22 65 6e 28 3f 3d   = re.sub("en(?=
0b20: 5b 62 63 64 66 67 68 6a 6b 6c 6d 70 71 72 73 53  [bcdfghjklmpqrsS
0b30: 74 76 77 78 7a 5d 29 22 2c 20 22 c3 a2 22 2c 20  tvwxz])", "..", 
0b40: 73 29 0a 20 20 20 20 20 20 20 20 73 20 3d 20 72  s).        s = r
0b50: 65 2e 73 75 62 28 22 75 6e 73 3f 24 22 2c 20 22  e.sub("uns?$", "
0b60: 31 22 2c 20 73 29 0a 20 20 20 20 20 20 20 20 73  1", s).        s
0b70: 20 3d 20 72 65 2e 73 75 62 28 22 75 6e 28 3f 3d   = re.sub("un(?=
0b80: 5b 62 63 64 66 67 68 6a 6b 6c 6d 70 71 72 73 53  [bcdfghjklmpqrsS
0b90: 74 76 77 78 7a 5d 29 22 2c 20 22 31 22 2c 20 73  tvwxz])", "1", s
0ba0: 29 0a 20 20 20 20 20 20 20 20 73 20 3d 20 72 65  ).        s = re
0bb0: 2e 73 75 62 28 22 69 6e 73 3f 24 22 2c 20 22 31  .sub("ins?$", "1
0bc0: 22 2c 20 73 29 0a 20 20 20 20 20 20 20 20 73 20  ", s).        s 
0bd0: 3d 20 72 65 2e 73 75 62 28 22 61 3f 69 6e 28 3f  = re.sub("a?in(?
0be0: 3d 5b 62 63 64 66 67 68 6a 6b 6c 6d 70 71 72 73  =[bcdfghjklmpqrs
0bf0: 53 74 76 77 78 7a 5d 29 22 2c 20 22 31 22 2c 20  Stvwxz])", "1", 
0c00: 73 29 0a 20 20 20 20 20 20 20 20 73 20 3d 20 72  s).        s = r
0c10: 65 2e 73 75 62 28 22 c5 93 75 3f 22 2c 20 22 32  e.sub("..u?", "2
0c20: 22 2c 20 73 29 0a 20 20 20 20 20 20 20 20 73 20  ", s).        s 
0c30: 3d 20 72 65 2e 73 75 62 28 22 65 75 78 3f 24 22  = re.sub("eux?$"
0c40: 2c 20 22 32 22 2c 20 73 29 0a 20 20 20 20 20 20  , "2", s).      
0c50: 20 20 73 20 3d 20 72 65 2e 73 75 62 28 22 65 75    s = re.sub("eu
0c60: 28 3f 3d 5b 62 63 64 66 67 68 6a 6b 6c 6d 70 71  (?=[bcdfghjklmpq
0c70: 72 73 53 74 76 77 78 7a 5d 29 22 2c 20 22 32 22  rsStvwxz])", "2"
0c80: 2c 20 73 29 0a 20 20 20 20 20 20 20 20 73 20 3d  , s).        s =
0c90: 20 72 65 2e 73 75 62 28 22 65 28 3f 3d 73 73 7c   re.sub("e(?=ss|
0ca0: 74 74 7c 72 72 7c 6c 6c 7c 66 66 29 22 2c 20 22  tt|rr|ll|ff)", "
0cb0: c3 a9 22 2c 20 73 29 0a 20 20 20 20 20 20 20 20  ..", s).        
0cc0: 73 20 3d 20 72 65 2e 73 75 62 28 22 65 6e 6e 65  s = re.sub("enne
0cd0: 24 22 2c 20 22 c3 a9 6e 22 2c 20 73 29 0a 20 20  $", "..n", s).  
0ce0: 20 20 20 20 20 20 73 20 3d 20 72 65 2e 73 75 62        s = re.sub
0cf0: 28 22 65 3f 61 75 22 2c 20 22 6f 22 2c 20 73 29  ("e?au", "o", s)
0d00: 0a 20 20 20 20 20 20 20 20 73 20 3d 20 72 65 2e  .        s = re.
0d10: 73 75 62 28 22 63 68 65 24 22 2c 20 22 c3 a7 22  sub("che$", ".."
0d20: 2c 20 73 29 0a 20 20 20 20 20 20 20 20 73 20 3d  , s).        s =
0d30: 20 72 65 2e 73 75 62 28 22 5b 61 65 5d 69 22 2c   re.sub("[ae]i",
0d40: 20 22 c3 a9 22 2c 20 73 29 0a 20 20 20 20 20 20   "..", s).      
0d50: 20 20 73 20 3d 20 73 2e 72 65 70 6c 61 63 65 28    s = s.replace(
0d60: 22 6f 75 22 2c 20 22 c3 bb 22 29 0a 20 20 20 20  "ou", "..").    
0d70: 20 20 20 20 73 20 3d 20 73 2e 72 65 70 6c 61 63      s = s.replac
0d80: 65 28 22 73 73 22 2c 20 22 53 22 29 0a 20 20 20  e("ss", "S").   
0d90: 20 20 20 20 20 73 20 3d 20 73 2e 72 65 70 6c 61       s = s.repla
0da0: 63 65 28 22 64 6a 22 2c 20 22 6a 22 29 0a 20 20  ce("dj", "j").  
0db0: 20 20 20 20 20 20 73 20 3d 20 73 2e 72 65 70 6c        s = s.repl
0dc0: 61 63 65 28 22 74 68 22 2c 20 22 74 22 29 0a 20  ace("th", "t"). 
0dd0: 20 20 20 20 20 20 20 73 20 3d 20 72 65 2e 73 75         s = re.su
0de0: 62 28 22 5b 71 63 5d 75 3f 22 2c 20 22 6b 22 2c  b("[qc]u?", "k",
0df0: 20 73 29 0a 20 20 20 20 20 20 20 20 73 20 3d 20   s).        s = 
0e00: 73 2e 72 65 70 6c 61 63 65 28 22 63 68 22 2c 20  s.replace("ch", 
0e10: 22 6b 22 29 0a 20 20 20 20 20 20 20 20 73 20 3d  "k").        s =
0e20: 20 73 2e 72 65 70 6c 61 63 65 28 22 70 68 22 2c   s.replace("ph",
0e30: 20 22 66 22 29 0a 20 20 20 20 20 20 20 20 73 20   "f").        s 
0e40: 3d 20 73 2e 72 65 70 6c 61 63 65 28 22 68 22 2c  = s.replace("h",
0e50: 20 22 22 29 0a 20 20 20 20 20 20 20 20 73 20 3d   "").        s =
0e60: 20 73 2e 72 65 70 6c 61 63 65 28 22 79 22 2c 20   s.replace("y", 
0e70: 22 69 22 29 0a 20 20 20 20 20 20 20 20 73 20 3d  "i").        s =
0e80: 20 73 2e 72 65 70 6c 61 63 65 28 22 c3 a6 22 2c   s.replace("..",
0e90: 20 22 c3 a9 22 29 0a 20 20 20 20 20 20 20 20 73   "..").        s
0ea0: 20 3d 20 73 2e 72 65 70 6c 61 63 65 28 22 78 22   = s.replace("x"
0eb0: 2c 20 22 6b 73 22 29 0a 20 20 20 20 20 20 20 20  , "ks").        
0ec0: 69 66 20 6c 65 6e 28 73 29 20 3e 20 33 3a 20 73  if len(s) > 3: s
0ed0: 20 3d 20 72 65 2e 73 75 62 28 22 65 73 24 22 2c   = re.sub("es$",
0ee0: 20 22 22 2c 20 73 29 0a 20 20 20 20 20 20 20 20   "", s).        
0ef0: 69 66 20 6c 65 6e 28 73 29 20 3e 20 32 3a 20 73  if len(s) > 2: s
0f00: 20 3d 20 72 65 2e 73 75 62 28 22 65 24 22 2c 20   = re.sub("e$", 
0f10: 22 22 2c 20 73 29 0a 20 20 20 20 20 20 20 20 73  "", s).        s
0f20: 20 3d 20 72 65 2e 73 75 62 28 22 28 5c 5c 77 29   = re.sub("(\\w)
0f30: 5c 5c 31 22 2c 20 22 5c 5c 31 22 2c 20 73 29 0a  \\1", "\\1", s).
0f40: 20 20 20 20 72 65 74 75 72 6e 20 73 0a 0a 64 65      return s..de
0f50: 66 20 67 65 74 47 72 61 70 68 69 78 20 28 73 29  f getGraphix (s)
0f60: 3a 0a 20 20 20 20 22 72 65 74 75 72 6e 73 20 61  :.    "returns a
0f70: 20 73 69 6d 70 6c 69 66 69 65 64 20 73 70 65 6c   simplified spel
0f80: 6c 69 6e 67 22 0a 20 20 20 20 72 65 74 75 72 6e  ling".    return
0f90: 20 27 27 0a 0a 0a 64 65 66 20 67 65 74 4d 65 74   ''...def getMet
0fa0: 61 67 72 61 70 68 65 20 28 73 2c 20 73 4d 6f 72  agraphe (s, sMor
0fb0: 70 68 29 3a 0a 20 20 20 20 72 65 74 75 72 6e 20  ph):.    return 
0fc0: 28 67 65 74 50 68 6f 6e 65 78 28 73 2c 20 73 4d  (getPhonex(s, sM
0fd0: 6f 72 70 68 29 2c 20 67 65 74 47 72 61 70 68 69  orph), getGraphi
0fe0: 78 28 73 29 29 0a                                x(s)).