o
    
iN                     @   s^   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 dZdS )    )List)TupleN)lazy_pinyin)Styleu   不u   一xengc                	   @   s  e Zd Zdd Zdd Zdedee fddZded	ed
ee dee fddZded
ee dee fddZ	ded
ee dee fddZ
d
ee defddZded
ee dee fddZdeeeef  deeeef  fddZdeeeef  deeeef  fddZdeeeef  deeeef  fddZdedefddZdeeeef  deeeef  fddZdeeeef  deeeef  fd d!Zdeeeef  deeeef  fd"d#Zdeeeef  deeeef  fd$d%Zded	ed
ee dee fd&d'Zd(S ))
ToneSandhic                 C   s   dS )NMandarinToneSandhi selfr
   r
   F/home/ubuntu/.local/lib/python3.10/site-packages/misaki/tone_sandhi.py__repr__   s   zToneSandhi.__repr__c                 C   s   h d| _ h d| _d| _d S )N>     一辈   丈人   丈夫   上司   上头   下巴   下水   不由   世故   东家   东西   两口   丧气   丫头   主意   买卖   事情   云彩   交情   亲家   亲戚   人家   什么   介绍   休息   伙计   似的   位置   体面   作坊   佩服   使唤   便宜   倒腾   兄弟   先生   关系   养活   冒失   冤家   冤枉   冷战   凉快   凑合   凤凰   出息   分析   利害   利索   利落   别人   别扭   刺激   刺猬   前头   力气   功夫   动弹   动静   勤快   匀称   包涵   包袱   千斤   厉害   厚道   口袋   叫唤   吆喝   合同   吉他   名堂   名字   后头   吓唬   含糊   告示   告诉   和尚   咕噜   咖喱   咳嗽   哆嗦   哈欠   哑巴   唾沫   商量   喇叭   喇嘛   喉咙   喜欢   喽啰   嘀咕   嘟囔   嘱咐   嘴巴   困难   在乎   地方   地道   壮实   外甥   多么   多少   大人   大夫   大意   大方   大爷   太阳   头发   女婿   奴才   妖精   妥当   妯娌   姐夫   姑娘   委屈   姥爷   娘家   婆家   媒人   媳妇   嫁妆   字号   学问   官司   实在   客气   家伙   寒碜   寡妇   对付   对头   将军   将就   小伙   小气   少爷   尾巴   屁股   岁数   工夫   差事   巴掌   巴结   师傅   师父   希罕   帐篷   帮手   干事   幸福   庄稼   应酬   开通   弄堂   弟兄   张罗   得罪   心思   志气   忙活   快活   念叨   念头   怎么   思量   怪物   悟性   惦记   意思   意识   懒得   戏弄   戒指   扁担   扎实   扑腾   打发   打听   打扮   打算   打量   扫帚   扫把   折腾   护士   报复   抬举   拖沓   招呼   招牌   拨弄   拳头   拾掇   指头   指甲   挑剔   挖苦   提防   收成   收拾   故事   新鲜   时候   明白   暖和   月亮   月饼   朋友   木匠   木头   本事   机灵   枇杷   枕头   架势   柴火   栅栏   核桃   棉花   棒槌   棺材   槟榔   模糊   欺负   正经   母亲   比方   泥鳅   活泼   浪头   消息   清楚   温和   溜达   滑溜   漂亮   火候   灯笼   炊帚   点心   烂糊   烟筒   烧饼   热闹   照顾   熟悉   爱人   父亲   爽快   牌楼   牙碜   牢骚   牲口   特务   状元   狐狸   玄乎   玫瑰   玻璃   琉璃   琢磨   琵琶   甘蔗   甜头   生意   畜生   疏忽   疙瘩   疟疾   痛快   痢疾   白净   盘算   盘缠   相声   眉毛   眨巴   眯缝   眼睛   知识   石匠   石头   石榴   码头   砚台   祖宗   福气   秀才   秀气   秧歌   称呼   稀罕   稳当   窗户   窝囊   窟窿   笑话   笑语   笤帚   答应   算盘   算计   篱笆   簸箕   粮食   精神   糊涂   糟蹋   糨糊   累赘   红火   结实   编辑   罐头   罗嗦   翻腾   老婆   老实   老爷   耳朵   耷拉   耽搁   耽误   聪明   胡同   胡琴   胡萝   胭脂   胳膊   能耐   脊梁   脑袋   脾气   膏药   自在   舌头   舒坦   舒服   芝麻   苍蝇   苗头   苗条   荒唐   荸荠   菩萨   萝卜   葡萄   葫芦   薄荷   蘑菇   蚂蚱   蛤蟆   蜡烛   行当   行李   街坊   衙门   衣服   衣裳   补丁   裁缝   见识   规矩   计划   认识   记号   记性   讲究   豆腐   财主   费用   趔趄   跟头   跳蚤   踏实   转悠   软和   过去   运气   这个   这么   连累   迷糊   造化   逻辑   道士   邋遢   那个   那么   部分   里头   里脊   钥匙   铁匠   铃铛   铺盖   锄头   门道   闺女   阔气   队伍   难为   风筝   馄饨   馒头   首饰   马虎   骆驼   骨头   高粱   鸳鸯   麻利   麻烦>(      人人   以下   佼佼   冉冉   分子   卵子   原子   吵吵   哈哈   女子   学子   局地   干嘛   幺幺   恳恳   想想   打打   攘攘   数数   整整   死死   熙熙   瓜子   电子   男子   留得   石子   算子   考考   耕地   莘莘   莲子   落地   虎虎   袅袅   量子   青青	   娃哈哈   家家户户   花花草草u(   、：，；。？！“”‘’':,;.?!)must_neural_tone_wordsmust_not_neural_tone_wordspuncr   r
   r
   r   __init__   s   

(
zToneSandhi.__init__wordreturnc                 C   sp   t |}t|dd dd}|d }||}|dkr)|t|d  }||g}|S |d t|  }||g}|S )Nc                 S   s   t | S )Nlen)ir
   r
   r   <lambda>Q   s    z(ToneSandhi._split_word.<locals>.<lambda>F)keyreverser   )jiebacut_for_searchsortedfindr  )r   r  	word_listfirst_subwordfirst_begin_idxsecond_subwordnew_word_listr
   r
   r   _split_wordO   s   

zToneSandhi._split_wordposfinalsc           
      C   s  || j v r|S t|D ]$\}}|d dkr/|||d  kr/|d dv r/|| d d d ||< q|d}t|dkrN|d dv rN|d d d d |d< nt|dkrg|d dv rg|d d d d |d< nt|dkr|d	v r|d
v r|d d d d |d< nt|dkr|d dv r|dv r|d d d d |d< n~t|dkr|d dv r|dv r|d d d d |d< nat|dkr|d dv r|d dv r|d d d d |d< nB|dkr||d   s||d  dv s|dkr|| d d d ||< n|| jv s|dd  | jv r|d d d d |d< | |}|d t|d  |t|d d  g}t|D ]%\}	}|| jv sN|dd  | jv r^||	 d d d d ||	 d< q: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  r
   r
   r   _neural_sandhia   sT   
(
  $
( 
zToneSandhi._neural_sandhic                 C   s   t |dkr|d tkr|d d d d |d< |S t|D ]&\}}|tkrD|d t |k rD||d  d dkrD|| d d d ||< q|S )N   r  r  r  42)r  BUr  r   r  r  r  charr
   r
   r   
_bu_sandhi   s   zToneSandhi._bu_sandhic                 C   s  | tdkrtdd |D r|S t|dkr4|d tkr4|d |d kr4|d d d d |d< |S |drG|d d d d	 |d< |S t|D ]<\}}|tkr|d t|k r||d  d d
v rr|| d d d ||< qK||d  | jvr|| d d d ||< qK|S )Nr  c                 S   s   g | ]
}|t kr| qS r
   )YIr  ).0r  r
   r
   r   
<listcomp>       z)ToneSandhi._yi_sandhi.<locals>.<listcomp>r  r  r   r  u   第一1>   r  r  r  r  )r  r  allr  
startswithr  r  r
  r
   r
   r   
_yi_sandhi   s$   (
zToneSandhi._yi_sandhic                 C   s   t dd |D S )Nc                 s   s    | ]	}|d  dkV  qdS )r  3Nr
   )r  r   r
   r
   r   	<genexpr>   s    z-ToneSandhi._all_tone_three.<locals>.<genexpr>)r  )r   r  r
   r
   r   _all_tone_three   s   zToneSandhi._all_tone_threec                 C   s
  t |dkr| |r|d d d d |d< |S t |dkr| |}| |rat |d dkrK|d d d d |d< |d d d d |d< |S t |d dkr_|d d d d |d< |S |d t |d  |t |d d  g}t |dkrt|D ]R\}}| |rt |dkr|| d d d d || d< n-|dkr| |s|| d d dkr|d d d dkr|d d d d d |d d< t|g }q|S t |dkr|d d |dd  g}g }|D ]}| |r|d d d d |d< ||7 }q|S )	N   r   r  r  r  r  r     )r  r  r  r  r   )r   r  r  r  r  r  subr
   r
   r   _three_sandhi   s@   #

$"& 


zToneSandhi._three_sandhisegc           	      C   s   g }t |D ]E\}\}}|tvr&d }|dkr||d  \}}|tkr&|| }d }|d t|k r8||d  \}}|tksD|d u sD|tv rK|||f q|S )Nr   r  )r  X_ENGr	  r  append)	r   r  new_segr  r  r  	last_word_next_posr
   r
   r   	_merge_bu   s   zToneSandhi._merge_buc                 C   sF  g }d}t |D ]c\}\}}|rd}q|d dkrd|tkrd|d t|k rd||d  d ||d  d krd||d  d dkrd||d  d tvrd|d d t ||d  d  |d d f|d< d}q|||f q|}g }t |D ],\}\}}|r|d d tkr|tvr|d d | |d d f|d< qt|||f qt|S )NFr  r   r  r  T)r  r  r  r  r  )r   r  r  	skip_nextr  r  r  r
   r
   r   	_merge_yi   s<   .
"zToneSandhi._merge_yic           
      C   sl  g }g }|D ].\}}|t v r|dg qt|dtjd}dd t|D }|D ]}d||< q(|| qt|t|ks?J dgt| }	t|D ]i\}\}}|t vr|d d	kr| ||d  r| || r|	|d  s| ||d  d	 st||d  d	 t|| d	  d
kr|d d	 || d	  |d d	< d|	|< qJ|||g qJ|||g qJ|S )N0Tneutral_tone_with_fivestylec                 S      g | ]
\}}|d kr|qS u   嗯r
   r  indexcr
   r
   r   r    r  z<ToneSandhi._merge_continuous_three_tones.<locals>.<listcomp>n2Fr  r   r  r  )	r  r  r   r   FINALS_TONE3r  r  r  _is_reduplication
r   r  r  sub_finals_listr  r  orig_finalsen_indexr  
merge_lastr
   r
   r   _merge_continuous_three_tones  sJ   


 
z(ToneSandhi._merge_continuous_three_tonesc                 C   s   t |dko|d |d kS )Nr  r   r  r  )r   r  r
   r
   r   r1  1  s   zToneSandhi._is_reduplicationc           
      C   sx  g }g }|D ].\}}|t v r|dg qt|dtjd}dd t|D }|D ]}d||< q(|| qt|t|ks?J dgt| }	t|D ]o\}\}}|t vr|d d	kr||d  d
 d
 dkr|| d	 d
 dkr|	|d  s| ||d  d	 st||d  d	 t|| d	  dkr|d
 d	 || d	  |d
 d	< d|	|< qJ|||g qJ|||g qJ|S )Nr&  Tr'  c                 S   r*  r+  r
   r,  r
   r
   r   r  @  r  z>ToneSandhi._merge_continuous_three_tones_2.<locals>.<listcomp>r/  Fr  r   r  r  r  )r  r  r   r   r0  r  r  r1  r2  r
   r
   r   _merge_continuous_three_tones_25  sB   

 
z*ToneSandhi._merge_continuous_three_tones_2c                 C   sr   g }t |D ]0\}\}}|d dkr/|dkr/|d d tvr/|d d || d  |d d< q|||g q|S )Nr  r   u   儿r  r  r  r  r   r  r  r  r  r  r
   r
   r   	_merge_erV  s   $"zToneSandhi._merge_erc                 C   sj   g }t |D ],\}\}}|r+||d d kr+|tvr+|d d || d  |d d< q|||g q|S )Nr  r   r9  r:  r
   r
   r   _merge_reduplication_  s   "zToneSandhi._merge_reduplicationc                 C   s@   |  |}| |}| |}| |}| |}| |}|S )z-
            seg: [(word, pos), ...]
        )r#  r%  r<  r7  r8  r;  )r   r  r
   r
   r   pre_merge_for_modifyi  s   





zToneSandhi.pre_merge_for_modifyc                 C   s6   |  ||}| ||}| |||}| ||}|S )ur   
            word: 分词
            pos: 词性
            finals: 带调韵母, [final1, ..., finaln]
        )r  r  r  r  )r   r  r  r  r
   r
   r   modified_tonev  s
   zToneSandhi.modified_toneN)__name__
__module____qualname__r   r  strr   r  r  r  r  boolr  r  r   r#  r%  r7  r1  r8  r;  r<  r=  r>  r
   r
   r
   r   r      sT    1

,***
"
*!	



r   )typingr   r   r  pypinyinr   r   r	  r  	frozensetr  r   r
   r
   r
   r   <module>   s   