
    kh!                         d dl Z d dlZd dlZd dlZd dlmZ d dlmZ d dl	Z
d dlZd dl Z de j                  d<   de j                  d<   d Zd Zd	 Zd
 ZddZd Zd Zd Zd ZddZd Zy)    N)Image)defaultdictz/var/www/teggl/fontify/cache
TORCH_HOMEXDG_CACHE_HOMEc                 t    | j                         }|j                         sy|d   |dz  k  s|d   |dz  kD  ryy)NF   皙??T)stripisdigit)textbboxpage_heightstrippeds       //var/www/teggl/fontify/website/pdf_processor.pyis_likely_page_numberr      sC    zz|HAws""d1gc0A&A    c                     | j                         }|sy|d   |dz  kD  s|d   |dz  k  r2g d}|D ])  }t        j                  ||t        j                        s) y y)NFr   r
   r	   )z\bVolume\b.*\bIssue\bu'   \b(19|20)\d{2}\b.*\b\d{1,4}–\d{1,4}\bzInf Syst FrontJETOLSpringerElsevierz\bReferences\bT)r   research
IGNORECASE)r   r   r   r   patternspats         r   is_likely_footer_headerr      sh    zz|HAws""d1gc0A&A
  	Cyyh6	 r   c                 n   g }t               }t        |       D ]  \  }}||v r|j                  \  }}}}t        j                  ||||      }	|g}
t        | |dz   d  |dz         D ]  \  }}||v s|j
                  |j
                  k7  r$|j                  \  }}}}t        j                  ||||      }|	j                  |      s_|
j                  |       |j                  |        t        |
      dk(  r|j                  |       t        d |
D              }t        d |
D              }t        d |
D              }t        d |
D              }t        j                  t        j                  ||||      d |j
                  t        |dd       t        |dd       	      }|j                  |        |S )
Nr   startc              3   :   K   | ]  }|j                   d      yw)r   Ncoordinates.0gs     r   	<genexpr>z(merge_adjacent_blocks.<locals>.<genexpr>@        5!Q]]1%5   c              3   :   K   | ]  }|j                   d      yw)r   Nr"   r$   s     r   r'   z(merge_adjacent_blocks.<locals>.<genexpr>A   r(   r)   c              3   :   K   | ]  }|j                   d      yw)   Nr"   r$   s     r   r'   z(merge_adjacent_blocks.<locals>.<genexpr>B   r(   r)   c              3   :   K   | ]  }|j                   d      yw)   Nr"   r$   s     r   r'   z(merge_adjacent_blocks.<locals>.<genexpr>C   r(   r)   scoreid)r   typer/   r0   )set	enumerater#   fitzRectr1   
intersectsappendaddlenminmaxlp	TextBlock	Rectanglegetattr)blocksmergedusediaxa1ya1xa2ya2box_agroupjbxb1yb1xb2yb2box_bx1y1x2y2	new_blocks                          r   merge_adjacent_blocksrW   ,   s   F5D&! %19]]S#s		#sC-fQUWoQU; 	DAqDyAFFaff,!"Cc3IIc3S1E&Q	 u:?MM!5u55B5u55B5u55B5u55BRR,VVa$/1dD)I MM)$9%: Mr   c           
         t         j                  j                  t         j                  j                  t              dd      }t        j
                  |d       t        j                  |       }t        j                  d      }g }t        |d      D ]6  \  }}|j                  d	      }t        j                  t        j                  |j                  d
                  }|j!                  |      }	t#        |	      }	ddg}
t        |	      D ]  \  }}t%        t&        |j(                        \  }}}}||||g}|j*                  |
v s:|j-                  ||||f      }d| d| d|j*                  j/                          d}t         j                  j                  ||      }|j1                  |       |j3                  d||||j*                  d       |j5                  t        j6                  |      dd        |j9                  d      }t        |      D ]  \  }}|^}}}}}}|j;                         st=        |||||g|j>                  j@                        rEtC        |||||g|j>                  j@                        rkt        j6                  ||||      }|j3                  | d| |||||g|j;                         d        9 |S )NstaticuploadsT)exist_okzlp://efficientdet/PubLayNetr   r      )dpipngTableFigureai__z.pngimage)r1   pagesrcr   label)r   r   r   )colorfillr@   )r0   rd   r   r   )"ospathjoindirname__file__makedirsr4   openr<   AutoLayoutModelr3   
get_pixmapr   ioBytesIOtobytesdetectrW   mapintr#   r1   croplowersaver7   	draw_rectr5   get_textr   r   rectheightr   )pdf_path
UPLOAD_DIRdocmodel
all_blockspage_numberrd   piximglayoutvisual_typesblock_idblockrR   rS   rT   rU   r   croppedimg_filenameimg_pathtext_blocksx0y0r   rb   s                             r   extract_blocks_with_ai_visualsr   O   s   bggooh79MJKK
T*
))H
C<=EJ&s!4 ,Too#o&jjCKK$678c"&v.*(0 	QOHe e&7&78NBBB#Dzz\)((BB#34!$[M8*Aejj>N>N>P=QQUV77<<
LAX&!! ' ++ $!& tyyiiP%	Q( mmH-(5 	OHe',$BBD1::<$TBB+;TYY=M=MN&tb"b"-=tyy?O?OP99RR,D(M8*5'R, JJL		9,\ r   c                    t        t              }| D ]  }||d      j                  |        g }t        |      D ]  }||   }|D cg c]  }|j	                  d      | }}|D cg c]  }|j	                  d      dk(  s| }	}g }
t        |d       D ]U  }d}|
D ]7  }t        |d   d   |d   d   d   z
        |k  s$|j                  |       d	} n |rD|
j                  |g       W |
D ]  }|j                  d
         |
D ]  }|j                  |        |j                  |	        |S c c}w c c}w )Nrd   r1   rc   c                     | d   d   S )Nr   r    rL   s    r   <lambda>z6determine_column_aware_reading_order.<locals>.<lambda>   s    qy| r   )keyFr   r   Tc                     | d   d   S )Nr   r   r   r   s    r   r   z6determine_column_aware_reading_order.<locals>.<lambda>   s    1V9Q< r   )r   listr7   sortedgetabssortextend)r@   column_thresholdpagesr   ordered_blockspage_numpage_blocksrL   r   other_blockscolumnsplacedcols                r   $determine_column_aware_reading_orderr      ss   E +eFm##E*+ N5M ,Ho"-GQv1FqGG#.Ka!%%-72JKKK-CD 	(EF uV}Q'#a&.*;;<?OOJJu%!F	
 w'	(  	1CHH/H0	1 	'C!!#&	'l+),, ) HKs   D7D7(D<D<c                 \    |dk(  xr& t        | j                               dkD  xr |d   dk  S )Nr   <      )r9   r   )r   r   rd   s      r   is_main_titler      s.    19ATZZ\*R/ADGcMAr   c                 J    t        j                  d| j                               S )Nz^\d+\s+[A-Z]r   matchr   r   s    r   is_section_headingr      s    88OTZZ\22r   c                 J    t        j                  d| j                               S )Nz^\d+\.\d+(\.\d+)?\s+[A-Z]r   r   s    r   is_subsection_headingr      s    880$**,??r   c                 \    t        t        j                  d| j                                     S )Nz^\d+\.\d+\s)boolr   r   r   r   s    r   is_subheadingr      s    677r   c                 B   | j                         }t        |      dkD  ryt        j                  d|t        j                        ryt        j
                  d|      ry|r	|d   dkD  ryt        j                  d|      ry|j                         s|j                         ryy)	Nd   Fz<(doi|https?://|Inf Syst Front|\(\d{4}\)|[A-Z]{2,} \(\d{4}\))u   \d+|\d+–\d+|\d+/\d+r      z^\d+(\.\d+)*\s+[A-Z]T)	r   r9   r   r   r   	fullmatchr   isupperistitle)r   r   r   s      r   
is_headingr      s    zz|H
8}s	yyG

 	||,h7Q#	xx'2X--/r   c                 v   |d   }|d   }|d   }|d   }d| d| d}d| d	| d
| d| d| d}d}| D ]  }	|	j                  d      dk(  r |d|	d    d|	j                  dd       dz  }7|	d   }
t        j                  |
j                  dd            }|	j                  dg       }|	j                  dd      }|st	        |
||      r|d| dz  }d}t        |
      r
|d | d!z  }t        |
      r
|d"| d#z  }t        |
      r
|d"| d#z  }t        |
|      r
|d | d$z  }|d%| d&z  } |d'z  }|S )(Nfontsizeline_heightspacingz'
    @font-face {
        font-family: z;;
        src: url("https://fontify.teggl.com/static/fonts/z%.ttf") format("truetype");
    }
    za<!DOCTYPE html>
    <html>
    <head>
        <meta charset='utf-8'>
        <style>
            z1
            body {
                font-family: z;
                font-size: z!px;
                line-height: z ;
                word-spacing: a  px;
                text-align: left;
                margin: 2em;
            }
            table {
                border-collapse: collapse;
                margin: 1em 0;
                width: 100%;
            }
            table td, table th {
                border: 1px solid #aaa;
                padding: 5px;
            }
            img {
                max-width: 100%;
                margin: 1em 0;
            }
        </style>
    </head>
    <body>
    Fr1   rc   z3<img src="https://fontify.teggl.com/static/uploads/re   z" alt="rf   zVisual Blockz">r   
 r   rd   r   z<h1>z</h1>Tz<h2>z</h2>z<h3>z</h3>z	</h2><hr>z<p>z</p>z</body></html>)	r   
html_utilsescapereplacer   r   r   r   r   )r@   stylesr   r   r   r   font_face_blockhtml_content	title_setr   raw_text
clean_textr   rd   s                 r   generate_html_from_blocksr      s   &>D&>D'KYGV ::> @O
  "V $ 6 ")] +&i (L@ I 799V'QRWX]R^Q__fglgpgpqx  {I  hJ  gK  KM  N  NLV}H#**8+;+;D#+FGJ99VR(D99VQ'Dxt!D$zl% 88 	#H-$zl% 88&x0$zl% 88x($zl% 88Hd+$zl) <<#j\ 66+7. $$Lr   )r   )N)ri   r   r4   layoutparserr<   PILr   collectionsr   htmlr   rr   environr   r   rW   r   r   r   r   r   r   r   r   r   r   r   <module>r      sy    	 	    #  	 	9

< =

 ( F6r>B3@8*Er   