Ë
    –\;j  ã                   óV   — d dl Z d dlZd dlZd dlmZ d dlmZ g ZdZ	dZ
 G d„ de«      Zy)é    N)Ú_check_exists_and_download)ÚDatasetz<https://dataset.bj.bcebos.com/imikolov%2Fsimple-examples.tgzÚ 30177ea32e27c525793142b6bf2c8e2dc                   óD   — e Zd ZdZ	 	 	 	 	 	 d	d„Zd
d„Zd„ Zd„ Zd„ Zd„ Z	y)ÚImikolova  
    Implementation of imikolov dataset.

    Args:
        data_file(str): path to data tar file, can be set None if
            :attr:`download` is True. Default None
        data_type(str): 'NGRAM' or 'SEQ'. Default 'NGRAM'.
        window_size(int): sliding window size for 'NGRAM' data. Default -1.
        mode(str): 'train' 'test' mode. Default 'train'.
        min_word_freq(int): minimal word frequence for building word dictionary. Default 50.
        download(bool): whether to download dataset automatically if
            :attr:`data_file` is not set. Default True

    Returns:
        Dataset: instance of imikolov dataset

    Examples:

        .. code-block:: python

            >>> import paddle
            >>> from paddle.text.datasets import Imikolov

            >>> class SimpleNet(paddle.nn.Layer):
            ...     def __init__(self):
            ...         super().__init__()
            ...
            ...     def forward(self, src, trg):
            ...         return paddle.sum(src), paddle.sum(trg)


            >>> imikolov = Imikolov(mode='train', data_type='SEQ', window_size=2)

            >>> for i in range(10):
            ...     src, trg = imikolov[i]
            ...     src = paddle.to_tensor(src)
            ...     trg = paddle.to_tensor(trg)
            ...
            ...     model = SimpleNet()
            ...     src, trg = model(src, trg)
            ...     print(src.item(), trg.item())
            2076 2075
            2076 2075
            675 674
            4 3
            464 463
            2076 2075
            865 864
            2076 2075
            2076 2075
            1793 1792

    Nc                 ó   — |j                  «       dv s
J d|› �«       ‚|j                  «       | _        |j                  «       dv s
J d|› �«       ‚|j                  «       | _        || _        || _        || _        | j                  €%|sJ d«       ‚t        |t        t        d|«      | _        | j                  |«      | _        | j                  «        y )N)ÚNGRAMÚSEQz,data type should be 'NGRAM', 'SEQ', but got )ÚtrainÚtestz(mode should be 'train', 'test', but got z;data_file is not set and downloading automatically disabledÚimikolov)ÚupperÚ	data_typeÚlowerÚmodeÚwindow_sizeÚmin_word_freqÚ	data_filer   ÚURLÚMD5Ú_build_work_dictÚword_idxÚ
_load_anno)Úselfr   r   r   r   r   Údownloads          úfG:\00. PROJECTS\API\Inventory\templateJSON\kerjaOCR\Lib\site-packages\paddle/text/datasets/imikolov.pyÚ__init__zImikolov.__init__T   sï   € ð �‰Ó ð %
ñ 
ð 	Fð :¸)¸ÐEó	Fð 
ð #Ÿ™Ó*ˆŒà�z‰z‹|ð  
ñ 
ð 	=ð 6°d°VÐ<ó	=ð 
ð —J‘J“LˆŒ	à&ˆÔØ*ˆÔà"ˆŒØ�>‰>Ð!áðMàLóMØä7Øœ3¤ Z°óˆDŒNð
 ×-Ñ-¨mÓ<ˆŒð 	�‰Õó    c                 óÞ   — |€t        j                  t        «      }|D ]L  }|j                  «       j	                  «       D ]  }||xx   dz  cc<   Œ |dxx   dz  cc<   |dxx   dz  cc<   ŒN |S )Né   ú<s>ú<e>)ÚcollectionsÚdefaultdictÚintÚstripÚsplit)r   ÚfÚ	word_freqÚlÚws        r   Ú
word_countzImikolov.word_count{   so   € ØÐÜ#×/Ñ/´Ó4ˆIãˆAØ—W‘W“Y—_‘_Ö&�Ø˜!“ Ñ!”ð 'à�eÓ Ñ!ÓØ�eÓ Ñ!Ôð	 ð Ðr   c                 ó6  — d}d}t        j                  | j                  «      5 }|j                  |«      }|j                  |«      }| j	                  || j	                  |«      «      }d|v r|d= |j                  «       D �cg c]  }|d   | j                  kD  sŒ|‘Œ }}t        |d„ ¬«      }	t        t        |	Ž «      \  }
}t        t        t        |
t        t        |
«      «      «      «      «      }t        |
«      |d<   d d d «       |S c c}w # 1 sw Y   S xY w)Nz$./simple-examples/data/ptb.train.txtz$./simple-examples/data/ptb.valid.txtú<unk>r    c                 ó   — | d    | d   fS )Nr    r   © )Úxs    r   Ú<lambda>z+Imikolov._build_work_dict.<locals>.<lambda>–   s   € ÀÀ1ÁÀÀqÈÁt¹}r   )Úkey)ÚtarfileÚopenr   Úextractfiler,   Úitemsr   ÚsortedÚlistÚzipÚdictÚrangeÚlen)r   ÚcutoffÚtrain_filenameÚtest_filenameÚtfÚtrainfÚtestfr)   r1   Úword_freq_sortedÚwordsÚ_r   s                r   r   zImikolov._build_work_dict‡   s	  € Ø?ˆØ>ˆÜ�\‰\˜$Ÿ.™.Ô)¨RØ—^‘^ NÓ3ˆFØ—N‘N =Ó1ˆEØŸ™¨¨t¯©¸vÓ/FÓGˆIØ˜)Ñ#à˜gÐ&ð %Ÿ?™?Ô,óÙ,�a°°!±°t×7IÑ7IÓ0I’Ð,ð ð ô  & iÑ5LÔMÐÜœCÐ!1Ð2Ó3‰HˆE�1ÜœD¤ U¬E´#°e³*Ó,=Ó!>Ó?Ó@ˆHÜ # E£
ˆH�WÑ÷ *ð" ˆùò÷ *ð" ˆús%   ¤ADÂD	ÂD	ÂA"DÄ	DÄDc           
      ón  — g | _         t        j                  | j                  «      5 }d| j                  › d�}|j                  |«      }| j                  d   }|D �]¹  }| j                  dk(  rÚ| j                  dkD  sJ d«       ‚dg|j                  «       j                  «       z   dgz   }t        |«      | j                  k\  sŒh|D �cg c]  }| j                  j                  ||«      ‘Œ  }}t        | j                  t        |«      d	z   «      D ]6  }| j                   j                  t        ||| j                  z
  | «      «       Œ8 Œí| j                  d
k(  rµ|j                  «       j                  «       }|D �cg c]  }| j                  j                  ||«      ‘Œ  }}| j                  d   g|z   }|| j                  d   gz   }	| j                  dkD  rt        |«      | j                  kD  r�Œ’| j                   j                  ||	f«       �Œ±t!        d«      ‚ 	 d d d «       y c c}w c c}w # 1 sw Y   y xY w)Nz./simple-examples/data/ptb.z.txtr.   r	   éÿÿÿÿzInvalid gram lengthr!   r"   r    r
   r   zUnknow data type)Údatar4   r5   r   r   r6   r   r   r   r&   r'   r=   Úgetr<   ÚappendÚtupleÚAssertionError)
r   rA   Úfilenamer(   ÚUNKr*   r+   ÚiÚsrc_seqÚtrg_seqs
             r   r   zImikolov._load_anno�   sé  € ØˆŒ	Ü�\‰\˜$Ÿ.™.Ô)¨RØ4°T·Y±Y°K¸tÐDˆHØ—‘˜xÓ(ˆAà—-‘- Ñ(ˆCÜ�Ø—>‘> WÒ,Ø×+Ñ+¨bÒ0ÐGÐ2GÓGÐ0Ø˜ !§'¡'£)§/¡/Ó"3Ñ3°u°gÑ=�AÜ˜1“v ×!1Ñ!1Ó1Ù@AÓBÁ¸1˜TŸ]™]×.Ñ.¨q°#Õ6À˜ÐBÜ!& t×'7Ñ'7¼¸Q»À!¹Ö!D˜AØ ŸI™I×,Ñ,¬U°1°Q¸×9IÑ9IÑ5IÈAÐ3NÓ-OÕPñ "Eà—^‘^ uÒ,ØŸ™›	Ÿ™Ó)�AÙ<=Ó>¹A°q˜Ÿ™×*Ñ*¨1¨cÕ2¸A�AÐ>Ø#Ÿ}™}¨UÑ3Ð4°qÑ8�GØ 4§=¡=°Ñ#7Ð"8Ñ8�GØ×'Ñ'¨!Ò+´°G³¸t×?OÑ?OÒ0OÙ Ø—I‘I×$Ñ$ g¨wÐ%7Ö8ä(Ð);Ó<Ð<ñ# ÷ *Ð)ùò Cùò
 ?÷ *Ð)ús2   §BH+ÃH+Ã#H!Ã)BH+Å8#H&ÆA<H+È!
H+È+H4c                 ó~   — t        | j                  |   D �cg c]  }t        j                  |«      ‘Œ c}«      S c c}w ©N)rL   rI   ÚnpÚarray)r   ÚidxÚds      r   Ú__getitem__zImikolov.__getitem__·   s/   € Ü¨4¯9©9°Sª>Ó:©> a”b—h‘h˜q•k¨>Ñ:Ó;Ð;ùÒ:s   —:c                 ó,   — t        | j                  «      S rT   )r=   rI   )r   s    r   Ú__len__zImikolov.__len__º   s   € Ü�4—9‘9‹~Ðr   )Nr	   rH   r   é2   TrT   )
Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r,   r   r   rY   r[   r0   r   r   r   r      s;   „ ñ4ðp ØØØØØó%óN
òò,=ò4<ór   r   )r#   r4   ÚnumpyrU   Úpaddle.dataset.commonr   Ú	paddle.ior   Ú__all__r   r   r   r0   r   r   Ú<module>re      s3   ðó Û ã å <Ý à
€àD€Ø(€ô^ˆwõ ^r   