
    ,h
"                     D   S SK r S SKrS SKJr  S SKJrJr  S SKJr  S SK	J
r
   \R                  R                  S5         \R                  R                  S5         " S
 S5      rg! \ a    \R                  " S5         NAf = f! \ a    \R                  " S	5         NCf = f)    N)	stopwords)sent_tokenizeword_tokenize)SnowballStemmer)pipelineztokenizers/punktpunktzcorpora/stopwordsr   c                   L    \ rS rSrSrSS jrSS jrS rSS jrSS jr	S r
S	rg
)TextProcessor   z9Clase para procesar texto para facilitar la accesibilidadc                 L    Xl         [        U5      U l        SU l        SU l        g)zd
Inicializa el procesador de texto

Args:
    language (str): Idioma para el procesamiento de texto
N)languager   stemmer_summarizer_simplifierselfr   s     AD:\NESTOR\Documents\Tesis\auris\backend\models\text_processing.py__init__TextProcessor.__init__   s'     !&x0      c                     US:X  a  U R                  U5      $ US:X  a  U R                  U5      $ US:X  a  U R                  U5      $ [        SU 35      e)u  
Procesa el texto según la operación solicitada

Args:
    text (str): Texto a procesar
    operation (str): Operación a realizar (simplify, summarize, highlight)
    
Returns:
    dict: Resultado del procesamiento
    
Raises:
    ValueError: Si la operación no es válida
simplify	summarize	highlightu   Operación no válida: )simplify_textsummarize_texthighlight_keywords
ValueError)r   text	operations      r   processTextProcessor.process%   sb     
"%%d+++%&&t,,+%**4006ykBCCr   c           	      z    U R                   c  [        SSS9U l         Sn[        S[        U5      U5       Vs/ s H	  o1X3U-    PM     nn/ nU H,  nU R                  USSS	S
9nUR	                  US   S   5        M.     SR                  U5      $ s  snf ! [         a    [        XR                  S9n/ n	U H8  n
[        XR                  S9n[        U5      S:  d  M'  U	R	                  U
5        M:     U	(       d.  UR                  [        S9  US[        S[        U5      S-  5       n	SR                  U	5      s $ f = f)u   
Simplifica un texto para hacerlo más accesible

Args:
    text (str): Texto a simplificar
    
Returns:
    str: Texto simplificado
Nztext2text-generationfacebook/bart-large-cnnmodeli  r         F
max_length
min_length	do_samplegenerated_text r      key      )r   r   rangelenappendjoin	Exceptionr   r   r   sortmax)r   r   r*   isegmentssimplified_segmentssegmentresult	sentencessimplified_sentencessentencewordss               r   r   TextProcessor.simplify_text<   sF   	2'#+,BJc#d  J6;As4y*6UV6UQ|,6UHV"$#))'cb\a)b#**6!95E+FG $ 88/00 W  	2%d]]CI#% %%hGu:?(//9	 & (3''01K#aY9J2K'L$88011!	2s+   6B BAB B AD:AD:9D:c           	          U R                   c  [        SSS9U l         Sn[        S[        U5      U5       Vs/ s H	  oAXDU-    PM     nn/ nU H,  nU R                  USSS	S
9nUR	                  US   S   5        M.     SR                  U5      $ s  snf ! [         Gal    [        XR                  S9n	[        [        R                  " U R                  5      5      n
0 nU	 HK  n[        XR                  S9 H1  nUR                  5       nX;  d  M  X;  a  SX'   M%  X==   S-  ss'   M3     MM     0 n[        U	5       HQ  u  pL[        XR                  S9 H5  nUR                  5       nX;   d  M  XN;  a  X   X'   M'  X==   X   -  ss'   M7     MS     [        S[!        [        U	5      U-  5      5      n[#        UR%                  5       S SS9SU n[#        US S9 VVs/ s H
  u  nnX   PM     Os  snnf nnnSR                  U5      s $ f = f)u   
Resume un texto conservando la información esencial

Args:
    text (str): Texto a resumir
    ratio (float): Proporción del texto original a mantener
    
Returns:
    str: Texto resumido
Nsummarizationr$   r%   i   r   r'   r(   Fr)   summary_textr.   r/   r3   c                     U S   $ Nr3    xs    r   <lambda>.TextProcessor.summarize_text.<locals>.<lambda>   s    1Q4r   Tr2   reversec                     U S   $ )Nr   rK   rL   s    r   rN   rO      s    \]^_\`r   r1   )r   r   r5   r6   r7   r8   r9   r   r   setr   rD   r   lower	enumerater;   intsorteditems)r   r   ratior*   r<   r=   summary_segmentsr?   r@   rA   
stop_wordsword_frequenciesrC   wordsentence_scoresnum_sentencesbest_sentences_s                     r   r   TextProcessor.summarize_texth   s   0	,'#+OC\#]  J6;As4y*6UV6UQ|,6UHV!#))'cb\a)b ''q	.(AB $ 88,-- W  !	,%d]]CI Y__T]];<J!%)(]]KD::<D-756,2,2a72 L & !O(3)(]]KD::<D/31A1GO.+.2B2HH. L  4  3s9~'=#>?M#O$9$9$;Y]^_m`mnN7=nR`7ab7atq!il7abNb88N++C!	,s>   6B BAB B A7HAH-A/HG.-H
Hc                    [        XR                  S9n[        [        R                  " U R                  5      5      n0 nU Hs  n[        X`R                  S9 HY  nUR                  5       nXt;  d  M  [        U5      S:  d  M+  UR                  5       (       d  MB  Xu;  a  SXW'   MM  XW==   S-  ss'   M[     Mu     [        UR                  5       S SS9SU nU VV	s/ s H  u  pyUPM	     nnn	Un
U HX  nS[        R                  " U5      -   S-   n[        R                  " US	UR                  5       -   S	-   U
[        R                  S
9n
MZ     U
US.$ s  sn	nf )u   
Identifica y destaca palabras clave en un texto

Args:
    text (str): Texto a analizar
    num_keywords (int): Número de palabras clave a destacar
    
Returns:
    dict: Texto original con palabras clave y lista de palabras clave
r/   r4   r3   c                     U S   $ rJ   rK   rL   s    r   rN   2TextProcessor.highlight_keywords.<locals>.<lambda>   s    !A$r   TrP   Nz\bz**)flags)highlighted_textkeywords)r   r   rS   r   rD   r   rT   r6   isalnumrW   rX   reescapesubupper
IGNORECASE)r   r   num_keywordsrA   r[   r\   rC   r]   rh   ra   rg   keywordpatterns                r   r    TextProcessor.highlight_keywords   s9    "$?	78
 !H%hGzz|)c$i!m312(.(.!3. H " *002PTUVcWcd(01WTD1  Gbii0058G!vvgtgmmo/E/LN^fhfsfst	   !1 
 	
 2s   Ec                 0    Xl         [        U5      U l        g)zY
Cambia el idioma del procesador

Args:
    language (str): Idioma para el procesamiento
N)r   r   r   r   s     r   set_languageTextProcessor.set_language   s     !&x0r   )r   r   r   r   N)spanish)r   )g333333?)   )__name__
__module____qualname____firstlineno____doc__r   r!   r   r   r   rt   __static_attributes__rK   r   r   r
   r
      s'    C D.*2X<,|)
V1r   r
   )rj   nltknltk.corpusr   nltk.tokenizer   r   	nltk.stemr   transformersr   datafindLookupErrordownloadr
   rK   r   r   <module>r      s    	  ! 6 % !IINN%&IINN&'F1 F1  MM'
  MM+s#   A&  B &B BBB