
    $HJjN                     l    d dl mZ d dl mZ d dlZd dlmZ d dlmZ dZdZ e	dd	g      Z
 G d
 d      Zy)    )List)TupleN)lazy_pinyin)Styleu   不u   一xengc            	       L   e Zd Zd Zd Zdedee   fdZdededee   dee   fdZdedee   dee   fd	Z	dedee   dee   fd
Z
dee   defdZdedee   dee   fdZdeeeef      deeeef      fdZdeeeef      deeeef      fdZdeeeef      deeeef      fdZdedefdZdeeeef      deeeef      fdZdeeeef      deeeef      fdZdeeeef      deeeef      fdZdeeeef      deeeef      fdZdededee   dee   fdZy)
ToneSandhic                      y)NMandarinToneSandhi selfs    \/Users/ahmed/devFolder/claude-voice/.venv/lib/python3.12/site-packages/misaki/tone_sandhi.py__repr__zToneSandhi.__repr__   s    #    c                 6    h d| _         h d| _        d| _        y )N>     一辈   丈人   丈夫   上司   上头   下巴   下水   不由   世故   东家   东西   两口   丧气   丫头   主意   买卖   事情   云彩   交情   亲家   亲戚   人家   什么   介绍   休息   伙计   似的   位置   体面   作坊   佩服   使唤   便宜   倒腾   兄弟   先生   关系   养活   冒失   冤家   冤枉   冷战   凉快   凑合   凤凰   出息   分析   利害   利索   利落   别人   别扭   刺激   刺猬   前头   力气   功夫   动弹   动静   勤快   匀称   包涵   包袱   千斤   厉害   厚道   口袋   叫唤   吆喝   合同   吉他   名堂   名字   后头   吓唬   含糊   告示   告诉   和尚   咕噜   咖喱   咳嗽   哆嗦   哈欠   哑巴   唾沫   商量   喇叭   喇嘛   喉咙   喜欢   喽啰   嘀咕   嘟囔   嘱咐   嘴巴   困难   在乎   地方   地道   壮实   外甥   多么   多少   大人   大夫   大意   大方   大爷   太阳   头发   女婿   奴才   妖精   妥当   妯娌   姐夫   姑娘   委屈   姥爷   娘家   婆家   媒人   媳妇   嫁妆   字号   学问   官司   实在   客气   家伙   寒碜   寡妇   对付   对头   将军   将就   小伙   小气   少爷   尾巴   屁股   岁数   工夫   差事   巴掌   巴结   师傅   师父   希罕   帐篷   帮手   干事   幸福   庄稼   应酬   开通   弄堂   弟兄   张罗   得罪   心思   志气   忙活   快活   念叨   念头   怎么   思量   怪物   悟性   惦记   意思   意识   懒得   戏弄   戒指   扁担   扎实   扑腾   打发   打听   打扮   打算   打量   扫帚   扫把   折腾   护士   报复   抬举   拖沓   招呼   招牌   拨弄   拳头   拾掇   指头   指甲   挑剔   挖苦   提防   收成   收拾   故事   新鲜   时候   明白   暖和   月亮   月饼   朋友   木匠   木头   本事   机灵   枇杷   枕头   架势   柴火   栅栏   核桃   棉花   棒槌   棺材   槟榔   模糊   欺负   正经   母亲   比方   泥鳅   活泼   浪头   消息   清楚   温和   溜达   滑溜   漂亮   火候   灯笼   炊帚   点心   烂糊   烟筒   烧饼   热闹   照顾   熟悉   爱人   父亲   爽快   牌楼   牙碜   牢骚   牲口   特务   状元   狐狸   玄乎   玫瑰   玻璃   琉璃   琢磨   琵琶   甘蔗   甜头   生意   畜生   疏忽   疙瘩   疟疾   痛快   痢疾   白净   盘算   盘缠   相声   眉毛   眨巴   眯缝   眼睛   知识   石匠   石头   石榴   码头   砚台   祖宗   福气   秀才   秀气   秧歌   称呼   稀罕   稳当   窗户   窝囊   窟窿   笑话   笑语   笤帚   答应   算盘   算计   篱笆   簸箕   粮食   精神   糊涂   糟蹋   糨糊   累赘   红火   结实   编辑   罐头   罗嗦   翻腾   老婆   老实   老爷   耳朵   耷拉   耽搁   耽误   聪明   胡同   胡琴   胡萝   胭脂   胳膊   能耐   脊梁   脑袋   脾气   膏药   自在   舌头   舒坦   舒服   芝麻   苍蝇   苗头   苗条   荒唐   荸荠   菩萨   萝卜   葡萄   葫芦   薄荷   蘑菇   蚂蚱   蛤蟆   蜡烛   行当   行李   街坊   衙门   衣服   衣裳   补丁   裁缝   见识   规矩   计划   认识   记号   记性   讲究   豆腐   财主   费用   趔趄   跟头   跳蚤   踏实   转悠   软和   过去   运气   这个   这么   连累   迷糊   造化   逻辑   道士   邋遢   那个   那么   部分   里头   里脊   钥匙   铁匠   铃铛   铺盖   锄头   门道   闺女   阔气   队伍   难为   风筝   馄饨   馒头   首饰   马虎   骆驼   骨头   高粱   鸳鸯   麻利   麻烦>(      人人   以下   佼佼   冉冉   分子   卵子   原子   吵吵   哈哈   女子   学子   局地   干嘛   幺幺   恳恳   想想   打打   攘攘   数数   整整   死死   熙熙   瓜子   电子   男子   留得   石子   算子   考考   耕地   莘莘   莲子   落地   虎虎   袅袅   量子   青青	   娃哈哈   家家户户   花花草草u(   、：，；。？！“”‘’':,;.?!)must_neural_tone_wordsmust_not_neural_tone_wordspuncr   s    r   __init__zToneSandhi.__init__   s     ''
#P+
' ?	r   wordreturnc                     t        j                  |      }t        |d d      }|d   }|j                  |      }|dk(  r|t	        |      d  }||g}|S |d t	        |        }||g}|S )Nc                     t        |       S )Nlen)is    r   <lambda>z(ToneSandhi._split_word.<locals>.<lambda>Q   s    CFr   F)keyreverser   )jiebacut_for_searchsortedfindr  )r   r  	word_listfirst_subwordfirst_begin_idxsecond_subwordnew_word_lists          r   _split_wordzToneSandhi._split_wordO   s    ((.	9*:EJ	!!))M2a!#m"4"56N*N;M  ""6C$6#67N+];Mr   posfinalsc                 p   || j                   v r|S t        |      D ]0  \  }}|dz
  dk\  s|||dz
     k(  s|d   dv s#||   d d dz   ||<   2 |j                  d      }t        |      dk\  r|d   dv r|d   d d dz   |d<   n+t        |      dk\  r|d   dv r|d   d d dz   |d<   nt        |      dk(  r|d	v r|d
v r|d   d d dz   |d<   nt        |      dkD  r|d   dv r|dv r|d   d d dz   |d<   nt        |      dkD  r|d   dv r|dv r|d   d d dz   |d<   nt        |      dkD  r|d   dv r|d   dv r|d   d d dz   |d<   nf|dk\  r ||dz
     j	                         s||dz
     dv s|dk(  r||   d d dz   ||<   n-|| j
                  v s|dd  | j
                  v r|d   d d dz   |d<   | j                  |      }|d t        |d          |t        |d         d  g}t        |      D ]9  \  }	}|| j
                  v s|dd  | j
                  v s&||	   d   d d dz   ||	   d<   ; t        |g       }|S )N   r   >   anv5u   个u9   吧呢啊呐噻嘛吖嗨呐哦哒滴哩哟喽啰耶喔诶u	   的地得u	   了着过>   uguluzu   们子>   r  ru   上下>   flsu   来去u   上下进出回过起开u   几有两半多各整每做是)r  	enumerater  r  	isnumericr  r  sum)
r   r  r  r  jitemge_idxr  finals_listr  s
             r   _neural_sandhizToneSandhi._neural_sandhia   s   4222M GAt1uzdd1q5k1c!f6O"1IcrNS0q	 ' 5!t9>d2h*eeCR3.F2JY!^RK 7CR3.F2JY!^ 3?Q8QCR3.F2JY]tBx83z8ICR3.F2JY]tBx838NCR3.F2JY]tBx83RD^8^CR3.F2JkFQJ))+FQJ#CCQV#F^CR036F6Nt222dC7 7778#BZ_s2r
$$T*	0s9Q<016#il:K:L3MN +GAtt222dC7 7778%0^B%7%<s%BAr"	 ,
 ["%r   c                     t        |      dk(  r|d   t        k(  r|d   d d dz   |d<   |S t        |      D ]>  \  }}|t        k(  s|dz   t        |      k  s"||dz      d   dk(  s1||   d d dz   ||<   @ |S )N   r  r  r  42)r  BUr  )r   r  r  r  chars        r   
_bu_sandhizToneSandhi._bu_sandhi   s    t9>d1gmq	#2,F1I  %T?42:!a%#d)"3q@A@B 9CCE9GJM9N &q	#2 4F1I	 +
 r   c                 .   |j                  t              dk7  r3t        |D cg c]  }|t        k7  s|j                          c}      r|S t	        |      dk(  r'|d   t        k(  r|d   |d   k(  r|d   d d dz   |d<   |S |j                  d      r|d   d d dz   |d<   |S t        |      D ]`  \  }}|t        k(  s|dz   t	        |      k  s"||dz      d   dv r||   d d d	z   ||<   >||dz      | j                  vsS||   d d d
z   ||<   b |S c c}w )Nr  r  r  r   r  u   第一1>   r  r  r  r  )r  YIallr  r  
startswithr  r  )r   r  r  r
  r  r  s         r   
_yi_sandhizToneSandhi._yi_sandhi   s>   99R=B3*.=$$$"*T^^$=$?MY!^Q2$q'T"X2Eq	#2,F1I  __X&q	#2,F1I  %T?42:!a%#d)"3a!e}R(J6$*1IcrNS$8q	  A;dii7(.q	#2(<F1I + ' >s
   DDc                 &    t        d |D              S )Nc              3   ,   K   | ]  }|d    dk(    yw)r  3Nr   ).0r   s     r   	<genexpr>z-ToneSandhi._all_tone_three.<locals>.<genexpr>   s     0A1R5C<s   )r  )r   r  s     r   _all_tone_threezToneSandhi._all_tone_three   s    0000r   c                    t        |      dk(  r!| j                  |      r|d   d d dz   |d<   |S t        |      dk(  r=| j                  |      }| j                  |      rPt        |d         dk(  r|d   d d dz   |d<   |d   d d dz   |d<   |S t        |d         dk(  r|d   d d dz   |d<   |S |d t        |d          |t        |d         d  g}t        |      dk(  rt        |      D ]  \  }}| j                  |      r#t        |      dk(  r||   d   d d dz   ||   d<   nF|dk(  rA| j                  |      s0||   d   d   dk(  r"|d   d   d   dk(  r|d   d   d d dz   |d   d<   t	        |g       } |S t        |      dk(  r7|d d |dd  g}g }|D ]&  }| j                  |      r|d   d d dz   |d<   ||z  }( |S )	N   r   r  r  r  r  r     )r  r   r  r  r  )r   r  r  r  r  r  subs          r   _three_sandhizToneSandhi._three_sandhi   sN   t9>d226:q	#2,F1IF E Y!^((.I##F+y|$) &q	#2 4F1I &q	#2 4F1I8 5 1&!+ &q	#2 4F1I2 - -C	!-.s9Q<7H7I0J {#q("+K"83//4SQ0;Aq0A#20F0LKN1-!VD,@,@,E+VW.YZJ[\^J_cfJf +Ar 22 6# =1<Q1CCR1H31NKN2.!$["!5 #9&  Y!^!"1:vabz2KF"'', VCR[3.CF# #
 r   segc                    g }t        |      D ]u  \  }\  }}|t        vr d }|dkD  r||dz
     \  }}|t        k(  r||z   }d }|dz   t        |      k  r||dz      \  }}|t        k7  s|	|t        v sc|j	                  ||f       w |S )Nr   r  )r  X_ENGr  r  append)	r   r&  new_segr  r  r  	last_word_next_poss	            r   	_merge_buzToneSandhi._merge_bu   s    'nNA{c% 	q5#&q1u:LIq?$t+DH1us3x!!a%j8rzX-U1Bc{+ - r   c                 &   g }d}t        |      D ]  \  }\  }}|rd}|dz
  dk\  ry|t        k(  rp|dz   t        |      k  r_||dz
     d   ||dz      d   k(  rH||dz
     d   dk(  r:||dz      d   t        vr)|d   d   t        z   ||dz      d   z   |d   d   f|d<   d}|j	                  ||f        |}g }t        |      D ]K  \  }\  }}|r.|d   d   t        k(  r|t        vr|d   d   |z   |d   d   f|d<   9|j	                  ||f       M |S )NFr  r   r  r  T)r  r  r  r(  r)  )r   r&  r*  	skip_nextr  r  r  s          r   	_merge_yizToneSandhi._merge_yi   sk   	'nNA{c!	1uzdbjQUSX-=#a!e*Ca!e*Q-C(,/AJqMS,@SEFF%*F+&r{1~2SQZ]B&r{1~/ 	c{+ - 'nNA{c72;q>R/Cu4D&r{1~4gbk!nEc{+	 -
 r   c                 ,   g }g }|D ]|  \  }}|t         v r|j                  dg       !t        |dt        j                        }t        |      D cg c]  \  }}|dk(  s| }	}}|	D ]  }
d||
<   	 |j                  |       ~ t        |      t        |      k(  sJ dgt        |      z  }t        |      D ]  \  }
\  }}|t         vr|
dz
  dk\  r| j                  ||
dz
           r| j                  ||
         r|||
dz
     st| j                  ||
dz
     d         sFt        ||
dz
     d         t        ||
   d         z   d	k  r|d
   d   ||
   d   z   |d
   d<   d||
<   |j                  ||g       |j                  ||g        |S c c}}w )N0Tneutral_tone_with_fivestyle   嗯n2Fr  r   r  r  )	r(  r)  r   r   FINALS_TONE3r  r  r   _is_reduplicationr   r&  r*  sub_finals_listr  r  orig_finalsindexcen_indexr  
merge_lasts               r   _merge_continuous_three_tonesz(ToneSandhi._merge_continuous_three_tones  s   KT3e|&&u-%T9K9KMK /8oLo(%eoHL!%A "";/  ?#s3x///Ws3x'
'nNA{c%AEQJ43G3G#AE*4,040D0D'*1,4>q1u4E--c!a%jm<AE
1B'),SVAYB8;<B=%,R[^c!fQi%?GBKN$(JqMNND#;/c{+ - + Ms   F Fc                 8    t        |      dk(  xr |d   |d   k(  S )Nr"  r   r  r  )r   r  s     r   r:  zToneSandhi._is_reduplication1  s"    4yA~4$q'T!W"44r   c                    g }g }|D ]|  \  }}|t         v r|j                  dg       !t        |dt        j                        }t        |      D cg c]  \  }}|dk(  s| }	}}|	D ]  }
d||
<   	 |j                  |       ~ t        |      t        |      k(  sJ dgt        |      z  }t        |      D ]  \  }
\  }}|t         vr|
dz
  dk\  r||
dz
     d	   d	   d
k(  r||
   d   d	   d
k(  r|||
dz
     st| j                  ||
dz
     d         sFt        ||
dz
     d         t        ||
   d         z   dk  r|d	   d   ||
   d   z   |d	   d<   d||
<   |j                  ||g       |j                  ||g        |S c c}}w )Nr3  Tr4  r7  r8  Fr  r   r  r  r  )r(  r)  r   r   r9  r  r  r:  r;  s               r   _merge_continuous_three_tones_2z*ToneSandhi._merge_continuous_three_tones_25  s   KT3e|&&u-%T9K9KMK /8oLo(%eoHL!%A "";/  ?#s3x///Ws3x'
'nNA{c%AEQJ#AE*2.r2c9#A&q)"-4q1u%--c!a%jm<AE
1B'),SVAYB8;<B=%,R[^c!fQi%?GBKN$(JqMNND#;/c{+ - ) Ms   F Fc                     g }t        |      D ]N  \  }\  }}|dz
  dk\  r+|dk(  r&|d   d   t        vr|d   d   ||   d   z   |d   d<   <|j                  ||g       P |S )Nr  r   u   儿r  r  r(  r)  r   r&  r*  r  r  r  s         r   	_merge_erzToneSandhi._merge_erV  sv    'nNA{c1uzdemAe0K!(Q#a&)!;Ac{+	 -
 r   c                     g }t        |      D ]H  \  }\  }}|r+||d   d   k(  r |t        vr|d   d   ||   d   z   |d   d<   6|j                  ||g       J |S )Nr  r   rG  rH  s         r   _merge_reduplicationzToneSandhi._merge_reduplication_  so    'nNA{c472;q>1c6F!(Q#a&)!;Ac{+	 -
 r   c                     | j                  |      }| j                  |      }| j                  |      }| j                  |      }| j	                  |      }| j                  |      }|S )z-
            seg: [(word, pos), ...]
        )r.  r1  rK  rB  rE  rI  )r   r&  s     r   pre_merge_for_modifyzToneSandhi.pre_merge_for_modifyi  sc    
 nnS!nnS!'',0052237nnS!
r   c                     | j                  ||      }| j                  ||      }| j                  |||      }| j                  ||      }|S )ur   
            word: 分词
            pos: 词性
            finals: 带调韵母, [final1, ..., finaln]
        )r  r  r  r%  )r   r  r  r  s       r   modified_tonezToneSandhi.modified_tonev  sO     v.v.$$T37##D&1r   N)__name__
__module____qualname__r   r  strr   r  r  r  r  boolr   r%  r   r.  r1  rB  r:  rE  rI  rK  rM  rO  r   r   r   r
   r
      sQ   $/?b S	 $*3 *S *#Cy*-1#Y*X
s 
DI 
$s) 
s DI $s) 01d3i 1D 1&# &tCy &T#Y &TT%S/2 tE#s(O7L ,T%S/2 tE#s(O7L 6 E#s(O, 15eCHo1F D5c 5d 5E#s(O,15eCHo1FBT%S/2 tE#s(O7L E#s(O,15eCHo1FE#s(O,15eCHo1F# C "3i,0Ir   r
   )typingr   r   r  pypinyinr   r   r  r  	frozensetr(  r
   r   r   r   <module>rX     s:          

3,g gr   