
    j"                       d dl mZ d dlZd dlZd dlmZ d dlmZ  ej        e	          Z
dZ ej        d           ej        d           ej        d           ej        d	          gZ ej        d
          Z ej        d          ZdZ G d dee          Ze G d d                      Z G d d          ZddZ e            ZdS )    )annotationsN)	dataclass)Enumu   [\[\]\[\]〔〕（()]uF   [\u4e00-\u9fa5]{2,6}(?:[\[\[〔（(][12]\d{3}[\]\]〕)][^号]{1,6}号)uJ   [\u4e00-\u9fa5]{2,8}第?(?:[\[\[〔（(][12]\d{3}[\]\]〕)][^号]{1,6}号)uS   (?:国家税务总局|财政部|海关总署)[^公]*公告[12]\d{3}年第\d{1,4}号u4   (?:国务院|财政部|税务总局)令第\d{1,4}号u   (?:[\u4e00-\u9fa5]{2,8}第?[\[\[〔（(][12]\d{3}[\]\]〕)][^号]{1,6}号|(?:国家税务总局|财政部|海关总署)[^公]*公告[12]\d{3}年第\d{1,4}号|(?:国务院|财政部|税务总局)令第\d{1,4}号)u]   第[一二三四五六七八九十百\d]+条(?:第[一二三四五六七八九十百\d]+款)?d   c                  *    e Zd ZdZdZdZdZdZdZdZ	dS )	RelationType
REFERENCESANNULSAMENDS	HAS_ANNEX	ISSUED_BYSUPERSEDED_BYEFFECTIVE_FROMN)
__name__
__module____qualname__r	   r
   r   r   r   r   r        R/lsinfo/ai/hellotax_ai/base_platform/app/services/knowledge/reference_extractor.pyr   r      s1        JFFII#M%NNNr   r   c                  b    e Zd ZU ded<   ded<   ded<   ded<   dZd	ed
<   dZd	ed<   dZd	ed<   dS )DocumentRelationstrsource_doc_idr   relation_typecontextfloat
confidenceNz
str | Nonetarget_doc_idtarget_doc_numberarticle_number)r   r   r   __annotations__r   r   r    r   r   r   r   r   !   ss         LLL $M$$$$$(((((!%N%%%%%%r   r   c                  B    e Zd Z	 dddZdd	Zdd
ZddZddZddZdS )TaxReferenceExtractor textr   doc_id
doc_numberreturnlist[DocumentRelation]c                t   g }|                     |                     ||                     |                     |                     ||                     |                     |                     ||                     |                     |                     ||                     rfd|D             }t                      }g }|D ]D}|j        |j        |j        f}||vr*|	                    |           |
                    |           Et                              d|t          |                     |S )Nc                *    g | ]}|j         k    |S r   )r   ).0rr'   s     r   
<listcomp>z;TaxReferenceExtractor.extract_relations.<locals>.<listcomp>7   s&    OOOQQ-@J-N-Nq-N-N-Nr   z5reference_extractor: doc_id=%s extracted %d relations)extend_extract_references_extract_annuls_extract_amendments_extract_annexessetr   r   r    addappendloggerdebuglen)	selfr%   r&   r'   resultsseendedupedr-   keys	      `     r   extract_relationsz'TaxReferenceExtractor.extract_relations.   s6    +-t//f==>>>t++D&99:::t//f==>>>t,,T6::;;; 	POOOO'OOOGEE*, 	" 	"A?A$79IJC$q!!!LfVYZaVbVbcccr   c                   g }t          j        dt          j        z   dz   t          j        z   dz   t           j                  }|                    |          D ]}|                    d          |                    d          }t          ||	                                |
                                          }|                    t          |t          j        ||d                     t                              |          D ]}|                    d          ||
                                |
                                d	z            }t                              |          }	|	r|	                    d          nd }t          ||	                                |
                                |	r|	
                                ndz             }t!          fd
|D                       s2|                    t          |t          j        ||d                     t          j        dt          j        z   dz   t           j                  }
|
                    |          D ]}}|                    d          t          ||	                                |
                                          }|                    t          |t          j        |d                     ~|S )Nu>   (?:依据|根据|按照|依照|遵照)([^，。；\n]{0,60}?)(   )([^，。；\n]{0,30}?)()?      ?r   r   r   r    r   r   r      c              3  D   K   | ]}|j         k    o
|j        d k    V  dS )rE   N)r   r   )r,   r-   doc_nums     r   	<genexpr>z<TaxReferenceExtractor._extract_references.<locals>.<genexpr>`   s8      aaRSq*g5M!,#:Maaaaaar   gffffff?u-   (?:参见|详见|见)([^，。；\n]{0,10}?)()g333333?r   r   r   r   r   )recompile_DOC_NUMBER_REpattern_ARTICLE_REUNICODEfinditergroup_snippetstartendr6   r   r   r	   searchany)r:   r%   r&   	relationsref_triggermarticlectxsuffixart_msee_triggerrI   s              @r   r0   z)TaxReferenceExtractor._extract_referencesB   s   ,.	jM$%*+ !" 	
 J
 
 %%d++ 	 	AggajjGggajjG4AEEGG44C "("."9&-#*"  	 	 	 	  ((.. 	 	AggajjG!%%''AEEGGbL01F&&v..E(-7ekk!nnn4G4AEEGGe7Ruyy{{{QR,STTCaaaaW`aaaaa 
  $&,&2&=*1'. ##&  	 	 	 j<~?UUX[[]_]g
 
 %%d++ 	 	AggajjG4AEEGG44C "("."9&-#      r   c                V   g }t          j        dt          j        z   dz   t           j                  }|                    |          D ]}}|                    d          }t          ||                                |	                                          }|
                    t          |t          j        ||d                     ~t          j        dt           j                  }|                    |          D ]}|                    d          }	t                              |	          D ]}}
|
                    d          }t          |	|
                                |
	                                          }|
                    t          |t          j        ||d                     ~|S )	NuN   (?:废止|宣布失效|不再执行|停止执行|废除)[^，。；\n]{0,20}?(rK      gq=
ףp?rL   u   (?:同时废止|一并废止|予以废止)(?:以下)?(?:文件|规定|通知|公告)?[：:]([\s\S]{0,500}?)(?=\n\n|\Z|本(?:通知|公告|办法))r   )\(?)rM   rN   rO   rP   rR   rS   rT   rU   rV   rW   r6   r   r   r
   )r:   r%   r&   rZ   annul_rer\   rI   r^   list_annul_reblocknum_ms              r   r1   z%TaxReferenceExtractor._extract_annuls|   s   ,.	:]$% J	
 
 ""4(( 	 	AggajjG4AEEGG44C "("."5&-#      
 fJ
 
 ''-- 	 	AGGAJJE'0077  ++a..uekkmmUYY[[AA  $&,&2&9*1 ##'      r   c                   g }t          j        dt          j        z   dz   t          j        z   dz   t           j                  }|                    |          D ]}|                    d          }|                    d          }t          ||	                                |
                                          }|                    t          |t          j        |||d                     |S )Nu;   (?:修改|调整|修订|补充修改)[^，。；\n]{0,20}?(rA   rB   rc      rd   rF   )rM   rN   rO   rP   rQ   rR   rS   rT   rU   rV   rW   r6   r   r   r   )	r:   r%   r&   rZ   amend_rer\   rI   r]   r^   s	            r   r2   z)TaxReferenceExtractor._extract_amendments   s    ,.	:J$%*+ !" 	
 J
 
 ""4(( 	 	AggajjGggajjG4AEEGG44C "("."5&-#*#  	 	 	 	 r   c                   g }t          j        dt           j                  }t          j        d          }|                    |          D ]}|                    d                                          }|                    |          st          |          dk     rRt          ||	                                |
                                          }|                    t          |t          j        d ||d                     |S )NuN   附件[\s]*[1234567890一二三四五六七八九十]?[\s]*[：:]([^\n]{1,80})u5   ^[\d一二三四五六七八九十]+[\.、）\)]*\s*$rc   rj   gffffff?)r   r   r   r   r   r   )rM   rN   rR   rS   rT   stripmatchr9   rU   rV   rW   r6   r   r   r   )	r:   r%   r&   rZ   annex_reskip_rer\   annex_titler^   s	            r   r3   z&TaxReferenceExtractor._extract_annexes   s   ,.	:_acak
 
 *XYY""4(( 	 	A''!****,,K}}[)) S-=-=-A-A4AEEGG44C "("."8&*"-#  	 	 	 	 r   	list[str]c                    t                      }g }t                              |          D ]E}|                    d          }||vr*|                    |           |                    |           F|S Nr   )r4   rO   rS   rT   r5   r6   )r:   r%   r<   resultr\   nums         r   _extract_doc_numbersz*TaxReferenceExtractor._extract_doc_numbers   sl    EE((.. 	# 	#A''!**C$c"""r   N)r$   )r%   r   r&   r   r'   r   r(   r)   )r%   r   r&   r   r(   r)   )r%   r   r(   rr   )	r   r   r   r?   r0   r1   r2   r3   rw   r   r   r   r#   r#   ,   s         9;    (8 8 8 8t& & & &P   4   .     r   r#   r%   r   rV   intrW   r(   c                    | t          d|          t          t          |           |                   }t          |          t          k    r|d t                   S |S rt   )maxminr9   _CTX_MAX)r%   rV   rW   raws       r   rU   rU      sM    
s1e}}s3t99c222
3C
3xx(9H9~Jr   )r%   r   rV   rx   rW   rx   r(   r   )
__future__r   loggingrM   dataclassesr   enumr   	getLoggerr   r7   _CN_BRACKETrN   DOC_NUMBER_PATTERNSrO   rQ   r|   r   r   r   r#   rU   tax_reference_extractorr   r   r   <module>r      s   " " " " " "  				 ! ! ! ! ! !      		8	$	$)BJ^__BJbccBJfggBJFGG	   d  bjz{{& & & & &3 & & & & & & & & & & &q q q q q q q qh    0/11   r   