§
    |@Äj„Q  ã                   ó¬   — d dl Z 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 ddlmZ  G d„ d¦  «        Z G d	„ d
¦  «        Z G d„ d¦  «        ZdS )é    N)ÚFraction)ÚIteratorÚListÚMatchÚOptionalÚUnion)Úwindowedé   )Úremove_symbols_and_diacriticsc                   ón   ‡ — 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£| _        d„ t          g d¢d¬¦  «        D ¦   «         | _        d„ | j                             ¦   «         D ¦   «         | _        ddd	d
dddœd„ | j                             ¦   «         D ¦   «         ¥| _        i | j        ¥| j        ¥| _        dddddddddœ| _	        d„ | j	                             ¦   «         D ¦   «         | _
        d„ | j	                             ¦   «         D ¦   «         | _        i | j
        ¥| j        ¥| _        ddddddd d!d"d#d$d%d&œ| _        d'„ | j                             ¦   «         D ¦   «         | _        d(„ | j                             ¦   «         D ¦   «         | _        i | j        ¥| j        ¥| _        h | j        £| j	        £| j        £| _        d)d)d*d*d+œ| _        d,d,d-d-d.d.d/d/d0œ| _        t)          t+          | j                             ¦   «         ¦  «        t+          | j                             ¦   «         ¦  «        z   ¦  «        | _        d1d2id2d3œ| _        h d4£| _        t)          d5„ | j        | j        | j        | j	        | j        | j        | j        | j        | j        | j        | j        fD ¦   «         ¦  «        | _        d6d7h| _        d S )8N>   ÚoÚohÚzeroc                 ó   — i | ]\  }}||“Œ	S © r   )Ú.0ÚiÚnames      úLC:\Projects\Historical\venv\Lib\site-packages\whisper/normalizers/english.pyú
<dictcomp>z4EnglishNumberNormalizer.__init__.<locals>.<dictcomp>   s.   € ð 
ð 
ð 
á��4ð �!ð
ð 
ð 
ó    )ÚoneÚtwoÚthreeÚfourÚfiveÚsixÚsevenÚeightÚnineÚtenÚelevenÚtwelveÚthirteenÚfourteenÚfifteenÚsixteenÚ	seventeenÚeighteenÚnineteenr
   )Ústartc                 ó4   — i | ]\  }}|d k    rdn|dz   |df“ŒS )r   ÚsixesÚsr   ©r   r   Úvalues      r   r   z4EnglishNumberNormalizer.__init__.<locals>.<dictcomp>6   sB   € ð 
ð 
ð 
á��eð ˜u’}�}ˆGˆG¨$°©*°u¸c°lð
ð 
ð 
r   )r   Úth)r
   Úst)é   Únd)é   Úrd)é   r3   )é   r3   )ÚzerothÚfirstÚsecondÚthirdÚfifthÚtwelfthc                 óv   — i | ]6\  }}|d k    ¯|dk    ¯|dk    ¯||                      d¦  «        rdndz   |df“Œ7S )r7   r9   r:   ÚtÚhr3   )Úendswithr1   s      r   r   z4EnglishNumberNormalizer.__init__.<locals>.<dictcomp>A   s]   € ð ð ð á�D˜%Ø˜1’9�9 ¨!¢ °¸²°ð ˜tŸ}š}¨SÑ1Ô1Ð;˜˜°tÑ<¸uÀd¸mà0;°°r   é   é   é(   é2   é<   éF   éP   éZ   )ÚtwentyÚthirtyÚfortyÚfiftyÚsixtyÚseventyÚeightyÚninetyc                 óF   — i | ]\  }}|                      d d¦  «        |df“ŒS )ÚyÚiesr0   ©Úreplacer1   s      r   r   z4EnglishNumberNormalizer.__init__.<locals>.<dictcomp>S   s=   € ð 
ð 
ð 
Ù7B°t¸UˆD�LŠL˜˜eÑ$Ô$ u¨c lð
ð 
ð 
r   c                 óF   — i | ]\  }}|                      d d¦  «        |df“ŒS )rV   Úiethr3   rX   r1   s      r   r   z4EnglishNumberNormalizer.__init__.<locals>.<dictcomp>V   s@   € ð 
ð 
ð 
á��eð �LŠL˜˜fÑ%Ô%¨¨t }ð
ð 
ð 
r   é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Ú	decillionc                 ó$   — i | ]\  }}|d z   |d f“ŒS ©r0   r   r1   s      r   r   z4EnglishNumberNormalizer.__init__.<locals>.<dictcomp>j   s3   € ð #
ð #
ð #
Ù)4¨¨uˆD�3‰J˜ ˜ð#
ð #
ð #
r   c                 ó$   — i | ]\  }}|d z   |d f“ŒS )r3   r   r1   s      r   r   z4EnglishNumberNormalizer.__init__.<locals>.<dictcomp>m   s3   € ð $
ð $
ð $
Ù+6¨4°ˆD�4‰K˜% ˜ð$
ð $
ð $
r   ú-ú+)ÚminusÚnegativeÚplusÚpositiveõ   Â£u   â‚¬ú$õ   Â¢)ÚpoundÚpoundsÚeuroÚeurosÚdollarÚdollarsÚcentÚcentsr|   ú%)ÚperÚpercent>   ÚandÚpointÚdoubleÚtriplec                 ó   — g | ]	}|D ]}|‘ŒŒ
S r   r   )r   ÚmappingÚkeys      r   ú
<listcomp>z4EnglishNumberNormalizer.__init__.<locals>.<listcomp>‘   sA   € ð ð ð àð #ðð ð ð ðð ð ð r   r   Úones)ÚsuperÚ__init__ÚzerosÚ	enumerater‰   ÚitemsÚones_pluralÚones_ordinalÚones_suffixedÚtensÚ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)ÚselfÚ	__class__s    €r   r‹   z EnglishNumberNormalizer.__init__   s®  ø€ Ý‰Œ×ÒÑÔÐà(Ð(Ð(ˆŒ
ð
ð 
å$ðð ð ð* ð-ñ ô ð
ñ 
ô 
ˆŒ	ð6
ð 
à#œyŸšÑ0Ô0ð
ñ 
ô 
ˆÔð
  ØØØØØ!ð
ð 
ðð à#'¤9§?¢?Ñ#4Ô#4ðñ ô ð
ˆÔð G Ô 0ÐF°DÔ4EÐFˆÔð ØØØØØØØð	
ð 	
ˆŒ	ð
ð 
ØFJÄiÇoÂoÑFWÔFWð
ñ 
ô 
ˆÔð
ð 
à#œyŸšÑ0Ô0ð
ñ 
ô 
ˆÔð G Ô 0ÐF°DÔ4EÐFˆÔð ØØ Ø$Ø)Ø0Ø4Ø7Ø;Ø>ØBØFð
ð 
ˆÔð#
ð #
Ø8<Ô8H×8NÒ8NÑ8PÔ8Pð#
ñ #
ô #
ˆÔð$
ð $
Ø:>Ô:J×:PÒ:PÑ:RÔ:Rð$
ñ $
ô $
ˆÔ ð%
ØÔ%ð%
àÔ&ð%
ˆÔ!ð >˜$œ)Ð= d¤iÐ=°$´*Ð=ˆŒð ØØØð	$
ð $
ˆÔ ð ØØØØØØØð	$
ð 	$
ˆÔ õ Ý�Ô)×0Ò0Ñ2Ô2Ñ3Ô3Ý�4Ô+×2Ò2Ñ4Ô4Ñ5Ô5ñ6ñ
ô 
ˆŒð
 ˜C�=Øð
ð 
ˆŒð =Ð<Ð<ˆŒåðð ð ”JØ”IØÔ&Ø”IØÔ&ØÔ$ØÔ-ØÔ,ØÔ,Ø”NØ”Mð ðñ ô ñ
ô 
ˆŒ
ð& $ V˜_ˆÔÐÐr   r£   Úreturnc              #   ó†  ‡‡K  — d Šd Šd}dt           fd„}dt          t           t          f         fˆˆfd„}t          |¦  «        dk    rd S t	          d g|z   d gz   d¦  «        D �]Ë\  }}}|rd}Œ|d uot          j        d|¦  «        }|d         | j        v }	|	r
|d	d …         n|}
t          j        d|
¦  «        rŠ ||
¦  «        }|€J ‚‰�Wt          ‰t           ¦  «        r5‰ 	                    d
¦  «        r t          ‰¦  «        t          |¦  «        z   ŠŒ² |‰¦  «        V — |	r|d         n‰Š|j
        d	k    r|j        ŠŒÞ|
ŠŒá|| j        vr‰� |‰¦  «        V —  ||¦  «        V — �Œ|| j        v rt          ‰pd¦  «        dz   Š�Œ'|| j        v ró| j        |         }‰€|Š�ŒCt          ‰t           ¦  «        s	|| j        v rZ|| j        v r0|dk     r*‰d         dk    sJ ‚‰d d…         t          |¦  «        z   Š�Œšt          ‰¦  «        t          |¦  «        z   Š�Œ»|dk     r1‰dz  dk    r‰|z  Š�ŒÑt          ‰¦  «        t          |¦  «        z   Š�Œò‰dz  dk    r‰|z  Š�Œt          ‰¦  «        t          |¦  «        z   Š�Œ#|| j        v �r|| j        |         \  }}‰€ |t          |¦  «        |z   ¦  «        V — �nGt          ‰t           ¦  «        s	|| j        v rt|| j        v r=|dk     r7‰d         dk    sJ ‚ |‰d d…         t          |¦  «        z   |z   ¦  «        V — nã |t          ‰¦  «        t          |¦  «        z   |z   ¦  «        V — nµ|dk     rX‰dz  dk    r! |t          ‰|z   ¦  «        |z   ¦  «        V — n… |t          ‰¦  «        t          |¦  «        z   |z   ¦  «        V — nW‰dz  dk    r! |t          ‰|z   ¦  «        |z   ¦  «        V — n- |t          ‰¦  «        t          |¦  «        z   |z   ¦  «        V — d Š�Œ©|| j        v rz| j        |         }‰€|Š�ŒÅt          ‰t           ¦  «        r!t          ‰¦  «        t          |¦  «        z   Š�Œû‰dz  dk    r‰|z  Š�Œt          ‰¦  «        t          |¦  «        z   Š�Œ,|| j        v rÏ| j        |         \  }}‰€ |t          |¦  «        |z   ¦  «        V — �Œft          ‰t           ¦  «        r/ |t          ‰¦  «        t          |¦  «        z   |z   ¦  «        V — �Œª‰dz  dk    r" |t          ‰|z   ¦  «        |z   ¦  «        V — �ŒÕ |t          ‰¦  «        t          |¦  «        z   |z   ¦  «        V — �Œ|| j        v r€| j        |         }‰€|Š�Œ t          ‰t           ¦  «        s‰dk    r; |‰¦  «        }|�||z  nd }|�|j
        d	k    r	|j        Š�Œe |‰¦  «        V — |Š�Œv‰dz  dz  }‰dz  }|||z  z   Š�Œ�|| j        v rê| j        |         \  }}‰€ |t          |¦  «        |z   ¦  «        V — n¶t          ‰t           ¦  «        ro |‰¦  «        }|�||z  nd }|�.|j
        d	k    r# |t          |j        ¦  «        |z   ¦  «        V — n] |‰¦  «        V —  |t          |¦  «        |z   ¦  «        V — n2‰dz  dz  }‰dz  }|||z  z   Š |t          ‰¦  «        |z   ¦  «        V — d Š�Œ€|| j        v r8‰� |‰¦  «        V — || j        v s|r| j        |         Š�Œ² ||¦  «        V — �ŒÁ|| j        v r-‰�| j        |         Š |‰¦  «        V — �Œè ||¦  «        V — �Œ÷|| j        v r™‰�ˆ| j        |         }t          |t.          ¦  «        rG||v r' |t          ‰¦  «        ||         z   ¦  «        V — d}�ŒO |‰¦  «        V —  ||¦  «        V — �Œk |t          ‰¦  «        |z   ¦  «        V — �ŒŠ ||¦  «        V — �Œ™|| j        v �r|| j        vr |s‰� |‰¦  «        V —  ||¦  «        V — �ŒÌ|dk    r'|| j        vr‰� |‰¦  «        V —  ||¦  «        V — �Œù|dk    s|dk    r}|| j        v s	|| j        v rM|dk    rdnd}| j                             |d¦  «        }t          ‰pd¦  «        t          |¦  «        |z  z   Šd}�Œd‰� |‰¦  «        V —  ||¦  «        V — �Œ‚|dk    r!|| j        v s|rt          ‰pd¦  «        d
z   Š�Œ©t7          d|› �¦  «        ‚t7          d|› �¦  «        ‚‰� |‰¦  «        V — d S d S )NFr0   c                 óD   — 	 t          | ¦  «        S # t          $ r Y d S w xY w©N)r   Ú
ValueErrorrk   s    r   Úto_fractionz:EnglishNumberNormalizer.process_words.<locals>.to_fractionª   s5   € ðÝ ‘{”{Ð"øÝð ð ð Ø�t�tðøøøs   ‚ ‘
žÚresultc                 ó<   •— t          | ¦  «        } ‰�‰| z   } d Šd Š| S rª   )Ústr)r­   Úprefixr2   s    €€r   Úoutputz5EnglishNumberNormalizer.process_words.<locals>.output°   s,   ø€ å˜‘[”[ˆFØÐ!Ø &™�ØˆEØˆFØˆMr   r   r7   z^\d+(\.\d+)?$r
   ú.Ú Ú0é
   éÿÿÿÿr\   r]   Tr�   rƒ   r„   r5   r‚   zUnexpected token: )r¯   r   ÚintÚlenr	   ÚreÚmatchr    Ú
isinstancerD   ÚdenominatorÚ	numeratorr£   rŒ   r‰   r’   r‘   r•   r–   r™   r›   rœ   r¡   Údictr¢   Úgetrš   r«   )r¥   r£   Úskipr¬   r±   ÚprevÚcurrentÚnextÚnext_is_numericÚ
has_prefixÚcurrent_without_prefixÚfr‰   Úsuffixr’   Ú
multiplierÚpÚbeforeÚresidualÚrepeatsr°   r2   s                       @@r   Úprocess_wordsz%EnglishNumberNormalizer.process_words¥   sª  øøè è € Ø $ˆØ+/ˆØˆð	�3ð 	ð 	ð 	ð 	ð	�5¥¥c œ?ð 	ð 	ð 	ð 	ð 	ð 	ð 	õ ˆu‰:Œ:˜Š?ˆ?ØˆFå#+¨T¨F°U©N¸d¸VÑ,CÀQÑ#GÔ#Gð C	Añ C	AÑˆD�'˜4Øð Ø�Øà"¨$Ð.ÐSµ2´8Ð<LÈdÑ3SÔ3SˆOØ  œ t¤}Ð4ˆJØ4>Ð%K W¨Q¨R¨R¤[ [ÀGÐ"ÝŒxÐ(Ð*@ÑAÔAð {Aà�KÐ 6Ñ7Ô7�Ø�}�}�}ØÐ$Ý! %­Ñ-Ô-ð ,°%·.².ÀÑ2EÔ2Eð ,å # E¡
¤
­S°©\¬\Ñ 9˜Ø à$˜f U™mœmÐ+Ð+Ð+à'1Ð=˜ œ˜°v�Ø”= AÒ%Ð%ØœK�E�Eà2�E�EØ ¤
Ð*Ð*àÐ$Ø ˜& ™-œ-Ð'Ð'Ð'Ø�f˜W‘o”oÐ%Ð%Ð%Ñ%Ø˜DœJÐ&Ð&Ý˜E˜K RÑ(Ô(¨3Ñ.�‘Ø˜DœIÐ%Ð%Ø”y Ô)�à�=Ø �E‘EÝ ¥sÑ+Ô+ð 7¨t°t´yÐ/@Ð/@à ¤	Ð)Ð)¨d°Rªi¨ià$ Rœy¨CÒ/Ð/Ð/Ð/Ø % c r c¤
­S°©Y¬YÑ 6˜™å # E¡
¤
­S°©Y¬YÑ 6˜™Ø˜B’Y�YØ˜r‘z Q’�Ø ™˜™å # E¡
¤
­S°©Y¬YÑ 6˜™à˜s‘{ aÒ'Ð'Ø ™˜™å # E¡
¤
­S°©Y¬YÑ 6˜™Ø˜DÔ.Ð.Ñ.à#Ô1°'Ô:‘��fØ�=Ø ˜&¥ T¡¤¨VÑ!3Ñ4Ô4Ð4Ð4Ð4Ñ4Ý ¥sÑ+Ô+ð F¨t°t´yÐ/@Ð/@Ø˜tœyÐ(Ð(¨T°BªY¨YØ$ Rœy¨CÒ/Ð/Ð/Ð/Ø$˜f U¨3¨B¨3¤Zµ#°d±)´)Ñ%;¸fÑ%DÑEÔEÐEÐEÐEÐEà$˜f¥S¨¡Z¤Zµ#°d±)´)Ñ%;¸fÑ%DÑEÔEÐEÐEÐEÐEØ˜B’Y�YØ˜r‘z Q’�Ø$˜f¥S¨°©Ñ%6Ô%6¸Ñ%?Ñ@Ô@Ð@Ð@Ð@Ð@à$˜f¥S¨¡Z¤Zµ#°d±)´)Ñ%;¸fÑ%DÑEÔEÐEÐEÐEÐEà˜s‘{ aÒ'Ð'Ø$˜f¥S¨°©Ñ%6Ô%6¸Ñ%?Ñ@Ô@Ð@Ð@Ð@Ð@à$˜f¥S¨¡Z¤Zµ#°d±)´)Ñ%;¸fÑ%DÑEÔEÐEÐEÐEØ�‘Ø˜DœIÐ%Ð%Ø”y Ô)�Ø�=Ø �E‘EÝ ¥sÑ+Ô+ð 7Ý ™JœJ­¨T©¬Ñ2�E‘Eà˜s‘{ aÒ'Ð'Ø ™˜™å # E¡
¤
­S°©Y¬YÑ 6˜™Ø˜DÔ.Ð.Ð.à#Ô1°'Ô:‘��fØ�=Ø ˜&¥ T¡¤¨VÑ!3Ñ4Ô4Ð4Ð4Ð4Ñ4Ý ¥sÑ+Ô+ð FØ ˜&¥ U¡¤­c°$©i¬iÑ!7¸&Ñ!@ÑAÔAÐAÐAÐAÑAà˜s‘{ aÒ'Ð'Ø$˜f¥S¨°©Ñ%6Ô%6¸Ñ%?Ñ@Ô@Ð@Ð@Ð@Ñ@à$˜f¥S¨¡Z¤Zµ#°d±)´)Ñ%;¸fÑ%DÑEÔEÐEÐEÐEÑEØ˜DÔ,Ð,Ð,Ø!Ô-¨gÔ6�
Ø�=Ø&�E‘EÝ ¥sÑ+Ô+ð ;¨u¸ªz¨zØ#˜ EÑ*Ô*�AØ*+¨-˜˜J™˜¸T�AØ�}¨¬¸!Ò);Ð);Ø !¤˜™à$˜f U™mœmÐ+Ð+Ð+Ø *˜™à" d™]¨TÑ1�FØ$ t™|�HØ" X°
Ñ%:Ñ:�E‘EØ˜DÔ5Ð5Ð5Ø%)Ô%>¸wÔ%GÑ"�
˜FØ�=Ø ˜&¥ Z¡¤°6Ñ!9Ñ:Ô:Ð:Ð:Ð:Ð:Ý ¥sÑ+Ô+ð 6Ø#˜ EÑ*Ô*�AØ*+¨-˜˜J™˜¸T�AØ�}¨¬¸!Ò);Ð);Ø$˜f¥S¨¬Ñ%5Ô%5¸Ñ%>Ñ?Ô?Ð?Ð?Ð?Ð?à$˜f U™mœmÐ+Ð+Ð+Ø$˜f¥S¨¡_¤_°vÑ%=Ñ>Ô>Ð>Ð>Ð>Ð>à" d™]¨TÑ1�FØ$ t™|�HØ" X°
Ñ%:Ñ:�EØ ˜&¥ U¡¤¨fÑ!4Ñ5Ô5Ð5Ð5Ð5Ø�‘Ø˜DÔ4Ð4Ð4àÐ$Ø ˜& ™-œ-Ð'Ð'Ð'à˜4œ:Ð%Ð%¨Ð%Ø!Ô5°gÔ>�F‘Fà ˜& ™/œ/Ð)Ð)Ð)Ñ)Ø˜DÔ4Ð4Ð4àÐ$Ø!Ô5°gÔ>�FØ ˜& ™-œ-Ð'Ð'Ð'Ñ'à ˜& ™/œ/Ð)Ð)Ð)Ñ)Ø˜DœNÐ*Ð*àÐ$Ø!œ^¨GÔ4�FÝ! &­$Ñ/Ô/ð :Ø 6˜>˜>Ø"( &­¨U©¬°f¸T´lÑ)BÑ"CÔ"CÐCÐCÐCØ#'˜D™Dà"( &¨¡-¤-Ð/Ð/Ð/Ø"( &¨¡/¤/Ð1Ð1Ð1Ñ1à$˜f¥S¨¡Z¤Z°&Ñ%8Ñ9Ô9Ð9Ð9Ð9Ñ9à ˜& ™/œ/Ð)Ð)Ð)Ñ)Ø˜DœMÐ)Ñ)Ø˜tœzÐ)Ð)°/Ð)àÐ(Ø$˜f U™mœmÐ+Ð+Ð+Ø ˜& ™/œ/Ð)Ð)Ð)Ñ)Ø Ò%Ð%à 4Ô#3Ð3Ð3Ø Ð,Ø"( &¨¡-¤-Ð/Ð/Ð/Ø$˜f W™oœoÐ-Ð-Ð-ùØ Ò(Ð(¨G°xÒ,?Ð,?Ø˜tœyÐ(Ð(¨D°D´JÐ,>Ð,>Ø'.°(Ò':Ð': ! !À˜Ø#œyŸ}š}¨T°1Ñ5Ô5˜Ý # E K¨RÑ 0Ô 0µ3°t±9´9¸wÑ3FÑ F˜Ø#˜™à Ð,Ø"( &¨¡-¤-Ð/Ð/Ð/Ø$˜f W™oœoÐ-Ð-Ð-Ñ-Ø Ò'Ð'Ø˜tœ}Ð,Ð,°Ð,Ý # E K¨RÑ 0Ô 0°3Ñ 6˜ùõ %Ð%C¸'Ð%CÐ%CÑDÔDÐDõ !Ð!?°gÐ!?Ð!?Ñ@Ô@Ð@àÐØ�&˜‘-”-ÐÐÐÐÐð Ðr   r0   c                 óŒ  — g }t          j        d|¦  «        }t          |¦  «        D ]Å\  }}t          |                     ¦   «         ¦  «        dk    rŒ+|t          |¦  «        dz
  k    r|                     |¦  «         ŒW|                     |¦  «         |                     d¬¦  «        d         }|| j        v s	|| j        v r|                     d¦  «         Œ°|                     d¦  «         ŒÆd	 	                    |¦  «        }t          j
        d
d|¦  «        }t          j
        dd|¦  «        }t          j
        dd|¦  «        }|S )Nz\band\s+a\s+half\br   r
   r5   )Úmaxsplitr¶   z
point fivez
and a halfú z([a-z])([0-9])z\1 \2z([0-9])([a-z])z([0-9])\s+(st|nd|rd|th|s)\bú\1\2)r¹   Úsplitr�   r¸   ÚstripÚappendÚrsplitrš   r–   ÚjoinÚsub)r¥   r0   ÚresultsÚsegmentsr   ÚsegmentÚ	last_words          r   Ú
preprocessz"EnglishNumberNormalizer.preprocess„  sA  € àˆå”8Ð1°1Ñ5Ô5ˆÝ# HÑ-Ô-ð 	1ð 	1‰JˆAˆwÝ�7—=’=‘?”?Ñ#Ô# qÒ(Ð(ØØ•C˜‘M”M AÑ%Ò%Ð%Ø—’˜wÑ'Ô'Ð'Ð'à—’˜wÑ'Ô'Ð'Ø#ŸNšN°A˜NÑ6Ô6°rÔ:�	Ø ¤Ð-Ð-°¸dÔ>NÐ1NÐ1NØ—N’N <Ñ0Ô0Ð0Ð0à—N’N <Ñ0Ô0Ð0Ð0à�HŠH�WÑÔˆõ ŒFÐ$ h°Ñ2Ô2ˆÝŒFÐ$ h°Ñ2Ô2ˆõ ŒFÐ1°7¸AÑ>Ô>ˆàˆr   c                 ó¶   — dt           fd„}dt           fd„}t          j        d||¦  «        }t          j        d||¦  «        }t          j        dd|¦  «        }|S )NÚmc                 óÞ   — 	 |                       d¦  «        }|                       d¦  «        }t          |                       d¦  «        ¦  «        }|› |› d|d›�S # t          $ r
 | j        cY S w xY w)Nr
   r5   r7   r²   Ú02d)Úgroupr·   r«   Ústring)rß   ÚcurrencyÚintegerr}   s       r   Úcombine_centsz:EnglishNumberNormalizer.postprocess.<locals>.combine_cents¢  s|   € ð ØŸ7š7 1™:œ:�ØŸ'š' !™*œ*�Ý˜AŸGšG A™JœJ™œ�Ø"Ð9 GÐ9Ð9¨eÐ9Ð9Ð9Ð9øÝð  ð  ð  Ø”x���ð øøøs   ‚AA ÁA,Á+A,c                 ó|   — 	 dt          |                      d¦  «        ¦  «        › �S # t          $ r
 | j        cY S w xY w)Nru   r
   )r·   râ   r«   rã   )rß   s    r   Úextract_centsz:EnglishNumberNormalizer.postprocess.<locals>.extract_cents«  sK   € ð Ø-�C §¢¨¡
¤
™OœOÐ-Ð-Ð-øÝð  ð  ð  Ø”x���ð øøøs   ‚$' §;º;u,   ([â‚¬Â£$])([0-9]+) (?:and )?Â¢([0-9]{1,2})\bu   [â‚¬Â£$]0.([0-9]{1,2})\bz	\b1(s?)\bzone\1)r   r¹   rØ   )r¥   r0   ræ   rè   s       r   Úpostprocessz#EnglishNumberNormalizer.postprocess¡  s}   € ð	 �Uð 	 ð 	 ð 	 ð 	 ð	 �Uð 	 ð 	 ð 	 ð 	 õ ŒFÐBÀMÐSTÑUÔUˆÝŒFÐ.°¸qÑAÔAˆõ ŒF�< ¨1Ñ-Ô-ˆàˆr   c                 óâ   — |                       |¦  «        }d                     d„ |                      |                     ¦   «         ¦  «        D ¦   «         ¦  «        }|                      |¦  «        }|S )NrÑ   c              3   ó   K  — | ]}|®|V — Œ	d S rª   r   )r   Úwords     r   ú	<genexpr>z3EnglishNumberNormalizer.__call__.<locals>.<genexpr>¼  s'   è è € ÐXÐX˜dÀtÐGW�TÐGWÐGWÐGWÐGWÐXÐXr   )rÝ   r×   rÎ   rÓ   ré   ©r¥   r0   s     r   Ú__call__z EnglishNumberNormalizer.__call__º  sa   € Ø�OŠO˜AÑÔˆØ�HŠHÐXÐX d×&8Ò&8¸¿º¹¼Ñ&CÔ&CÐXÑXÔXÑXÔXˆØ×Ò˜QÑÔˆàˆr   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r‹   r   r¯   r   rÎ   rÝ   ré   rï   Ú__classcell__)r¦   s   @r   r   r      sÊ   ø€ € € € € ðð ðL-ð L-ð L-ð L-ð L-ð\]  4¨¤9ð ] °¸#´ð ] ð ] ð ] ð ] ð~˜Cð ð ð ð ð:˜Sð ð ð ð ð2˜#ð ð ð ð ð ð ð ð r   r   c                   ó$   — e Zd ZdZd„ Zdefd„ZdS )ÚEnglishSpellingNormalizerz~
    Applies British-American spelling mappings as listed in [1].

    [1] https://www.tysto.com/uk-us-spelling-list.html
    c                 óÖ   — t           j                             t           j                             t          ¦  «        d¦  «        }t          j        t          |¦  «        ¦  «        | _        d S )Nzenglish.json)	ÚosÚpathr×   ÚdirnameÚ__file__ÚjsonÚloadÚopenr†   )r¥   Úmapping_paths     r   r‹   z"EnglishSpellingNormalizer.__init__É  sB   € Ý”w—|’|¥B¤G§O¢OµHÑ$=Ô$=¸~ÑNÔNˆÝ”y¥ lÑ!3Ô!3Ñ4Ô4ˆŒˆˆr   r0   c                 ój   ‡ — d                      ˆ fd„|                     ¦   «         D ¦   «         ¦  «        S )NrÑ   c              3   óN   •K  — | ]}‰j                              ||¦  «        V — Œ d S rª   )r†   r¿   )r   rì   r¥   s     €r   rí   z5EnglishSpellingNormalizer.__call__.<locals>.<genexpr>Î  s5   øè è € ÐKÐK¸˜œ×(Ò(¨¨tÑ4Ô4ÐKÐKÐKÐKÐKÐKr   )r×   rÓ   rî   s   ` r   rï   z"EnglishSpellingNormalizer.__call__Í  s2   ø€ Ø�xŠxÐKÐKÐKÐKÀÇÂÁÄÐKÑKÔKÑKÔKÐKr   N)rð   rñ   rò   ró   r‹   r¯   rï   r   r   r   rö   rö   Â  sO   € € € € € ðð ð5ð 5ð 5ðL˜#ð Lð Lð Lð Lð Lð Lr   rö   c                   ó    — e Zd Zd„ Zdefd„ZdS )ÚEnglishTextNormalizerc                 ób  — d| _         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,“d-d.“d/d0“d1d2“d3d4“d5d6“d7d8“d9d:“d;d<“d=d>“d?d@“dAdB“dCdD“¥dEdFdGdHdIdJdKdLdMdNdOdPdLdQdRdSœ¥| _        t          ¦   «         | _        t	          ¦   «         | _        d S )TNz\b(hmm|mm|mhm|mmm|uh|um)\bz	\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esquire z	 had beenz	 has beenz	 had gonez	 has gonez	 had donez has gotz notz arez isz wouldz willz havez am)z\besq\bz	'd been\bz	's been\bz	'd gone\bz	's gone\bz	'd done\bz's got\bzn't\bz're\bz's\bz'd\bz'll\bz't\bz've\bz'm\b)Úignore_patternsÚ	replacersr   Ústandardize_numbersrö   Ústandardize_spellings)r¥   s    r   r‹   zEnglishTextNormalizer.__init__Ò  s#  € Ø<ˆÔð6
à˜*ð6
ð ˜)ð6
ð ˜(ð	6
ð
 ˜&ð6
ð ˜)ð6
ð ˜)ð6
ð ˜(ð6
ð ˜*ð6
ð ˜ð6
ð ˜ð6
ð ˜<ð6
ð ˜<ð6
ð ˜Mð6
ð ˜'ð6
ð" �yð#6
ð$ ˜	ð%6
ð& �xð'6
ð 6
ð( �yð)6
ð* ˜ð+6
ð, ˜ð-6
ð. ˜ð/6
ð0 ˜ð16
ð2 ˜
ð36
ð4 ˜
ð56
ð6 Ð)ð76
ð8 ˜ð96
ð: ˜ð;6
ð< ˜ð=6
ð> ˜ð?6
ð@ ˜,ðA6
ðB �}ðC6
ðD ˜
ðE6
ðF �yðG6
ðH �yðI6
ð 6
ðJ #à%Ø%Ø%Ø%Ø%Ø#àØØØØØØØðk6
ð 6
ð 6
ˆŒõn $;Ñ#<Ô#<ˆÔ Ý%>Ñ%@Ô%@ˆÔ"Ð"Ð"r   r0   c                 ó¤  — |                      ¦   «         }t          j        dd|¦  «        }t          j        dd|¦  «        }t          j        | j        d|¦  «        }t          j        dd|¦  «        }| j                             ¦   «         D ]\  }}t          j        |||¦  «        }Œt          j        dd|¦  «        }t          j        dd	|¦  «        }t          |d
¬¦  «        }|                      |¦  «        }|                      |¦  «        }t          j        dd	|¦  «        }t          j        dd|¦  «        }t          j        dd|¦  «        }|S )Nz[<\[][^>\]]*[>\]]r³   z\(([^)]+?)\)z\s+'ú'z	(\d),(\d)rÒ   z\.([^0-9]|$)z \1u
   .%$Â¢â‚¬Â£)Úkeepu   [.$Â¢â‚¬Â£]([^0-9])z	([^0-9])%z\1 z\s+rÑ   )	Úlowerr¹   rØ   r  r  rŽ   r   r	  r
  )r¥   r0   ÚpatternÚreplacements       r   rï   zEnglishTextNormalizer.__call__  s5  € Ø�GŠG‰IŒIˆåŒFÐ'¨¨QÑ/Ô/ˆÝŒF�? B¨Ñ*Ô*ˆÝŒF�4Ô'¨¨QÑ/Ô/ˆÝŒF�7˜C Ñ#Ô#ˆà$(¤N×$8Ò$8Ñ$:Ô$:ð 	0ð 	0Ñ ˆG�[Ý”�w ¨QÑ/Ô/ˆAˆAåŒF�< ¨!Ñ,Ô,ˆÝŒF�? F¨AÑ.Ô.ˆÝ)¨!°,Ð?Ñ?Ô?ˆà×$Ò$ QÑ'Ô'ˆØ×&Ò& qÑ)Ô)ˆõ ŒFÐ)¨6°1Ñ5Ô5ˆÝŒF�< ¨Ñ+Ô+ˆåŒF�6˜3 Ñ"Ô"ˆàˆr   N)rð   rñ   rò   r‹   r¯   rï   r   r   r   r  r  Ñ  sB   € € € € € ð:Að :Að :Aðx˜#ð ð ð ð ð ð r   r  )rü   rø   r¹   Ú	fractionsr   Útypingr   r   r   r   r   Úmore_itertoolsr	   Úbasicr   r   rö   r  r   r   r   ú<module>r     s  ðØ €€€Ø 	€	€	€	Ø 	€	€	€	Ø Ð Ð Ð Ð Ð Ø 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9à #Ð #Ð #Ð #Ð #Ð #à 0Ð 0Ð 0Ð 0Ð 0Ð 0ðsð sð sð sð sñ sô sð sðlLð Lð Lð Lð Lñ Lô Lð LðUð Uð Uð Uð Uñ Uô Uð Uð Uð Ur   