+
    Xi              
           R t ^ RIt^ RIHtHt ^ RIHt R R ltR R ltR R	 lt	]
R
8X  da   RRRRRRR^/RRRRRRR^ /RRRRRRR^ /.t]! ]4      t]! R4       ] F+  t]! R]R,           R]R,           R]R,          R R24       K-  	  R# R# )u   
Aggregator — Combine signals from all sources and rank by relevance.
Deduplicates similar titles and picks top 10 signals across niches.
NListDict)SequenceMatcherc                \    V ^8  d   QhR\         \        ,          R\         \        ,          /#    signalsreturnr   )formats   "K/Users/tonyclaw/.openclaw/workspace/scripts/research-pipeline/aggregator.py__annotate__r      s"      d T
     c                n   . pV  F  pRpV F  p\        RVR,          P                  4       VR,          P                  4       4      P                  4       pVR8  g   KQ  RpVP                  R^ 4      VP                  R^ 4      8  d   VR,          VR&    M	  V'       d   K  VP	                  V4       K  	  V# )zZ
Remove duplicate or very similar signals.
Uses string similarity to identify near-dupes.
FNtitleg      ?T
engagement)r   lowerratiogetappend)r	   uniquesignalis_dupexisting
similaritys   &     r   deduplicate_signalsr      s    
 FH(w%%'!'') eg	 
 D ::lA.lA1NN-3L-AH\*  vMM&!% ( Mr   c                \    V ^8  d   QhR\         \        ,          R\         \        ,          /# r   r   )r   s   "r   r   r   )   s&     C C$t* Cd Cr   c                    RRRRRR/pV  FL  pVP                  RR4      p\        VP                  R	^ 4      ^4      pWAP                  VR
4      ,          VR&   KN  	  \        V R RR7      # )zx
Rank signals by relevance: engagement + recency + source credibility.
Returns signals sorted by score (highest first).
redditg      ?bravegffffff?youtubeg333333?source r   g      ?scorec                     V R ,          # )r#    )xs   &r   <lambda>rank_signals.<locals>.<lambda>=   s    7r   T)keyreverse)r   maxsorted)r	   source_weightsr   r!   r   s   &    r   rank_signalsr.   )   sz     	#3N Hb)L!4a8
 %'9'9&#'FFw  '3TBBr   c          	          V ^8  d   QhR\         \        ,          R\         \        ,          R\         \        ,          R\         \        ,          /# )r   reddit_signalsbrave_signalsyoutube_signalsr
   r   )r   s   "r   r   r   @   s@      J: $Z 
$Z	r   c                ^    W,           V,           p\        V4      p\        V4      pVR,          # )zV
Aggregate signals from all sources.
Returns top 10 ranked signals across all niches.
:N
   N)r   r.   )r0   r1   r2   all_signalsr   rankeds   &&&   r   aggregate_signalsr7   @   s3     !0?BK !-F &!F#;r   __main__r!   r   nichezUSMC / Militaryr   z!Marine Corps recruitment trendingr   r   zReformed Christianz$Reformed theology gaining popularityr    zPrint on DemandzPOD design tutorialzRanked signals:z  z: z	 (score: r#   z.1f))__doc__retypingr   r   difflibr   r   r.   r7   __name__test_signalsr6   printsigr%   r   r   <module>rC      s   
 
  #:C.& z h&8#		
 g);!		
 i&*!		
L* ,'F	
3w<.3w<.	#g,s9K1MN 3 r   