U
    i9                     @   sF  d Z ddlZddlZddlZddlmZ zddlZW n. ek
rb   ed e	d ddlZY nX zddl
mZ W n2 ek
r   ed e	d ddl
mZ Y nX zdd	lmZ W n2 ek
r   ed
 e	d dd	lmZ Y nX ddlZdd Zdd ZdddZdd Zd ddZd!ddZdd ZedkrBe  dS )"za
PDF Translation Script
Translates a Spanish PDF document to English and creates a new PDF file.
    N)PathzInstalling PyPDF2...zpip3 install PyPDF2)FPDFzInstalling fpdf2...zpip3 install fpdf2)GoogleTranslatorzInstalling deep-translator...zpip3 install deep-translatorc           	   
   C   s   g }zt | d}t|}t|j}td| d|   t|D ]N}|j| }| }| rB|	|d |d tdt| d|d   qB|W  5 Q R  W S Q R X W n6 t
k
r } ztd|  W Y d	S d	}~X Y nX d	S )
z8Extract text from a PDF file, preserving page structure.rbFound z
 pages in    )page_numtextz
Extracted z characters from page zError reading PDF: N)openPyPDF2Z	PdfReaderlenZpagesprintrangeZextract_textstripappend	Exception)	pdf_pathpages_contentfileZ
pdf_readerZ	num_pagesr   pager	   e r   >/var/www/html/wordpress6/wordpress/EP/translate_spanish_pdf.pyextract_text_from_pdf$   s&    


r   c              <      s   ddddddddd	d
dddddddddddddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:g<}   tfd;d<|D }d=d>d?d@dAdBdCdDdEg	}t fdFd<|D }|dGks|rdHS dIS )Jz?Simple detection of Spanish text based on common Spanish words.ZelZlaZlosZlasZdeZqueyaenZunZunaesZseZnoZteZloleZdaZsuZporZsonZconZparadelu   másZsusZserZtieneZhaberZesteZdesdeu   estáZmismoZbajou   segúnZmejoru   despuésZdondeZmientrasZestadoZparteZestosu   tambiénZentreZtantoZduranteu   estánZsiempreZquienZtodasZpuedeZhacerZhemosZhastau   añou   añosu   díau   díasc                 3   s   | ]}| krd V  qdS )r   Nr   ).0Zword)
text_lowerr   r   	<genexpr>M   s      z!detect_spanish.<locals>.<genexpr>   ñ   á   é   í   ó   ú   ü   ¿   ¡c                 3   s   | ]}| kV  qd S )Nr   )r    charr	   r   r   r"   Q   s     
   TF)lowersumany)r	   Zspanish_indicatorsZspanish_word_countZspanish_charsZhas_spanish_charsr   )r	   r!   r   detect_spanish@   s                                                         
r2   r   r   c                 C   s   | sg S t dt|  d g }t||d}| D ]}|d }|d }t d| dt| d d	}t||krz&||}	|||	|d
d W nN tk
r }
 z0t d| d|
  ||||d
d W 5 d}
~
X Y nX q0|d
}g }d}|D ]N}t|t| d |k r6|r0|d
| 7 }n|}n|rF|| |} q|r^|| g }t|D ]p\}}z||}|| W nL tk
r }
 z,t d|d  d| d|
  || W 5 d}
~
X Y nX qj||d
||d
d q0|S )zCTranslate text pages from Spanish to English, preserving structure.z
Translating z	 pages...)sourcetargetr   r	   zTranslating page z (z characters)...i  
)r   r	   Zoriginal_lineszError translating page z: N r   zError translating chunk z	 of page )	r   r   r   	translater   splitr   	enumeratejoin)r   Zsource_langZtarget_langtranslated_pagesZ
translator	page_infor   r	   Z
chunk_sizeZ
translatedr   linesZchunksZcurrent_chunklineZtranslated_chunksiZchunkZtranslated_chunkr   r   r   translate_text_pagesZ   sh    





 
r@   c                 C   s   |   }|sdS | r(t|dk r(dS d|krxt|ddkrx|d}t|d   dk rxt|d   dkrxd	S td
|rdS t|dk r|dsdS dS )z<Detect if a line is a header, label, value, or regular text.emptyP   header:   r   2   r   label_valuez^\d+[\s\-/]value<   .section_headerZregular)r   isupperr   r8   rematchendswith)r>   line_strippedpartsr   r   r   detect_line_type   s    
(rR   Translated Documentc                 C   s  t d|  t }|jddd d}| D ]}|s>|  n|  d}|d }|d}d}|D ]}	| d	kr|  d}|	 }
|
s|d
 qdt|	}|dkr4|	ddd |
| z(|jdd|
ddddddd W n2   |jdd|
dddddddd Y nX | }|d qd|dkr|	ddd |
| z(|jdd|
ddddddd W n2   |jdd|
dddddddd Y nX | }|d qd|dkrx|	ddd  |
| d!|
kr|
d!d"}|d  d! }t|d"kr(|d"  nd}|	ddd  z,|ddd}|jd#d$|d%d&dd W n6   |dddd}|jd#d$|d%d&dd Y nX |	ddd  |rdz(|ddd}|jdd$|dd' W n2   |dddd}|jdd$|dd' Y nX nTz$|jdd$|
ddddd' W n.   |jdd$|
dddddd' Y nX | }|d qd|	ddd  |
| z$|jdd(|
ddddd' W n.   |jdd(|
dddddd' Y nX | }|d qdq*|| t d)|  d*S )+zJCreate a PDF file with the translated English text, preserving formatting.z
Creating English PDF: T   )ZautoZmarginFr	   r5      i     rC   Z	HelveticaB   r      zlatin-1replaceZLMARGINZNEXTL)Znew_xZnew_yalignzutf-8ignore   rK   r.      rE   rG   r6   	   rD   r   F      ZRIGHTZTOP)r\      z"English PDF created successfully: N)r   r   Zset_auto_page_breakZadd_pager8   Zget_yr   ZlnrR   Zset_fontZset_yZcellencodedecoder   Z
multi_celloutput)r;   output_pathtitleZpdfZ
first_pager<   r	   r=   Z
y_positionr>   rP   	line_typerQ   ZlabelrH   Zlabel_encodedZvalue_encodedr   r   r   create_english_pdf   s    






(,

(,


$(
$(
rj   rJ   c                 C   s   t  tj| d}|t j tj| ddd tt|}tdt| d g }|D ]j}td|  t	|}|rdd	d
 |D }t
|rtd|  |||f qtd qZtd qZ|S )z(Find PDF files that might be in Spanish.z*.pdfz**/*.pdfT)	recursiver   z
 PDF filesz
Checking: z

c                 S   s   g | ]}|d  qS r-   r   )r    r   r   r   r   
<listcomp>8  s     z%find_spanish_pdfs.<locals>.<listcomp>u+   ✓ This appears to be a Spanish document: z!  (Does not appear to be Spanish)z  (Could not extract text))globospathr:   extendlistsetr   r   r   r2   r   )Z	directoryZ	pdf_filesspanish_pdfsr   r   Zall_textr   r   r   find_spanish_pdfs&  s     

rt   c            	      C   s  t d t d t d ttjdkrtjd } tj| sTt d|   td t d|   t| }|st d td t	|}tj
tj| d }| d}t||d	d
 t d t d|   t d|  nt d t }|st d t d td t|dkr*|d \} }n\t dt| d t|dD ]"\}\}}t d| d|  qH|d \} }t d|   t	|}tj
tj| d }| d}t||d	d
 t d t d|   t d|  dS )zMain function to translate PDF.z<============================================================z)PDF Translation Tool - Spanish to Englishr   zError: File not found: z
Processing specified file: z&Error: Could not extract text from PDFr   z_English.pdfrS   )rh   u   
✓ Translation complete!z  Original: z  English version: z#
Searching for Spanish PDF files...z7
No Spanish PDF files found. Please specify a PDF file:z5Usage: python3 translate_spanish_pdf.py <path_to_pdf>z
Found z Spanish PDF files:z  z. z
Processing: N)r   r   sysargvrn   ro   existsexitr   r@   splitextbasenamerj   rt   r9   )	r   r   r;   Z	base_namerg   rs   r?   ro   _r   r   r   mainE  sP    





r|   __main__)r   r   )rS   )rJ   )__doc__rn   ru   rm   pathlibr   r   ImportErrorr   systemZfpdfr   Zdeep_translatorr   rM   r   r2   r@   rR   rj   rt   r|   __name__r   r   r   r   <module>   s@   



H
i
G
