o
    Fgz                  
   @   sX  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
Zd dlmZ d dlmZ d dlmZmZmZmZ d d	lmZmZmZ d d
lmZ d dlmZ dd Zd&defddZdd Zdd Z d'defddZ!d(de"fddZ#d(de	e" fddZ$dd Z%							d)defdd Z&					d*d!e"d"ed#edB de	e fd$d%Z'dS )+    N)ProcessPoolExecutor)partial)repeat)List)add_links_and_refs)	get_pages)handle_hyphens
merge_textpostprocess_textsort_blocks)PagesTableInputsTables)settings)table_cell_textc                 C   s   t | } |r|   | S N)pdfiumPdfDocument
init_forms)pdfflatten_pdf r   l/var/www/eduai.edurigo.com/doc_train/edurigo_ai/Puru/venv/lib/python3.10/site-packages/pdftext/extraction.py	_load_pdf   s   
r   FTreturnc                 C   s   t t| ||S r   )r   pdf_doc)
page_ranger   quote_looseboxr   r   r   _get_page_range   s   r   c                 C   s   |    d S r   )close)r   r   r   r   worker_shutdown    s   r    c                 C   s   t | |atttt d S r   )r   r   atexitregisterr   r    )pdf_pathr   r   r   r   worker_init$   s   
r$   c           
   	      s   t | |} d u rtt| |d urt|t tj }|d u s%|dkr2t| ||}|  |S |  t  t	
t |  fddt|D }t|t| |fd}t|t|t|t|}W d    n1 sqw   Y  dd |D }	|	S )N   c                    s$   g | ]} | |d    qS )r%   r   ).0ir   pages_per_workerr   r   
<listcomp>=   s   $ z_get_pages.<locals>.<listcomp>)max_workersinitializerinitargsc                 S   s   g | ]	}|D ]}|qqS r   r   )r&   sublistpager   r   r   r*   B   s    )r   rangelenminr   WORKER_PAGE_THRESHOLDr   r   listmathceilr   r$   mapr   r   )
r#   r   r   r   workersr   pagespage_range_chunksexecutorordered_pagesr   r(   r   
_get_pages,   s$   
r=   c                 C   s   t | |||||d}d|S )N)sorthyphensr   r8   r   
)paginated_plain_text_outputjoin)r#   r>   r?   r   r   r8   textr   r   r   plain_text_outputF   s   
rD   c           	      C   s:   t | |||d}g }|D ]}|t|||d  q|S )N)r8   r   )r>   r?   )r=   appendr	   strip)	r#   r>   r?   r   r   r8   r9   rC   r/   r   r   r   rA   K   s
   rA   c                 C   sT   | d j | d< tt| d dd| d< |s| d= d S | d D ]	}|d j |d< qd S )NbboxrC   T)keep_hyphenschars)rG   r   r
   )span
page_widthpage_height
keep_charscharr   r   r   _process_spanS   s   
rO   c              	   C   s\  t | ||||d}|st| d}	t||	 |	  |D ]}
|
d |
d }}|
d D ]E}t| D ]	}|dvr;||= q2|d j|d< |d D ]'}t| D ]	}|d	vrX||= qO|d j|d< |d
 D ]	}t|||| qdqGq*|rzt|
d |
d< |
d dks|
d dkr|
d |
d |
d< |
d< |
d d |
d d |
d d |
d d g|
d< q|S )N)r8   r   r   Fwidthheightblocks)linesrG   rG   rS   )spansrG   rT   rotationZ   i        r   r%   )	r=   r   r   r   r4   keysrG   rO   r   )r#   r>   r   rM   r   r   disable_linksr8   r9   r   r/   rK   rL   blockklinerJ   r   r   r   dictionary_output]   s<   


0r^   r#   table_inputsr9   c                 C   s   |st | ||||dd}t|t|ksJ dg }t||D ]!\}}	t|	d ||	d }
t|
t|	d ks;J d||
 q|S )NT)r   r   r   r8   rM   z+Number of pages and table inputs must matchtablesimg_sizez,Number of tables and table inputs must match)r^   r1   zipr   rE   )r#   r_   r   r   r   r8   r9   
out_tablesr/   table_inputr`   r   r   r   table_output   s   
re   )FT)NFTN)FFNFN)FNFFTFN)NFTNN)(r!   r5   concurrent.futuresr   	functoolsr   	itertoolsr   typingr   	pypdfium2r   pdftext.pdf.linksr   pdftext.pdf.pagesr   pdftext.postprocessingr   r	   r
   r   pdftext.schemar   r   r   pdftext.settingsr   pdftext.tablesr   r   r   r    r$   r=   strrD   rA   rO   r^   re   r   r   r   r   <module>   sZ    
	
,