Ë
    Bj£j¸  ã                   ó  — d Z ddlZddlZddlZddlZdZdZdZ ej                  dej                  ej                  z  «      Z ej                  dej                  ej                  z  «      ZdZd	„ Zd
„ Zdd„Zd„ Zedk(  r e«        yy)ul  å­˜é‡�æ¸…æ´—ï¼šå‰¥æŽ‰ gov_raw.content é‡Œçš„ <style>/<script>/<noscript>/<template> å�—ã€‚

èƒŒæ™¯ï¼ˆ2026-09-11ï¼‰
  æ”¿åºœç«™æ­£æ–‡å¸¸æ•´æ®µå†…è�” CSS â€”â€” ç»�å…´ä¸Šè™žåŒºæ”¿åºœ-çŽ¯è¯„å…¬ç¤ºæŸ�æ�¡ content å…± 9853 å­—ï¼Œ
  å…¶ä¸­çº¦ 9300 å­—æ˜¯ 3 ä¸ª <style> å�—ï¼ŒçœŸæ–‡æœ¬ï¼ˆä¸€å¼ å…¬ç¤ºè¡¨ï¼‰å�ªæœ‰ 548 å­—ã€‚
  å�Žæžœï¼šâ‘  search_app åˆ—è¡¨æ‘˜è¦�æ•´è¡Œå�˜æˆ� `.ewb-header { box-sizing: ... }`ï¼›
        â‘¡ è¯¦æƒ…é¡µæŠŠ <style> **åŽŸæ ·æ³¨å…¥** â†’ æµ�è§ˆå™¨å½“å…¨é¡µæ ·å¼�è¡¨åº”ç”¨ï¼Œæ±¡æŸ“æ•´é¡µ CSSã€‚

ä¿®å¤�åˆ†å±‚
  æ˜¾ç¤ºç«¯ï¼šsearch_app.strip_body_noise()ï¼ˆ5 å¤„è°ƒç”¨ç‚¹ï¼‰â€”â€” å·²ä¸Šçº¿
  å…¥åº“ç«¯ï¼šcrawler_lib.strip_noise_blocks()ï¼ˆpush_to_searchdb/clean_htmlï¼Œè¦†ç›– 561 è„šæœ¬ï¼‰â€”â€” å·²ä¸Šçº¿
  å…œåº•ï¼š  fix_md_after_crawl.py çš„ fix_noise()ï¼ˆæ¯�æ—¥æ‰«æœ€è¿‘ N å¤©ï¼Œè¦†ç›–ç›´å†™ sqlite çš„è„šæœ¬ï¼‰â€”â€” å·²ä¸Šçº¿
  å­˜é‡�ï¼š  **æœ¬è„šæœ¬**ï¼ˆ8,513 è¡Œï¼‰

âš ï¸� å®‰å…¨ç­–ç•¥ï¼šå¼€/é—­æ ‡ç­¾æ•°é‡�ä¸�ç­‰çš„è¡Œ**è·³è¿‡ä¸�æ´—**ã€‚
   full content ä¸Š `<style>` æœªé—­å�ˆ = HTML æœ¬èº«ç•¸å½¢ï¼Œæˆªæ–­å…œåº•ä¼šæŠŠå�Žé�¢çš„çœŸæ–‡æœ¬ä¸€èµ·å�ƒæŽ‰ã€‚
   ï¼ˆæ˜¾ç¤ºç«¯ç”¨ SUBSTR é€ æˆ�çš„ã€Œå�‡ä¸�å¯¹é½�ã€�ä¸�å�—å½±å“�ï¼Œé‚£è¾¹å…œåº•æ˜¯å¯¹çš„ã€‚ï¼‰

ç”¨æ³•
  python3 clean_content_noise_20260911.py --dry-run    # å�ªä½“æ£€ï¼šç›®æ ‡æ•° / è·³è¿‡æ•° / å‰�å�Žæ ·æœ¬
  python3 clean_content_noise_20260911.py              # å»ºå›žæ»šè¡¨ â†’ åˆ†æ‰¹æ¸…æ´— â†’ æ ¡éªŒ
é    Nz/mnt/data/search.dbÚgov_raw_content_bak_20260911éÈ   z4<(script|style|noscript|template)\b[^>]*>.*?</\1\s*>z/<(?:script|style|noscript|template)\b[^>]*>.*\Z)ÚscriptÚstyleÚnoscriptÚtemplatec                 ó$  — | s| S | }d}||k7  r|}t         j                  d|«      }||k7  rŒt        j                  d|«      }t        j                  dd|t        j                  ¬«      }t        j                  dd|t        j
                  ¬«      }|S )un   å‰¥æŽ‰å™ªå£°å�—ï¼ˆè¿žå�—å†…æ–‡æœ¬ï¼‰ã€�æ³¨é‡Šã€�<link>ã€‚ä¸Ž crawler_lib.strip_noise_blocks å�Œä¸€å¥—é€»è¾‘ã€‚Nú z
<!--.*?-->)Úflagsz<link\b[^>]*>)ÚBLOCKÚsubÚ	OPEN_ONLYÚreÚSÚI)ÚhtmlÚsÚprevs      ú1/root/gov_crawler/clean_content_noise_20260911.pyÚstrip_noiser   &   s�   € áØˆØ€AØ€DØ
�!Š)ØˆÜ�I‰I�c˜1Óˆð �!‹)ô 	�‰�c˜1Ó€AÜ
�‰ˆ}˜c 1¬B¯D©DÔ1€AÜ
�‰Ð  a¬r¯t©tÔ4€AØ€Hó    c                 óö   — t         D ]p  }t        t        j                  d|z  | t        j                  «      «      }t        t        j                  d|z  | t        j                  «      «      }||k7  sŒk|||fc S  y)u]   è¿”å›ž (æ ‡ç­¾, å¼€æ•°, é—­æ•°) â€”â€” æ•°é‡�ä¸�ç­‰è¯´æ˜Ž HTML ç•¸å½¢ï¼Œè°ƒç”¨æ–¹åº”è·³è¿‡ã€‚z<%s\bz</%s\s*>N)ÚTAGSÚlenr   Úfindallr   )r   ÚtÚoÚcs       r   Ú	unbalancer   5   sg   € äò ˆÜ”—
‘
˜8 a™<¨¬r¯t©tÓ4Ó5ˆÜ”—
‘
˜;¨™?¨D´"·$±$Ó7Ó8ˆØ�‹6Ø�q˜!�9Òð	ð
 r   c                 ó¶   — t        j                  dd| xs d«      }t        j                  dd|«      }t        j                  dd|«      j                  «       d | S )Nz<[^>]+>r
   Ú z&&nbsp;|&amp;|&lt;|&gt;|&#\d+;|&[a-z]+;z\s+)r   r   Ústrip)r   Únr   s      r   Útext_ofr$   ?   sN   € Ü
�‰ˆz˜3 ¢
¨Ó+€AÜ
�‰Ð8¸#¸qÓA€AÜ�6‰6�&˜#˜qÓ!×'Ñ'Ó)¨"¨1Ð-Ð-r   c                  ó   — dt         j                  v } t        j                  t        d¬«      }|j                  d«       |j                  d«       t        j                  «       }|j                  d«      j                  «       }t        dt        |«      t        j                  «       |z
  fz  «       g g }}|D ]G  \  }}}t        |«      }	|	r|j                  ||	f«       Œ(t        |«      |k7  sŒ7|j                  |«       ŒI t        dt        |«      t        |«      fz  «       |r]d	d
lm}
  |
d„ |D «       «      j                  «       D ]  \  }}t        d||fz  «       Œ t        d|d d D �cg c]  }|d	   ‘Œ	 c}z  «       |d d D ]z  \  }}}t        d||t        t        |«      «      t        |«      d u fz  «       t        dt!        t#        |«      «      «       t        dt!        t#        t        |«      «      «      «       Œ| | rt        d«       |j%                  «        y |j                  dt&        z  «       |j                  dt&        z  «       t)        d	t        |«      t*        «      D ]K  }|j-                  dt&        z  |||t*        z    D �cg c]  }|d	   |d   f‘Œ c}«       |j/                  «        ŒM |j                  dt&        z  «      j1                  «       d	   }t        dt&        |fz  «       t3        |«      }d	}|D ]y  \  }}}||vrŒ|j                  dt        |«      |f«       |dz  }|t*        z  d	k(  sŒ;|j/                  «        t        d|t        |«      t        j                  «       |z
  fz  «       Œ{ |j/                  «        |j                  d«      j1                  «       d	   }t        d||t        |«      |t        j                  «       |z
  fz  «       |j%                  «        y c c}w c c}w )Nz	--dry-runi,  )ÚtimeoutzPRAGMA busy_timeout=300000zPRAGMA synchronous=NORMALzÇ
        SELECT id, length(content), content FROM gov_raw
        WHERE content LIKE '%<style%' OR content LIKE '%<script%'
           OR content LIKE '%<noscript%' OR content LIKE '%<template%'
    u+   [ä½“æ£€] å€™é€‰ %d æ�¡ï¼ŒæŸ¥è¯¢è€—æ—¶ %.1fsuC   [ä½“æ£€] å�¯æ¸…æ´— %d æ�¡ | è·³è¿‡ï¼ˆå¼€é—­æ ‡ç­¾ä¸�å¯¹é½�ï¼‰%d æ�¡r   )ÚCounterc              3   ó,   K  — | ]  }|d    d   –— Œ y­w)é   r   N© )Ú.0Úxs     r   ú	<genexpr>zmain.<locals>.<genexpr>]   s   è ø€ Ò4¨!˜a ™d 1�gÑ4ùs   ‚u&          è·³è¿‡æ ‡ç­¾åˆ†å¸ƒ: <%s> %d æ�¡u          è·³è¿‡æ ·æœ¬ id: %sé   é   u9   
--- id=%s (åŽŸ %d å­— â†’ æ´—å�Ž %d å­—) å¼€é—­å¯¹é½�=%su     åŽŸæ–‡æœ¬:u     æ–°æ–‡æœ¬:u   
[DRY-RUN] æœªå†™åº“ã€‚zDROP TABLE IF EXISTS %szCCREATE TABLE %s (id INTEGER PRIMARY KEY, content TEXT, bak_at TEXT)zMINSERT INTO %s (id, content, bak_at) VALUES (?,?,datetime('now','localtime'))é   zSELECT COUNT(*) FROM %su   [å¤‡ä»½] %s å†™å…¥ %d è¡Œz'UPDATE gov_raw SET content=? WHERE id=?r)   u!      ... å·²æ¸…æ´— %d / %d  (%.0fs)z³
        SELECT COUNT(*) FROM gov_raw
        WHERE content LIKE '%<style%' OR content LIKE '%<script%'
           OR content LIKE '%<noscript%' OR content LIKE '%<template%'
    uc   [å®Œæˆ�] æ¸…æ´— %d æ�¡ | æ®‹ç•™å€™é€‰ %d æ�¡ï¼ˆåº”=è·³è¿‡æ•° %dï¼‰| å›žæ»šè¡¨ %d è¡Œ | è€—æ—¶ %.0fs)ÚsysÚargvÚsqlite3ÚconnectÚDBÚexecuteÚtimeÚfetchallÚprintr   r   Úappendr   Úcollectionsr'   Úmost_commonÚreprr$   ÚcloseÚBAKÚrangeÚBATCHÚexecutemanyÚcommitÚfetchoneÚset)ÚdryÚdbÚt0ÚrowsÚtodoÚskipÚridÚclenÚcontentÚubr'   Útagr#   r,   ÚiÚrÚn_bakÚidsÚdoneÚlefts                       r   ÚmainrW   E   s¿  € Ø
œŸ™Ð
!€CÜ	�‰œ SÔ	)€BØ‡J�JÐ+Ô,Ø‡J�JÐ*Ô+ä	�‰‹€BØ�:‰:ð ó 	÷ 
‰‹ð	 	ô
 
Ð
7¼3¸t»9ÄdÇiÁiÃkÐTVÑFVÐ:WÑ
WÔXà�Rˆ$€DØ"ò ÑˆˆT�7Ü�wÓˆÙØ�K‰K˜˜b˜	Õ"Ü˜Ó! WÓ,Ø�K‰K˜Õðô 
Ð
OÔSVÐW[ÓS\Ô^aÐbfÓ^gÐRhÑ
hÔiÙÝ'ÙÑ4¨tÔ4Ó4×@Ñ@ÓBò 	G‰FˆC�ÜÐ:¸cÀ1¸XÑEÕFð	GäÐ*¸DÀÀ!¸HÖ-E°q¨a°«dÒ-EÑEÔFð # 2 A˜hò CÑˆˆT�7ÜÐJØ�dœC¤¨GÓ 4Ó5´yÀÓ7IÈTÐ7QÐRñSô 	Täˆnœd¤7¨7Ó#3Ó4Ô5Üˆnœd¤7¬;°wÓ+?Ó#@ÓAÕBð	Cñ ÜÐ(Ô)Ø
�‰Œ
Øð ‡J�JÐ(¬3Ñ.Ô/Ø‡J�JÐTÔWZÑZÔ[Ü�1”c˜$“i¤Ó'ò ˆØ
�‰ÐjÔmpÑpØ.2°1°Q¼±YÐ.?Ö@¨˜˜1™˜q ™tšÒ@ô	Bà
�	‰	�ðð �J‰JÐ0´3Ñ6Ó7×@Ñ@ÓBÀ1ÑE€EÜ	Ð
%¬¨e¨Ñ
4Ô5ô ˆd‹)€CØ€DØ"ò ]ÑˆˆT�7Ø�c‰>ØØ
�
‰
Ð<¼{È7Ó?SÐUXÐ>YÔZØ�‰	ˆØ”%‰<˜1ÓØ�I‰IŒKÜÐ5¸¼sÀ4»yÌ$Ï)É)Ë+ÐXZÑJZÐ8[Ñ[Õ\ð]ð ‡I�I„Kð �:‰:ð ó 	÷ 
‰‹�Añ	€Dô
 
Ð
oØ�4œ˜T› E¬4¯9©9«;¸Ñ+;Ð<ñ=ô >à‡H�H…Jùò[ .Fùò& As   Å-O6
ÊO;Ú__main__)é    )Ú__doc__r   r3   r1   r7   r5   r?   rA   Úcompiler   r   r   r   r   r   r   r$   rW   Ú__name__r*   r   r   ú<module>r]      sš   ðñó, 
Û Û 
Û à€Ø$€Ø€àˆ�
‰
ÐJÈBÏDÉDÐSU×SWÑSWÉKÓX€ØˆB�J‰JÐIÈ2Ï4É4ÐRT×RVÑRVÉ;ÓW€	Ø2€òòó.òGðT ˆzÒÙ…Fð r   