B
    /`                 @   s   d dl Z d dlmZmZmZmZmZmZ d dlm	Z	 d dl
mZ d dlmZmZ d dlmZ d dlmZ d dlmZ d d	lmZ d d
lmZ d dlmZ d dlZd dlZG dd deZdS )    N)AnyDictListOptionalTextType)	Component)DOCS_URL_TRAINING_DATA)ENTITIESTEXT)RasaNLUModelConfig)EntityExtractor)Metadata)TrainingData)Message)write_json_to_filec            	       s   e Zd Zeeee  dddZdee	e
ef  ee	e
ef  dd fddZdeee eddd	d
ZeeddddZe
e
ee	e
ef  dddZede	e
ef ee
 ee ed  ed dddZddddZddddZ  ZS )EntitySynonymMapper)returnc             C   s   t gS )N)r   )cls r   R/home/dcms/DCMS/lib/python3.7/site-packages/rasa/nlu/extractors/entity_synonyms.pyrequired_components   s    z'EntitySynonymMapper.required_componentsN)component_configsynonymsr   c                s   t  | |r|ni | _d S )N)super__init__r   )selfr   r   )	__class__r   r   r      s    zEntitySynonymMapper.__init__)training_dataconfigkwargsr   c       	   	   K   s   x&t |j D ]\}}| || qW xT|jD ]J}xD|tg D ]4}|t|d |d  }| |t|d qBW q0W d S )Nstartendvalue)	listZentity_synonymsitemsadd_entities_if_synonymsZentity_examplesgetr
   r   str)	r   r   r   r    keyr#   ZexampleentityZ
entity_valr   r   r   train    s    zEntitySynonymMapper.train)messager    r   c             K   s2   | tg d d  }| | |jt|dd d S )NT)Zadd_to_output)r'   r
   replace_synonymsset)r   r,   r    Zupdated_entitiesr   r   r   process/   s    
zEntitySynonymMapper.process)	file_name	model_dirr   c             C   s@   | j r4|d }tj||}t|| j dd d|iS dd iS d S )Nz.json),z: )
separatorsfile)r   ospathjoinr   )r   r0   r1   entity_synonyms_filer   r   r   persist5   s    zEntitySynonymMapper.persist)metar1   model_metadatacached_componentr    r   c       	      K   sv   | d}|sd }| ||S tj||}tj|rHtjjj	|}n$d }tjjjj
d| dtd d | ||S )Nr4   z#Failed to load synonyms file from 'z'.z	#synonyms)docs)r'   r5   r6   r7   isfilerasasharedutilsioZread_json_fileraise_warningr	   )	r   r:   r1   r;   r<   r    r0   r   r8   r   r   r   loadA   s    




zEntitySynonymMapper.loadc             C   sH   xB|D ]:}t |d }| | jkr| j|  |d< | | qW d S )Nr#   )r(   lowerr   Zadd_processor_name)r   entitiesr*   Zentity_valuer   r   r   r-   [   s
    
z$EntitySynonymMapper.replace_synonymsc             C   s   |d k	rt |}t |}||kr| }|| jkr~| j| |kr~tjjjjdt| dt| j|  dt| dt	d d || j|< d S )Nz*Found conflicting synonym definitions for z. Overwriting target z with ze. Check your training data and remove conflicting synonym definitions to prevent this from happening.z	#synonyms)r=   )
r(   rE   r   r?   r@   rA   rB   rC   reprr	   )r   Zentity_aZentity_boriginalreplacementr   r   r   r&   c   s    
(z,EntitySynonymMapper.add_entities_if_synonyms)NN)N)NNN)__name__
__module____qualname__classmethodr   r   r   r   r   r   r   r   r   r   r   r+   r   r/   r9   r   rD   r-   r&   __classcell__r   r   )r   r   r      s$    	

  r   )r5   typingr   r   r   r   r   r   Zrasa.nlu.componentsr   Zrasa.shared.constantsr	   Zrasa.shared.nlu.constantsr
   r   Zrasa.nlu.configr   Zrasa.nlu.extractors.extractorr   Zrasa.nlu.modelr   Z+rasa.shared.nlu.training_data.training_datar   Z%rasa.shared.nlu.training_data.messager   Zrasa.nlu.utilsr   Zrasa.utils.ior?   Zrasa.shared.utils.ior   r   r   r   r   <module>   s    