Files
timmy-config/scripts/meaning-kernels/__pycache__/extract_meaning_kernels.cpython-312.pyc

138 lines
20 KiB
Plaintext
Raw Normal View History

<EFBFBD>
<00><><EFBFBD>iw><00><00>h<00>dZddlZddlZddlZddlZddlmZddlmZddlm Z m
Z
m Z m Z ddl Z ddlmZdZ ddlZdZ ddlZdZGd <0C>d <0A>ZGd<0E>d<0F>ZGd<10>d<11>Zd<12>Zedk(re<1A>yy#e$r dZed <09>Y<00>NwxYw#e$r dZed
<EFBFBD>Y<00>\wxYw#e$r dZed <0B>Y<00>jwxYw)z<>
Meaning Kernel Extraction Pipeline
Extract structured meaning kernels from academic PDF diagrams.
Issue #493: [Multimodal] Extract Meaning Kernels from Research Diagrams
<EFBFBD>N)<01>Path)<01>datetime)<04>List<73>Dict<63>Any<6E>Optional)<01>ImageTFz<Warning: PIL not available. Install with: pip install PillowzIWarning: pytesseract not available. Install with: pip install pytesseractzEWarning: pdf2image not available. Install with: pip install pdf2imagec<00>n<00>eZdZdZ ddedededededeeeff d <09>Zd
efd <0B>Z d
eeeffd <0C>Z
d
efd <0A>Z y)<0F> MeaningKernelz'Represents an extracted meaning kernel.N<> kernel_id<69>content<6E>source<63> kernel_type<70>
confidence<EFBFBD>metadatac<00><><00>||_||_||_||_||_|xsi|_t j<00>j<00>|_ |j<00>|_ y<00>N) r r rrrrr<00>now<6F> isoformat<61> timestamp<6D>_generate_hash<73>hash)<07>selfr r rrrrs <20>Q/private/tmp/timmy-config-burn/scripts/meaning-kernels/extract_meaning_kernels.py<70>__init__zMeaningKernel.__init__)sY<00><00>#<23><04><0E><1E><04> <0C><1C><04> <0B>&<26><04><18>$<24><04><0F> <20><0E>B<EFBFBD><04> <0A>!<21><1C><1C><1E>1<>1<>3<><04><0E><18>'<27>'<27>)<29><04> <09><00>returnc<00><><00>|j<00>d|j<00>d|j<00>d|j<00><00>}t j
|j <00><00>j<00>ddS)z'Generate a unique hash for this kernel.<2E>:N<>)r r rr<00>hashlib<69>sha256<35>encode<64> hexdigest)r<00> content_strs rrzMeaningKernel._generate_hash5sX<00><00><1D><1E><1E>(<28><01>$<24>,<2C>,<2C><1E>q<EFBFBD><14><1B><1B> <0A>Q<EFBFBD>t<EFBFBD>~<7E>~<7E>FV<46>W<> <0B><16>~<7E>~<7E>k<EFBFBD>0<>0<>2<>3<>=<3D>=<3D>?<3F><03><12>D<>Drc <00><><00>|j|j|j|j|j|j
|j |jd<01>S)z(Convert to dictionary for serialization.<2E>r r rrrrrrr'<00>rs r<00>to_dictzMeaningKernel.to_dict:sH<00><00><1E><1E><1E><1B>|<7C>|<7C><1A>k<EFBFBD>k<EFBFBD><1F>+<2B>+<2B><1E>/<2F>/<2F><1C> <0A> <0A><1D><1E><1E><18>I<EFBFBD>I<EFBFBD> 
<EFBFBD>
rc<00>B<00>d|j<00>d|jdd<00>d<04>S)NzKernel[z]: <20>d<00>...)r r r(s r<00>__str__zMeaningKernel.__str__Gs(<00><00><18><14><1E><1E>(<28><03>D<EFBFBD>L<EFBFBD>L<EFBFBD><14>#<23>,><3E>+?<3F>s<EFBFBD>C<>Cr)<03>text<78>N) <0C>__name__<5F>
__module__<EFBFBD> __qualname__<5F>__doc__<5F>str<74>floatrrrrr)r-<00>rrr r &sy<00><00>1<>AD<01>,0<>
*<2A>#<23>
*<2A><03>
*<2A>S<EFBFBD>
*<2A>!<21>
*<2A>8=<3D>
*<2A><1F><03>S<EFBFBD><08>><3E>
*<2A>E<01><03>E<01>

<EFBFBD><14>c<EFBFBD>3<EFBFBD>h<EFBFBD><1E> 
<EFBFBD>D<01><13>Drr c<00><><00>eZdZdZd deeeffd<04>Zdedeeeffd<07>Zde jde
fd <09>Z de jdefd
<EFBFBD>Z y) <0C>DiagramAnalyzerz(Analyze diagrams using multiple methods.N<>configc<00><00>|xsi|_yr)r9<00>rr9s rrzDiagramAnalyzer.__init__Ms <00><00><1C>l<EFBFBD><02><04> r<00>
image_pathrc<00>*<00>ts td<01><00>tj|<01>}|j|j
d<02>|j|j
z |j |jtjj|<01>d<03>}tr= tj|<02>}|j<00>|d<|j|<02>|d<|j%|<02>|d
<|S#t $r"}d|d<d|d<t#|<05>|d<Yd }~<05><d }~wwxYw) z(Analyze an image using multiple methods.z"PIL is required for image analysis)<02>width<74>height)<05>
dimensions<EFBFBD> aspect_ratio<69>mode<64>format<61>
size_bytes<EFBFBD>ocr_text<78>ocr_confidence<63>r/<00> ocr_errorN<72> diagram_type)<13> PIL_AVAILABLE<4C> ImportErrorr <00>openr>r?rBrC<00>os<6F>path<74>getsize<7A>TESSERACT_AVAILABLE<4C> pytesseract<63>image_to_string<6E>strip<69>_estimate_ocr_confidence<63> Exceptionr4<00>_estimate_diagram_type)rr<<00>image<67>analysisrE<00>es r<00> analyze_imagezDiagramAnalyzer.analyze_imagePs<><00><00><1C><1D>B<>C<> C<><15>
<EFBFBD>
<EFBFBD>:<3A>&<26><05>%*<2A>K<EFBFBD>K<EFBFBD>5<EFBFBD><<3C><<3C>H<>!<21>K<EFBFBD>K<EFBFBD>%<25>,<2C>,<2C>6<><19>J<EFBFBD>J<EFBFBD><1B>l<EFBFBD>l<EFBFBD><1C>'<27>'<27>/<2F>/<2F>*<2A>5<> 
<EFBFBD><08> <1F> /<2F>&<26>6<>6<>u<EFBFBD>=<3D><08>'/<2F>~<7E>~<7E>'7<><08><1A>$<24>-1<>-J<>-J<>5<EFBFBD>-Q<><08>)<29>*<2A>$(<28>#><3E>#><3E>u<EFBFBD>#E<><08><1E> <20><17><0F><><1D> /<2F>')<29><08><1A>$<24>-0<><08>)<29>*<2A>(+<2B>A<EFBFBD><06><08><1B>%<25><> /<2F>s<00><C'<00>' D<03>0D <03> DrWc<00><00>y)z%Estimate OCR confidence (simplified).皙<><E79A99><EFBFBD><EFBFBD><EFBFBD>?r6)rrWs rrTz(DiagramAnalyzer._estimate_ocr_confidenceps<00><00>rc<00>`<00>|j\}}||z }|dkDry|dkryd|cxkrdkryyy) z5Estimate diagram type based on image characteristics.<2E><00> flowchartg<00>?<3F>vertical_hierarchyr\g333333<33>?<3F>square_diagram<61>standard_diagram)<01>size)rrWr>r?rAs rrVz&DiagramAnalyzer._estimate_diagram_typeusH<00><00><1D>
<EFBFBD>
<EFBFBD> <0A><05>v<EFBFBD><1C>v<EFBFBD>~<7E> <0C> <17>!<21> <1B><1E> <19>C<EFBFBD> <1F>'<27> <10>L<EFBFBD> '<27>C<EFBFBD> '<27>#<23>(<28>&rr) r0r1r2r3rr4rrrZr r5rTrVr6rrr8r8Jsc<00><00>2<>#<23>t<EFBFBD>C<EFBFBD><13>H<EFBFBD>~<7E>#<23><18><03><18><04>S<EFBFBD>#<23>X<EFBFBD><0E><18>@<13>e<EFBFBD>k<EFBFBD>k<EFBFBD><13>e<EFBFBD><13>
&<26>E<EFBFBD>K<EFBFBD>K<EFBFBD> &<26>C<EFBFBD> &rr8c
<00><><00>eZdZdZddeeeffd<04>Zddededee fd<08>Z
dd ed
e dee fd <0B>Z dd eeefd ed
e dee fd<0E>Z dedeefd<10>Zdee defd<13>Zdeeeffd<14>Zy)<16>MeaningKernelExtractorz&Extract meaning kernels from diagrams.Nr9c<00>`<00>|xsi|_t|<01>|_g|_ddddd<02>|_y)Nr)<04>pages_processed<65>diagrams_analyzed<65>kernels_extracted<65>errors)r9r8<00>analyzer<65>kernels<6C>statsr;s rrzMeaningKernelExtractor.__init__<5F>s5<00><00><1C>l<EFBFBD><02><04> <0B>'<27><06>/<2F><04> <0A>,.<2E><04> <0C> <20>!"<22>!"<22><17> 
<EFBFBD><04>
r<00>pdf_path<74>
output_dirrc <00><00>ts td<01><00>t|<01>}|j<00>st d|<01><00><02><00>t d|<01><00><02>|r t|<02>}n|j |j<00>d<04>z }|jdd<05><06> ddl m
}||d <09>
<EFBFBD>}t d t|<05><00>d <0C><03>g}t|<05>D]y\}} |dz}
t d|
<EFBFBD>dt|<05><00><00><04>|d|
d<14>d<15>z } | j| <0B>|j!| |
<EFBFBD>} |j#| <0C>|jdxxdz cc<<00>{|j%||<03>|S#t$r1}t d |<06><00><02>|jdxxdz cc<gcYd}~Sd}~wwxYw)z(Extract meaning kernels from a PDF file.z(pdf2image is required for PDF processingzPDF not found: zProcessing PDF: <20>_kernelsT)<02>parents<74>exist_okr)<01>convert_from_pathi,)<01>dpiz
Converted z pages to imageszError converting PDF: rj<00>NzProcessing page <20>/<2F>page_<65>03d<33>.pngrg)<13>PDF2IMAGE_AVAILABLErKr<00>exists<74>FileNotFoundError<6F>print<6E>parent<6E>stem<65>mkdir<69> pdf2imagert<00>lenrUrm<00> enumerate<74>save<76>extract_from_image<67>extend<6E> _save_kernels) rrnro<00> output_pathrt<00>imagesrY<00> all_kernels<6C>irW<00>page_num<75>temp_image_path<74> page_kernelss r<00>extract_from_pdfz'MeaningKernelExtractor.extract_from_pdf<64>s<><00><00>"<22><1D>H<>I<> I<><17><08>><3E><08><17><EFBFBD><EFBFBD> <20>#<23>o<EFBFBD>h<EFBFBD>Z<EFBFBD>$@<40>A<> A<> <0A> <20><18>
<EFBFBD>+<2B>,<2C> <16><1E>z<EFBFBD>*<2A>K<EFBFBD>"<22>/<2F>/<2F>x<EFBFBD>}<7D>}<7D>o<EFBFBD>X<EFBFBD>,F<>F<>K<EFBFBD><13><19><19>$<24><14><19>6<> <16> 3<>&<26>x<EFBFBD>S<EFBFBD>9<>F<EFBFBD> <11>J<EFBFBD>s<EFBFBD>6<EFBFBD>{<7B>m<EFBFBD>+;<3B><<3C> =<3D><19> <0B>!<21>&<26>)<29> /<2F>H<EFBFBD>A<EFBFBD>u<EFBFBD><18>1<EFBFBD>u<EFBFBD>H<EFBFBD> <11>$<24>X<EFBFBD>J<EFBFBD>a<EFBFBD><03>F<EFBFBD> <0B>}<7D>=<3D> ><3E>*<2A>e<EFBFBD>H<EFBFBD>S<EFBFBD>><3E><14>,F<>F<>O<EFBFBD> <11>J<EFBFBD>J<EFBFBD><EFBFBD> '<27> <20>2<>2<>?<3F>H<EFBFBD>M<>L<EFBFBD> <17> <1E> <1E>|<7C> ,<2C> <10>J<EFBFBD>J<EFBFBD>(<28> )<29>Q<EFBFBD> .<2E> )<29> /<2F> <0A><1A><1A>;<3B> <0B>4<><1A><1A><>1<19> <16> <11>*<2A>1<EFBFBD>#<23>.<2E> /<2F> <10>J<EFBFBD>J<EFBFBD>x<EFBFBD> <20>A<EFBFBD> %<25> <20><15>I<EFBFBD><49> <16>s<00>(E <00> F<03>&F<03>;F<03>Fr<r<>c<00><><00>td|<01><00><02> |jjt|<01><00>}|j |t|<01>|<02>}|j
dxxdz cc<|j
dxxt|<05>z cc<|S#t$r1}td|<04><00><02>|j
dxxdz cc<gcYd}~Sd}~wwxYw)z&Extract meaning kernels from an image.zProcessing image: zError analyzing image: rjrvNrhri)r~rkrZr4rUrm<00>_generate_kernelsr<73>)rr<r<>rXrYrls rr<>z)MeaningKernelExtractor.extract_from_image<67>s<><00><00> <0A>"<22>:<3A>,<2C>/<2F>0<> <16><1B>}<7D>}<7D>2<>2<>3<EFBFBD>z<EFBFBD>?<3F>C<>H<EFBFBD><17>(<28>(<28><18>3<EFBFBD>z<EFBFBD>?<3F>H<EFBFBD>M<><07> <0C>
<EFBFBD>
<EFBFBD>&<26>'<27>1<EFBFBD>,<2C>'<27> <0C>
<EFBFBD>
<EFBFBD>&<26>'<27>3<EFBFBD>w<EFBFBD><<3C>7<>'<27><16><0E><><19> <16> <11>+<2B>A<EFBFBD>3<EFBFBD>/<2F> 0<> <10>J<EFBFBD>J<EFBFBD>x<EFBFBD> <20>A<EFBFBD> %<25> <20><15>I<EFBFBD><49> <16>s<00>$B <00> C<03>&B><03>8C<03>>CrXrc<00><><00>g}dtj<00>jd<02><00><00>}|r|d|<03><00>z }|jd<04>ret |<05>d<05>|d|d|jdd<08>t |dj <00><00>|jd d
<EFBFBD>d <0B><02> <0C>}|j|<06>d |jd d
<EFBFBD><00>d<0E>}|d|dd<00>d|dd<00>d<0E>z }|d|dd<16>d<17>z }t |<05>d<18>||dd|d|d|jd d
<EFBFBD>d<1B><03> <0C>}|j|<08>d|jd d
<EFBFBD><00>d<1D>} |jd<04>r| d|ddd <00>d!<21>z } n| d"z } t |<05>d#<23>| |d$d%t|jd<04><00>t |jdd&<26><00>d'<27><02> <0C>}
|j|
<EFBFBD>|jd<04>r[t |d<00>d(kDrJ|j|d<00>} | r4t |<05>d)<29>| |d*d+d,t |d<00>d-<2D><02> <0C>} |j| <0C>|jj|<04>|S).z'Generate meaning kernels from analysis.<2E>kernel_z %Y%m%d_%H%M%S<>_prE<00>_textr.rFr/rI<00>unknown)<02>
word_countrI)r r rrrrzDiagram type: z. z Dimensions: r@r><00>xr?zAspect ratio: rA<00>.2f<EFBFBD>.<2E>
_structure<EFBFBD> structureg<65><67><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?)r@rArIzResearch diagram analysis: z
diagram. zContains text: N<><4E>r,zNo text detected.<2E>_summary<72>summarygffffff<66>?rG)<02>has_text<78> text_length<74>2<00>_philosophical<61> philosophicalg333333<33>?<3F>keyword_analysis)<02>extraction_method<6F>source_text_length) rr<00>strftime<6D>getr r<><00>split<69>append<6E>bool<6F>_extract_philosophical_contentrlr<>) rrXrr<>rl<00>base_id<69> text_kernel<65>structure_content<6E>structure_kernelr<6C><00>summary_kernel<65>philosophical_content<6E>philosophical_kernels rr<>z(MeaningKernelExtractor._generate_kernels<6C>s<><00><00><14><07><1C>H<EFBFBD>L<EFBFBD>L<EFBFBD>N<EFBFBD>3<>3<>O<EFBFBD>D<>E<>F<><07> <13> <13><12>H<EFBFBD>:<3A><EFBFBD> &<26>G<EFBFBD> <14><<3C><<3C>
<EFBFBD> #<23>'<27>$<24>I<EFBFBD>U<EFBFBD>+<2B> <20><1A>,<2C><1D>"<22>#<23><<3C><<3C>(8<>#<23>><3E>"%<25>h<EFBFBD>z<EFBFBD>&:<3A>&@<40>&@<40>&B<>"C<>$,<2C>L<EFBFBD>L<EFBFBD><1E><19>$K<><12>
<0E>K<EFBFBD> <14>N<EFBFBD>N<EFBFBD>;<3B> '<27>-<2D>X<EFBFBD>\<5C>\<5C>.<2E>)<29>-T<>,U<>UW<55>X<><19><19>|<7C>H<EFBFBD>\<5C>,B<>7<EFBFBD>,K<>+L<>A<EFBFBD>h<EFBFBD>Wc<57>Nd<4E>em<65>Nn<4E>Mo<4D>oq<6F>r<>r<><19><19>~<7E>h<EFBFBD>~<7E>.F<>s<EFBFBD>-K<>1<EFBFBD>M<>M<><19>(<28> <20> <09><1A>,<2C>%<25><19>#<23><1A>&<26>|<7C>4<> (<28><1E> 8<> (<28> <0C> <0C>^<5E>Y<EFBFBD> G<><0E> 
<EFBFBD><18> <10><0E><0E>'<27>(<28>0<><08> <0C> <0C>^<5E>Y<EFBFBD>0W<30>/X<>Xb<58>c<><07> <13><<3C><<3C>
<EFBFBD> #<23> <13><1F><18>*<2A>)=<3D>d<EFBFBD>s<EFBFBD>)C<>(D<>C<EFBFBD>H<> H<>G<EFBFBD> <13>*<2A> *<2A>G<EFBFBD>&<26> <20> <09><18>*<2A><1B><19>!<21><1A> <20><18><1C><1C>j<EFBFBD>!9<>:<3A>"<22>8<EFBFBD><<3C><<3C>
<EFBFBD>B<EFBFBD>#?<3F>@<40><0E>

<EFBFBD><0E> <10><0E><0E>~<7E>&<26> <14><<3C><<3C>
<EFBFBD> #<23><03>H<EFBFBD>Z<EFBFBD>,@<40>(A<>B<EFBFBD>(F<>$(<28>$G<>$G<><08>Q[<5B>H\<5C>$]<5D> !<21>$<24>'4<>!(<28> <09><1E>8<>1<>!<21> /<2F>"<22>-?<3F>.1<EFBFBD>(<28>:<3A>2F<32>.G<><16>
(<12>$<24><18><0E><0E>3<>4<> <0A> <0C> <0C><1B><1B>G<EFBFBD>$<24><16>rr.c<00><><00>gd<01>}|j<00>}|D<00>cgc] }||vs<01>|<04><02> }}|rddj|<05><00>d|d<00>d<06>Sycc}w)z5Extract philosophical content from text (simplified).)<0F>truth<74> knowledge<67>wisdom<6F>meaning<6E>purpose<73> existence<63>reality<74> consciousness<73>ethics<63>morality<74>beauty<74>justice<63>freedom<6F>responsibility<74>identityzPhilosophical themes detected: z, z#. Source text explores concepts of rr<>N)<02>lower<65>join)rr.<00>philosophical_keywords<64>
text_lower<EFBFBD>kw<6B>found_keywordss rr<>z5MeaningKernelExtractor._extract_philosophical_content,s<><00><00>"
<EFBFBD><1E> <1A>Z<EFBFBD>Z<EFBFBD>\<5C>
<EFBFBD>'=<3D>R<><12><12>z<EFBFBD>AQ<41>"<22>R<><0E>R<> <19>4<>T<EFBFBD>Y<EFBFBD>Y<EFBFBD>~<7E>5N<35>4O<34>PJ<02>KY<02>Z[<02>K\<02>J]<02>]^<02>_<02> _<02><13><> Ss
<00> A<04>Arlr<>c
<00><><00>|s td<01>y|dz }|D<00>cgc]}|j<00><00><02>}}t|d<04>5}tj||d<05><06>ddd<02>|dz }t|d<04>5}|j d<08>|j d t j<00>j<00><00>d
<EFBFBD><03>|j d t|<01><00>d <0C><03>i}|D]-} |j| jg<00>j| <09><00>/|j<00>D<00>] \}
} |j d |
j<00><00>dt| <0B><00>d<0F><05>| D]<5D>} |j d| j<00>d
<EFBFBD><03>|j d| j <00>d
<EFBFBD><03>|j d| j"d<13>d
<EFBFBD><03>|j d| j$<00>d
<EFBFBD><03>|j d| j&<00>d
<EFBFBD><03>|j dtj(| j*d<05><06><00>d <0C><03><00><><00><01> ddd<02>|dz } t| d<04>5}tj|j,|d<05><06>ddd<02>tdt|<01><00>d|<02><00><04>td|<03><00><02>td|<07><00><02>td| <0C><00><02>ycc}w#1swY<00><02>cxYw#1swY<00><>xYw#1swY<00>lxYw)zSave kernels to files.zNo kernels to saveNzmeaning_kernels.json<6F>wr^)<01>indentzmeaning_kernels.mdz$# Meaning Kernels Extraction Report
z Generated: <20>
zTotal kernels: z
z## z
Kernels (z)
z### z- **Source**: z- **Confidence**: r<>z- **Timestamp**: z- **Content**: z- **Metadata**: zextraction_stats.jsonzSaved z kernels to z
- JSON: z - Markdown: z - Statistics: )r~r)rL<00>json<6F>dump<6D>writerrrr<><00>
setdefaultrr<><00>items<6D>titler rrrr <00>dumpsrrm) rrlr<><00> json_path<74>k<> kernels_data<74>f<>md_path<74>by_type<70>kernelr<00> type_kernels<6C>
stats_paths rr<>z$MeaningKernelExtractor._save_kernels=s<><00><00><16> <11>&<26> '<27> <12> <20>"8<>8<> <09>-4<>5<><01><01> <09> <09> <0B>5<> <0C>5<> <11>)<29>S<EFBFBD> !<21> 1<>Q<EFBFBD> <10>I<EFBFBD>I<EFBFBD>l<EFBFBD>A<EFBFBD>a<EFBFBD> 0<> 1<><1E> 4<>4<><07> <11>'<27>3<EFBFBD> <1F> \<01>1<EFBFBD> <0A>G<EFBFBD>G<EFBFBD>;<3B> =<3D> <0A>G<EFBFBD>G<EFBFBD>k<EFBFBD>(<28>,<2C>,<2C>.<2E>":<3A>":<3A>"<<3C>!=<3D>R<EFBFBD>@<40> A<> <0A>G<EFBFBD>G<EFBFBD>o<EFBFBD>c<EFBFBD>'<27>l<EFBFBD>^<5E>4<EFBFBD>8<> 9<><19>G<EFBFBD>!<21> J<01><06><17>"<22>"<22>6<EFBFBD>#5<>#5<>r<EFBFBD>:<3A>A<>A<>&<26>I<> J<01>.5<EFBFBD>]<5D>]<5D>_<EFBFBD> \<01>)<29> <0B>\<5C><11><07><07>#<23>k<EFBFBD>/<2F>/<2F>1<>2<>*<2A>S<EFBFBD><1C>=N<><O<>u<EFBFBD>U<>V<>*<2A>\<01>F<EFBFBD><15>G<EFBFBD>G<EFBFBD>d<EFBFBD>6<EFBFBD>#3<>#3<>"4<>B<EFBFBD>7<>8<><15>G<EFBFBD>G<EFBFBD>n<EFBFBD>V<EFBFBD>]<5D>]<5D>O<EFBFBD>2<EFBFBD>><3E>?<3F><15>G<EFBFBD>G<EFBFBD>0<><16>1B<31>1B<31>3<EFBFBD>0G<30>r<EFBFBD>J<>K<><15>G<EFBFBD>G<EFBFBD>/<2F><06>0@<40>0@<40>/A<><12>D<>E<><15>G<EFBFBD>G<EFBFBD>o<EFBFBD>f<EFBFBD>n<EFBFBD>n<EFBFBD>-=<3D>R<EFBFBD>@<40>A<><15>G<EFBFBD>G<EFBFBD>.<2E>t<EFBFBD>z<EFBFBD>z<EFBFBD>&<26>/<2F>/<2F>RS<52>/T<>.U<>UY<55>Z<>[<5B> \<01> \<01> \<01>*!<21>#:<3A>:<3A>
<EFBFBD> <11>*<2A>c<EFBFBD> "<22> /<2F>a<EFBFBD> <10>I<EFBFBD>I<EFBFBD>d<EFBFBD>j<EFBFBD>j<EFBFBD>!<21>A<EFBFBD> .<2E> /<2F> <0E><06>s<EFBFBD>7<EFBFBD>|<7C>n<EFBFBD>L<EFBFBD><1B> <0A>><3E>?<3F> <0A>
<EFBFBD>9<EFBFBD>+<2B>&<26>'<27> <0A><0E>w<EFBFBD>i<EFBFBD>(<28>)<29> <0A> <20><1A> <0C>-<2D>.<2E><>G6<> 1<> 1<><31>
 \<01> \<01><>, /<2F> /<2F>s)<00>J2<04>J7<03>/F9K<03>#K<03>7K<07>K <07>Kc<00>6<00>|jj<00>S)zGet extraction statistics.)rm<00>copyr(s r<00> get_statsz MeaningKernelExtractor.get_statsjs<00><00><13>z<EFBFBD>z<EFBFBD><EFBFBD><EFBFBD> <20> rr)r0r1r2r3rr4rrrr r<><00>intr<74>r<>rr<>rr<>r<>r6rrrere<00>s<><00><00>0<> 
<EFBFBD>t<EFBFBD>C<EFBFBD><13>H<EFBFBD>~<7E> 
<EFBFBD>/<1B><13>/<1B>#<23>/<1B><14>m<EFBFBD>I\<5C>/<1B>b<17>S<EFBFBD><17>C<EFBFBD><17>4<EFBFBD>P]<5D>K^<5E><17>(T<17>$<24>s<EFBFBD>C<EFBFBD>x<EFBFBD>.<2E>T<17>#<23>T<17>QT<51>T<17>`d<>er<65>`s<>T<17>l<14>3<EFBFBD><14>8<EFBFBD>C<EFBFBD>=<3D><14>"+/<2F>T<EFBFBD>-<2D>%8<>+/<2F>t<EFBFBD>+/<2F>Z!<21>4<EFBFBD><03>S<EFBFBD><08>><3E>!rrec<00><00>tjd<01><02>}|jdd<04><05>|jddd<08><05>|jd d
d <0B><05>|jd d dd<0F><10>|j<00>}i}|jr3t |j<00>5}t j|<03>}ddd<11>t|<02>}t|j<00>}|j<00>r<>|jj<00>dk(r|j||j<00>}<06>n2|jj<00>dvr|j!|<05>}<06>nt#d|j<00><00><02>t%j&d<15>n<>|j)<00>r<>g}|j+<00>D]<5D>}|jj<00>dk(r.|j||j<00>}|j-|<06><00>N|jj<00>dvs<01>k|j!|<08>}|j-|<06><00><>n#t#d|<05><00><02>t%j&d<15>|j/<00>} t#d<17>t#d<18>t#d<19>t#d| d<00><00><02>t#d| d<00><00><02>t#d| d<00><00><02>t#d | d!<00><00><02>t#d<19>t%j&| d!d"k(rd"<22>yd<15>y#1swY<00><02>LxYw)#zCommand line interface.z.Extract meaning kernels from research diagrams)<01> description<6F>inputz!Input PDF or image file/directory)<01>helpz-oz--outputzOutput directoryz-cz--configzConfiguration file (JSON)z-vz --verbose<73>
store_truezVerbose output)<02>actionr<6E>Nz.pdf)rzz.jpgz.jpegz.tiffz.bmpzUnsupported file type: rvzInput not found: z3
==================================================zEXTRACTION SUMMARYz2==================================================zPages processed: rgzDiagrams analyzed: rhzKernels extracted: rizErrors: rjr)<18>argparse<73>ArgumentParser<65> add_argument<6E>
parse_argsr9rLr<><00>loadrerr<><00>is_file<6C>suffixr<78>r<><00>outputr<74>r~<00>sys<79>exit<69>is_dir<69>iterdirr<72>r<>)
<EFBFBD>parser<65>argsr9r<><00> extractor<6F>
input_pathrlr<><00> file_pathrms
r<00>mainr<6E>ns<><00><00> <15> $<24> $<24>1a<31> b<>F<EFBFBD>
<EFBFBD><17><17><07>&I<><17>J<>
<EFBFBD><17><17><04>j<EFBFBD>/A<><17>B<>
<EFBFBD><17><17><04>j<EFBFBD>/J<><17>K<>
<EFBFBD><17><17><04>k<EFBFBD>,<2C>EU<45><17>V<> <11> <1C> <1C> <1E>D<EFBFBD><10>F<EFBFBD> <0B>{<7B>{<7B> <11>$<24>+<2B>+<2B> <1E> "<22>!<21><19>Y<EFBFBD>Y<EFBFBD>q<EFBFBD>\<5C>F<EFBFBD> "<22>'<27>v<EFBFBD>.<2E>I<EFBFBD><16>d<EFBFBD>j<EFBFBD>j<EFBFBD>!<21>J<EFBFBD><11><19><19><1B> <15> <1C> <1C> "<22> "<22> $<24><06> .<2E><1F>0<>0<><1A>T<EFBFBD>[<5B>[<5B>I<>G<EFBFBD> <17> <1E> <1E> $<24> $<24> &<26>*T<> T<><1F>2<>2<>:<3A>><3E>G<EFBFBD> <11>+<2B>J<EFBFBD>,=<3D>,=<3D>+><3E>?<3F> @<40> <0F>H<EFBFBD>H<EFBFBD>Q<EFBFBD>K<EFBFBD> <13> <1A> <1A> <1C><18> <0B>#<23>+<2B>+<2B>-<2D> ,<2C>I<EFBFBD><18><1F><1F>%<25>%<25>'<27>6<EFBFBD>1<>#<23>4<>4<>Y<EFBFBD><04> <0B> <0B>L<><07><1B>"<22>"<22>7<EFBFBD>+<2B><1A>!<21>!<21>'<27>'<27>)<29>-W<>W<>#<23>6<>6<>y<EFBFBD>A<><07><1B>"<22>"<22>7<EFBFBD>+<2B>  ,<2C> <0E>!<21>*<2A><1C>.<2E>/<2F> <0B><08><08><11> <0B> <16> <1F> <1F> !<21>E<EFBFBD> <09>-<2D><18> <09>
<1E><1F> <09>&<26>M<EFBFBD> <09> <1D>e<EFBFBD>$5<>6<>7<>
8<EFBFBD>9<> <09> <1F><05>&9<> :<3A>;<3B>
<<3C>=<3D> <09> <1F><05>&9<> :<3A>;<3B>
<<3C>=<3D> <09>H<EFBFBD>U<EFBFBD>8<EFBFBD>_<EFBFBD>%<25>
&<26>'<27> <09>&<26>M<EFBFBD><08>H<EFBFBD>H<EFBFBD>%<25><08>/<2F>Q<EFBFBD>&<26>Q<EFBFBD>.<2E>A<EFBFBD>.<2E>W "<22> "<22>s <00>K:<03>:L<07>__main__)r3rMr<>r<>r<><00>pathlibrr<00>typingrrrrr!<00>PILr rJrKr~rQrPr<>r{r r8rer<>r0r6rr<00><module>rs<><00><01><04>

<EFBFBD>
<EFBFBD> <0B><0F><18><1D>,<2C>,<2C><0E>J<01><19><18>M<EFBFBD>
W<01><16><1E><17>
S<01><14><1E><17>
"D<01>"D<01>H7&<26>7&<26>ri!<21>i!<21>V8/<2F>t <0C>z<EFBFBD><19><08>F<EFBFBD><1A><>i <13>J<01><19>M<EFBFBD> <09>
H<EFBFBD>I<>J<01><><13>W<01><1F><17> <09>
U<EFBFBD>V<>W<01><><13>S<01><1F><17> <09>
Q<EFBFBD>R<>S<01>s4<00>A5<00>B
<00>B<00>5B<03>B<03>
B<03>B<03>B1<03>0B1