Ë
    cQêj"	  ã                   ó0   — d Z ddlZddlmZ  G d„ d«      Zy)zSimple filter ranker.é    N)ÚFinalc            	       ó¶   — e Zd ZU dZ ej
                  d«      Zeed<   dde	ddfd„Z
dedee   fd	„Zd
edee   defd„Zdeeeef      dedeeeef      fd„Zy)ÚSimpleFilterRankeraA  Simple filter ranker.

    1) Pull any doc with 'wikipedia.org' in its href to the top.
    2) Bucket the rest according to where query tokens appear:
       - both title & body/description
       - title only
       - body only
       - neither
    3) Return wikipedia-top + both + title-only + body-only + neither.
    z\W+Ú	_splitterÚmin_token_lengthÚreturnNc                 ó   — || _         y ©N)r   )Úselfr   s     úT/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/ddgs/similarity.pyÚ__init__zSimpleFilterRanker.__init__   s
   € Ø 0ˆÕó    Úqueryc                 ó¬   — | j                   j                  |j                  «       «      D �ch c]  }t        |«      | j                  k\  sŒ|’Œ c}S c c}w )z7Split on non-word characters & filter out short tokens.)r   ÚsplitÚlowerÚlenr   )r   r   Útokens      r   Ú_extract_tokensz"SimpleFilterRanker._extract_tokens   s=   € à#'§>¡>×#7Ñ#7¸¿¹»Ó#FÖn˜%Ì#ÈeË*ÐX\×XmÑXmÓJm’ÒnÐnùÒns   ¬AÁ
AÚtextÚtokensc                 óL   ‡— |j                  «       Št        ˆfd„|D «       «      S )z:Check if any token is a substring of the lower-cased text.c              3   ó&   •K  — | ]  }|‰v –— Œ
 y ­wr
   © )Ú.0ÚtokÚ
lower_texts     €r   ú	<genexpr>z4SimpleFilterRanker._has_any_token.<locals>.<genexpr>   s   øè ø€ Ò7¨�3˜*Ô$Ñ7ùó   ƒ)r   Úany)r   r   r   r   s      @r   Ú_has_any_tokenz!SimpleFilterRanker._has_any_token   s   ø€ à—Z‘Z“\ˆ
ÜÓ7°Ô7Ó7Ð7r   Údocsc                 ó,  ‡— | j                  |«      }g }g }g }g }g }|D ]æ  }	|	j                  dd«      }
|	j                  dd«      Š|	j                  d|	j                  dd«      «      }t        ˆfd„dD «       «      rŒ^d|
v r|j                  |	«       Œt| j	                  ‰|«      }| j	                  ||«      }|r|r|j                  |	«       Œ®|r|j                  |	«       ŒÂ|r|j                  |	«       ŒÖ|j                  |	«       Œè ||z   |z   |z   |z   S )	z,Rank a list of docs based on a query string.ÚhrefÚ ÚtitleÚbodyÚdescriptionc              3   ó&   •K  — | ]  }|‰v –— Œ
 y ­wr
   r   )r   Úxr&   s     €r   r   z*SimpleFilterRanker.rank.<locals>.<genexpr>2   s   øè ø€ ÒB !�1˜”:ÑBùr   )z	Category:Ú	Wikimediazwikipedia.org)r   ÚgetÚallÚappendr!   )r   r"   r   r   Ú	wiki_hitsÚbothÚ
title_onlyÚ	body_onlyÚneitherÚdocr$   r'   Ú	hit_titleÚhit_bodyr&   s                 @r   ÚrankzSimpleFilterRanker.rank!   s&  ø€ à×%Ñ% eÓ,ˆàˆ	ØˆØˆ
Øˆ	Øˆàò 	$ˆCØ—7‘7˜6 2Ó&ˆDØ—G‘G˜G RÓ(ˆEà—7‘7˜6 3§7¡7¨=¸"Ó#=Ó>ˆDô ÓBÐ'AÔBÔBØð  $Ñ&Ø× Ñ  Ô%Øð ×+Ñ+¨E°6Ó:ˆIØ×*Ñ*¨4°Ó8ˆHá™XØ—‘˜CÕ ÙØ×!Ñ! #Õ&ÙØ× Ñ  Õ%à—‘˜sÕ#ð5	$ð: ˜4Ñ *Ñ,¨yÑ8¸7ÑBÐBr   )é   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚreÚcompiler   r   Ú__annotations__Úintr   ÚstrÚsetr   Úboolr!   ÚlistÚdictr7   r   r   r   r   r      s¡   … ñ	ð "�r—z‘z &Ó)€IˆuÓ)ñ1¨ð 1°Tó 1ðo Sð o¨S°©Xó oð8 3ð 8°°C±ð 8¸Tó 8ð
'C˜˜d 3¨ 8™nÑ-ð 'C°cð 'C¸dÀ4ÈÈSÈÁ>Ñ>Rô 'Cr   r   )r<   r=   Útypingr   r   r   r   r   ú<module>rG      s   ðÙ ã 	Ý ÷ACò ACr   