B
    >?[                 @   s   d dl mZmZ d dlZd dlZd dlmZ d dlmZ yd dl	Z	W n e
k
rX   Y nX dadddZdd Zd	d
 Zdd Zdd Zdd Zedkre  e  dS )    )print_functionunicode_literalsN)string_types)find_binaryc             C   s   t d| dgdgddad S )NZtadmZTADMzhttp://tadm.sf.net)Zenv_varsZbinary_namesZurl)r   	_tadm_bin)bin r   1lib/python3.7/site-packages/nltk/classify/tadm.pyconfig_tadm   s    r
   c       
   	   C   s   |  }xt| D ]l\}}dt| }|| xL|D ]D}|||}dt||kt|ddd |D f }	||	 q2W qW dS )aT  
    Generate an input file for ``tadm`` based on the given corpus of
    classified tokens.

    :type train_toks: list(tuple(dict, str))
    :param train_toks: Training data, represented as a list of
        pairs, the first member of which is a feature dictionary,
        and the second of which is a classification label.
    :type encoding: TadmEventMaxentFeatureEncoding
    :param encoding: A feature encoding, used to convert featuresets
        into feature vectors.
    :type stream: stream
    :param stream: The stream to which the ``tadm`` input file should be
        written.
    z%d
z	%d %d %s
 c             s   s   | ]}d | V  qdS )z%d %dNr   ).0ur   r   r	   	<genexpr><   s    z"write_tadm_file.<locals>.<genexpr>N)labelslenwriteencodeintjoin)
Z
train_toksencodingstreamr   Z
featuresetZlabelZlength_lineZknown_labelvliner   r   r	   write_tadm_file   s    


r   c             C   s0   g }x| D ]}| t|  q
W t|dS )z
    Given the stdout output generated by ``tadm`` when training a
    model, return a ``numpy`` array containing the corresponding weight
    vector.
    d)appendfloatstripnumpyZarray)Z	paramfileZweightsr   r   r   r	   parse_tadm_weightsA   s    
r   c             C   sj   t | trtdtdkr t  tg|  }tj|tjd}|	 \}}|j
dkrft  t| tddS )z<
    Call the ``tadm`` binary with the given arguments.
    z args should be a list of stringsN)stdoutr   ztadm command failed!)
isinstancer   	TypeErrorr   r
   
subprocessPopensysr    Zcommunicate
returncodeprintOSError)argscmdpr    stderrr   r   r	   	call_tadmM   s    


r-   c              C   s&   ddl m}  ddlm} | |j}d S )Nr   )
names_demo)TadmMaxentClassifier)Znltk.classify.utilr.   nltk.classify.maxentr/   train)r.   r/   Z
classifierr   r   r	   r.   b   s    r.   c              C   s   dd l } ddlm} dddddfdddddfddddd	dfg}||}t||| j t  x*t| D ]}td
|	||f  qpW t  d S )Nr   )TadmEventMaxentFeatureEncoding   )f0f1f3A)r4   f2f4B   )r4   r8   r6   r9   z	%s --> %d)
r%   r0   r2   r1   r   r    r'   rangelengthZdescribe)r%   r2   tokensr   ir   r   r	   encoding_demoi   s    
r@   __main__)N)Z
__future__r   r   r%   r#   Zsixr   Znltk.internalsr   r   ImportErrorr   r
   r   r   r-   r.   r@   __name__r   r   r   r	   <module>   s$   
"