From 65852b7d71f713cc9f98d9c8c9be3d7d3c85b89f Mon Sep 17 00:00:00 2001 From: "Duc Nguyen (john)" Date: Wed, 31 Jan 2024 19:21:30 +0700 Subject: [PATCH] Add docx + html reader (#139) --- .github/workflows/unit-test.yaml | 1 + README.md | 14 +-- libs/kotaemon/kotaemon/loaders/__init__.py | 4 + libs/kotaemon/kotaemon/loaders/docx_loader.py | 91 ++++++++++++++++++ libs/kotaemon/kotaemon/loaders/html_loader.py | 77 +++++++++++++++ libs/kotaemon/pyproject.toml | 4 +- libs/kotaemon/tests/resources/dummy.docx | Bin 0 -> 36353 bytes libs/kotaemon/tests/resources/html/dummy.html | 1 + .../tests/resources/html/dummy_image.png | Bin 0 -> 5412 bytes libs/kotaemon/tests/test_reader.py | 20 +++- 10 files changed, 202 insertions(+), 10 deletions(-) create mode 100644 libs/kotaemon/kotaemon/loaders/docx_loader.py create mode 100644 libs/kotaemon/kotaemon/loaders/html_loader.py create mode 100644 libs/kotaemon/tests/resources/dummy.docx create mode 100644 libs/kotaemon/tests/resources/html/dummy.html create mode 100644 libs/kotaemon/tests/resources/html/dummy_image.png diff --git a/.github/workflows/unit-test.yaml b/.github/workflows/unit-test.yaml index ff1f2c8..82b9154 100644 --- a/.github/workflows/unit-test.yaml +++ b/.github/workflows/unit-test.yaml @@ -88,6 +88,7 @@ jobs: steps.check-cache-hit.outputs.check != 'true' run: | python -m pip install --upgrade pip + cd libs/kotaemon pip install -U --upgrade-strategy eager -e .[dev] - name: New dependencies cache for key ${{ steps.restore-dependencies.outputs.cache-primary-key }} diff --git a/README.md b/README.md index 5843cc5..fcc3477 100644 --- a/README.md +++ b/README.md @@ -26,13 +26,6 @@ pip install kotaemon@git+ssh://git@github.com/Cinnamon/kotaemon.git ```shell git clone git@github.com:Cinnamon/kotaemon.git - cd kotaemon - ``` - -- Install all - - ```shell - pip install -e ".[dev]" ``` - Pre-commit @@ -41,6 +34,13 @@ pip install kotaemon@git+ssh://git@github.com/Cinnamon/kotaemon.git pre-commit install ``` +- Install all + + ```shell + cd kotaemon/libs/kotaemon + pip install -e ".[dev]" + ``` + - Test ```shell diff --git a/libs/kotaemon/kotaemon/loaders/__init__.py b/libs/kotaemon/kotaemon/loaders/__init__.py index e564c5e..369242e 100644 --- a/libs/kotaemon/kotaemon/loaders/__init__.py +++ b/libs/kotaemon/kotaemon/loaders/__init__.py @@ -1,5 +1,7 @@ from .base import AutoReader, DirectoryReader +from .docx_loader import DocxReader from .excel_loader import PandasExcelReader +from .html_loader import HtmlReader from .mathpix_loader import MathpixPDFReader from .ocr_loader import OCRReader from .unstructured_loader import UnstructuredReader @@ -11,4 +13,6 @@ __all__ = [ "OCRReader", "DirectoryReader", "UnstructuredReader", + "DocxReader", + "HtmlReader", ] diff --git a/libs/kotaemon/kotaemon/loaders/docx_loader.py b/libs/kotaemon/kotaemon/loaders/docx_loader.py new file mode 100644 index 0000000..ed3df60 --- /dev/null +++ b/libs/kotaemon/kotaemon/loaders/docx_loader.py @@ -0,0 +1,91 @@ +import unicodedata +from pathlib import Path +from typing import List, Optional + +import pandas as pd +from llama_index.readers.base import BaseReader + +from kotaemon.base import Document + + +class DocxReader(BaseReader): + """Read Docx files that respect table, using python-docx library + + Reader behavior: + - All paragraphs are extracted as a Document + - Each table is extracted as a Document, rendered as a CSV string + - The output is a list of Documents, concatenating the above + (tables + paragraphs) + """ + + def __init__(self, *args, **kwargs): + try: + import docx + except ImportError: + raise ImportError( + "docx is not installed. " + "Please install it using `pip install python-docx`" + ) + self._module = docx + + def load_data( + self, file_path: Path, extra_info: Optional[dict] = None, **kwargs + ) -> List[Document]: + """Load data using Docx reader + + Args: + file_path (Path): Path to PDF file + + Returns: + List[Document]: list of documents extracted from the HTML file + """ + file_path = Path(file_path).resolve() + + doc = self._module.Document(str(file_path)) + all_text = "\n".join( + [unicodedata.normalize("NFKC", p.text) for p in doc.paragraphs] + ) + pages = [all_text] # 1 page only + + tables = [] + for t in doc.tables: + arrays = [ + [ + unicodedata.normalize("NFKC", t.cell(i, j).text) + for i in range(len(t.rows)) + ] + for j in range(len(t.columns)) + ] + tables.append(pd.DataFrame({a[0]: a[1:] for a in arrays})) + + extra_info = extra_info or {} + + # create output Document with metadata from table + documents = [ + Document( + text=table.to_csv( + index=False + ).strip(), # strip_special_chars_markdown() + metadata={ + "table_origin": table.to_csv(index=False), + "type": "table", + **extra_info, + }, + metadata_template="", + metadata_seperator="", + ) + for table in tables # page_id + ] + + # create Document from non-table text + documents.extend( + [ + Document( + text=non_table_text.strip(), + metadata={"page_label": 1, **extra_info}, + ) + for _, non_table_text in enumerate(pages) + ] + ) + + return documents diff --git a/libs/kotaemon/kotaemon/loaders/html_loader.py b/libs/kotaemon/kotaemon/loaders/html_loader.py new file mode 100644 index 0000000..c4b1c25 --- /dev/null +++ b/libs/kotaemon/kotaemon/loaders/html_loader.py @@ -0,0 +1,77 @@ +import unicodedata +from pathlib import Path +from typing import List, Optional + +from llama_index.readers.base import BaseReader + +from kotaemon.base import Document + + +class HtmlReader(BaseReader): + """Reader HTML usimg html2text + + Reader behavior: + - HTML is read with html2text. + - All of the texts will be split by `page_break_pattern` + - Each page is extracted as a Document + - The output is a list of Documents + + Args: + page_break_pattern (str): Pattern to split the HTML into pages + """ + + def __init__(self, page_break_pattern: Optional[str] = None, *args, **kwargs): + try: + import html2text + except ImportError: + raise ImportError( + "html2text is not installed. " + "Please install it using `pip install html2text`" + ) + + self._module = html2text + self._page_break_pattern: Optional[str] = page_break_pattern + super().__init__() + + def load_data( + self, file_path: Path, extra_info: Optional[dict] = None, **kwargs + ) -> List[Document]: + """Load data using Html reader + + Args: + file_path (Path): Path to PDF file + debug_path (Path): Path to store debug image output + artifact_path (Path): Path to OCR endpoints artifacts directory + Returns: + List[Document]: list of documents extracted from the HTML file + """ + file_path = Path(file_path).resolve() + + with file_path.open("r") as content: + html_text = "".join( + [ + unicodedata.normalize("NFKC", line[:-1]) + for line in content.readlines() + ] + ) + + # read HTML + all_text = self._module.html2text(html_text) + pages = ( + all_text.split(self._page_break_pattern) + if self._page_break_pattern + else [all_text] + ) + + extra_info = extra_info or {} + + # create Document from non-table text + documents = [ + Document( + text=page.strip(), + metadata={"page_label": page_id + 1, **extra_info}, + ) + for page_id, page in enumerate(pages) + ] + + return documents diff --git a/libs/kotaemon/pyproject.toml b/libs/kotaemon/pyproject.toml index f16e2e5..944e7e2 100644 --- a/libs/kotaemon/pyproject.toml +++ b/libs/kotaemon/pyproject.toml @@ -11,7 +11,7 @@ packages.find.exclude = ["tests*", "env*"] # metadata and dependencies [project] name = "kotaemon" -version = "0.3.5" +version = "0.3.6" requires-python = ">= 3.10" description = "Kotaemon core library for AI development." dependencies = [ @@ -55,6 +55,7 @@ dev = [ "wikipedia", "duckduckgo-search", "googlesearch-python", + "python-docx", "python-dotenv", "pytest-mock", "unstructured[pdf]", @@ -62,6 +63,7 @@ dev = [ "cohere", "elasticsearch", "pypdf", + "html2text", ] [project.scripts] diff --git a/libs/kotaemon/tests/resources/dummy.docx b/libs/kotaemon/tests/resources/dummy.docx new file mode 100644 index 0000000000000000000000000000000000000000..51eb960209c1bf81fb71b98feb780e8c9b840ec0 GIT binary patch literal 36353 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

細則 本社編(情報システム部)              分類番号 157300

2020.2

 

 

 

 

1. スパットくん紛失・盗難時の取扱

スパットくんの紛失・盗難の際は、速やかに停止依頼処理を入力するとともに、報告書を起票します。

NO

項目

内容

対象のスパット

くん確認

紛失・盗難に気づいた時には、対象のスパットくんの端末識別番号を確認します。

※盗難の場合は警察への届出も必要です。

※紛失・盗難の場合は盗難・紛失事故報告も必要です。

あいリクエスト(総務室(大阪))

『盗難・紛失事故兼個人情報等事故報告』

報告書の起票

あいリクエスト(システム業務室)-『モバイル決済端末(スパットくん)紛失・盗難報告書』を起票します。

停止依頼入力

モバイル端末管理ウェブより停止依頼処理を入力します。

※停止依頼入力により該当スパットくんは使用不可となります。

報告書の承認と

担当室への報告

所属長はあいリクエストにて申請・送付された報告書を確認・承認します。承認後、報告書をあいリクエスト(総務室(大阪))-『紛失・盗難事故 兼 個人情報等事故報告』に添付し報告します。(関連細則:本支社編11110/210060「紛失・盗難事故等の被害報告」を参照)

※日計処理の実施が「無」の場合本社担当室(システム業務室、

契約審査室、収納サービス室、損保サービス室)へ連絡する。

【関連マニュアル】 スパットくん・モバイル管理ウェブ操作マニュアル

 

<スパットくん再発見時の対応>

NO

項目

内容

端末設置組織の

確認

スパットくんの設置状況照会を行い、紛失・盗難となったスパットくんであるか確認します。

端末停止解除

入力

モバイル端末管理ウェブより停止解除処理を入力します。

※スパットくんの利用再開は、支社にて停止解除入力から2営業日以上経過してから利用下さい。

        【関連マニュアル】 スパットくん・モバイル管理ウェブ操作マニュアル

 

 

 

2. スパットくん故障時の取扱

スパットくんが故障した場合には、代替機への交換と故障機の返却を行います。

NO

項目

内容

故障内容の確認と報告書の起票

スパットくんが故障した場合は、あいリクエスト(システム業務室)-『モバイル決済端末(スパットくん)故障報告書』を起票します。

修理依頼入力

 

『モバイル端末管理ウェブ』より修理依頼処理を入力します。修理

依頼処理の入力により、代替機が送付されます。
その際、「モバイル決済端末修理依頼書」を印刷し、「モバイル決済端末(スパットくん)故障報告書」を参照して必要事項を記入します。

報告書の承認と担当室への報告

所属長はあいリクエストにて申請・送付された報告書を確認・承認し、システム業務室に報告します。

梱包

以下をセットで梱包します。

・故障したスパットくん本体

・付属品(充電アダプタ、コード、タッチペン、ストラップ)

・モバイル決済端末修理依頼書

※各所属にて保管のスパットくん送付箱に梱包します

 

代替機の受取と

故障機の送付

 

入力後数日でスパットくんの代替機が到着します。

受け取ると同時に、配送業者(日本通運)に故障したスパットくん、および「モバイル決済端末修理依頼書」を渡します。

※「モバイル決済端末修理依頼書」を忘れずに同梱下さい。

 

代替機の端末受取入力

モバイル端末管理ウェブより代替機の端末受取処理を入力します。

          【関連マニュアル】 スパットくん・モバイル管理ウェブ操作マニュアル

 

- 1 -

diff --git a/libs/kotaemon/tests/resources/html/dummy_image.png b/libs/kotaemon/tests/resources/html/dummy_image.png new file mode 100644 index 0000000000000000000000000000000000000000..6f0aa4f78db654c91f79c2e6878d6531f52a3f49 GIT binary patch literal 5412 zcma)=cQhMZ*uVuTp+;k`3er+Bno@fUf|eRDf}kQAJ9eqvmfEyMhtX1{wO%1qtW@o& zS!&ZNF=|t_KkfUS@9*!PJI`I`p8Gt{{oN=2mWcri6F(CT4GoJS5@Ak5LyJDEUt>IX zmb*54C!ZDc{yK)1jAtQ?(dE%u8-z!q{Ap-dTmK{gTM;FOhK94<5TR{(H+wZFJk4r2 zyhD?ja*h%93X+fzRSZecZnH^V&vd%bW+pn4^|81ZcP@+>5ccqWE8Ld2jH`UhZUle8 zz6{Yd<^#QB;Tsg;yEb-1aVW@Q;!@2E?AGA;&XVxV%(vXedwJBlK8lR#^17VAYo7m_ zGBx+!`k4C6@o~hS+D$D$hp*sSEULvZ3EKxKr_3p(%AoNlGTd{b9unvq~nzf`B6f{r!D%9XZRm+Up!E-APsF zCW_n_6)7PXTM{iyd-_aLlmEjx87-EGIOIoujdF z**8Ds%!z948RFYrV^EaT)nJ2AOt{4X{{1aS;nlbqx-j}MMm3r+u4i}hG`mB36Qg_p zhv~b8&;D6L&Z;>*n(sh0Jw0p|vWY@;7e%df)r4|kfOx?T?hR!p#PV;X6F=VC@>d0U z0UYj-vNjQ$gsGsZ1sqC6^5R|f8!_p?_3ufT!~Vt|3hnGMxI^*vy;}(~vush0S;ZFa zC!PlWJ}euwFBmlY;J=J`lNZLtSH8@!L;0zI$cHDsouBl`RmiXz^P)=27JVn7ja^;5 zcSqO5M46%iUfKqFsUEXn>8q06rd8GFqyykfVLkMR`|5}LUb75Hs69xHwIPmsN&5!} zdMIu8wx*vnk&3gp;z$?46vh$%w4^kQ3GC;QPnrRqK)ah$AG9b&SwX@2HuZE`40z5B z!tg1`@3WWw-t5of3PbWk^3_*BRB-!f<)+JNjxyix3Gmm`igS9ZIbq4u&i2%_<&j$CBS1(hXqrd@v-yTe!qy|{W%vi zi5I@vx}7+A;q`JtI5EG3LpmG&jqUd|(;+Fbo1RDFZUcB=*!?&dkmVv6NrQS%E3hP! ztzWP*9yb{R$D~Cq65yT)X1^Pn0jZ|CEvxoW!Bo1pnaBbOQ*{jKJs0{I`M@Lh*<0I% zK8~PV<1}n(l!FNk%4)l(8A8eg6fG3zxn2%k0LqJNpl=^u=B&!xi`czP;dc>C;h4*( zxFO56w=3?9vP#8|gidf}ptsmKwW7bkKicvl6J^pQMx*F;8Oh$-G7UA0Dm656i*8;aQz_B*w}i}In!D+I z>6lWU;7p?^%MugHl}DPsOyot|Qu{7g-H|3NaP?1Ke3binSrEgR4|_vYDECX!frr1I zayII#bEc=P12CXDAVsu%vWsgs9Z}S zioH&A1+<~%I>ss$jgkuZP$4aKwG(}Ze)hVvlz`g)`3q>sw`$M_^5A*nm;Jl3N8V6G zQPDV?PNl!%#HP*cjp`cT{mYLP*(+)ZA0^JYiP?r#{2S0LW?#xG*yJqiwd zLuFKQxdI%MY!P31cckjmxGDsRy~1gM>!?G)1ugbBSqr?n>}ck+jH{E)|KJXjolC1i zRf|tPcSLkbzlaE`d@0X%Jh1L{J(Ki|TQxFQ(MPDL;_sR4mb_oTd+I)!c(0$$NX%bqPT{vc62+>GRyKL9|3?1zDOB?Cn- z)IMn)=KW5(TtNNBPGE0zT|%oi$w<~$cJ8uiefQ=8`=}Z|z>Hka!Z3#3D}Vg#&0RsD z%PK_-@jgehkk`vAh+3MLvP4R1o%(9BS*F7MxF_+FC3h_^qi^I#a|OY+z_zt5HF>+2 zMy-MH@qSIslp%=^i+=o%WvWN5j0^KUUJOUpA#&IYG91pIgGAeC`6#m1ZdF=dCZ!M# zHtj;(2CmafLnqSoAPcuk?kRy0Vo2x8mRUCc zzGK4^Kg;CoSDV4(e?bGYYl4X0Q8g?@EZMx9&et3t$=7nOThj4i=Pt~cZGNkO- zH!RXe!{+Z6Lvyww7w_wd!}L99)fLr+jIsH!hSv(JlE#VU!!FEe?4`%OSf<sDep2+Cc_fc*a3d0;q+-WtD`ljkc$yvB*rXF^J~%1mMM;WCEA z66%rileLkzM!~(ZwOGV>3o7Ybr#nwBl}BPt!Arjn3j5_H+cizIfoI(Ex~q_SZIV)4>%5i6tH2&EXl5bNMRVpGv}HR8R`yVnVJXP%g;@ zmKfgY#pzJu=oMae$+rwUpl@pYRR>!BeRid2Nrn{rinpx)bg+0WS;9%}vn^q7$-VHX z1r16~?@4}1`68sd)zChmx-H%(P~TQuyGV-?z27FeBHiz{h{DFVS|Ft!sP=!QE98r9 z(v*L5RosIMO|{Wp;Cy36b*&<75jxRV4-0CrN*kk z8-?||(ylUK+O{TWJup7@9S$=n<6)6NNhdDayBOL(+CDVe*rS2hAGH1X#ZR7RG_uu?nZc_XsVImPJ!?%9cn`m!eS;;G~ z)%!|8N*!2FDkncU1De~Q(|0D))&t7OX<3!>wil1%J{7N)1Z!nhx!1_xBWih(ePxEM zMbwG947~iogs)lIegABgKMxvi#MV!+ql;qP+5J-~IreO=*UC(*hd-23o@Bu`*X;xN zIsOlb$=W&pc(QT-g<`>?lrt;#mzkI7{*S5w|4)oQlY{@5ob5~#|B!Xc5X0GW+2hZE zVWb;5Mor`pB|HxvF)Y^I;j}aV-A#s}ynC#}7gu^e+V@vTl#l?+Bzq23j(EQ2ynob? z1vU#%G}2EE*qVuxVx`Mvc>AT_z(NbFBt?i1iRMpB)ox3fW~|c(&Eqt=e>d#|mkt z0iPG9f!@X?FR}2>N+>X8d$Xna-hl5inWulf&&A2vGJ*|^IZnUy`pKZxe9$cRaMC)z zM0le(XGHW&Ei%*(~+ z4?Px*=9$Sy#mAR+8rCYwmyIV%JxwixT;n(8Mc{!?lDz-2cyj3DJ5|$z^+COj zWHB<|yQej|?fD+G2Q7=V8}GxLz$h3qneI~inv#jz+0B|HXUA|iP}5#XKvvF?y`2ie zbGLB9dn^T=H{vFv`krEzs3v8yXobDZC1Ko$D1p#1Ds{Nu(s>9xD_>y7GydM{D z(3xn(6n-u*aH59r|8@~-pJcM9jlp<8Q=Tx7uA6dNYw#*inDr`8r?H5F9(UiuS6>!8Uj8x zbVW+DXDe7gytk47*K0rftA+eI155R*hfOp+ddv$0SFSF| zU0G$CaMKJ1_>56mNp?*!i?-3FK@*-0IcCSK;F1{)2}B=KZvPq^z%Z^YNlR>;I8$c$hwEZm`7>PA<8kg{ z&r{2g5RFWJ58I9QwKlCqHYe!R)aN~yq>sMYTYt1#g?-XUQPg*ni&8FA&{O)@yW3X$Q-Wl7FQHEF{vwG_dhlhs5@=N?`-{M@ zeGquhs2N#6OrM6nm)@(sflilXAr_Xo(OD4*5zAqfe}+ z^|l7v?vI#`zptBKE}W}RsN=CqADwWTueCdrKVvHiQl@`t14sNOtzU*}iiPr-TfqOF zZOR-cR*5O%)WQXgqHAC|Vnj)L-yA;W+vp?5nH?(3@^ngql_nx&&Yh?ZcT999aD2E3 z5=x8O4+PE$MQkN!{NhQ4T=2gRPLE_ef^P)Q){}iKj*se&)vidsq!*-#kR`>A zbsp4;ytk(Oe(9A2VeVb(6bh}+IHm{YH)Hoxk~AXdjzl&vJ2jUS*7V+mre^VW+(beu z5PM70Up5)cq$Y|j_i;b2g#qu*bjOg7ec!LuM)$pzRyny8=&96I!#S6~72ZiwpsC|I zEpNSUA4gAhv^k+kSa}hL_28Sp2rFF5x$W zz6c=0q;lTHV0m=XQrIHxlCxOGg-O$o`J15uy^8%htYAY}0VW5T9sNCa!ERa0dw3tY zBdBk>=e$^TagOb48a91AW-?$qEl|86=UGZT6C4ep{J8wSDxeLHHl?X3G=KDxX&*GA zLBAmze{i0=QeI?jWz;eRFZ|_aGis!l`LBO>I4EoC!KF7gN&k#z=rnqVK464fUKY&^!wG?P zF7-J}7))jT9uj)qfcBcr(yu$!>R|M#i_0$U)XQpt>MtW4@UjuA)~vOaLTki19%uZe zxXl|?c^qY{dDtD*PZ3R7zCSArrxlK*x<!Ld5LL!%5RKTGL{)O4^ogPDDg;&EZ_&?z)LV;)KVRgqPuk z^f08rSZ2Lb$dy-93z#(o_p`#qi$4>#te-SEv5&96t`{I$#T3FKRPh1?TcCnn4&RQ; zrLMpr5sK;c%yJ&XnmDD4pszuX6@j|hRxgy^dR*-i$fFi5e{6UR zG+{bS=}*cKkp%-mOdX;yiqEamem?To;ywlDLZxIx!;yv|WbbBY&Rs~s=YZ-?Sw!N| zCRCO+tb18X*9RCgy