o
    rZh{                     @   s   d Z ddlZddl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 G dd	 d	ZdddZG dd deZdd ZdddZdd Zdd Zdd ZdZdZdZedkr`e  dS dS ) z
Tools for reading and writing dependency trees.
The input is assumed to be in Malt-TAB format
(https://stp.lingfil.uu.se/~nivre/research/MaltXML.html).
    N)defaultdict)chain)pformat)find_binary)Treec                   @   s  e Zd ZdZ					d:ddZdd Zd	d
 Zdd Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Ze	d;ddZdd Zdd  Zd!d" Z				d<d#d$Zd=d&d'Zd(d) Zd*d+ Zd>d,d-Zd.d/ Zd0d1 Zd2d3 Zd4d5 Zd6d7 Zd8d9 ZdS )?DependencyGraphzQ
    A container for the nodes and labelled edges of a dependency structure.
    NFROOTc                 C   sL   t dd | _| jd dddd d| _|r$| j|||||d dS dS )a  Dependency graph.

        We place a dummy `TOP` node with the index 0, since the root node is
        often assigned 0 as its head. This also means that the indexing of the
        nodes corresponds directly to the Malt-TAB format, which starts at 1.

        If zero-based is True, then Malt-TAB-like input with node numbers
        starting at 0 and the root node assigned -1 (as produced by, e.g.,
        zpar).

        :param str cell_separator: the cell separator. If not provided, cells
            are split by whitespace.

        :param str top_relation_label: the label by which the top relation is
            identified, for examlple, `ROOT`, `null` or `TOP`.
        c                
   S   s   d d d d d d d t td d	S )N)	addresswordlemmactagtagfeatsheaddepsrel)r   list r   r   I/var/www/auris/lib/python3.10/site-packages/nltk/parse/dependencygraph.py<lambda>=   s   z*DependencyGraph.__init__.<locals>.<lambda>r   TOP)r   r   r	   N)cell_extractor
zero_basedcell_separatortop_relation_label)r   nodesupdateroot_parse)selftree_strr   r   r   r   r   r   r   __init__$   s   
zDependencyGraph.__init__c                 C   s   | j |= dS )zw
        Removes the node with the given address.  References
        to this node in others will still exist.
        Nr   )r   r	   r   r   r   remove_by_addressW   s   z!DependencyGraph.remove_by_addressc                 C   sL   | j  D ]}g }|d D ]}||v r|| q|| q||d< qdS )zp
        Redirects arcs to any of the nodes in the originals list
        to the redirect node address.
        r   N)r   valuesappend)r   Z	originalsredirectnodeZnew_depsdepr   r   r   redirect_arcs^   s   
zDependencyGraph.redirect_arcsc                 C   s@   | j | d }| j | d |g  | j | d | | dS )zw
        Adds an arc from the node specified by head_address to the
        node specified by the mod address.
        r   r   N)r   
setdefaultr%   )r   Zhead_addressZmod_addressrelationr   r   r   add_arcl   s   zDependencyGraph.add_arcc                 C   sn   | j  D ]/}| j  D ]'}|d |d kr3|d dkr3|d }|d |g  |d | |d  qqdS )zr
        Fully connects all non-root nodes.  All nodes are set to be dependents
        of the root node.
        r	   r   r   r   N)r   r$   r*   r%   )r   Znode1Znode2r+   r   r   r   connect_graphv   s   zDependencyGraph.connect_graphc                 C   s
   | j | S )z'Return the node with the given address.r"   r   Znode_addressr   r   r   get_by_address   s   
zDependencyGraph.get_by_addressc                 C   s
   || j v S )zq
        Returns true if the graph contains a node with the given node
        address, false otherwise.
        r"   r.   r   r   r   contains_address   s   
z DependencyGraph.contains_addressc              	   C   s   d}|d7 }|d7 }t | j dd dD ];}|d|d |d |d	 7 }|d
  D ]#\}}|D ]}|durD|d|d ||7 }q2|d|d |7 }q2q,q|d7 }|S )a  Return a dot representation suitable for using with Graphviz.

        >>> dg = DependencyGraph(
        ...     'John N 2\n'
        ...     'loves V 0\n'
        ...     'Mary N 2'
        ... )
        >>> print(dg.to_dot())
        digraph G{
        edge [dir=forward]
        node [shape=plaintext]
        <BLANKLINE>
        0 [label="0 (None)"]
        0 -> 2 [label="ROOT"]
        1 [label="1 (John)"]
        2 [label="2 (loves)"]
        2 -> 1 [label=""]
        2 -> 3 [label=""]
        3 [label="3 (Mary)"]
        }

        zdigraph G{
zedge [dir=forward]
znode [shape=plaintext]
c                 S   s   | d S Nr	   r   )vr   r   r   r      s    z(DependencyGraph.to_dot.<locals>.<lambda>)keyz
{} [label="{} ({})"]r	   r
   r   Nz
{} -> {} [label="{}"]z

{} -> {} z
})sortedr   r$   formatitems)r   sr'   r   r   r(   r   r   r   to_dot   s$   zDependencyGraph.to_dotc                 C   s   |   }t|S )a  Show SVG representation of the transducer (IPython magic).
        >>> from nltk.test.setup_fixt import check_binary
        >>> check_binary('dot')
        >>> dg = DependencyGraph(
        ...     'John N 2\n'
        ...     'loves V 0\n'
        ...     'Mary N 2'
        ... )
        >>> dg._repr_svg_().split('\n')[0]
        '<?xml version="1.0" encoding="UTF-8" standalone="no"?>'

        )r8   dot2img)r   
dot_stringr   r   r   
_repr_svg_   s   zDependencyGraph._repr_svg_c                 C   s
   t | jS N)r   r   r   r   r   r   __str__   s   
zDependencyGraph.__str__c                 C   s   dt | j dS )Nz<DependencyGraph with z nodes>)lenr   r=   r   r   r   __repr__   s   zDependencyGraph.__repr__c                    sL   t | } fdd| dD W  d   S 1 sw   Y  dS )a  
        :param filename: a name of a file in Malt-TAB format
        :param zero_based: nodes in the input file are numbered starting from 0
            rather than 1 (as produced by, e.g., zpar)
        :param str cell_separator: the cell separator. If not provided, cells
            are split by whitespace.
        :param str top_relation_label: the label by which the top relation is
            identified, for examlple, `ROOT`, `null` or `TOP`.

        :return: a list of DependencyGraphs

        c                    s   g | ]
}t | d qS ))r   r   r   r   ).0r    r   r   r   r   r   
<listcomp>   s    z(DependencyGraph.load.<locals>.<listcomp>

N)openreadsplit)filenamer   r   r   infiler   rC   r   load   s
   
$zDependencyGraph.loadc                    <   t | j| d  }| j| d  t fdd|D S )zl
        Returns the number of left children under the node specified
        by the given address.
        r   r	   c                 3   s    | ]	}| k rd V  qdS    Nr   rB   cindexr   r   	<genexpr>       z0DependencyGraph.left_children.<locals>.<genexpr>r   from_iterabler   r$   sumr   Z
node_indexchildrenr   rQ   r   left_children      zDependencyGraph.left_childrenc                    rL   )zm
        Returns the number of right children under the node specified
        by the given address.
        r   r	   c                 3   s    | ]	}| krd V  qdS rM   r   rO   rQ   r   r   rS      rT   z1DependencyGraph.right_children.<locals>.<genexpr>rU   rX   r   rQ   r   right_children   r[   zDependencyGraph.right_childrenc                 C   s*   |  |d s| j|d  | d S d S r1   )r0   r   r   )r   r'   r   r   r   add_node   s   zDependencyGraph.add_nodec                 C   s  dd }dd }dd }dd }	||||	d	}
t |tr&d
d |dD }dd |D }dd |D }d}t|ddD ]\}}||}|du rNt|}n|t|ksVJ |du ruz|
| }W n tyt } ztd||d}~ww z|||\}}}}}}}}W n ttfy   ||\}}}}}}}Y nw |dkrq<t	|}|r|d7 }| j
| ||||||||d |dkr|dkr|}| j
| d | | q<| j
d d | r| j
d d | d }| j
| | _|| _dS td dS )a  Parse a sentence.

        :param extractor: a function that given a tuple of cells returns a
        7-tuple, where the values are ``word, lemma, ctag, tag, feats, head,
        rel``.

        :param str cell_separator: the cell separator. If not provided, cells
        are split by whitespace.

        :param str top_relation_label: the label by which the top relation is
        identified, for examlple, `ROOT`, `null` or `TOP`.

        c                 S   s   | \}}}|||||d|dfS N r   )cellsrR   r
   r   r   r   r   r   extract_3_cells  s   
z/DependencyGraph._parse.<locals>.extract_3_cellsc                 S   s    | \}}}}|||||d||fS r^   r   )r`   rR   r
   r   r   r   r   r   r   extract_4_cells  s   z/DependencyGraph._parse.<locals>.extract_4_cellsc           	      S   sF   | \}}}}}}}zt |}W n	 ty   Y nw |||||d||fS r^   int
ValueError)	r`   rR   
line_indexr
   r   r   _r   r   r   r   r   extract_7_cells   s   z/DependencyGraph._parse.<locals>.extract_7_cellsc              
   S   sL   | \
}}}}}}}}	}
}
zt |}W n	 ty   Y nw ||||||||	fS r<   rc   )r`   rR   rf   r
   r   r   r   r   r   r   rg   r   r   r   extract_10_cells)  s   z0DependencyGraph._parse.<locals>.extract_10_cells)         
   c                 s   s    | ]}|V  qd S r<   r   )rB   liner   r   r   rS   :  s    z)DependencyGraph._parse.<locals>.<genexpr>
c                 s   s    | ]}|  V  qd S r<   )rstriprB   lr   r   r   rS   <      c                 s   s    | ]}|r|V  qd S r<   r   rq   r   r   r   rS   =  rs   NrN   )startTNumber of tab-delimited fields ({}) not supported by CoNLL(10) or Malt-Tab(4) formatrg   )r	   r
   r   r   r   r   r   r   rj   r   r   zBThe graph doesn't contain a node that depends on the root element.)
isinstancestrrH   	enumerater?   KeyErrorre   r5   	TypeErrorrd   r   r   r%   r   r   warningswarn)r   Zinput_r   r   r   r   ra   rb   rh   ri   Z
extractorslinesZcell_numberrR   rn   r`   er
   r   r   r   r   r   r   Zroot_addressr   r   r   r     s   	





zDependencyGraph._parseTc                 C   s   |d }|r|dkr|S |S )Nr
   ,r   )r   r'   filterwr   r   r   _word|  s
   zDependencyGraph._wordc                    sH     |}|d }tt|d  }|r"t| fdd|D S |S )zTurn dependency graphs into NLTK trees.

        :param int i: index of a node
        :return: either a word (if the indexed node is a leaf) or a ``Tree``.
        r
   r   c                       g | ]}  |qS r   _treerB   r(   r=   r   r   rD         z)DependencyGraph._tree.<locals>.<listcomp>)r/   r4   r   rV   r$   r   )r   ir'   r
   r   r   r=   r   r     s   
zDependencyGraph._treec                    s<    j }|d }tt|d  }t| fdd|D S )z
        Starting with the ``root`` node, build a dependency tree using the NLTK
        ``Tree`` constructor. Dependency labels are omitted.
        r
   r   c                    r   r   r   r   r=   r   r   rD     r   z(DependencyGraph.tree.<locals>.<listcomp>)r   r4   r   rV   r$   r   )r   r'   r
   r   r   r=   r   tree  s   zDependencyGraph.treec                 c   st    |s| j }|d |d f}tt|d  D ]}| |}||d |d |d ffV  | j|dE dH  qdS )zs
        Extract dependency triples of the form:
        ((head word, head tag), rel, (dep word, dep tag))
        r
   r   r   r   )r'   N)r   r4   r   rV   r$   r/   triples)r   r'   r   r   r(   r   r   r   r     s   
zDependencyGraph.triplesc                 C   &   z| j | d W S  ty   Y d S w )Nr   r   
IndexErrorr   r   r   r   r   _hd  
   zDependencyGraph._hdc                 C   r   )Nr   r   r   r   r   r   _rel  r   zDependencyGraph._relc                 C   s   i }| j  D ]}|d D ]}t|d |g}d||< qq| j D ]P}i }|D ]#}|D ]}|d |d krHt|d |d g}|| ||  ||< q*q&|D ]#}	||	 ||	< |	d |	d kro| | |	d |	d }
|
    S qLq dS )aE  Check whether there are cycles.

        >>> dg = DependencyGraph(treebank_data)
        >>> dg.contains_cycle()
        False

        >>> cyclic_dg = DependencyGraph()
        >>> top = {'word': None, 'deps': [1], 'rel': 'TOP', 'address': 0}
        >>> child1 = {'word': None, 'deps': [2], 'rel': 'NTOP', 'address': 1}
        >>> child2 = {'word': None, 'deps': [4], 'rel': 'NTOP', 'address': 2}
        >>> child3 = {'word': None, 'deps': [1], 'rel': 'NTOP', 'address': 3}
        >>> child4 = {'word': None, 'deps': [3], 'rel': 'NTOP', 'address': 4}
        >>> cyclic_dg.nodes = {
        ...     0: top,
        ...     1: child1,
        ...     2: child2,
        ...     3: child3,
        ...     4: child4,
        ... }
        >>> cyclic_dg.root = top

        >>> cyclic_dg.contains_cycle()
        [1, 2, 4, 3]

        r   r	   rN   r   F)r   r$   tupleget_cycle_pathr/   )r   Z	distancesr'   r(   r3   rg   Znew_entriesZpair1Zpair2pairpathr   r   r   contains_cycle  s.   

zDependencyGraph.contains_cyclec                 C   sl   |d D ]}||kr|d g  S q|d D ]}|  | ||}t|dkr3|d|d  |  S qg S )Nr   r	   r   )r   r/   r?   insert)r   Z	curr_nodeZgoal_node_indexr(   r   r   r   r   r     s   zDependencyGraph.get_cycle_pathc                    sZ   |dkrd n|dkrd n|dkrd nt d|d fd	d
t| j D S )z
        The dependency graph in CoNLL format.

        :param style: the style to use for the format (3, 4, 10 columns)
        :type style: int
        :rtype: str
        rj   z{word}	{tag}	{head}
rk   z{word}	{tag}	{head}	{rel}
rm   z9{i}	{word}	{lemma}	{ctag}	{tag}	{feats}	{head}	{rel}	_	_
ru   r_   c                 3   s4    | ]\}}|d  dkr j dd|i|V  qdS )r   r   r   Nr   )r5   )rB   r   r'   templater   r   rS     s    z+DependencyGraph.to_conll.<locals>.<genexpr>)re   r5   joinr4   r   r6   )r   styler   r   r   to_conll  s   	zDependencyGraph.to_conllc                    sr   ddl }ttdt j} fdd|D }i  _|D ]} j| d  j|< q| }|| || |S )zJConvert the data in a ``nodelist`` into a networkx labeled directed graph.r   NrN   c                    s,   g | ]}  |r|  | |fqS r   )r   r   )rB   nr=   r   r   rD     s
    
z,DependencyGraph.nx_graph.<locals>.<listcomp>r
   )	networkxr   ranger?   r   	nx_labelsZMultiDiGraphZadd_nodes_fromZadd_edges_from)r   r   Znx_nodelistZnx_edgelistr   gr   r=   r   nx_graph  s   


zDependencyGraph.nx_graph)NNFNr   )FNr   )NFNr   )Tr<   )__name__
__module____qualname____doc__r!   r#   r)   r,   r-   r/   r0   r8   r;   r>   r@   staticmethodrK   rZ   r\   r]   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r      sN    
3
-		

z
2r   svgc              
   C   s   z5t d z&|dv rtjdd| gd| dd}ntjdd| gt| ddd}|jW W S    td	|  tyF } ztd
|d}~ww )a  
    Create image representation fom dot_string, using the 'dot' program
    from the Graphviz package.

    Use the 't' argument to specify the image file format, for ex. 'jpeg', 'eps',
    'json', 'png' or 'webp' (Running 'dot -T:' lists all available formats).

    Note that the "capture_output" option of subprocess.run() is only available
    with text formats (like svg), but not with binary image formats (like png).
    dot)r   Zdot_jsonjsonr   z-T%sT)capture_outputinputtextutf8)encoding)r   zACannot create image representation by running dot from string: {}z0Cannot find the dot binary from Graphviz packageN)r   
subprocessrunbytesstdout	Exceptionr5   OSError)r:   tprocr~   r   r   r   r9   &  s0   




r9   c                   @   s   e Zd ZdZdS )DependencyGraphErrorzDependency graph exception.N)r   r   r   r   r   r   r   r   r   K  s    r   c                   C   s   t   t  t  t  d S r<   )	malt_demo
conll_democonll_file_democycle_finding_demor   r   r   r   demoO  s   
r   Fc                 C   s   t d}| }|  | rLddl}ddlm} | }|  |j|dd}|j	||dd |
|||j |g  |g  |d	 |  dS dS )
zw
    A demonstration of the result of reading a dependency
    version of the first sentence of the Penn Treebank.
      Pierre  NNP     2       NMOD
Vinken  NNP     8       SUB
,       ,       2       P
61      CD      5       NMOD
years   NNS     6       AMOD
old     JJ      2       NMOD
,       ,       2       P
will    MD      0       ROOT
join    VB      8       VC
the     DT      11      NMOD
board   NN      9       OBJ
as      IN      9       VMOD
a       DT      15      NMOD
nonexecutive    JJ      15      NMOD
director        NN      12      PMOD
Nov.    NNP     9       VMOD
29      CD      16      NMOD
.       .       9       VMOD
r   N)pylabrN   )dim2   )Z	node_sizeztree.png)r   r   pprintr   Z
matplotlibr   r   infoZspring_layoutZdraw_networkx_nodesZdraw_networkx_labelsr   ZxticksZyticksZsavefigshow)nxdgr   r   r   r   posr   r   r   r   V  s$   


r   c                  C   s2   t t} |  }|  t|  t| d dS )zg
    A demonstration of how to read a string representation of
    a CoNLL format dependency tree.
    rk   N)r   conll_data1r   r   printr   )r   r   r   r   r   r     s
   r   c                  C   sB   t d dd tdD } | D ]}| }t d |  qd S )NzMass conll_read demo...c                 S   s   g | ]}|rt |qS r   rA   )rB   entryr   r   r   rD     s    z#conll_file_demo.<locals>.<listcomp>rE   ro   )r   conll_data2rH   r   r   )Zgraphsgraphr   r   r   r   r     s   
r   c                  C   s   t t} t|   t  }|d dgddd |d dgddd |d dgddd |d dgddd |d dgddd t|  d S )	NrN   r   r   )r
   r   r   r	      ZNTOPrk   rj   )r   treebank_datar   r   r]   )r   Z	cyclic_dgr   r   r   r     s   r   r   a/  
1   Ze                ze                Pron  Pron  per|3|evofmv|nom                 2   su      _  _
2   had               heb               V     V     trans|ovt|1of2of3|ev             0   ROOT    _  _
3   met               met               Prep  Prep  voor                             8   mod     _  _
4   haar              haar              Pron  Pron  bez|3|ev|neut|attr               5   det     _  _
5   moeder            moeder            N     N     soort|ev|neut                    3   obj1    _  _
6   kunnen            kan               V     V     hulp|ott|1of2of3|mv              2   vc      _  _
7   gaan              ga                V     V     hulp|inf                         6   vc      _  _
8   winkelen          winkel            V     V     intrans|inf                      11  cnj     _  _
9   ,                 ,                 Punc  Punc  komma                            8   punct   _  _
10  zwemmen           zwem              V     V     intrans|inf                      11  cnj     _  _
11  of                of                Conj  Conj  neven                            7   vc      _  _
12  terrassen         terras            N     N     soort|mv|neut                    11  cnj     _  _
13  .                 .                 Punc  Punc  punt                             12  punct   _  _
a  1   Cathy             Cathy             N     N     eigen|ev|neut                    2   su      _  _
2   zag               zie               V     V     trans|ovt|1of2of3|ev             0   ROOT    _  _
3   hen               hen               Pron  Pron  per|3|mv|datofacc                2   obj1    _  _
4   wild              wild              Adj   Adj   attr|stell|onverv                5   mod     _  _
5   zwaaien           zwaai             N     N     soort|mv|neut                    2   vc      _  _
6   .                 .                 Punc  Punc  punt                             5   punct   _  _

1   Ze                ze                Pron  Pron  per|3|evofmv|nom                 2   su      _  _
2   had               heb               V     V     trans|ovt|1of2of3|ev             0   ROOT    _  _
3   met               met               Prep  Prep  voor                             8   mod     _  _
4   haar              haar              Pron  Pron  bez|3|ev|neut|attr               5   det     _  _
5   moeder            moeder            N     N     soort|ev|neut                    3   obj1    _  _
6   kunnen            kan               V     V     hulp|ott|1of2of3|mv              2   vc      _  _
7   gaan              ga                V     V     hulp|inf                         6   vc      _  _
8   winkelen          winkel            V     V     intrans|inf                      11  cnj     _  _
9   ,                 ,                 Punc  Punc  komma                            8   punct   _  _
10  zwemmen           zwem              V     V     intrans|inf                      11  cnj     _  _
11  of                of                Conj  Conj  neven                            7   vc      _  _
12  terrassen         terras            N     N     soort|mv|neut                    11  cnj     _  _
13  .                 .                 Punc  Punc  punt                             12  punct   _  _

1   Dat               dat               Pron  Pron  aanw|neut|attr                   2   det     _  _
2   werkwoord         werkwoord         N     N     soort|ev|neut                    6   obj1    _  _
3   had               heb               V     V     hulp|ovt|1of2of3|ev              0   ROOT    _  _
4   ze                ze                Pron  Pron  per|3|evofmv|nom                 6   su      _  _
5   zelf              zelf              Pron  Pron  aanw|neut|attr|wzelf             3   predm   _  _
6   uitgevonden       vind              V     V     trans|verldw|onverv              3   vc      _  _
7   .                 .                 Punc  Punc  punt                             6   punct   _  _

1   Het               het               Pron  Pron  onbep|neut|zelfst                2   su      _  _
2   hoorde            hoor              V     V     trans|ovt|1of2of3|ev             0   ROOT    _  _
3   bij               bij               Prep  Prep  voor                             2   ld      _  _
4   de                de                Art   Art   bep|zijdofmv|neut                6   det     _  _
5   warme             warm              Adj   Adj   attr|stell|vervneut              6   mod     _  _
6   zomerdag          zomerdag          N     N     soort|ev|neut                    3   obj1    _  _
7   die               die               Pron  Pron  betr|neut|zelfst                 6   mod     _  _
8   ze                ze                Pron  Pron  per|3|evofmv|nom                 12  su      _  _
9   ginds             ginds             Adv   Adv   gew|aanw                         12  mod     _  _
10  achter            achter            Adv   Adv   gew|geenfunc|stell|onverv        12  svp     _  _
11  had               heb               V     V     hulp|ovt|1of2of3|ev              7   body    _  _
12  gelaten           laat              V     V     trans|verldw|onverv              11  vc      _  _
13  .                 .                 Punc  Punc  punt                             12  punct   _  _

1   Ze                ze                Pron  Pron  per|3|evofmv|nom                 2   su      _  _
2   hadden            heb               V     V     trans|ovt|1of2of3|mv             0   ROOT    _  _
3   languit           languit           Adv   Adv   gew|geenfunc|stell|onverv        11  mod     _  _
4   naast             naast             Prep  Prep  voor                             11  mod     _  _
5   elkaar            elkaar            Pron  Pron  rec|neut                         4   obj1    _  _
6   op                op                Prep  Prep  voor                             11  ld      _  _
7   de                de                Art   Art   bep|zijdofmv|neut                8   det     _  _
8   strandstoelen     strandstoel       N     N     soort|mv|neut                    6   obj1    _  _
9   kunnen            kan               V     V     hulp|inf                         2   vc      _  _
10  gaan              ga                V     V     hulp|inf                         9   vc      _  _
11  liggen            lig               V     V     intrans|inf                      10  vc      _  _
12  .                 .                 Punc  Punc  punt                             11  punct   _  _

1   Zij               zij               Pron  Pron  per|3|evofmv|nom                 2   su      _  _
2   zou               zal               V     V     hulp|ovt|1of2of3|ev              7   cnj     _  _
3   mams              mams              N     N     soort|ev|neut                    4   det     _  _
4   rug               rug               N     N     soort|ev|neut                    5   obj1    _  _
5   ingewreven        wrijf             V     V     trans|verldw|onverv              6   vc      _  _
6   hebben            heb               V     V     hulp|inf                         2   vc      _  _
7   en                en                Conj  Conj  neven                            0   ROOT    _  _
8   mam               mam               V     V     trans|ovt|1of2of3|ev             7   cnj     _  _
9   de                de                Art   Art   bep|zijdofmv|neut                10  det     _  _
10  hare              hare              Pron  Pron  bez|3|ev|neut|attr               8   obj1    _  _
11  .                 .                 Punc  Punc  punt                             10  punct   _  _

1   Of                of                Conj  Conj  onder|metfin                     0   ROOT    _  _
2   ze                ze                Pron  Pron  per|3|evofmv|nom                 3   su      _  _
3   had               heb               V     V     hulp|ovt|1of2of3|ev              0   ROOT    _  _
4   gewoon            gewoon            Adj   Adj   adv|stell|onverv                 10  mod     _  _
5   met               met               Prep  Prep  voor                             10  mod     _  _
6   haar              haar              Pron  Pron  bez|3|ev|neut|attr               7   det     _  _
7   vriendinnen       vriendin          N     N     soort|mv|neut                    5   obj1    _  _
8   rond              rond              Adv   Adv   deelv                            10  svp     _  _
9   kunnen            kan               V     V     hulp|inf                         3   vc      _  _
10  slenteren         slenter           V     V     intrans|inf                      9   vc      _  _
11  in                in                Prep  Prep  voor                             10  mod     _  _
12  de                de                Art   Art   bep|zijdofmv|neut                13  det     _  _
13  buurt             buurt             N     N     soort|ev|neut                    11  obj1    _  _
14  van               van               Prep  Prep  voor                             13  mod     _  _
15  Trafalgar_Square  Trafalgar_Square  MWU   N_N   eigen|ev|neut_eigen|ev|neut      14  obj1    _  _
16  .                 .                 Punc  Punc  punt                             15  punct   _  _
__main__)r   )F)r   r   r{   collectionsr   	itertoolsr   r   r   Znltk.internalsr   Z	nltk.treer   r   r9   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   <module>   s4   
    
%
-	V
