o
    9hN                     @   s*   d Z ddlZddlmZ G dd dZdS )u   
書籍キーワードの品質フィルタリングモジュール

不適切なキーワード（書籍形式、販売情報、年号など）を除外し、
書籍の内容を表す高品質なキーワードのみを保持します。
    N)Listc                   @   sR   e Zd ZdZh dZg dZddee dedee fdd	Zd
ede	fddZ
dS )KeywordFilteru<   書籍キーワードの品質フィルタリングクラス>      巻   本   紙   こと   もの   上巻   下巻   予約   全巻   特典   知識   表紙   記録   限定   第1巻	   カバー	   セット	   ページ	   完全版   入荷予約   限定特典   楽天ブックス)z^\d{4}$u   ^第?\d+[巻号]?$u
   .*限定.*u
   .*予約.*u   .*ブックス.*z^\d+$ keywordstitlereturnc                 C   sP   g }|D ]!}|  }|sqt|dkrq|| jv rq| |r q|| q|S )uW  
        キーワードリストをフィルタリングします。

        Args:
            keywords (List[str]): フィルタリング対象のキーワードリスト
            title (str): 書籍タイトル（将来の拡張用）

        Returns:
            List[str]: フィルタリング後のキーワードリスト
           )striplenEXACT_BLOCK_WORDS_matches_block_patternappend)selfr   r   filteredkeyword r'   )/home/air/yokohama/back/keyword_filter.pyfilter$   s   

zKeywordFilter.filterr&   c                 C   s"   | j D ]}t||r dS qdS )u   
        キーワードがブロックパターンに一致するかチェックします。

        Args:
            keyword (str): チェック対象のキーワード

        Returns:
            bool: パターンに一致する場合True
        TF)PATTERN_BLOCKSrematch)r$   r&   patternr'   r'   r(   r"   H   s
   

z$KeywordFilter._matches_block_patternN)r   )__name__
__module____qualname____doc__r!   r*   r   strr)   boolr"   r'   r'   r'   r(   r      s     	$r   )r1   r+   typingr   r   r'   r'   r'   r(   <module>   s    