U
    ânldW	  ã                   @   s<   d dl ZG dd„ deƒZG dd„ deƒZG dd„ deƒZdS )é    Nc                   @   s   e Zd ZdS )ÚUnknownLanguageN)Ú__name__Ú
__module__Ú__qualname__© r   r   ú5/var/www/html/LibreTranslate/libretranslate/detect.pyr      s   r   c                   @   s(   e Zd Zdd„ Zdd„ Zedd„ ƒZdS )ÚLanguagec                 C   s0   |\}}}}|| _ || _t|ƒ| _t|ƒ| _d S )N)ÚcodeÚnameÚfloatÚ
confidenceÚintÚ
read_bytes)ÚselfÚchoicer
   r	   r   Úbytesizer   r   r   Ú__init__	   s
    
zLanguage.__init__c                 C   s   d  | j| j| j| j¡S )Nz<name: {:<12}code: {:<9}confidence: {:>5.1f} read bytes:{:>6})Úformatr
   r	   r   r   )r   r   r   r   Ú__str__   s      þzLanguage.__str__c                 C   s   t d| ddfƒS )NÚ éd   r   ©r   )r	   r   r   r   Ú	from_code   s    zLanguage.from_codeN)r   r   r   r   r   Ústaticmethodr   r   r   r   r   r      s   r   c                   @   s6   e Zd ZdZddd„Zedd„ ƒZdd„ Zd	d
„ ZdS )ÚDetectorz/ Detect the language used in a snippet of text.Fc                 C   s    || _ d| _|| _|  |¡ dS )z] Detector of the language used in `text`.
    Args:
      text (string): unicode string.
    TN)Z_Detector__textÚreliableÚquietÚdetect)r   Útextr   r   r   r   r      s    zDetector.__init__c                   C   s   dd„ t jD ƒS )z?Returns a list of the languages that can be detected by pycld2.c                 S   s"   g | ]\}}|  d ¡s| ¡ ‘qS )ÚX_)Ú
startswithÚ
capitalize)Ú.0r
   r	   r   r   r   Ú
<listcomp>,   s     
 z0Detector.supported_languages.<locals>.<listcomp>)Úcld2Z	LANGUAGESr   r   r   r   Úsupported_languages)   s    zDetector.supported_languagesc                 C   sf   t j|dd�\}}}|sDd| _t j|dd�\}}}| jsD|sDtdƒ‚dd„ |D ƒ| _| jd | _| jS )ae  Decide which language is used to write the text.
    The method tries first to detect the language with high reliability. If
    that is not possible, the method switches to best effort strategy.
    Args:
      text (string): A snippet of text, the longer it is the more reliable we
                     can detect the language used to write the text.
    F)Z
bestEffortTz$Try passing a longer snippet of textc                 S   s   g | ]}t |ƒ‘qS r   r   )r"   Úxr   r   r   r#   @   s     z#Detector.detect.<locals>.<listcomp>r   )r$   r   r   r   r   Ú	languagesÚlanguage)r   r   r   ÚindexZtop_3_choicesr   r   r   r   .   s    zDetector.detectc                 C   s.   d  | j¡}|d dd„ t| jƒD ƒ¡7 }|S )NzPrediction is reliable: {}
Ú
c                 S   s$   g | ]\}}d   |d t|ƒ¡‘qS )zLanguage {}: {}é   )r   Ústr)r"   ÚiÚlr   r   r   r#   F   s   ÿz$Detector.__str__.<locals>.<listcomp>)r   r   ÚjoinÚ	enumerater'   )r   r   r   r   r   r   D   s
    ÿ
zDetector.__str__N)F)	r   r   r   Ú__doc__r   r   r%   r   r   r   r   r   r   r      s   

r   )Zpycld2r$   Ú	Exceptionr   Úobjectr   r   r   r   r   r   Ú<module>   s   