
    wh                     h    d dl Z d dlZd dlmZ d dlmZmZ  e j                  e      Z	 G d d      Z
y)    N)defaultdict)ListOptionalc                   0   e Zd Zd Zd Zdedee   fdZdedefdZdedefdZ	dedefd	Z
dedee   fd
Zdedee   fdZdedee   fdZdedee   fdZdedee   fdZdedee   fdZdedee   fdZdedefdZdedefdZd Zd Zd Zd Zy)KeywordsServicec                     t        t              | _        i | _        i | _        i | _        i | _        i | _        i | _        i | _	        g | _
        g | _        i | _        y N)r   listcandidates_mappattern_mapnormalized_pattern_mapnormalized_sorted_pattern_maprequired_wordsaliases_mapbottle_aliases_mapvintages_mapbottle_sizesbottle_exclusionsbottles_mapselfs    b/var/www/html/wine-match-dev/backend/winematch-backend/src/apps/match/services/keywords_service.py__init__zKeywordsService.__init__	   s_    )$/&(#-/* "$!#    c                     | j                          | j                          | j                          | j                          y r	   )map_candidatesmap_aliasesmap_bottle_aliasesmap_vintagesr   s    r   preparezKeywordsService.prepare   s2    !r   wordreturnc                 :    | j                   j                  |g       S r	   )r   get)r   r!   s     r   get_wine_candidatesz#KeywordsService.get_wine_candidates   s    ""&&tR00r   
wine_db_idc                 :    | j                   j                  |d      S N )r   r$   r   r&   s     r   get_patternzKeywordsService.get_pattern   s    ##J33r   c                 :    | j                   j                  |d      S r(   )r   r$   r*   s     r   get_normalized_sorted_patternz-KeywordsService.get_normalized_sorted_pattern"   s    1155j"EEr   c                 :    | j                   j                  |d      S r(   )r   r$   r*   s     r   get_normalized_patternz&KeywordsService.get_normalized_pattern%   s    **..z2>>r   c                 :    | j                   j                  |g       S r	   )r   r$   r*   s     r   get_required_wordsz"KeywordsService.get_required_words(   s    ""&&z266r   sizec                 \    |r)| j                   j                  |j                               S d S r	   )r   r$   lower)r   r2   s     r   get_bottle_idzKeywordsService.get_bottle_id+   s&    <@t&&**4::<8JdJr   	bottle_idc                 8    | j                   j                  |      S r	   )r   r$   )r   r6   s     r   get_bottle_sizezKeywordsService.get_bottle_size.   s    ##I..r   yearc                     | j                   j                         D ]*  \  }}|j                         |j                         k(  s(|c S  y r	   )r   itemsr4   )r   r9   keyvalues       r   get_vintage_idzKeywordsService.get_vintage_id1   sB    ++113 	JC{{}

,
	 r   
vintage_idc                 8    | j                   j                  |      S r	   )r   r$   )r   r?   s     r   get_vintagezKeywordsService.get_vintage7   s      $$Z00r   textc                     |sy | j                   j                         D ]C  }t        j                  dt        j                  |       d|t        j
                        sA|c S  y )N(^|\s|[^\w])($|\s|[^\w]))flags)r   keysresearchescape
IGNORECASE)r   rB   names      r   parse_bottle_sizez!KeywordsService.parse_bottle_size:   sY    ++002 	DyyL4(9FTVTaTab	 r   rL   c                    g }|s|S t        t        |j                                     }|D ]M  }|| j                  |      z  }t	        t        |      dd      D ]  }|d | dz   }|| j                  |      z  }  O t        t        |            S )Nr   *)r
   setsplitr%   rangelen)r   rL   candidate_listwordsr!   i	sub_tokens          r   get_candidate_listz"KeywordsService.get_candidate_listB   s    !!S&' 	FDd66t<<N3t9a, F !HsN	$":":9"EEF	F
 C'((r   
input_textc                    |sy|j                         }| j                  j                         D ]9  \  }}dt        j                  |       d}t        j
                  |d| d|      }; t        j
                  dd|      j                         S )Nr)   rD   rE    z\s+)r4   r   r;   rH   rJ   substrip)r   rZ   rB   kvpatterns         r   replace_aliaseszKeywordsService.replace_aliasesN   s    !$$**, 	3DAq%biil^<@G66'Qqc8T2D	3 vvfc4(..00r   c                     |sy|j                         }| j                  D ]A  }|| j                  vsdt        j                  |       d}t        j
                  |d|      }C |j                         S )Nr)   rD   rE   r\   )r4   r   r   rH   rJ   r]   r^   )r   rZ   rB   r2   ra   s        r   remove_size_infoz KeywordsService.remove_size_infoW   sp    !%% 	2D4111)"))D/):,GvvgsD1	2 zz|r   c                 .    t         j                  d       y )Nz#Mapping candidates... [placeholder]loggerinfor   s    r   r   zKeywordsService.map_candidatesb   s    9:r   c                 .    t         j                  d       y )Nz Mapping aliases... [placeholder]rf   r   s    r   r   zKeywordsService.map_aliasesf   s    67r   c                 .    t         j                  d       y )Nz'Mapping bottle aliases... [placeholder]rf   r   s    r   r   z"KeywordsService.map_bottle_aliasesj   s    =>r   c                 .    t         j                  d       y )Nz!Mapping vintages... [placeholder]rf   r   s    r   r   zKeywordsService.map_vintagesn   s    78r   N)__name__
__module____qualname__r   r    strr   r%   r+   r-   r/   r1   r   r5   r8   r>   rA   rM   rY   rb   rd   r   r   r   r    r   r   r   r      s=   1 1S	 14c 4c 4F F F? ? ?7S 7T#Y 7K# K(3- K/ /# /3 8C= 1c 1hsm 1c hsm 
)s 
)tCy 
)1# 1# 13 3 ;8?9r   r   )loggingrH   collectionsr   typingr   r   	getLoggerrl   rg   r   rp   r   r   <module>ru      s/     	 # !			8	$g9 g9r   