ó
    ´OÂfw  ã                   ór   •  S SK r S SKJrJrJr   " S S\5      rS r\S:X  a  \" 5         gg! \ a     N/f = f)é    N)Ú
DendrogramÚVectorSpaceClustererÚcosine_distancec                   óZ   • \ rS rSrSrSS jrSS jrSS jrS rS r	S	 r
S
 rS rS rSrg)ÚGAAClustereré   a)  
The Group Average Agglomerative starts with each of the N vectors as singleton
clusters. It then iteratively merges pairs of clusters which have the
closest centroids.  This continues until there is only one cluster. The
order of merges gives rise to a dendrogram: a tree with the earlier merges
lower than later merges. The membership of a given number of clusters c, 1
<= c <= N, can be found by cutting the dendrogram at depth c.

This clusterer uses the cosine similarity metric only, which allows for
efficient speed-up in the clustering process.
Nc                 óZ   • [         R                  " XU5        Xl        S U l        S U l        g ©N)r   Ú__init__Ú_num_clustersÚ_dendrogramÚ_groups_values)ÚselfÚnum_clustersÚ	normaliseÚsvd_dimensionss       Ú3/usr/lib/python3/dist-packages/nltk/cluster/gaac.pyr   ÚGAAClusterer.__init__   s(   € Ü×%Ò% d°~ÔFØ)ÔØˆÔØ"ˆÕó    c           	      óÂ   • [        U Vs/ s H(  n[        R                  " U[        R                  5      PM*     sn5      U l        [
        R                  " XX#5      $ s  snf r
   )r   ÚnumpyÚarrayÚfloat64r   r   Úcluster)r   ÚvectorsÚassign_clustersÚtraceÚvectors        r   r   ÚGAAClusterer.cluster#   sK   € ä%Ù>EÓFºg°FŒU�[Š[˜¤§¡Ö/¹gÑFó
ˆÔô $×+Ò+¨D¸?ÓRÐRùò Gs   Š/Ac                 óJ  • [        U5      nS/U-  nUn[        R                  " U5      nX34n[        R                  " U[        S9[        R
                  -  n[        U5       H-  n	[        U	S-   U5       H  n
[        X   X   5      X‰U
4'   M     M/     U[        U R                  S5      :”  aÜ  [        R                  " UR                  5       U5      u  pšU(       a  [        SXš4-  5        U R                  X„Xš5        [        R
                  US S 2U
4'   [        R
                  XŠS S 24'   XI   XJ   -   XI'   U R                  R                  Xi   Xj   5        US-  nXjS-   S === S-  sss& X6U
'   U[        U R                  S5      :”  a  MÜ  U R!                  U R                  5        g )Né   )Údtypezmerging %d and %d)Úlenr   ÚarangeÚonesÚfloatÚinfÚranger   Úmaxr   Úunravel_indexÚargminÚprintÚ_merge_similaritiesr   ÚmergeÚupdate_clusters)r   r   r   ÚNÚcluster_lenÚcluster_countÚ	index_mapÚdimsÚdistÚiÚjs              r   Úcluster_vectorspaceÚ GAAClusterer.cluster_vectorspace*   sz  € ä�‹LˆØ�c˜A‘gˆØˆÜ—L’L “Oˆ	ð ˆvˆÜ�zŠz˜$¤eÑ,¬u¯y©yÑ8ˆÜ�q–ˆAÜ˜1˜q™5 !–_�Ü,¨W©Z¸¹ÓD�˜�T“
ó %ñ ð œc $×"4Ñ"4°aÓ8Ó8Ü×&Ò& t§{¡{£}°dÓ;‰DˆAÞÜÐ)¨Q¨FÑ2Ô3ð ×$Ñ$ T¸Ô=ô Ÿ™ˆD’�A�‰JÜŸ™ˆD’A�‰Jð )™^¨k©nÑ<ˆK‰NØ×Ñ×"Ñ" 9¡<°±Ô>Ø˜QÑˆMð ˜!‘e�gÓ !Ñ#ÓØ�a‰Lð) œc $×"4Ñ"4°aÓ8Õ8ð, 	×Ñ˜T×/Ñ/Õ0r   c                 ó<  • X#   nX$   nXV-   nUS U2U4   U-  US U2U4   U-  -   US U2U4'   US U2U4==   U-  ss'   XUS-   U24   U-  XS-   U2U4   U-  -   XUS-   U24'   XUS-   S 24   U-  XUS-   S 24   U-  -   XUS-   S 24'   XUS-   S 24==   U-  ss'   g )Nr!   © )r   r5   r1   r6   r7   Úi_weightÚj_weightÚ
weight_sums           r   r-   Ú GAAClusterer._merge_similaritiesP   s  € ð ‘>ˆØ‘>ˆØÑ(ˆ
ð ˜2˜A˜2˜q˜5‘k HÑ,¨t°B°Q°B¸°E©{¸XÑ/EÑEˆˆRˆaˆR�ˆU‰ØˆRˆaˆR�ˆU‹�zÑ!‹ð �A˜‘E˜A�I�Ñ Ñ)¨D°Q±¸°¸A°Ñ,>ÀÑ,IÑIð 	��A‘˜�	ˆ\Ñð   1 q¡5¡7 
Ñ+¨hÑ6¸ÀÀQÁÁ¸jÑ9IÈHÑ9TÑTˆ��A‘‘ˆZÑØ��A‘‘ˆZÓ˜JÑ&Ôr   c                 óì  • U R                   R                  U5      n/ U l        U H²  n[        U5      S:”  d   eU R                  (       a  U R                  US   5      nO[        R                  " US   5      nUSS   H-  nU R                  (       a  X@R                  U5      -  nM)  XE-  nM/     U[        U5      -  nU R                  R                  U5        M´     [        U R                  5      U l	        g ©Nr   r!   )
r   ÚgroupsÚ
_centroidsr#   Ú_should_normaliseÚ
_normaliser   r   Úappendr   )r   r   Úclustersr   Úcentroidr   s         r   r/   ÚGAAClusterer.update_clustersc   sÏ   € Ø×#Ñ#×*Ñ*¨<Ó8ˆØˆŒÛˆGÜ�w“< !Ó#Ð#Ð#Ø×%×%ØŸ?™?¨7°1©:Ó6‘ä Ÿ;š; w¨q¡zÓ2�Ø! ! "›+�Ø×)×)Ø§¡°Ó 7Ñ7’HàÑ&’Hñ	 &ð
 œ˜G›Ñ$ˆHØ�O‰O×"Ñ" 8Ö,ñ  ô ! §¡Ó1ˆÕr   c                 ó¤   • S n[        U R                  5       H1  nU R                  U   n[        X5      nU(       a
  XRS   :  d  M.  XS4nM3     US   $ rA   )r(   r   rC   r   )r   r   Úbestr6   rH   r5   s         r   Úclassify_vectorspaceÚ!GAAClusterer.classify_vectorspaceu   sQ   € ØˆÜ�t×)Ñ)Ö*ˆAØ—‘ qÑ)ˆHÜ" 6Ó4ˆDÞ˜4 q¡'�>Ø�y’ñ	 +ð
 �A‰wˆr   c                 ó   • U R                   $ )zQ
:return: The dendrogram representing the current clustering
:rtype:  Dendrogram
)r   ©r   s    r   Ú
dendrogramÚGAAClusterer.dendrogram~   s   € ð
 ×ÑÐr   c                 ó   • U R                   $ r
   ©r   rO   s    r   r   ÚGAAClusterer.num_clusters…   s   € Ø×!Ñ!Ð!r   c                 ó    • SU R                   -  $ )Nz*<GroupAverageAgglomerative Clusterer n=%d>rS   rO   s    r   Ú__repr__ÚGAAClusterer.__repr__ˆ   s   € Ø;¸d×>PÑ>PÑPÐPr   )rC   r   r   r   )r!   TN)FF)F)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r   r   r8   r-   r/   rL   rP   r   rV   Ú__static_attributes__r;   r   r   r   r      s7   † ñ
ô#ôSô$1òL'ò&2ò$ò ò"õQr   r   c                  óè  • SSK Jn   SS/SS/SS/SS/SS/SS/4 Vs/ s H  n[        R                  " U5      PM     nnU " S5      nUR	                  US5      n[        SU5        [        S	U5        [        S
U5        [        5         UR                  5       R                  5         [        R                  " SS/5      n[        SU-  SS9  [        UR                  U5      5        [        5         gs  snf )zG
Non-interactive demonstration of the clusterers with simple 2-D data.
r   )r   é   r!   é   é   Tz
Clusterer:z
Clustered:zAs:zclassify(%s):Ú )ÚendN)	Únltk.clusterr   r   r   r   r,   rP   ÚshowÚclassify)r   Úfr   Ú	clustererrG   r   s         r   Údemori   Œ   sç   € õ
 *ð *+¨A¨°°A°¸¸A¸ÀÀAÀÈÈAÈÐQRÐTUÐPVÑ'WÓXÒ'W !Œu�{Š{˜1Ž~Ñ'W€GÐXñ ˜Q“€IØ× Ñ  ¨$Ó/€Hä	ˆ,˜	Ô"Ü	ˆ,˜Ô Ü	ˆ%�ÔÜ	„Gð ×ÑÓ×ÑÔ!ô �[Š[˜!˜Q˜Ó €FÜ	ˆ/˜FÑ
"¨Ò,Ü	ˆ)×
Ñ
˜VÓ
$Ô%Ü	…Gùò% Ys   � C/Ú__main__)	r   ÚImportErrorÚnltk.cluster.utilr   r   r   r   ri   rX   r;   r   r   Ú<module>rm      sV   ðð	Û÷ PÑ OôyQÐ'ô yQòxð: ˆzÓÙ…Fð øð ó 	Ùð	ús   ‚- ­6µ6