
    j=                     ^   d dl Z d dlZd dlZd dlmZmZ d dlmZ  e j        e	          Z
e G d d                      Z G d d          Ze	dk    r e            Zd	Ze                    ed
          Z ed ee           d            eed          D ]\  ZZ ede dej         dej        dd          d            edej                     edej                    ej        r edej                    ej        r edej                     e             dS dS )    N)	dataclassfield)Anyc                       e Zd ZU eed<   eed<   dZedz  ed<   dZeed<   dZedz  ed<   dZedz  ed<   d	Z	e
ed
<   dZedz  ed<   dZedz  ed<    ee          Zeeef         ed<   d ZdS )PropositionChunkchunk_idtextN	parent_idsentencelevelarticle_numberchapter_numberr   
char_countprev_chunk_idnext_chunk_id)default_factorymetadatac                 R    | j         dk    rt          | j                  | _         d S d S )Nr   )r   lenr	   )selfs    S/lsinfo/ai/hellotax_ai/base_platform/app/services/knowledge/proposition_splitter.py__post_init__zPropositionChunk.__post_init__   s*    ?a!$)nnDOOO      )__name__
__module____qualname__str__annotations__r
   r   r   r   r   intr   r   r   dictr   r   r    r   r   r   r   
   s         MMM
III IsTz   E3!%NC$J%%%!%NC$J%%%J $M3:$$$ $M3:$$$$uT:::Hd38n:::- - - - -r   r   c                   R   e Zd Z ej        d          Z ej        d          Z ej        d          Zd&deded	efd
Z	d'de
de
dee         fdZde
fdZdee         dedee         fdZde
dee         fdZde
deej                 dee         fdZde
de
dee         fdZde
deej                 dee         fdZde
de
de
dz  de
dz  dee         f
d Zde
dee         fd!Zde
dee
         fd"Zde
dee         fd#Zdee
         dee
         fd$Zdee         ddfd%ZdS )(AdaptivePropositionSplitteru0   第[一二三四五六七八九十百千万]+章u0   第[一二三四五六七八九十百千万]+条u   第[一二三四五六七八九十百千万]+款|（[一二三四五六七八九十百千万]+）|\([一二三四五六七八九十百千万]+\)        min_sizemax_sizetarget_sizec                 0    || _         || _        || _        d S N)r'   r(   r)   )r   r'   r(   r)   s       r   __init__z$AdaptivePropositionSplitter.__init__#   s      &r   lawr	   doc_typereturnc                    |r|                                 sg S |                     |          \  }}|dk    r|                     |          }nK|dk    r|                     |          }n/|dv r|                     |          }n|                     |          }|r|                     ||          }|                     |           |S )Nr-   announcement)casepractice)strip_extract_tables_split_law_document_split_by_paragraph_split_by_heading_restore_tables_link_chunks)r   r	   r.   table_placeholderschunkss        r   splitz!AdaptivePropositionSplitter.split(   s     	4::<< 	I#'#7#7#=#=  u--d33FF''--d33FF---++D11FF--d33F 	F))&2DEEF&!!!r   c                     dd l }i dg |j        d          fd} |j        d||j                  }|fS )Nr   uL   (第[一二三四五六七八九十百千万\d]+[章条][\s　]*[^\n]{0,30})c                 `   d         }dxx         dz  cc<   d| d}	d |                                           }t                              |                    }|r-|d                             d                                          nd}|                     d          |dd| d	<   |S )
Nr      z


__TABLE_z__

 )htmlcontext_prefix__TABLE___)startlistfinditergroupr4   )
midxplaceholderprefix_textheading_matchesrD   counterheading_patternplaceholdersr	   s
         r   replace_tablezBAdaptivePropositionSplitter._extract_tables.<locals>.replace_tableB   s    !*CAJJJ!OJJJ4444K{{+K"?#;#;K#H#HIIOET\_R066q99??AAAZ\N

"00 0L+C+++, r   z<table[\s\S]*?</table>)flags)recompilesub
IGNORECASE)r   r	   rU   rS   	processedrP   rQ   rR   s    `   @@@r   r5   z+AdaptivePropositionSplitter._extract_tables9   s    			#$"*`
 
	 	 	 	 	 	 	 	 BF5}dRTR_```	<((r   r<   rR   c                     dd l }g }|D ]} |j        d|j                  }|r|                    d          }                    |          }|r^|d         rd|d          dnd}	|	|d         z   |_        t          |j                  |_        d	|j        d
<   |                    |           fd}
 |j	        d|
|j                  }||j        k    r ||_        t          |j                  |_        |                    |           |S )Nr   z\s*(__TABLE_\d+__)\s*r@   rD   u   【u   】

rB   rC   Tis_tablec                     |                      d          }                    |i           }d|                    dd          z   dz   S )Nr@   z

rC   rB   )rJ   get)m2keyinforR   s      r   inline_replacezCAdaptivePropositionSplitter._restore_tables.<locals>.inline_replacee   sE    hhqkk#''R00 4 44v==r   z(__TABLE_\d+__))
rU   	fullmatchr	   rJ   r]   r   r   r   appendrW   )r   r<   rR   rU   resultchunkrK   r_   r`   prefixra   new_texts     `         r   r9   z+AdaptivePropositionSplitter._restore_tablesR   sD    				 	! 	!E7DDA 	ggajj#'',, )FJK[F\dB4(8#9BBBBbdF!'$v,!6EJ'*5:E$15EN:.MM%(((> > > > >
 rv0.%*MMH5:%%%
#&uz?? MM%    r   c                 4   g }t          | j                            |                    }|r|                     ||          }nUt          | j                            |                    }|r|                     ||          }n|                     |          }|S r+   )rH   CHAPTER_PATTERNrI   _split_by_chapterARTICLE_PATTERN_split_by_articler7   )r   r	   r<   chapter_matchesarticle_matchess        r   r6   z/AdaptivePropositionSplitter._split_law_documentq   s    t3<<TBBCC 	8++D/BBFF"4#7#@#@#F#FGGO 8//oFF11$77r   rm   c                    g }|d                                          dk    r~|d |d                                                                                   }|rHt          t          j                              }|                    t          ||dddi                     t          |          D ]\  }}|                                 }|dz   t          |          k     r||dz                                             nt          |          }	|||	                                         }
|	                                }t          |
          | j
        k    r,|                     |
|          }|                    |           t          t          j                              }|                    t          ||
d|d|i                     |S )Nr   preambletyper   r	   r   r   r@   chapterr   r	   r   r   r   )rG   r4   r   uuiduuid4rc   r   	enumerater   rJ   r(   _split_chapter_by_articleextend)r   r	   rm   r<   rp   r   imatchrG   endchapter_textr   
sub_chunkss                r   rj   z-AdaptivePropositionSplitter._split_by_chapter~   s    1##%%))8oa0668889??AAH 	tz||,,$!)%("(*!5	     "/22 	 	HAuKKMME45EC<P<P4P4P/!a%(..000VYZ^V_V_Cc	?0022L"[[]]N<  4=00!;;L.YY
j))))tz||,,$!))''5"+^!<      r   r}   r   c                    g }t          t          j                              }t          | j                            |                    }|s+|                    t          ||d|d|i                     |S |d                                         dk    r|d |d                                                  	                                }|rKt          t          j                              }|                    t          |||d||dd                     t          |          D ]\  }}	|	                                }
|dz   t          |          k     r||dz                                            nt          |          }||
|         	                                }|	                                }t          |          | j        k    r.|                     ||||          }|                    |           t          t          j                              }|                    t          |||d	||||d
                      |S )Nrs   rt   r   chapter_headerheader)rs   rq   )r   r	   r
   r   r   r   r@   articler   rs   r   r	   r
   r   r   r   r   )r   ru   rv   rH   rk   rI   rc   r   rG   r4   rw   r   rJ   r(   _split_article_by_clausery   )r   r}   r   r<   r
   rn   r   r   rz   r{   rG   r|   article_textr   r~   s                  r   rx   z5AdaptivePropositionSplitter._split_chapter_by_article   sr    
%%	t3<<\JJKK 
	MM &%##1'8     M1##%%))!">OA$6$<$<$>$>">?EEGGF tz||,,$!)#"+.'5-;X!N!N  	 	 	 "/22 	 	HAuKKMME q53////  A&,,...&& 
 (c	288::L"[[]]N<  4=00!:: ..) 
 j))))tz||,,$!))"+''5'5-;!W!W  
 
 
 
 r   rn   c                    g }|d                                          dk    r~|d |d                                                                                   }|rHt          t          j                              }|                    t          ||dddi                     t          |          D ]\  }}|                                 }|dz   t          |          k     r||dz                                             nt          |          }	|||	                                         }
|	                                }t          |
          | j
        k    r.|                     |
|d d           }|                    |           t          t          j                              }|                    t          ||
d|d|i                     |S )Nr   rp   rq   rr   r@   r   )r   r	   r   r   r   )rG   r4   r   ru   rv   rc   r   rw   r   rJ   r(   r   ry   )r   r	   rn   r<   rp   r   rz   r{   rG   r|   r   r   r~   s                r   rl   z-AdaptivePropositionSplitter._split_by_article   s    1##%%))8oa0668889??AAH 	tz||,,$!)%("(*!5	     "/22 	 	HAuKKMME45EC<P<P4P4P/!a%(..000VYZ^V_V_Cc	?0022L"[[]]N<  4=00!::<Y]_cdd
j))))tz||,,$!))''5"+^!<      r   r   r   Nr
   c                    g }t          | j                            |                    }|sh|                     |          }|D ]N}t	          t          j                              }	|                    t          |	||d||||d                     O|S |d         	                                dk    r|d |d         	                                         
                                }
|
rMt	          t          j                              }	|                    t          |	|
|d||||dd                     t          |          D ]\  }}|	                                }|dz   t          |          k     r||dz            	                                nt          |          }|||         
                                }t	          t          j                              }	|                    t          |	||d	||||d                     |S )
Nr   r   r   r   article_headerr   )r   rs   rq   r@   clause)rH   CLAUSE_PATTERNrI   _split_by_paragraph_rawr   ru   rv   rc   r   rG   r4   rw   r   )r   r   r   r   r
   r<   clause_matches
paragraphsparar   r   rz   r{   rG   r|   clause_texts                   r   r   z4AdaptivePropositionSplitter._split_article_by_clause  sR    d1::<HHII 	55lCCJ"  tz||,,$!)!"+''5'5-;!W!W  
 
 
 
 M!""$$q((!"=N1$5$;$;$=$="=>DDFFF tz||,,$!)#"+.'5'5'5'5$," "     ".11 	 	HAuKKMME12Q^9L9L1L1Lq1u%++---RUVbRcRc  'uSy17799K4:<<((HMM %$'"#1#1)7NSS  
 
 
 
 r   c           
          |                      |          }|                     |          }g }|D ]J}t          t          j                              }|                    t          ||dddi                     K|S )N	paragraphrq   rr   r   _adaptive_merger   ru   rv   rc   r   )r   r	   r   mergedr<   r   r   s          r   r7   z/AdaptivePropositionSplitter._split_by_paragraphD  s    11$77
%%j11 	 	D4:<<((HMM %DvWbNc     
 r   c                 D    t          j        d|          }d |D             S )Nz\n\n+|\nc                 ^    g | ]*}|                                 |                                 +S r!   )r4   ).0ps     r   
<listcomp>zGAdaptivePropositionSplitter._split_by_paragraph_raw.<locals>.<listcomp>S  s-    ;;;a;		;;;r   )rU   r=   )r   r	   r   s      r   r   z3AdaptivePropositionSplitter._split_by_paragraph_rawQ  s'    XmT22
;;:;;;;r   c           
          g }|                      |          }|                     |          }|D ]J}t          t          j                              }|                    t          ||dddi                     K|S )Nsectionrq   rr   r   )r   r	   r<   r   r   r   r   s          r   r8   z-AdaptivePropositionSplitter._split_by_headingU  s    11$77
%%j11 	 	D4:<<((HMM %D	VU^L_     
 r   c                    |sg S g }d}|D ]u}|s|}t          |          t          |          z   dz   | j        k    r	|d|z   z  };t          |          | j        k    s|s|                    |           |}m|d|z   z  }v|rC|r,t          |          | j        k     r|dxx         d|z   z  cc<   n|                    |           |S )NrB   r@   
rA   )r   r)   r'   rc   )r   r<   r   currentre   s        r   r   z+AdaptivePropositionSplitter._adaptive_mergeb  s    	I 		( 		(E (WE

*Q.$2BBB4%<'W..f.g&&&4%<' 	' '#g,,66r


dWn,



g&&&r   c                     t          t          |                    D ]T}|dk    r||dz
           j        ||         _        |t          |          dz
  k     r||dz            j        ||         _        Ud S )Nr   r@   )ranger   r   r   r   )r   r<   rz   s      r   r:   z(AdaptivePropositionSplitter._link_chunksx  sz    s6{{## 	A 	AA1uu*0Q-*@q	'3v;;?""*0Q-*@q	'		A 	Ar   )r$   r%   r&   )r-   )r   r   r   rU   rV   ri   rk   r   r   r,   r   rH   r   r=   r5   r    r9   r6   Matchrj   rx   rl   r   r7   r   r8   r   r:   r!   r   r   r#   r#      s        bj!STTO bj!STTORZ 	] N' ' 'c 's ' ' ' '
 #  >N9O    ")C ) ) ) )2+,<@		   > 5E0F    ##*.rx.#		# # # #J::14:		: : : :x##*.rx.#		# # # #J>> > d
	>
 :> 
	> > > >@ 5E0F    <C <DI < < < <c d3C.D    d3i DI    ,A4(8#9 Ad A A A A A Ar   r#   __main__u  第一章 总则
第一条 本法适用于中华人民共和国境内的企业和其他取得收入的组织。
第二条 本法所称企业，是指依法在中国境内成立的企业、事业单位、社会团体以及其他取得收入的组织。
第二章 税率
第三条 企业所得税的税率为25%。
第四条 符合条件的小型微利企业，减按20%的税率征收企业所得税。r-   )r.   u   切分结果：共 u    个切片
r@   [z] z: 2   z...z    ID: u       字符数: u       章节: u       条文: )loggingrU   ru   dataclassesr   r   typingr   	getLoggerr   loggerr   r#   splitter	test_textr=   r<   printr   rw   rz   cr   r	   r   r   r   r   r!   r   r   <module>r      s    				  ( ( ( ( ( ( ( (      		8	$	$ - - - - - - - -"aA aA aA aA aA aA aA aAH z**,,H iI^^I^66F	E
9F
9
9
9:::	&!$$  12!22qw22!&"+222333%%%&&&.../// 	5E3!133444 	5E3!133444 
 r   