ó <¿CVc@sÊddlmZmZddlZddlmZddlmZmZede fd„ƒYƒZ ede fd„ƒYƒZ d „Z d „Zd „Zed d dgƒZde fd„ƒYZdS(iÿÿÿÿ(tprint_functiontunicode_literalsN(t namedtuple(tpython_2_unicode_compatiblet string_typest AlignedSentcBs†eZdZd d„Zed„ƒZed„ƒZd„Zd„Z eee ƒZ d„Z d„Z d„Z d „Zd „ZRS( ul Return an aligned sentence object, which encapsulates two sentences along with an ``Alignment`` between them. >>> from nltk.translate import AlignedSent, Alignment >>> algnsent = AlignedSent(['klein', 'ist', 'das', 'Haus'], ... ['the', 'house', 'is', 'small'], Alignment.fromstring('0-2 1-3 2-1 3-0')) >>> algnsent.words ['klein', 'ist', 'das', 'Haus'] >>> algnsent.mots ['the', 'house', 'is', 'small'] >>> algnsent.alignment Alignment([(0, 2), (1, 3), (2, 1), (3, 0)]) >>> from nltk.corpus import comtrans >>> print(comtrans.aligned_sents()[54]) 'So why should EU arm...'> >>> print(comtrans.aligned_sents()[54].alignment) 0-0 0-1 1-0 2-2 3-4 3-5 4-7 5-8 6-3 7-9 8-9 9-10 9-11 10-12 11-6 12-6 13-13 :param words: source language words :type words: list(str) :param mots: target language words :type mots: list(str) :param alignment: the word-level alignments between the source and target language :type alignment: Alignment cCsU||_||_|dkr0tgƒ|_n!t|ƒtksHt‚||_dS(N(t_wordst_motstNonet Alignmentt alignmentttypetAssertionError(tselftwordstmotsR ((sd/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/translate/api.pyt__init__/s    cCs|jS(N(R(R ((sd/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/translate/api.pyR8scCs|jS(N(R(R ((sd/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/translate/api.pyR<scCs|jS(N(t _alignment(R ((sd/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/translate/api.pyt_get_alignment@scCs/tt|jƒt|jƒ|ƒ||_dS(N(t_check_alignmenttlenRRR(R R ((sd/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/translate/api.pyt_set_alignmentCs"cCsTddjd„|jDƒƒ}ddjd„|jDƒƒ}d|||jfS(u_ Return a string representation for this ``AlignedSent``. :rtype: str u[%s]u, css|]}d|VqdS(u'%s'N((t.0tw((sd/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/translate/api.pys Nscss|]}d|VqdS(u'%s'N((RR((sd/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/translate/api.pys OsuAlignedSent(%s, %s, %r)(tjoinRRR(R RR((sd/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/translate/api.pyt__repr__Hs  cCs†d}|d7}x%|jD]}|d||f7}qWx%|jD]}|d||f7}qBWx9|jD].\}}|d|j||j|f7}qjWxGtt|jƒdƒD],}|d|j||j|df7}q¶WxGtt|jƒdƒD],}|d|j||j|df7}qW|d d jd „|jDƒƒ7}|d d jd „|jDƒƒ7}|d 7}|S(u= Dot representation of the aligned sentence ugraph align { unode[shape=plaintext] u"%s_source" [label="%s"] u"%s_target" [label="%s"] u"%s_source" -- "%s_target" iu)"%s_source" -- "%s_source" [style=invis] u)"%s_target" -- "%s_target" [style=invis] u{rank = same; %s} u css|]}d|VqdS(u "%s_source"N((RR((sd/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/translate/api.pys nscss|]}d|VqdS(u "%s_target"N((RR((sd/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/translate/api.pys osu}(RRRtrangeRR(R tsRtutvti((sd/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/translate/api.pyt_to_dotSs  & * *$$ cCsŒ|jƒjdƒ}d}y8tjdd|gdtjdtjdtjƒ}Wntk rrtdƒ‚nX|j|ƒ\}}|S( uS Ipython magic : show SVG representation of this ``AlignedSent``. uutf8usvgudotu-T%ststdintstdouttstderru0Cannot find the dot binary from Graphviz package(Rtencodet subprocesstPopentPIPEtOSErrort Exceptiont communicate(R t dot_stringt output_formattprocesstoutterr((sd/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/translate/api.pyt _repr_svg_us cCsBdj|jƒd d}dj|jƒd d}d||fS(un Return a human-readable string representation for this ``AlignedSent``. :rtype: str u iu...u '%s'>(RRR(R tsourcettarget((sd/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/translate/api.pyt__str__…scCst|j|j|jjƒƒS(um Return the aligned sentence pair, reversing the directionality :rtype: AlignedSent (RRRRtinvert(R ((sd/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/translate/api.pyR3sN(t__name__t __module__t__doc__RRtpropertyRRRRR RRR/R2R3(((sd/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/translate/api.pyRs    "  R cBs_eZdZd„Zed„ƒZd„Zd„Zd d„Z d„Z d„Z d„Z RS( uc A storage class for representing alignment between two sequences, s1, s2. In general, an alignment is a set of tuples of the form (i, j, ...) representing an alignment between the i-th element of s1 and the j-th element of s2. Tuples are extensible (they might contain additional data, such as a boolean to indicate sure vs possible alignments). >>> from nltk.translate import Alignment >>> a = Alignment([(0, 0), (0, 1), (1, 2), (2, 2)]) >>> a.invert() Alignment([(0, 0), (1, 0), (2, 1), (2, 2)]) >>> print(a.invert()) 0-0 1-0 2-1 2-2 >>> a[0] [(0, 1), (0, 0)] >>> a.invert()[2] [(2, 1), (2, 2)] >>> b = Alignment([(0, 0), (0, 1)]) >>> b.issubset(a) True >>> c = Alignment.fromstring('0-0 0-1') >>> b == c True cCsPtj||ƒ}|tgƒkr:td„|Dƒƒnd|_d|_|S(Ncss|]}|dVqdS(iN((Rtp((sd/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/translate/api.pys µsi(t frozensett__new__tmaxt_lenRt_index(tclstpairsR ((sd/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/translate/api.pyR:³s1 cCs)tg|jƒD]}t|ƒ^qƒS(u Read a giza-formatted string and return an Alignment object. >>> Alignment.fromstring('0-0 2-1 9-2 21-3 10-4 7-5') Alignment([(0, 0), (2, 1), (7, 5), (9, 2), (10, 4), (21, 3)]) :type s: str :param s: the positional alignments in giza format :rtype: Alignment :return: An Alignment object corresponding to the string representation ``s``. (R tsplitt _giza2pair(R>Rta((sd/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/translate/api.pyt fromstring¹scCs&|js|jƒn|jj|ƒS(uN Look up the alignments that map from a given index or slice. (R=t _build_indext __getitem__(R tkey((sd/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/translate/api.pyREÉs  cCstd„|DƒƒS(uI Return an Alignment object, being the inverted mapping. css+|]!}|d|df|dVqdS(iiiN((RR8((sd/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/translate/api.pys Õs(R (R ((sd/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/translate/api.pyR3ÑscCs|tƒ}|js|jƒn|sCttt|jƒƒƒ}nx,|D]$}|jd„|j|DƒƒqJWt|ƒS(u Work out the range of the mapping from the given positions. If no positions are specified, compute the range of the entire mapping. css|]\}}|VqdS(N((Rt_tf((sd/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/translate/api.pys âs(tsetR=RDtlistRRtupdatetsorted(R t positionstimageR8((sd/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/translate/api.pyR×s    "cCsdt|ƒS(uM Produce a Giza-formatted string representing the alignment. u Alignment(%r)(RL(R ((sd/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/translate/api.pyRåscCsdjd„t|ƒDƒƒS(uM Produce a Giza-formatted string representing the alignment. u css|]}d|d VqdS(u%d-%diN((RR8((sd/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/translate/api.pys ïs(RRL(R ((sd/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/translate/api.pyR2ëscCsVgt|jdƒD] }g^q|_x&|D]}|j|dj|ƒq0WdS(u€ Build a list self._index such that self._index[i] is a list of the alignments originating from word i. iiN(RR<R=tappend(R RGR8((sd/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/translate/api.pyRDñs) N( R4R5R6R:t classmethodRCRER3RRRR2RD(((sd/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/translate/api.pyR ˜s      cCs+|jdƒ\}}t|ƒt|ƒfS(Nu-(R@tint(t pair_stringRtj((sd/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/translate/api.pyRAûscCs.|jdƒ\}}}t|ƒt|ƒfS(Nu-(R@RQ(RRRRSR8((sd/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/translate/api.pyt _naacl2pairÿscsrt|ƒtkst‚t‡fd†|DƒƒsCtdƒ‚nt‡fd†|Dƒƒsntdƒ‚ndS(ub Check whether the alignments are legal. :param num_words: the number of source language words :type num_words: int :param num_mots: the number of target language words :type num_mots: int :param alignment: alignment to be checked :type alignment: Alignment :raise IndexError: if alignment falls outside the sentence c3s/|]%}d|dko$ˆknVqdS(iN((Rtpair(t num_words(sd/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/translate/api.pys su&Alignment is outside boundary of wordsc3s?|]5}|ddkp6d|dko4ˆknVqdS(iiN(R(RRU(tnum_mots(sd/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/translate/api.pys su%Alignment is outside boundary of motsN(R R R tallt IndexError(RVRWR ((RWRVsd/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/translate/api.pyRs uPhraseTableEntryu trg_phraseulog_probt PhraseTablecBs2eZdZd„Zd„Zd„Zd„ZRS(us In-memory store of translations for a given phrase, and the log probability of the those translations cCstƒ|_dS(N(tdictt src_phrases(R ((sd/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/translate/api.pyRscCs |j|S(uÅ Get the translations for a source language phrase :param src_phrase: Source language phrase of interest :type src_phrase: tuple(str) :return: A list of target language phrases that are translations of ``src_phrase``, ordered in decreasing order of likelihood. Each list element is a tuple of the target phrase and its log probability. :rtype: list(PhraseTableEntry) (R\(R t src_phrase((sd/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/translate/api.pyttranslations_for!s cCsltd|d|ƒ}||jkr4g|j|=streverseN(tPhraseTableEntryR\ROtsorttTrue(R R]R_R`tentry((sd/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/translate/api.pytadd0s cCs ||jkS(N(R\(R R]((sd/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/translate/api.pyt __contains__@s(R4R5R6RR^RhRi(((sd/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/translate/api.pyRZs    (t __future__RRR$t collectionsRt nltk.compatRRtobjectRR9R RARTRRdRZ(((sd/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/translate/api.pyt s †b