Ë
    ýØ£jå  ã                   óŒ  — d Z ddlZddlZddlZddlZdZdej                  v ZdZej                  D ].  Z	e	j                  d«      sŒ ee	j                  d«      d   «      ZŒ0  ej                  d«      Z ed	«      Z ej                  d
«      Zg d¢ZdZdZh d£Z ej                  d«      Zd„ Zd„ Zd„ Zd„ Zedk(  r e«        yy)u‹  gov_entity å¢žé‡�ç»´æŠ¤ (2026-09-03 ä¸Šçº¿)
æ¯�æ™š cron 4:20 è¿�è¡Œ: 
  1) æ¸…ç�†å­¤å„¿ (gov_entity å¼•ç”¨çš„ doc å·²åœ¨ gov_raw åˆ é™¤çš„)
  2) æ‰¾ç¼ºå¤± doc (gov_raw ä¸­æ— å®žä½“çš„æ–°å…¥åº“è¡Œ) â†’ æ��å�– å®Œæ•´å…¬å�¸å��+ç”µè¯� â†’ è¡¥æ�’
ç”¨æ³•: python3 rebuild_entity_inc.py [--full] [--limit N]
  --full   å…¨é‡�é‡�å»º (ç�¾éš¾æ�¢å¤�å�Žæˆ–é¦–æ¬¡), æµ�å¼�åˆ†æ‰¹ ~650 ç¯‡/s (54.5ä¸‡â‰ˆ14min)
é    Nz/root/search.dbz--fullz--limit=ú=é   up   [\u4e00-\u9fffA-Za-z0-9ï¼ˆï¼‰()]{2,28}?(?:æœ‰é™�è´£ä»»å…¬å�¸|è‚¡ä»½æœ‰é™�å…¬å�¸|é›†å›¢æœ‰é™�å…¬å�¸|æœ‰é™�å…¬å�¸)u-   è¯¥æœ¬æˆ‘è´µæ­¤å…¨å�„å…¶è¿™é‚£å�¦ä¸Šå…±ä¸‹å‰�z(1[3-9]\d{9}|0\d{2,3}-?\d{7,8}|400-?\d{7})$u   å�—ç�†u   ä¾�æ³•u   è§£é™¤u   æŠ¥æ‰¹u   å§”æ‰˜u   å�Œæ„�u   ç¼–åˆ¶õ   è¯„ä»·u   æ‰¿æŽ¥u   è´Ÿè´£u   ç»�è¿‡u   æˆ‘å±€u	   å·²å�—ç�†u   äºˆä»¥u   è¿›è¡Œu   ç»„ç»‡u   å¼€å±•u   å�—æ‰˜u   ç»�u   ç”±u   æ‹Ÿu   å�—u   å¯¹u   å�‘u   ä¸ºu   åœ¨u   å°†u   è¯·u   çŽ°u   ä¸Žu   å�Šu   å…³äºŽu   ç»“å�ˆu   è�”ç³»u	   å�¯è�”ç³»u   å¦‚éœ€u7   ï¼Œã€‚ï¼›ï¼šï¼Ÿï¼�ã€�
	 ()ï¼ˆï¼‰ã€�ã€‘ã€Œã€�ã€Žã€�""''u   å�·æ ‹å¹¢å®¤å··æ—¥>+   õ   ä¼ åª’õ   ä¿¡æ�¯õ   å†œä¸šõ   åˆ¶è�¯õ   åŠ³åŠ¡õ   åŒ–å·¥õ   å�‘å±•õ   å’¨è¯¢õ   å•†è´¸õ   å®žä¸šõ   å·¥ç¨‹õ   å»ºç­‘õ   å»ºè®¾õ   æŠ€æœ¯õ   æŠ•èµ„õ   æŽ§è‚¡õ   æ–‡åŒ–õ   æœ�åŠ¡õ   æœºæ¢°õ   æ��æ–™õ   æ£€æµ‹õ   æ¸…æ´�õ   çŽ¯ä¿�õ   çŽ¯å¢ƒõ   ç”Ÿç‰©õ   ç”µå­�õ   ç›‘ç�†õ   ç§‘æŠ€õ   ç®¡ç�†õ   ç»¼å�ˆõ   ç½‘ç»œõ   ç½®ä¸šõ   èƒ½æº�õ   è®¾è®¡õ   è¯„ä¼°õ   è´£ä»»õ   è´¸æ˜“õ   èµ„æº�õ   è¿�è¾“õ   å…¬å�¸õ   æœ‰é™�r   õ   é›†å›¢uD   ^(?:\d{1,2}æœˆ\d{1,2}æ—¥|\d{1,2}æœˆ|æœˆ\d{1,2}æ—¥|\d{1,2}æ—¥|\d+å¹´)c                 ó0   — t        j                  dd| «      S )Nz\DÚ )ÚreÚsub)Úms    úrebuild_entity_inc.pyÚ
norm_phoner6   (   s   € Ü�6‰6�%˜˜QÓÐó    c                 ó¦  — | j                  «       } d}t        | «      D ]  \  }}|t        v sŒ|dz   }Œ | |d  j                  «       } t        j	                  d| «      } d}t        | d d «      D ]  \  }}|t
        v sŒ|}Œ |dk\  r| |dz   d  j                  «       } d}t        D ]1  }| j                  |«      }|dk\  sŒt        ||t        |«      z   «      }Œ3 | |d  j                  d«      } | r:| d   t        v r/t        | «      dkD  r!| dd  } | r| d   t        v rt        | «      dkD  rŒ!| j                  d«      } t        | «      d	k  s&d
| v s#| j                  d«      s| j                  d«      syt        j                  dd| «      }dj                  d„ |D «       «      }t        |«      dk  ry| d   j                  «       s| d   t        v s| d   dv ry| S )Nr   r   r1   éÿÿÿÿé   u	   ï¼ˆ(ï¼‰) é   u   ã€‚ï¼Œ;ï¼›ã€� é   r.   r-   r/   uX   (?:æœ‰é™�è´£ä»»å…¬å�¸|è‚¡ä»½æœ‰é™�å…¬å�¸|é›†å›¢æœ‰é™�å…¬å�¸|æœ‰é™�å…¬å�¸|å…¬å�¸|é›†å›¢)$c              3   óT   K  — | ]   }|t         vsŒ|j                  «       rŒ|–— Œ" y ­w)N)ÚGENERIC_WORDSÚisdigit)Ú.0Úchs     r5   ú	<genexpr>z clean_company.<locals>.<genexpr>F   s   è ø€ Ò[ ¨b¼Ò.EÈbÏjÉjÍlœÑ[ùs   ‚(�(¡(u	   ï¼Œã€‚ã€�)ÚstripÚ	enumerateÚCLAUSE_PUNCTÚDATE_REr3   ÚADDR_MARKERSÚFUNC_TOKENSÚrfindÚmaxÚlenÚSTOP_PREFIXÚendswithr2   Újoinr?   )	ÚnameÚcutÚirA   ÚbestÚtokÚidxÚcoreÚ
core_cleans	            r5   Úclean_companyrW   ,   sá  € Ø�:‰:‹<€DØ
€CÜ˜4“ò ‰ˆˆ2Ø”ÒØ�a‘%‰Cðð ��ˆ:×ÑÓ€DÜ�;‰;�r˜4Ó €DØ€DÜ˜4  ˜9Ó%ò ‰ˆˆ2Ø”ÒØ‰Dðð ˆq‚yØ�D˜1‘H�Iˆ×$Ñ$Ó&ˆØ€DÜò -ˆØ�j‰j˜‹oˆØ�!‹8Ü�t˜S¤3 s£8™^Ó,‰Dð-ð ��ˆ;×Ñ˜[Ó)€DÙ
�4˜‘7œkÑ)¬c°$«i¸!ªmØ�A�Bˆxˆñ �4˜‘7œkÑ)¬c°$«i¸!«mà�:‰:Ð&Ó'€DÜ
ˆ4ƒy�1‚}˜X¨Ñ-°·±¸xÔ1HÈDÏMÉMÐZbÔLcØÜ�6‰6ÐmÐoqÐswÓx€DØ—‘Ñ[ dÔ[Ó[€JÜ
ˆ:ƒ˜ÒØØˆA�w‡�Ô˜D ™G¤|Ñ3°t¸A±wÀ+Ñ7MØØ€Kr7   c                 óœ  — |xs ddz   |xs dz   dz   |xs dz   }t        «       }t        j                  |«      D ]0  }t        |j	                  d«      «      }|sŒ |j                  |«       Œ2 t        j                  |«      D �ch c]  }t        |«      ’Œ }}|D �	cg c]  }	| d|	f‘Œ	 c}	|D �	cg c]  }	| d|	f‘Œ	 c}	z   S c c}w c c}	w c c}	w )Nr1   ú
r   ÚcompanyÚphone)	ÚsetÚ
COMPANY_REÚfinditerrW   ÚgroupÚaddÚPHONE_REÚfindallr6   )
Údoc_idÚtitleÚcontentÚsummaryÚtextÚcompsr4   ÚcnÚphonesÚvs
             r5   Úextractrl   N   sÇ   € ØŠK�R˜4Ñ 7¢=¨bÑ1°DÑ8¸GºMÀrÑJ€DÜ‹E€EÜ× Ñ  Ó&ò ˆÜ˜1Ÿ7™7 1›:Ó&ˆÚØ�I‰I�b�Mðô &.×%5Ñ%5°dÓ%;Ö< Œj˜�mÐ<€FÐ<Ø,1Ö2 qˆV�Y Ò"Ò2ÐTZÖ5[Èq°v¸wÈÒ6JÒ5[Ñ[Ð[ùò =ùÚ2ùÒ5[s   ÂB?ÂCÂ.C	c                  ó†  — t        j                  t        d¬«      } | j                  d«       | j                  d«       | j	                  «       }| j	                  «       }t        j
                  «       }| j                  d«       t        rY|j                  d«       |j                  d«       | j                  «        t        dt        j                  d	«      › d
�d¬«       d}n$|j                  d«       |j                  «       d   }|r2|j                  d«       |j                  d«       | j                  «        t        dt        j                  d	«      › d|› dt        j
                  «       |z
  d›d�d¬«       t        r|j                  d«       n|j                  d«       |j                  «       d   }|dk(  r%t        dt        j                  d	«      › d�d¬«       y t        dt        j                  d	«      › d|› dt        rdnd› �d¬«       t        r|j                  d«       n|j                  d«       t        j
                  «       }d}g }g }		 t        r
|t        k\  rnÉ|j                  «       }
|
€n¶|j                  t        |
Ž «       |	j                  |
d   f«       |dz  }t        |«      dk\  r8|j!                  d |«       |j!                  d!|	«       | j                  «        g }g }	|d"z  dk(  r6t        j
                  «       |z
  }t        d#|› d$|› d%|d›d&||z  d›d'�	d¬«       ŒÙ|r|j!                  d |«       |	r|j!                  d!|	«       |s|	r| j                  «        t        j
                  «       |z
  }| j                  d(«      j                  «       d   }t        d)|› d|d›d&||z  d›d*|› d+�	d¬«       y ),Néx   )ÚtimeoutzPRAGMA busy_timeout=120000zPRAGMA journal_mode=WALzFCREATE TABLE IF NOT EXISTS gov_entity_proc(doc_id INTEGER PRIMARY KEY)zDELETE FROM gov_entityzDELETE FROM gov_entity_procú[z%Y-%m-%d %H:%M:%Su4   ] å…¨é‡�æ¨¡å¼�: å·²æ¸…ç©º gov_entity/gov_entity_procT)Úflushr   zbSELECT COUNT(*) FROM gov_entity e WHERE NOT EXISTS (SELECT 1 FROM gov_raw r WHERE r.id = e.doc_id)z`DELETE FROM gov_entity WHERE NOT EXISTS (SELECT 1 FROM gov_raw r WHERE r.id = gov_entity.doc_id)zjDELETE FROM gov_entity_proc WHERE NOT EXISTS (SELECT 1 FROM gov_raw r WHERE r.id = gov_entity_proc.doc_id)u   ] å­¤å„¿æ¸…ç�†: u    æ�¡ (z.0fzs)zSELECT COUNT(*) FROM gov_rawzgSELECT COUNT(*) FROM gov_raw r WHERE NOT EXISTS (SELECT 1 FROM gov_entity_proc p WHERE p.doc_id = r.id)u   ] æ— ç¼ºå¤±, å®Œæˆ�u   ] å¾…å¤„ç�† u    ç¯‡ u   (å…¨é‡�é‡�å»º)u   (å¢žé‡�)z;SELECT id, title, content, summary FROM gov_raw ORDER BY idzºSELECT r.id, r.title, r.content, r.summary FROM gov_raw r
                     WHERE NOT EXISTS (SELECT 1 FROM gov_entity_proc p WHERE p.doc_id = r.id)
                     ORDER BY r.idr   iPÃ  z%INSERT INTO gov_entity VALUES (?,?,?)z0INSERT OR IGNORE INTO gov_entity_proc VALUES (?)i N  z  ú/u    ç¯‡, zs (u    ç¯‡/s)zSELECT COUNT(*) FROM gov_entityu   âœ… å¤„ç�† u    ç¯‡/s), gov_entity çŽ°æœ‰ u    è¡Œ)Úsqlite3ÚconnectÚDBÚexecuteÚcursorÚtimeÚFULLÚcommitÚprintÚstrftimeÚfetchoneÚLIMITÚextendrl   ÚappendrK   Úexecutemany)ÚconnÚcÚwÚt0ÚorphansÚmissingÚt_startÚdoneÚbufÚbuf_procÚrowÚelÚns                r5   Úmainr�   Y   sc  € Ü�?‰?œ2 sÔ+€DØ‡L�LÐ-Ô.Ø‡L�LÐ*Ô+Ø�‰‹€AØ�‰‹€Aô 
�‰‹€BØ‡L�LÐYÔZÝà	�	‰	Ð*Ô+Ø	�	‰	Ð/Ô0Ø�‰ŒÜ�”$—-‘-Ð 3Ó4Ð5Ð5iÐjÐrvÕwØ‰à	�	‰	ÐvÔwØ—*‘*“,˜q‘/ˆÙØ	�	‰	ÐtÔuØ	�	‰	Ð~ÔØ�‰ŒÜ	ˆAŒd�m‰mÐ/Ó0Ð1Ð1AÀ'ÀÈ&ÔQU×QZÑQZÓQ\Ð]_ÑQ_Ð`cÐPdÐdfÐ
gÐosÕtõ Ø	�	‰	Ð0Õ1à	�	‰	Ð{Ô|Ø�j‰j‹l˜1‰o€GØ�!‚|Ü�”$—-‘-Ð 3Ó4Ð5Ð5HÐIÐQUÕVØÜ	ˆAŒd�m‰mÐ/Ó0Ð1°¸g¸YÀeÕ`dÑL\ÐjtÐKuÐ
vð  Cõ  DåØ	�	‰	ÐOÕPà	�	‰	ð &ô 	'ô �i‰i‹k€GØ€DØ
€CØ€HØ
Ý�TœU’]ØØ�j‰j‹lˆØˆ;ØØ�
‰
”7˜C�=Ô!Ø�‰˜˜Q™˜	Ô"Ø�‰	ˆÜˆs‹8�uÒØ�M‰MÐAÀ3ÔGØ�M‰MÐLÈhÔWØ�K‰KŒMØˆCØˆHØ�%‰<˜1ÒÜ—‘“˜wÑ&ˆBÜ�B�t�f˜A˜g˜Y f¨R°¨H°C¸¸R¹À°}ÀGÐLÐTXÕYð# ñ$ Ø	�‰Ð=¸sÔCÙØ	�‰ÐHÈ(ÔSÙ
‰hØ�‰ŒÜ	�‰‹�wÑ	€BØ�‰Ð6Ó7×@Ñ@ÓBÀ1ÑE€AÜ	ˆK˜�v˜U 2 c (¨#¨d°2©g°c¨]Ð:UÐVWÐUXÐX\Ð
]ÐeiÖjr7   Ú__main__)Ú__doc__rs   r2   Úsysrx   ru   Úargvry   r~   Ú_aÚ
startswithÚintÚsplitÚcompiler]   r\   rL   ra   rH   rE   rG   r>   rF   r6   rW   rl   r�   Ú__name__© r7   r5   ú<module>r›      só   ðñ÷ × à€Ø�3—8‘8Ð€Ø€Ø
�(‰(ò &€BØ	‡}�}�ZÕ Ù�B—H‘H˜S“M !Ñ$Ó%‰ð&ð
 ˆR�Z‰ZðQó€
ñ ÐAÓB€Øˆ2�:‰:ÐAÓB€òD€ð N€Ø#€òW€ð
 ˆ"�*‰*Ð\Ó
]€ò òòD\òIkðX ˆzÒÙ…Fð r7   