Ë
    ²²jpv  ã                   ón  — d dl Z d dlZd dlmZ d dlmZmZmZmZm	Z	 ddl
mZmZmZ d dlZi dd“dd	“d
d“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd “d!d"“Zd5d#efd$„Zd#efd%„Zd#efd&„Z G d'„ d(«      Z G d)„ d*«      Z G d+„ d,«      Z G d-„ d.«      Z G d/„ d0«      Z G d1„ d2«      Z G d3„ d4«      Zy)6é    N)ÚFraction)ÚIteratorÚListÚMatchÚOptionalÚUnioné   )Úenglish_name_normalizerÚenglish_spelling_normalizerÚenglish_compound_normalizeru   Å“Úoeu   Å’ÚOEõ   Ã¸Úoõ   Ã˜ÚOõ   Ã¦Úaeõ   Ã†ÚAEõ   ÃŸÚssu   áºžÚSSu   Ä‘Údu   Ä�ÚDõ   Ã°õ   Ã�õ   Ã¾Úthõ   Ãžu   Å‚Úlu   Å�ÚLÚsc                 ól   ‡‡— ˆfd„Šdj                  ˆfd„t        j                  d| «      D «       «      S )z‘
    Replace any other markers, symbols, and punctuations with a space, and drop any diacritics (category 'Mn' and some
    manual mappings)
    c                 óž   •— | ‰v r| S | t         v r	t         |    S t        j                  | «      dk(  ryt        j                  | «      d   dv ry| S )NÚMnÚ r   ÚMSPú )ÚADDITIONAL_DIACRITICSÚunicodedataÚcategory)ÚcharÚkeeps    €ú/app/normalizer/normalizer.pyÚreplace_characterz8remove_symbols_and_diacritics.<locals>.replace_character4   sY   ø€ Ø�4‰<ØˆKØÔ*Ñ*Ü(¨Ñ.Ð.ä×!Ñ! $Ó'¨4Ò/Øä×!Ñ! $Ó'¨Ñ*¨eÑ3Øàˆó    r'   c              3   ó.   •K  — | ]  } ‰|«      –— Œ y ­w©N© )Ú.0Úcr0   s     €r/   ú	<genexpr>z0remove_symbols_and_diacritics.<locals>.<genexpr>B   s   øè ø€ ÒR¨AÑ$ Q×'ÑRùs   ƒÚNFKD©Újoinr+   Ú	normalize)r#   r.   r0   s    `@r/   Úremove_symbols_and_diacriticsr<   .   s,   ù€ ôð �7‰7ÓR´×1FÑ1FÀvÈqÓ1QÔRÓRÐRr1   c                 óZ   — dj                  d„ t        j                  d| «      D «       «      S )z[
    Replace any other markers, symbols, punctuations with a space, keeping diacritics
    r'   c              3   óX   K  — | ]"  }t        j                  |«      d    dv rdn|–— Œ$ y­w)r   r(   r)   N©r+   r,   ©r5   r6   s     r/   r7   z!remove_symbols.<locals>.<genexpr>I   s,   è ø€ ÒoÈœ+×.Ñ.¨qÓ1°!Ñ4¸Ñ=‘3À1ÓDÑoùó   ‚(*ÚNFKCr9   ©r#   s    r/   Úremove_symbolsrD   E   s(   € ð �7‰7ÑoÌk×NcÑNcÐdjÐlmÓNnÔoÓoÐor1   c                 óZ   — dj                  d„ t        j                  d| «      D «       «      S )a,  
    Replace symbols and punctuation with a space, keeping combining marks.

    Unlike `remove_symbols`, combining marks (category 'M') are preserved. This
    is required for scripts like Devanagari, where vowel signs (matras) and the
    virama are combining marks that are integral to words.
    r'   c              3   óX   K  — | ]"  }t        j                  |«      d    dv rdn|–— Œ$ y­w)r   ÚSPr)   Nr?   r@   s     r/   r7   z,remove_symbols_keep_marks.<locals>.<genexpr>T   s,   è ø€ ÒnÈœ+×.Ñ.¨qÓ1°!Ñ4¸Ñ<‘3À!ÓCÑnùrA   rB   r9   rC   s    r/   Úremove_symbols_keep_marksrH   L   s(   € ð �7‰7ÑnÌ[×MbÑMbÐciÐklÓMmÔnÓnÐnr1   c                   ó*   — e Zd Zddedefd„Zdefd„Zy)ÚBasicTextNormalizerÚremove_diacriticsÚsplit_lettersc                 ó8   — |rt         nt        | _        || _        y r3   )r<   rD   ÚcleanrL   )ÚselfrK   rL   s      r/   Ú__init__zBasicTextNormalizer.__init__X   s   € Ù6GÕ2Ì^ˆŒ
Ø*ˆÕr1   r#   c                 ón  — |j                  «       }t        j                  dd|«      }t        j                  dd|«      }| j                  |«      j                  «       }| j                  r4dj                  t        j                  d|t        j                  «      «      }t        j                  dd|«      }|S )Nú[<\[][^>\]]*[>\]]r'   ú\(([^)]+?)\)r)   z\Xú\s+)	ÚlowerÚreÚsubrN   rL   r:   ÚregexÚfindallÚU©rO   r#   s     r/   Ú__call__zBasicTextNormalizer.__call__\   s‡   € Ø�G‰G‹IˆÜ�F‰FÐ'¨¨QÓ/ˆÜ�F‰F�? B¨Ó*ˆØ�J‰J�q‹M×ÑÓ!ˆà×ÒØ—‘œŸ™ u¨a´·±Ó9Ó:ˆAä�F‰F�6˜3 Ó"ˆàˆr1   N)FF©Ú__name__Ú
__module__Ú__qualname__ÚboolrP   Ústrr\   r4   r1   r/   rJ   rJ   W   s!   „ ñ+¨$ð +Àtó +ð˜#ô r1   rJ   c                   ó&   — e Zd Zddefd„Zdefd„Zy)ÚBasicMultilingualTextNormalizerrK   c                 ó6   — |rt         | _        y t        | _        y r3   )r<   rH   rN   )rO   rK   s     r/   rP   z(BasicMultilingualTextNormalizer.__init__k   s   € ñ 7HÔ2ˆ�
ÔMfˆ�
r1   r#   c                 ó8  — |j                  «       }t        j                  dd|«      }t        j                  dd|«      }| j                  |«      j                  «       }t	        j                  dd|«      }t        j                  dd|«      j                  «       }|S )NrR   r'   rS   z[^\w\s]rT   r)   )rU   rV   rW   rN   rX   Ústripr[   s     r/   r\   z(BasicMultilingualTextNormalizer.__call__q   s|   € Ø�G‰G‹IˆÜ�F‰FÐ'¨¨QÓ/ˆÜ�F‰F�? B¨Ó*ˆØ�J‰J�q‹M×ÑÓ!ˆô �I‰I�j " aÓ(ˆÜ�F‰F�6˜3 Ó"×(Ñ(Ó*ˆàˆr1   N)Tr]   r4   r1   r/   rd   rd   j   s   „ ñg¨$ó gð
˜#ô 
r1   rd   c                   ób   ‡ — e Zd ZdZˆ fd„Zdee   dee   fd„Zdefd„Z	defd„Z
defd	„Zˆ xZS )
ÚEnglishNumberNormalizerav  
    Convert any spelled-out numbers into arabic numbers, while handling:

    - remove any commas
    - keep the suffixes such as: `1960s`, `274th`, `32nd`, etc.
    - spell out currency symbols after the number. e.g. `$20 million` -> `20000000 dollars`
    - spell out `one` and `ones`
    - interpret successive single-digit numbers as nominal: `one oh one` -> `101`
    c                 óÀ  •— t         ‰| �  «        h d£| _        t        g d¢d¬«      D ��ci c]  \  }}||“Œ
 c}}| _        | j                  j                  «       D ��ci c]  \  }}|dk(  rdn|dz   |df“Œ c}}| _        dd	d
ddddœ| j                  j                  «       D ��ci c]/  \  }}|dkD  r%|dk7  r |dk7  r||j                  d«      rdndz   |df“Œ1 c}}¥| _        i | j                  ¥| j                  ¥| _	        dddddddddœ| _
        | j                  j                  «       D ��ci c]  \  }}|j                  dd«      |df“Œ c}}| _        | j                  j                  «       D ��ci c]  \  }}|j                  dd «      |df“Œ c}}| _        i | j                  ¥| j                  ¥| _        d!d"d#d$d%d&d'd(d)d*d+d,d-œ| _        | j                  j                  «       D ��ci c]  \  }}|dz   |df“Œ c}}| _        | j                  j                  «       D ��ci c]  \  }}|dz   |df“Œ c}}| _        i | j                   ¥| j"                  ¥| _        h | j                  £| j                  £| j                  £| _        d.d.d/d/d0œ| _        d1d1d2d2d3d3d4d4d5œ| _        t-        t/        | j(                  j1                  «       «      t/        | j*                  j1                  «       «      z   «      | _        d6d7id7d8œ| _        h d9£| _        | j                  | j                  | j                  | j                  | j                  | j                  | j$                  | j(                  | j*                  | j4                  | j6                  fD ��ch c]  }|D ]  }|’Œ Œ c}}| _        d:d;h| _        y c c}}w c c}}w c c}}w c c}}w c c}}w c c}}w c c}}w c c}}w )<N>   r   ÚohÚzero)ÚoneÚtwoÚthreeÚfourÚfiveÚsixÚsevenÚeightÚnineÚtenÚelevenÚtwelveÚthirteenÚfourteenÚfifteenÚsixteenÚ	seventeenÚeighteenÚnineteenr	   )Ústartrr   Úsixesr#   )r   r   )r	   Úst)é   Únd)é   Úrd)é   r   )é   r   )ÚzerothÚfirstÚsecondÚthirdÚfifthÚtwelfthr…   r‡   rˆ   ÚtÚhr   é   é   é(   é2   é<   éF   éP   éZ   )ÚtwentyÚthirtyÚfortyÚfiftyÚsixtyÚseventyÚeightyÚninetyÚyÚiesÚiethéd   éè  i@B i Êš;l    J)£l     �Iú5 l     ÈNÎZol     @=7M.cl      B¶3v^!< l      Pó „~Écegl       ©7§3M“e'l       (l
F3Y‘HqS )ÚhundredÚthousandÚmillionÚbillionÚtrillionÚquadrillionÚquintillionÚ
sextillionÚ
septillionÚ	octillionÚ	nonillionÚ	decillionú-ú+)ÚminusÚnegativeÚplusÚpositiveõ   Â£u   â‚¬ú$õ   Â¢)ÚpoundÚpoundsÚeuroÚeurosÚdollarÚdollarsÚcentÚcentsrÁ   ú%)ÚperÚpercent>   ÚandÚpointÚdoubleÚtriplerm   Úones)ÚsuperrP   ÚzerosÚ	enumeraterÊ   ÚitemsÚones_pluralÚendswithÚones_ordinalÚones_suffixedÚtensÚreplaceÚtens_pluralÚtens_ordinalÚtens_suffixedÚmultipliersÚmultipliers_pluralÚmultipliers_ordinalÚmultipliers_suffixedÚdecimalsÚpreceding_prefixersÚfollowing_prefixersÚsetÚlistÚvaluesÚprefixesÚ	suffixersÚspecialsÚwordsÚliteral_words)rO   ÚiÚnameÚvalueÚmappingÚkeyÚ	__class__s         €r/   rP   z EnglishNumberNormalizer.__init__‰   s  ø€ Ü‰ÑÔâ(ˆŒ
ô %ò GØô÷
á��4ð �!‰Gó
ˆŒ	ð W[×V_ÑV_×VeÑVeÓVg÷
ÙGRÀtÈU�t˜u’}‰G¨$°©*°u¸c°lÑBó
ˆÔð  ØØØØØ!ñ
ð $(§9¡9§?¡?Ó#4÷á�D˜%Ø˜1’9 ¨!¢°¸²ð ˜tŸ}™}¨SÔ1™°tÑ<¸uÀd¸mÑKóð
ˆÔð G × 0Ñ 0ÐF°D×4EÑ4EÐFˆÔð ØØØØØØØñ	
ˆŒ	ð W[×V_ÑV_×VeÑVeÓVg×hÁ{ÀtÈU˜DŸL™L¨¨eÓ4°u¸c°lÑBÓhˆÔØY]×YbÑYb×YhÑYhÓYj×kÉ+È$ÐPU˜TŸ\™\¨#¨vÓ6¸À¸ÑEÓkˆÔØF × 0Ñ 0ÐF°D×4EÑ4EÐFˆÔð ØØ Ø$Ø)Ø0Ø4Ø7Ø;Ø>ØBØFñ
ˆÔð PT×O_ÑO_×OeÑOeÓOg×"hÁÀÀe 4¨#¡:°°s¨|Ñ#;Ó"hˆÔØRV×RbÑRb×RhÑRhÓRj×#kÁ;À4È D¨4¡K°%¸°Ñ$>Ó#kˆÔ Ø$[ t×'>Ñ'>Ð$[À$×BZÑBZÐ$[ˆÔ!Ø=˜$Ÿ)™)Ð= d§i¡iÐ=°$·*±*Ð=ˆŒð ØØØñ	$
ˆÔ ð ØØØØØØØñ	$
ˆÔ ô œD ×!9Ñ!9×!@Ñ!@Ó!BÓCÄdÈ4×KcÑKc×KjÑKjÓKlÓFmÑmÓnˆŒà˜C�=Øñ
ˆŒò =ˆŒð
 —
‘
Ø—	‘	Ø×"Ñ"Ø—	‘	Ø×"Ñ"Ø× Ñ Ø×)Ñ)Ø×(Ñ(Ø×(Ñ(Ø—‘Ø—‘ð÷
àð ò
ð ò ð
Øó
ˆŒ
ð" $ V˜_ˆÕùóG
ùó
ùóùó$ iùÛkùó" #iùÛ#kùó6
s/   «N0ÁN6Â%4N<Ä/OÅ4OÇ,OÈ$OÎOrå   Úreturnc              #   óà  ‡ ‡‡K  — d Šd Šd}dt         fd„}dt        t            dt        fˆ fd„}dt        t         t        f   fˆˆfd„}t        |«      d	k(  ry t        |«      D �]y  \  }}|d	k7  r||d
z
     nd }|t        |«      d
z
  k7  r||d
z      nd }	|rd}Œ6|	d uxr t        j                  d|	«      }
|d	   ‰ j                  v }|r|d
d  n|}t        j                  d|«      r„ ||«      }|€t        d«      ‚‰�Ct        ‰t         «      r)‰j                  d«      rt        ‰«      t        |«      z   ŠŒÒ |‰«      –— |r|d	   n‰Š|j                  d
k(  r|j                  Š�Œ|Š�Œ|‰ j                  vr‰�
 |‰«      –—  ||«      –— �Œ,|‰ j                   v rf|dz   t        |«      k  r||dz      nd } ||	«      xr ‰d uxs  ||«      }|dk(  r|s‰�
 |‰«      –—  ||«      –— �ŒŒt        ‰xs d«      dz   Š�Œ |‰ j"                  v rÇ‰ j"                  |   }‰€|Š�ŒÃt        ‰t         «      s|‰ j"                  v r?|‰ j$                  v r|dk  r‰d d t        |«      z   Š�Œt        ‰«      t        |«      z   Š�Œ |dk  r(‰dz  d	k(  r‰|z  Š�Œ4t        ‰«      t        |«      z   Š�ŒM‰dz  d	k(  r‰|z  Š�Œ\t        ‰«      t        |«      z   Š�Œu|‰ j&                  v �r.‰ j&                  |   \  }}‰€ |t        |«      |z   «      –— nÿt        ‰t         «      s|‰ j"                  v rS|‰ j$                  v r"|dk  r |‰d d t        |«      z   |z   «      –— n± |t        ‰«      t        |«      z   |z   «      –— nŽ|dk  rE‰dz  d	k(  r |t        ‰|z   «      |z   «      –— ng |t        ‰«      t        |«      z   |z   «      –— nD‰dz  d	k(  r |t        ‰|z   «      |z   «      –— n" |t        ‰«      t        |«      z   |z   «      –— d Š�Œ²|‰ j$                  v rf‰ j$                  |   }‰€|Š�ŒÕt        ‰t         «      rt        ‰«      t        |«      z   Š�Œþ‰dz  d	k(  r‰|z  Š�Œt        ‰«      t        |«      z   Š�Œ&|‰ j(                  v r§‰ j(                  |   \  }}‰€ |t        |«      |z   «      –— �Œ`t        ‰t         «      r$ |t        ‰«      t        |«      z   |z   «      –— �Œ”‰dz  d	k(  r |t        ‰|z   «      |z   «      –— �Œ· |t        ‰«      t        |«      z   |z   «      –— �ŒÛ|‰ j*                  v r‰ j*                  |   }‰€|Š�Œþt        ‰t         «      s‰d	k(  r> |‰«      }|�||z  nd }|�|j                  d
k(  r|j                  Š�ŒC |‰«      –— |Š�ŒQ‰dz  dz  }‰dz  }|||z  z   Š�Œh|‰ j,                  v rÎ‰ j,                  |   \  }}‰€ |t        |«      |z   «      –— nŸt        ‰t         «      rd |‰«      }|�||z  nd }|�0|j                  d
k(  r! |t        |j                  «      |z   «      –— nL |‰«      –—  |t        |«      |z   «      –— n+‰dz  dz  }‰dz  }|||z  z   Š |t        ‰«      |z   «      –— d Š�ŒD|‰ j.                  v r9‰�
 |‰«      –— |	‰ j                  v s|
r‰ j.                  |   Š�Œ ||«      –— �Œ‹|‰ j0                  v r)‰�‰ j0                  |   Š |‰«      –— �Œ¶ ||«      –— �ŒÂ|‰ j2                  v r|‰�n‰ j2                  |   }t        |t4        «      r7|	|v r |t        ‰«      ||	   z   «      –— d}�Œ |‰«      –—  ||«      –— �Œ( |t        ‰«      |z   «      –— �Œ@ ||«      –— �ŒL|‰ j6                  v �r|	‰ j                  vr|
s‰�
 |‰«      –—  ||«      –— �Œƒ|dk(  r(|‰ j*                  vs�Œ˜‰�
 |‰«      –—  ||«      –— �Œ°|dk(  s|dk(  r{|	‰ j"                  v s|	‰ j                   v rG|dk(  rdnd}‰ j"                  j9                  |	d	«      }t        ‰xs d«      t        |«      |z  z   Šd}�Œ‰�
 |‰«      –—  ||«      –— �Œ5|dk(  r&|	‰ j:                  v s|
s�ŒLt        ‰xs d«      dz   Š�Œ`t        d|› �«      ‚t        d|› �«      ‚ ‰� |‰«      –— y y ­w)NFr#   c                 ó8   — 	 t        | «      S # t        $ r Y y w xY wr3   )r   Ú
ValueErrorrC   s    r/   Úto_fractionz:EnglishNumberNormalizer.process_words.<locals>.to_fractionø   s#   € ðÜ “{Ð"øÜò Ùðús   ‚
 �	˜Útokenrí   c                 ó®   •— | duxrO t        t        j                  d| «      xs. | ‰j                  v xs | ‰j                  v xs | ‰j
                  v «      S )zDTrue for tokens that continue a digit sequence ("four", "oh", "20").Nz^\d+$)ra   rV   ÚmatchrÌ   rÊ   rÓ   )rò   rO   s    €r/   Úis_digit_tokenz=EnglishNumberNormalizer.process_words.<locals>.is_digit_tokenþ   s_   ø€ à Ð$ò ¬Ü—‘˜ 5Ó)ò &Ø˜DŸJ™JÐ&ò&à˜DŸI™IÐ%ò&ð ˜DŸI™IÐ%ó	*ð r1   Úresultc                 ó4   •— t        | «      } ‰�‰| z   } d Šd Š| S r3   )rb   )rö   Úprefixré   s    €€r/   Úoutputz5EnglishNumberNormalizer.process_words.<locals>.output  s*   ø€ ä˜“[ˆFØÐ!Ø &™�ØˆEØˆFØˆMr1   r   r	   z^\d+(\.\d+)?$zConverting the fraction failedú.rƒ   rk   r'   Ú0é
   éÿÿÿÿr¤   r¥   TrÆ   rÈ   rÉ   r…   rÇ   zUnexpected token: )rb   r   ra   r   ÚintÚlenrÍ   rV   rô   râ   rð   Ú
isinstancerÐ   ÚdenominatorÚ	numeratorrå   rÌ   rÊ   rÓ   rÒ   r×   rØ   rÛ   rÝ   rÞ   rã   Údicträ   ÚgetrÜ   )rO   rå   Úskiprñ   rõ   rù   rç   ÚcurrentÚprevÚnextÚnext_is_numericÚ
has_prefixÚcurrent_without_prefixÚfÚnext2Ú	in_numberrÊ   ÚsuffixrÓ   Ú
multiplierÚpÚbeforeÚresidualÚrepeatsrø   ré   s   `                       @@r/   Úprocess_wordsz%EnglishNumberNormalizer.process_wordsó   s	  úè ø€ Ø $ˆØ+/ˆØˆð	œ3ó 	ð	¤(¬3¡-ð 	´Dõ 	ð	œ5¤¤c ™?ö 	ô ˆu‹:˜Š?Øä# EÓ*ó S	A‰JˆAˆwØ#$¨¢6�5˜˜Q™’<¨tˆDØ#$¬¨E«
°Q©Ò#6�5˜˜Q™’<¸DˆDÙØ�Øà"¨$Ð.ÒS´2·8±8Ð<LÈdÓ3SˆOØ  ™ t§}¡}Ð4ˆJÙ4> W¨Q¨R¡[ÀGÐ"Ü�x‰xÐ(Ð*@ÔAáÐ 6Ó7�Ø�9Ü$Ð%EÓFÐFàÐ$Ü! %¬Ô-°%·.±.ÀÔ2Eä # E£
¬S°«\Ñ 9˜Ø á$ U›mÒ+á'1˜ š°v�Ø—=‘= AÒ%ØŸK™K’Eà2’EØ §
¡
Ñ*àÐ$Ù  ›-Ò'Ù˜W“oÔ%Ø˜DŸJ™JÑ&ð )*¨A©´°E³
Ò(:˜˜a !™ešÀ�Ù*¨4Ó0ò Ø Ð%Ò>©¸Ó)>ð ð ˜d’?©9ØÐ(Ù$ U›mÒ+Ù  ›/Ô)ä ¢¨Ó,¨sÑ2’EØ˜DŸI™IÑ%Ø—y‘y Ñ)�à�=Ø ’EÜ ¤sÔ+¨t°t·y±yÑ/@Ø˜tŸy™yÑ(¨T°BªYØ % c r 
¬S°«YÑ 6šä # E£
¬S°«YÑ 6šØ˜B’YØ˜r‘z Q’Ø ™šä # E£
¬S°«YÑ 6šà˜s‘{ aÒ'Ø ™šä # E£
¬S°«YÑ 6šØ˜D×.Ñ.Ò.à#×1Ñ1°'Ñ:‘��fØ�=Ù ¤ T£¨VÑ!3Ó4Ó4Ü ¤sÔ+¨t°t·y±yÑ/@Ø˜tŸy™yÑ(¨T°BªYÙ$ U¨3¨B Z´#°d³)Ñ%;¸fÑ%DÓEÓEá$¤S¨£Z´#°d³)Ñ%;¸fÑ%DÓEÓEØ˜B’YØ˜r‘z Q’Ù$¤S¨°©Ó%6¸Ñ%?Ó@Ó@á$¤S¨£Z´#°d³)Ñ%;¸fÑ%DÓEÓEà˜s‘{ aÒ'Ù$¤S¨°©Ó%6¸Ñ%?Ó@Ó@á$¤S¨£Z´#°d³)Ñ%;¸fÑ%DÓEÒEØ’Ø˜DŸI™IÑ%Ø—y‘y Ñ)�Ø�=Ø ’EÜ ¤sÔ+Ü ›J¬¨T«Ñ2’Eà˜s‘{ aÒ'Ø ™šä # E£
¬S°«YÑ 6šØ˜D×.Ñ.Ñ.à#×1Ñ1°'Ñ:‘��fØ�=Ù ¤ T£¨VÑ!3Ó4Ô4Ü ¤sÔ+Ù ¤ U£¬c°$«iÑ!7¸&Ñ!@ÓAÔAà˜s‘{ aÒ'Ù$¤S¨°©Ó%6¸Ñ%?Ó@Ô@á$¤S¨£Z´#°d³)Ñ%;¸fÑ%DÓEÔEØ˜D×,Ñ,Ñ,Ø!×-Ñ-¨gÑ6�
Ø�=Ø&’EÜ ¤sÔ+¨u¸ªzÙ# EÓ*�AØ*+¨-˜˜Jš¸T�AØ�}¨¯©¸!Ò);Ø !§¡šá$ U›mÒ+Ø *šà" d™]¨TÑ1�FØ$ t™|�HØ" X°
Ñ%:Ñ:’EØ˜D×5Ñ5Ñ5Ø%)×%>Ñ%>¸wÑ%GÑ"�
˜FØ�=Ù ¤ Z£°6Ñ!9Ó:Ó:Ü ¤sÔ+Ù# EÓ*�AØ*+¨-˜˜Jš¸T�AØ�}¨¯©¸!Ò);Ù$¤S¨¯©Ó%5¸Ñ%>Ó?Ó?á$ U›mÒ+Ù$¤S¨£_°vÑ%=Ó>Ó>à" d™]¨TÑ1�FØ$ t™|�HØ" X°
Ñ%:Ñ:�EÙ ¤ U£¨fÑ!4Ó5Ò5Ø’Ø˜D×4Ñ4Ñ4àÐ$Ù  ›-Ò'à˜4Ÿ:™:Ñ%©Ø!×5Ñ5°gÑ>’Fá  ›/Ô)Ø˜D×4Ñ4Ñ4àÐ$Ø!×5Ñ5°gÑ>�FÙ  ›-Ô'á  ›/Ô)Ø˜DŸN™NÑ*àÐ$Ø!Ÿ^™^¨GÑ4�FÜ! &¬$Ô/Ø 6™>Ù"(¬¨U«°f¸T±lÑ)BÓ"CÒCØ#'šDá"(¨£-Ò/Ù"(¨£/Ô1á$¤S¨£Z°&Ñ%8Ó9Ô9á  ›/Ô)Ø˜DŸM™MÒ)Ø˜tŸz™zÑ)±/àÐ(Ù$ U›mÒ+Ù  ›/Ô)Ø Ò%à 4×#3Ñ#3Ó3Ø Ð,Ù"(¨£-Ò/Ù$ W›oÔ-Ø Ò(¨G°xÒ,?Ø˜tŸy™yÑ(¨D°D·J±JÑ,>Ø'.°(Ò':¡!À˜Ø#Ÿy™yŸ}™}¨T°1Ó5˜Ü # E¢K¨RÓ 0´3°t³9¸wÑ3FÑ F˜Ø#šà Ð,Ù"(¨£-Ò/Ù$ W›oÔ-Ø Ò'Ø˜tŸ}™}Ñ,³Ü # E¢K¨RÓ 0°3Ñ 6šô %Ð'9¸'¸Ð%CÓDÐDô !Ð#5°g°YÐ!?Ó@Ð@ðgS	Aðj ÐÙ˜“-Óð ùs   …_4c.ß;B2c.â/?c.r#   c                 óR  — g }t        j                  d|«      }t        |«      D ]ª  \  }}t        |j	                  «       «      dk(  rŒ#|t        |«      dz
  k(  r|j                  |«       ŒF|j                  |«       |j                  d¬«      d   }|| j                  v s|| j                  v r|j                  d«       Œš|j                  d«       Œ¬ d	j                  |«      }t        j                  d
d|«      }t        j                  dd|«      }t        j                  dd|«      }|S )Nz\band\s+a\s+half\br   r	   rƒ   )Úmaxsplitrý   z
point fivez
and a halfr)   z([a-z])([0-9])z\1 \2z([0-9])([a-z])z([0-9])\s+(st|nd|rd|th|s)\bú\1\2)rV   ÚsplitrÍ   rÿ   rg   ÚappendÚrsplitrÜ   rØ   r:   rW   )rO   r#   ÚresultsÚsegmentsrç   ÚsegmentÚ	last_words          r/   Ú
preprocessz"EnglishNumberNormalizer.preprocessë  s  € àˆä—8‘8Ð1°1Ó5ˆÜ# HÓ-ò 	1‰JˆAˆwÜ�7—=‘=“?Ó# qÒ(ØØ”C˜“M AÑ%Ò%Ø—‘˜wÕ'à—‘˜wÔ'Ø#ŸN™N°A˜NÓ6°rÑ:�	Ø §¡Ñ-°¸d×>NÑ>NÑ1NØ—N‘N <Õ0à—N‘N <Õ0ð	1ð �H‰H�WÓˆô �F‰FÐ$ h°Ó2ˆÜ�F‰FÐ$ h°Ó2ˆô �F‰FÐ1°7¸AÓ>ˆàˆr1   c                 ó¸   — dt         fd„}dt         fd„}t        j                  d||«      }t        j                  d||«      }t        j                  dd|«      }|S )NÚmc                 óÆ   — 	 | j                  d«      }| j                  d«      }t        | j                  d«      «      }|› |› d|d›�S # t        $ r | j                  cY S w xY w)Nr	   rƒ   r…   rú   Ú02d)Úgrouprþ   rð   Ústring)r"  ÚcurrencyÚintegerrÂ   s       r/   Úcombine_centsz:EnglishNumberNormalizer.postprocess.<locals>.combine_cents	  sa   € ð ØŸ7™7 1›:�ØŸ'™' !›*�Ü˜AŸG™G A›J›�Ø"˜ G 9¨A¨e°C¨[Ð9Ð9øÜò  Ø—x‘x’ð ús   ‚AA ÁA ÁA c                 ót   — 	 dt        | j                  d«      «      › �S # t        $ r | j                  cY S w xY w)Nrº   r	   )rþ   r%  rð   r&  )r"  s    r/   Úextract_centsz:EnglishNumberNormalizer.postprocess.<locals>.extract_cents  s9   € ð ØœC §¡¨£
›OÐ,Ð-Ð-øÜò  Ø—x‘x’ð ús   ‚ Ÿ7¶7u,   ([â‚¬Â£$])([0-9]+) (?:and )?Â¢([0-9]{1,2})\bu   [â‚¬Â£$]0.([0-9]{1,2})\bz	\b1(s?)\bzone\1)r   rV   rW   )rO   r#   r)  r+  s       r/   Úpostprocessz#EnglishNumberNormalizer.postprocess  s\   € ð	 œUó 	 ð	 œUó 	 ô �F‰FÐBÀMÐSTÓUˆÜ�F‰FÐ.°¸qÓAˆô �F‰F�< ¨1Ó-ˆàˆr1   c                 ó´   — | j                  |«      }dj                  d„ | j                  |j                  «       «      D «       «      }| j	                  |«      }|S )Nr)   c              3   ó&   K  — | ]	  }|€Œ|–— Œ y ­wr3   r4   )r5   Úwords     r/   r7   z3EnglishNumberNormalizer.__call__.<locals>.<genexpr>#  s   è ø€ ÒX˜dÀtÑGW”TÑXùs   ‚Š)r   r:   r  r  r,  r[   s     r/   r\   z EnglishNumberNormalizer.__call__!  sJ   € Ø�O‰O˜AÓˆØ�H‰HÑX d×&8Ñ&8¸¿¹»Ó&CÔXÓXˆØ×Ñ˜QÓˆàˆr1   )r^   r_   r`   Ú__doc__rP   r   rb   r   r  r   r,  r\   Ú__classcell__)rì   s   @r/   ri   ri   ~   sR   ø„ ñôh-ðTv  4¨¡9ð v °¸#±ó v ðp˜Có ð:˜Só ð2˜#÷ r1   ri   c                   ó"   — e Zd ZdZd„ Zdefd„Zy)ÚEnglishSpellingNormalizerz~
    Applies British-American spelling mappings as listed in [1].

    [1] https://www.tysto.com/uk-us-spelling-list.html
    c                 ó   — || _         y r3   ©rê   )rO   Úenglish_spelling_mappings     r/   rP   z"EnglishSpellingNormalizer.__init__0  s	   € Ø/ˆ�r1   r#   c                 óT   ‡ — dj                  ˆ fd„|j                  «       D «       «      S )Nr)   c              3   óV   •K  — | ]   }‰j                   j                  ||«      –— Œ" y ­wr3   ©rê   r  ©r5   r/  rO   s     €r/   r7   z5EnglishSpellingNormalizer.__call__.<locals>.<genexpr>4  ó"   øè ø€ ÒK¸˜Ÿ™×(Ñ(¨¨t×4ÑKùó   ƒ&)©r:   r  r[   s   ` r/   r\   z"EnglishSpellingNormalizer.__call__3  ó   ø€ Ø�x‰xÓKÀÇÁÃÔKÓKÐKr1   N)r^   r_   r`   r0  rP   rb   r\   r4   r1   r/   r3  r3  )  s   „ ñò0ðL˜#ô Lr1   r3  c                   ó    — e Zd ZdZdedefd„Zy)ÚEnglishAcronymNormalizerah  
    Collapse sequences of single-character tokens (letters or digits) into single words.

    This normalizes acronym spacing so that both spaced-out and joined forms match:
        - "b b c" -> "bbc"
        - "5 g" -> "5g"

    Lone single-character words surrounded by multi-character words are left untouched
    (e.g. "a big cat" stays "a big cat").
    r#   rí   c                 óÌ  — |j                  «       }g }d}|t        |«      k  �r1t        ||   «      dk(  r÷||   j                  «       rä||   g}|dz   }|t        |«      k  rpt        ||   «      dk(  r_||   j                  «       rL|j                  ||   «       |dz  }|t        |«      k  r%t        ||   «      dk(  r||   j                  «       rŒLt	        d„ |D «       «      }|rdnd}t        |«      |k\  r!|j                  dj                  |«      «       n|j                  |«       |}n|j                  ||   «       |dz  }|t        |«      k  r�Œ1dj                  |«      S )Nr   r	   c              3   ó$   K  — | ]  }|d v –— Œ
 y­w))Úarç   Nr4   r@   s     r/   r7   z4EnglishAcronymNormalizer.__call__.<locals>.<genexpr>Q  s   è ø€ Ò%C¸! a¨:¤oÑ%Cùs   ‚r…   rƒ   r'   r)   )r  rÿ   Úisalnumr  Úanyr:   Úextend)	rO   r#   rå   rö   rç   ÚrunÚjÚhas_common_wordÚmin_runs	            r/   r\   z!EnglishAcronymNormalizer.__call__C  sE  € Ø—‘“	ˆØˆØˆØ”#�e“*‹nÜ�5˜‘8‹} Ò! e¨A¡h×&6Ñ&6Ô&8à˜Q‘x�j�Ø˜‘E�Øœ#˜e›*’n¬¨U°1©X«¸!Ò);ÀÀaÁ×@PÑ@PÔ@RØ—J‘J˜u Q™xÔ(Ø˜‘F�Að œ#˜e›*’n¬¨U°1©X«¸!Ò);ÀÀaÁ×@PÑ@PÕ@Rô
 #&Ñ%C¸sÔ%CÓ"C�Ù.™!°A�Ü�s“8˜wÒ&Ø—M‘M "§'¡'¨#£,Õ/à—M‘M #Ô&Ø‘à—‘˜e A™hÔ'Ø�Q‘�ð' ”#�e“*Œnð( �x‰x˜ÓÐr1   N)r^   r_   r`   r0  rb   r\   r4   r1   r/   r@  r@  7  s   „ ñ	ð ˜#ð   #ô  r1   r@  c                   ó&   — e Zd ZdZefd„Zdefd„Zy)ÚEnglishNameNormalizerzÉ
    Collapse common name spelling variants to a single canonical form.

    This is intentionally conservative and token-based so it can be extended
    with project-specific aliases when needed.
    c                 ó   — || _         y r3   r5  )rO   Úenglish_name_mappings     r/   rP   zEnglishNameNormalizer.__init__f  s	   € Ø+ˆ�r1   r#   c                 óT   ‡ — dj                  ˆ fd„|j                  «       D «       «      S )Nr)   c              3   óV   •K  — | ]   }‰j                   j                  ||«      –— Œ" y ­wr3   r9  r:  s     €r/   r7   z1EnglishNameNormalizer.__call__.<locals>.<genexpr>j  r;  r<  r=  r[   s   ` r/   r\   zEnglishNameNormalizer.__call__i  r>  r1   N)r^   r_   r`   r0  r
   rP   rb   r\   r4   r1   r/   rL  rL  ^  s    „ ñð -Dó ,ðL˜#ô Lr1   rL  c                   ó"   — e Zd Zefd„Zdefd„Zy)ÚEnglishTextNormalizerc                 ó  — g d¢}ddj                  |«      z   dz   | _        i dd“dd“d	d
“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“d d!“d"d#“d$d%“i d&d'“d(d)“d*d+“d,d-“d.d/“d0d1“d2d3“d4d5“d6d7“d8d9“d:d;“d<d=“d>d?“d@dA“dBdC“dDdE“dFdG“¥i dHdI“dJdK“dLdM“dNdO“dPdQ“dRdS“dTdU“dVdW“dXdY“dZd[“d\d]“d^d_“d`da“dbdY“dcdd“dedf“¥| _        t        «       | _        t        |«      | _        t        «       | _        t        «       | _
        t        | _        y )gN)zah-haza+h+m*za+h+a+ze+h+m*ze+m+ze+r+m*zh+a+h+zh+e+h+zh+m+zh+u+h+zm{2,}zm+h+m*zt+s+k+zu+g+h+zu+h+m*zu+h+u+[hm]*zu+m+h*ÚahemÚehehÚeheheÚehrÚhmmphÚhumÚhunhÚmhumÚmmkayz\b(ú|z)\bz\b(\d{1,2}):00\bz\1z	\bwon't\bzwill notz	\bcan't\bzcan notz	\blet's\bzlet usz	\bain't\bÚaintz	\by'all\bzyou allz	\bwanna\bzwant toz	\bgotta\bzgot toz	\bgonna\bzgoing toz\bi'ma\bzi am going toz\bimma\bz
\bwoulda\bz
would havez
\bcoulda\bz
could havez\bshoulda\bzshould havez	\bma'am\bÚmadamz\bmr\bzmister z\bmrs\bzmissus z\bst\bzsaint z\bdr\bzdoctor z\bprof\bz
professor z\bcapt\bzcaptain z\bgov\bz	governor z\bald\bz	alderman z\bgen\bzgeneral z\bsen\bzsenator z\brep\bzrepresentative z\bpres\bz
president z\brev\bz	reverend z\bhon\bz
honorable z\basst\bz
assistant z	\bassoc\bz
associate z\blt\bzlieutenant z\bcol\bzcolonel z\bjr\bzjunior z\bsr\bzsenior z\besq\bzesquire z	'd been\bz	 had beenz	's been\bz	 has beenz	'd gone\bz	 had gonez	's gone\bz	 has gonez	'd done\bz	 had donez's got\bz has gotzn't\bz notz're\bz arezB\b(it|he|she|what|that|who|here|there|how|when|where|why|this)'s\bz\1 isz'd\bz wouldz'll\bz willz't\bz've\bz havez'm\bz am)r:   Úignore_patternsÚ	replacersri   Ústandardize_numbersr3  Ústandardize_spellingsrL  Ústandardize_namesr@  Ústandardize_acronymsr   Úcompound_words)rO   r6  Úfiller_wordss      r/   rP   zEnglishTextNormalizer.__init__n  sú  € ò
ˆð*  &¨¯©°Ó(>Ñ>ÀÑGˆÔð=
ð   ð=
ð ˜*ð=
ð ˜)ð=
ð ˜(ð=
ð ˜&ð=
ð ˜)ð=
ð ˜)ð=
ð ˜(ð=
ð  ˜*ð!=
ð" ˜ð#=
ð$ ˜ð%=
ð& ˜<ð'=
ð( ˜<ð)=
ð* ˜Mð+=
ð, ˜'ð-=
ð0 �yð1=
ð2 ˜	ñ3=
ð4 �xð5=
ð6 �yð7=
ð8 ˜ð9=
ð: ˜ð;=
ð< ˜ð==
ð> ˜ð?=
ð@ ˜
ðA=
ðB ˜
ðC=
ðD Ð)ðE=
ðF ˜ðG=
ðH ˜ðI=
ðJ ˜ðK=
ðL ˜ðM=
ðN ˜,ðO=
ðP �}ðQ=
ðR ˜
ðS=
ðT �yòU=
ðV �yðW=
ðX ˜
ðY=
ð\ ˜+ð]=
ð^ ˜+ð_=
ð` ˜+ða=
ðb ˜+ðc=
ðd ˜+ðe=
ðf ˜ðg=
ðj �fðk=
ðl �fðm=
ðn RÐS[ðo=
ðp �Xðq=
ðr �gðs=
ðt �Vðu=
ðv �gðw=
ðx �Uñy=
ˆŒô| $;Ó#<ˆÔ Ü%>Ð?WÓ%XˆÔ"Ü!6Ó!8ˆÔÜ$<Ó$>ˆÔ!ä9ˆÕr1   r#   c                 ó^  — |j                  «       }t        j                  dd|«      }t        j                  dd|«      }t        j                  | j                  d|«      }t        j                  dd|«      }| j                  j                  «       D ]  \  }}t        j                  |||«      }Œ t        j                  dd|«      }t        j                  dd	|«      }t        |d
¬«      }| j                  j                  «       D ]  \  }}t        j                  |||«      }Œ | j                  |«      }| j                  |«      }| j                  |«      }| j                  |«      }t        j                  dd	|«      }t        j                  dd|«      }t        j                  dd|«      }|S )NrR   r'   rS   z\s+'ú'z	(\d),(\d)r  z\.([^0-9]|$)z \1u
   .%$Â¢â‚¬Â£)r.   u   [.$Â¢â‚¬Â£]([^0-9])z	([^0-9])%z\1 rT   r)   )rU   rV   rW   r`  ra  rÎ   r<   rf  rb  rc  rd  re  )rO   r#   ÚpatternÚreplacements       r/   r\   zEnglishTextNormalizer.__call__Ó  sx  € Ø�G‰G‹Iˆä�F‰FÐ'¨¨QÓ/ˆÜ�F‰F�? B¨Ó*ˆÜ�F‰F�4×'Ñ'¨¨QÓ/ˆÜ�F‰F�7˜C Ó#ˆà$(§N¡N×$8Ñ$8Ó$:ò 	0Ñ ˆG�[Ü—‘�w ¨QÓ/‰Að	0ô �F‰F�< ¨!Ó,ˆÜ�F‰F�? F¨AÓ.ˆÜ)¨!°,Ô?ˆð %)×$7Ñ$7×$=Ñ$=Ó$?ò 	0Ñ ˆG�[Ü—‘�w ¨QÓ/‰Að	0ð ×$Ñ$ QÓ'ˆØ×&Ñ& qÓ)ˆØ×"Ñ" 1Ó%ˆØ×%Ñ% aÓ(ˆô �F‰FÐ)¨6°1Ó5ˆÜ�F‰F�< ¨Ó+ˆä�F‰F�6˜3 Ó"ˆàˆr1   N)r^   r_   r`   r   rP   rb   r\   r4   r1   r/   rR  rR  m  s   „ Ø0Kó c:ðJ˜#ô r1   rR  )r'   )rV   r+   Ú	fractionsr   Útypingr   r   r   r   r   Úenglish_abbreviationsr
   r   r   rX   r*   rb   r<   rD   rH   rJ   rd   ri   r3  r@  rL  rR  r4   r1   r/   ú<module>ro     s]  ðó  
Û Ý ß 9Õ 9ß tÑ tã ðØˆ$ðàˆ$ðð 	ˆ#ðð 	ˆ#ð	ð
 	ˆ$ðð 	ˆ$ðð 	ˆ$ðð 
ˆ4ðð 	ˆ#ðð 	ˆ#ðð 	ˆ#ðð 	ˆ#ðð 	ˆ$ðð 	ˆ$ðð 	ˆ#ðð  	ˆ#ð!Ð ñ(S Só Sð.p�có pðo ó o÷ñ ÷&ñ ÷(hñ h÷VLñ L÷$ ñ $ ÷NLñ L÷Dò Dr1   