
    yj=                        d dl Z d dlZd dlZd dlZd dlmZ d dlZd dlmZ d dl	Z	 ej
        ej        d            ej        d          Zdddddd	Zd
d
dddZd Zd Zd ZdedefdZdedefdZdefdZdefdZdefdZdefdZedk    rF ee j                  dk    r4 e ej         ee j        d                   dd                     dS dS dS )    N)Path)convert_from_pathz)[%(asctime)s] [%(levelname)s] %(message)s)levelformatLandRecordExtractorlines   )vertical_strategyhorizontal_strategysnap_tolerancejoin_toleranceintersection_tolerancetext)r
   r   r   r   c                     | dS t          |                               dd                              dd          } t          j        dd|                                           S )N 
 \s+)strreplaceresubstrip)values    ./var/www/html/banglarbhumi/extract_land_pdf.py
clean_textr      sW    }rJJtS))11$<<E6&#u%%++---    c                     t          |           }t          j        dd|t          j                  }t          j        dd|t          j                  }t          |          S )Nz
\bbyakti\br   )flagsz
\bvyakti\b)r   r   r   
IGNORECASE)name_strcleaneds     r   clean_person_namer$   #   sQ    ""Gf]Br}EEEGf]Br}EEEGgr   c                     g }t          | pd                              d          D ](}t          |          }|r|                    |           )|S )z2Splits multi-line cells and cleans entity markers.r   r   )r   splitr$   append)cellvalueslines      r   
split_cellr+   )   s[    FDJB%%d++     && 	 MM$Mr   pdf_pathreturnc                     	 t          | d          }d                    d |D                       S # t          $ r5}t                              dt          |                      Y d }~dS d }~ww xY w)Ni,  )dpir   c                 6    g | ]}t          j        |          S  )pytesseractimage_to_string).0imgs     r   
<listcomp>z"run_ocr_on_pdf.<locals>.<listcomp>5   s#    MMMs+5c::MMMr   zOCR failed: r   )r   join	Exceptionloggererrorr   )r,   imageses      r   run_ocr_on_pdfr=   2   s    "8555yyMMfMMMNNN   ,CFF,,---rrrrrs   /2 
A1*A,,A1c                     d                     d |j        D                                                       }|r|S t          |           S )Nr   c                 :    g | ]}|                                 pd S )r   )extract_text)r4   pages     r   r6   z$get_raw_pdf_text.<locals>.<listcomp>;   s)    OOO4,,..4"OOOr   )r7   pagesr   r=   )r,   pdf_obj	full_texts      r   get_raw_pdf_textrE   :   sL    		OOOOOPPVVXXI (###r   rD   c                    ddddddd}t          j        d| t           j                  }|r*|                    d                                          |d<   t          j        d| t           j                  }|r*|                    d                                          |d<   dD ]Q}t          j        | d	| t           j                  }|r*|                    d                                          ||<   R|S )
Nr   )jl_nodaag_nomouzablockdistrictthanaz+J[\.\s]*[LI1|i]\.?\s*No\.?\s*[:\-]?\s*(\d+)   rG   z?Thana\s*[:\-]?\s*([A-Za-z0-9\-\s]+?)(?=\n|Dag|Plot|J\.|Zamir|$)rL   )rI   rJ   rK   z\s*[:\-]?\s*([A-Za-z0-9\-\s]+))r   searchr!   groupr   )rD   headermkeys       r   extract_headerrS   @   s    b2PR]_``F
	@)R][[A -''!****,,w
	TV_acanooA -''!****,,w- - -I#===y"-XX 	-''!****,,F3KMr   c                    dddd}t          j        dd|           }t          j        dd|          }t          j        d|t           j                  }|rk|                    d          |d<   t          j        d	|d          d
|          }|r0|                    d          |d<   |                    d          |d<   |S |j        D ]}|                    t                    p|                    t                    }|s<|D ]}|rt          |          dk     rd
                    d |d         D                       }	d|	v sd|	v r|dd         D ]}
t          |
          sd |
D             }|D ]f}t          j        d|          rO||d<   t          |          dk    r|d         nd|d<   t          |          dk    r|d         nd|d<   |c c c c S gؐ|S )z:Extracts Plot No, Land Type (Shreni), and Total Land Area.r   )rH   shrenitotal_land_acrez[\n|]r   r   zV(?:Dag|Plot)\s*No\.?\s*(?:Shreni|Zamir|Moat|Pariman|ekar|Dager|Myap|\s)*\s+(\d{1,5})\brM   rH   z\bz\s+([A-Za-z]+)\s+(\d+\.\d+)\brU      rV   table_settingsc                 T    g | ]%}|t          |                                          &S r1   r   lowerr4   cs     r   r6   z%extract_plot_info.<locals>.<listcomp>m   /    "P"P"PQa"P:a==#6#6#8#8"P"P"Pr   r   dagplotNc                 0    g | ]}|t          |          S r1   )r   r]   s     r   r6   z%extract_plot_info.<locals>.<listcomp>r   s#     A A A1q AA A A Ar   z\d{1,5})r   r   rN   r!   rO   rB   extract_tablesTABLE_SETTINGS_PRIMARYTABLE_SETTINGS_FALLBACKlenr7   any	fullmatch)rD   pdfinfonormalized_textm_bruteanchor_matchrA   tablestable
header_strrow	clean_rowitems                r   extract_plot_infort   R   sv   RB??D fXsI66OfVS/::Oiq  tC  EG  ER  S  SG !--**Yy!UtI!U!U!UWfgg 	<)//22DN&2&8&8&;&;D"# 	 ( ($$4J$KK  KtObOb  sJOb  PK  PK 	 	( 	(E CJJNN"P"P%("P"P"PQQJ
""f
&:&: 9 	( 	(Cs88 !  A A A A AI ) ( (<
D99 (.2DO=@^^a=O=OYq\\UWDNFI)nnWXFXFXill^`D!23#'KKKKKKKKK	((	(" Kr   c                    g }| j         D ]}|                    t                    p|                    t                    }|s<|D ]}|rt	          |          dk     rd                    d |d         D                       }d|v rd|v s	d|v sd	|v sO|d
d         D ]8}t          |          st	          |          dk    rt          |d                   ng }t	          |          d
k    rt          |d
                   ng }	t	          |          dk    rt          |d                   ng }
t	          |          dk    rt          |d                   ng }t	          |          dk    rt          |d                   ng }|rd|d                                         v rt          t	          |          t	          |	          t	          |
          t	          |          t	          |                    }t          |          D ]}|t	          |          k     r||         nt	          |          d
k    r|d         nd}|t	          |	          k     r|	|         nd}|t	          |
          k     r|
|         nd}|t	          |          k     r||         nd}|t	          |          k     r||         nd}|s|r|                    |d|d|||d           А:|r|S d}t          j        ||          }|D ]}\  }}}}}t          |          }t          |          }|rU|rS|                    |                                d|d||                                |                                d           ~|S )zLDual-strategy Khatian extractor: Native Table Parsing + Text Regex Fallback.rX   rW   r   c                 T    g | ]%}|t          |                                          &S r1   r[   r]   s     r   r6   z+process_khatian_entries.<locals>.<listcomp>   r_   r   r   khatianraiterownernamrM   Nr	      r   )
khatian_noowner_name_bn
owner_namefather_husband_name_bnfather_husband_nameansha
area_acresz~([\d/]+)\s*[\s|]+\s*([A-Za-z\s]+?)(?:\s+Byakti|\s+Vyakti)?\s*[\s|]+\s*([A-Za-z\s]+?)\s*[\s|]+\s*([\d\.]+)\s*[\s|]+\s*([\d\.]+))rB   rc   rd   re   rf   r7   rg   r+   r\   maxranger'   r   findallr$   r   )ri   rD   entriesrA   rn   ro   rp   rq   khatiansownersfathersanshasareasmax_lenik_noo_namef_nameanshareapatternmatcheso_rawf_raws                           r   process_khatian_entriesr   |   s   G 	 , ,$$4J$KK  KtObOb  sJOb  PK  PK 	 '	 '	E CJJNN"P"P%("P"P"PQQJ++Z1G1G7V`K`K`dimwdwdwQRRy  3xx 14SA:c!f---2/23xx!||CF+++03C1*SV,,,"/23xx!||CF+++.1#hhll
3q6*** 	Xa[->->-@-@ @ @c(mmS[[#g,,FUXY^U_U_``w  A*+c(mm*;*;8A;;QTU]Q^Q^bcQcQc(1++ikD*+c&kk//VAYYrF+,s7||+;+;WQZZF()CKK6!99RD'(3u::~~5882D 	v 	*.-/*06839%)*.( (   '	R   PGj),,G*1  &eUD$"5))"5)) 		F 		NN"jjll!#$*,'-"jjll     Nr   c                    t          j        |           5 }t          | |          }t          |          }t	          ||          }t          ||          }t          |           j        |d         |d         |d         |d         |d         |d         |d         |d         t          |          |d	cd d d            S # 1 swxY w Y   d S )
NrG   rH   rI   rJ   rK   rL   rU   rV   )source_filerG   rH   rI   rJ   rK   rL   rU   rV   total_entrieskhatian_entries)	
pdfplumberopenrE   rS   rt   r   r   namerf   )r,   ri   rD   rP   	plot_infor   s         r   extract_land_recordr      s   		"	" 
c$Xs33		**%i55	)#y99  >>.G_ +G_G_z*G_)():; \\&
 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
s   BB>>CC__main__rM   r{   F)indentensure_ascii)sysjsonr   loggingpathlibr   r   	pdf2imager   r2   basicConfigINFO	getLoggerr9   rd   re   r   r$   r+   r   r=   rE   rS   rt   r   r   __name__rf   argvprintdumpsr1   r   r   <module>r      s   



  				            ' ' ' ' ' '      ',/Z [ [ [ [		0	1	1 !"    !	  . . .    S S    $s $ $ $ $ $c    $( ( ( ( (THC H H H HT
# 
 
 
 
, z
s38}}qjdj,,SXa[99!RWXXXYYYYY r   