From 651735100b9e2f1a99e61ebc3884cd4b4fc0ae46 Mon Sep 17 00:00:00 2001 From: PaulKalho Date: Tue, 9 Dec 2025 17:54:02 -0600 Subject: [PATCH 1/8] chore: remove unnecessary files --- dtm.pkl | Bin 1354452 -> 0 bytes vocab.pkl | Bin 136735 -> 0 bytes 2 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 dtm.pkl delete mode 100644 vocab.pkl diff --git a/dtm.pkl b/dtm.pkl deleted file mode 100644 index 0ea1d8894c78892ddc2fd6a7d5f9257910fef57d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1354452 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%0ACCl=Y=b-mQ6- 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 Uvj5YMAC-Ro!_R;H7ytbK2iH$wH2?qr diff --git a/vocab.pkl b/vocab.pkl deleted file mode 100644 index eeaed7f9adadb3a4187af80b69453b1ae927883b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 136735 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 z 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

q>JE~w_1vGeq1n{Jox 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

b(H-)Kk{%O4fzObBZSt54J9v7!lOlR_HWJ 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 From 1832c0ac4628640175223f7656ac44a7a1a0d2de Mon Sep 17 00:00:00 2001 From: PaulKalho Date: Wed, 10 Dec 2025 15:04:12 -0600 Subject: [PATCH 2/8] chore: add files to gitignore --- .gitignore | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.gitignore b/.gitignore index e15106e..715e0fd 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,6 @@ +dtm.pkl +vocab.pkl + # Byte-compiled / optimized / DLL files __pycache__/ *.py[codz] From 2dc515cb999ee7e770bdbe712e50eeecb958493a Mon Sep 17 00:00:00 2001 From: PaulKalho Date: Wed, 10 Dec 2025 15:40:39 -0600 Subject: [PATCH 3/8] fix: use absolute path for file downloads --- .gitignore | 3 --- main.py | 11 +++++++---- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/.gitignore b/.gitignore index 715e0fd..e15106e 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,3 @@ -dtm.pkl -vocab.pkl - # Byte-compiled / optimized / DLL files __pycache__/ *.py[codz] diff --git a/main.py b/main.py index aae6284..a1cfb91 100644 --- a/main.py +++ b/main.py @@ -47,6 +47,9 @@ class LDATopicModeling(EnvSettings): LEARNING_METHOD: str = "batch" N_TOP_WORDS: int = 10 + DTM_DOWNLOAD_PATH: str = "/tmp/dtm.pkl" + VOCAB_DOWNLOAD_PATH: str = "/tmp/vocab.pkl" + vocab: VocabFileInput dtm: DTMFileInput @@ -70,19 +73,19 @@ def lda_topic_modeling(settings): logger.info("Starting LDA topic modeling pipeline…") logger.info("Downloading vocabulary file...") - S3Operations.download(settings.vocab, "vocab.pkl") + S3Operations.download(settings.vocab, settings.VOCAB_DOWNLOAD_PATH) logger.info("Loading vocab.pkl from disk...") - with open("vocab.pkl", "rb") as f: + with open(settings.VOCAB_DOWNLOAD_PATH, "rb") as f: vocab = pickle.load(f) logger.info(f"Loaded vocab with {len(vocab)} terms.") logger.info("Downloading DTM file...") - S3Operations.download(settings.dtm, "dtm.pkl") + S3Operations.download(settings.dtm, settings.DTM_DOWNLOAD_PATH) logger.info("Loading dtm.pkl from disk...") - with open("dtm.pkl", "rb") as f: + with open(settings.DTM_DOWNLOAD_PATH, "rb") as f: dtm = pickle.load(f) logger.info(f"Loaded DTM with shape {dtm.shape}") From 5a5ff9c6d809b343be02befb438752291bc038ea Mon Sep 17 00:00:00 2001 From: PaulKalho Date: Wed, 10 Dec 2025 17:00:44 -0600 Subject: [PATCH 4/8] chore: update cbc to match definition --- cbc.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/cbc.yaml b/cbc.yaml index 8b9ea60..99305cf 100644 --- a/cbc.yaml +++ b/cbc.yaml @@ -9,6 +9,8 @@ entrypoints: MAX_ITER: 10 N_TOPICS: 5 N_TOP_WORDS: 10 + DTM_DOWNLOAD_PATH: /tmp/dtm.pkl + VOCAB_DOWNLOAD_PATH: /tmp/vocab.pkl inputs: dtm: config: From 1da836cd29526b8e3b1a151dfebfaddda07e0530 Mon Sep 17 00:00:00 2001 From: PaulKalho Date: Thu, 11 Dec 2025 15:39:23 -0600 Subject: [PATCH 5/8] chore: update cbc yaml --- algorithms/models.py | 8 +++ algorithms/vectorizer.py | 102 ++++++++++++++++++++++++++++++ cbc.yaml | 37 +++-------- main.py | 114 ++++++++++++---------------------- test/files/dtm.pkl | Bin 1354452 -> 0 bytes test/files/norm_docs_dump.sql | 34 ++++++++++ test/files/vocab.pkl | Bin 136735 -> 0 bytes test/test_lda_entrypoint.py | 54 +++++----------- 8 files changed, 207 insertions(+), 142 deletions(-) create mode 100644 algorithms/models.py create mode 100644 algorithms/vectorizer.py delete mode 100644 test/files/dtm.pkl create mode 100644 test/files/norm_docs_dump.sql delete mode 100644 test/files/vocab.pkl diff --git a/algorithms/models.py b/algorithms/models.py new file mode 100644 index 0000000..598c980 --- /dev/null +++ b/algorithms/models.py @@ -0,0 +1,8 @@ +from typing import List +from dataclasses import dataclass + + +@dataclass +class PreprocessedDocument: + doc_id: str + tokens: List[str] diff --git a/algorithms/vectorizer.py b/algorithms/vectorizer.py new file mode 100644 index 0000000..105a207 --- /dev/null +++ b/algorithms/vectorizer.py @@ -0,0 +1,102 @@ +from typing import List +import numpy as np +from collections import Counter + +from algorithms.models import PreprocessedDocument + + +class NLPVectorizer: + def __init__(self, preprocessed_output: List[PreprocessedDocument]): + self.documents = preprocessed_output + + # Frequencies + self.token_frequency = Counter() + self.token_document_frequency = Counter() + self.ngram_frequency = Counter() + self.ngram_document_frequency = Counter() + + # bow + dtm + self.bag_of_words = [] + self.vocab = {} + self.reverse_vocab = [] + self.dtm = None + + def analyze_frequencies(self): + for doc in self.documents: + tokens = [t for t in doc.tokens if " " not in t] + ngrams = [t for t in doc.tokens if " " in t] + + # token frequencies + self.token_frequency.update(tokens) + self.token_document_frequency.update(set(tokens)) + + # ngram frequencies + self.ngram_frequency.update(ngrams) + self.ngram_document_frequency.update(set(ngrams)) + + def build_bow(self): + bow = [] + + for doc in self.documents: + entries = [] + unique = set() + + for term in doc.tokens: + if term in unique: + continue + unique.add(term) + + is_ngram = " " in term + + entry = { + "term": term, + "type": "ngram" if is_ngram else "word", + "span": len(term.split(" ")), + "freq": ( + self.ngram_frequency[term] + if is_ngram + else self.token_frequency[term] + ), + "docs": ( + self.ngram_document_frequency[term] + if is_ngram + else self.token_document_frequency[term] + ), + "filters": [] + } + + entries.append(entry) + + bow.append(entries) + + self.bag_of_words = bow + return bow + + def build_vocabulary(self): + all_terms = set() + + for doc in self.documents: + for term in doc.tokens: + all_terms.add(term) + + sorted_terms = sorted(all_terms) + self.vocab = {term: i for i, term in enumerate(sorted_terms)} + self.reverse_vocab = sorted_terms + + return self.vocab + + def build_dtm(self): + if not self.vocab: + self.build_vocabulary() + + num_docs = len(self.documents) + num_terms = len(self.vocab) + + dtm = np.zeros((num_docs, num_terms), dtype=int) + + for i, doc in enumerate(self.documents): + for term in doc.tokens: + dtm[i, self.vocab[term]] += 1 + + self.dtm = dtm + return dtm diff --git a/cbc.yaml b/cbc.yaml index 99305cf..a98f0ce 100644 --- a/cbc.yaml +++ b/cbc.yaml @@ -1,41 +1,24 @@ author: Paul Kalhorn -description: Compute Block that offers Topic Modeling Algorihtms +description: Compute Block that offers topic modeling algorithms docker_image: ghcr.io/rwth-time/topic-modeling/topic-modeling entrypoints: lda_topic_modeling: - description: Sklearn LDA Topic Modeling + description: Sklearn LDA Topic Modeling envs: LEARNING_METHOD: batch MAX_ITER: 10 N_TOPICS: 5 N_TOP_WORDS: 10 - DTM_DOWNLOAD_PATH: /tmp/dtm.pkl - VOCAB_DOWNLOAD_PATH: /tmp/vocab.pkl inputs: - dtm: + preprocessed_docs: config: - dtm_BUCKET_NAME: null - dtm_FILE_EXT: pkl - dtm_FILE_NAME: null - dtm_FILE_PATH: null - dtm_S3_ACCESS_KEY: null - dtm_S3_HOST: null - dtm_S3_PORT: null - dtm_S3_SECRET_KEY: null - description: Pkl file of your numpy representation of the document-term matrix - type: file - vocab: - config: - vocab_BUCKET_NAME: null - vocab_FILE_EXT: pkl - vocab_FILE_NAME: null - vocab_FILE_PATH: null - vocab_S3_ACCESS_KEY: null - vocab_S3_HOST: null - vocab_S3_PORT: null - vocab_S3_SECRET_KEY: null - description: Pkl file of a dictionary that maps all words to their index in the DTM - type: file + preprocessed_docs_DB_TABLE: null + preprocessed_docs_PG_HOST: null + preprocessed_docs_PG_PASS: null + preprocessed_docs_PG_PORT: null + preprocessed_docs_PG_USER: null + description: A database table, expected to have the doc_id, and tokens (list of strings) + type: pg_table outputs: doc_topic: config: diff --git a/main.py b/main.py index a1cfb91..7e396d8 100644 --- a/main.py +++ b/main.py @@ -1,18 +1,22 @@ import logging -import pickle +import pandas as pd + +from scystream.sdk.config import get_compute_block +from scystream.sdk.config.config_loader import generate_config_from_compute_block +from pathlib import Path from scystream.sdk.core import entrypoint from scystream.sdk.env.settings import ( EnvSettings, InputSettings, OutputSettings, - FileSettings, PostgresSettings, ) -from scystream.sdk.file_handling.s3_manager import S3Operations from sqlalchemy import create_engine from algorithms.lda import LDAModeler +from algorithms.models import PreprocessedDocument +from algorithms.vectorizer import NLPVectorizer logging.basicConfig( level=logging.INFO, @@ -21,16 +25,8 @@ logger = logging.getLogger(__name__) -class DTMFileInput(FileSettings, InputSettings): - __identifier__ = "dtm" - - FILE_EXT: str = "pkl" - - -class VocabFileInput(FileSettings, InputSettings): - __identifier__ = "vocab" - - FILE_EXT: str = "pkl" +class PreprocessedDocuments(PostgresSettings, InputSettings): + __identifier__ = "preprocessed_docs" class DocTopicOutput(PostgresSettings, OutputSettings): @@ -47,50 +43,52 @@ class LDATopicModeling(EnvSettings): LEARNING_METHOD: str = "batch" N_TOP_WORDS: int = 10 - DTM_DOWNLOAD_PATH: str = "/tmp/dtm.pkl" - VOCAB_DOWNLOAD_PATH: str = "/tmp/vocab.pkl" - - vocab: VocabFileInput - dtm: DTMFileInput + preprocessed_docs: PreprocessedDocuments doc_topic: DocTopicOutput topic_term: TopicTermsOutput -def write_df_to_postgres(df, settings: PostgresSettings): - logger.info(f"Writing DataFrame to DB table '{settings.DB_TABLE}'…") - - engine = create_engine( +def _make_engine(settings: PostgresSettings): + return create_engine( f"postgresql+psycopg2://{settings.PG_USER}:{settings.PG_PASS}" f"@{settings.PG_HOST}:{int(settings.PG_PORT)}/" ) + + +def write_df_to_postgres(df, settings: PostgresSettings): + logger.info(f"Writing DataFrame to DB table '{settings.DB_TABLE}'…") + engine = _make_engine(settings) df.to_sql(settings.DB_TABLE, engine, if_exists="replace", index=False) logger.info(f"Successfully wrote {len(df)} rows to '{settings.DB_TABLE}'.") +def read_table_from_postgres(settings: PostgresSettings) -> pd.DataFrame: + engine = _make_engine(settings) + query = f"SELECT * FROM {settings.DB_TABLE};" + return pd.read_sql(query, engine) + + @entrypoint(LDATopicModeling) def lda_topic_modeling(settings): logger.info("Starting LDA topic modeling pipeline…") - logger.info("Downloading vocabulary file...") - S3Operations.download(settings.vocab, settings.VOCAB_DOWNLOAD_PATH) - - logger.info("Loading vocab.pkl from disk...") - with open(settings.VOCAB_DOWNLOAD_PATH, "rb") as f: - vocab = pickle.load(f) - - logger.info(f"Loaded vocab with {len(vocab)} terms.") + logger.info("Querying normalized docs from db...") + normalized_docs = read_table_from_postgres(settings.preprocessed_docs) - logger.info("Downloading DTM file...") - S3Operations.download(settings.dtm, settings.DTM_DOWNLOAD_PATH) - - logger.info("Loading dtm.pkl from disk...") - with open(settings.DTM_DOWNLOAD_PATH, "rb") as f: - dtm = pickle.load(f) + preprocessed_docs = [ + PreprocessedDocument( + doc_id=row["doc_id"], + tokens=row["tokens"] + ) + for _, row in normalized_docs.iterrows() + ] - logger.info(f"Loaded DTM with shape {dtm.shape}") + vectorizer = NLPVectorizer(preprocessed_docs) + vectorizer.analyze_frequencies() + vocab = vectorizer.build_vocabulary() + dtm = vectorizer.build_dtm() - # TODO: Check if dtm and vocab is of correct schema lda = LDAModeler( dtm=dtm, vocab=vocab, @@ -110,42 +108,6 @@ def lda_topic_modeling(settings): write_df_to_postgres(topic_terms, settings.topic_term) -""" if __name__ == "__main__": - test = LDATopicModeling( - vocab=VocabFileInput( - S3_HOST="http://localhost", - S3_PORT="9000", - S3_ACCESS_KEY="minioadmin", - S3_SECRET_KEY="minioadmin", - BUCKET_NAME="output-bucket", - FILE_PATH="output_file_path", - FILE_NAME="vocab_file_bib", - ), - dtm=DTMFileInput( - S3_HOST="http://localhost", - S3_PORT="9000", - S3_ACCESS_KEY="minioadmin", - S3_SECRET_KEY="minioadmin", - BUCKET_NAME="output-bucket", - FILE_PATH="output_file_path", - FILE_NAME="dtm_file_bib", - ), - doc_topic=DocTopicOutput( - PG_USER="postgres", - PG_PASS="postgres", - PG_HOST="localhost", - PG_PORT="5432", - DB_TABLE="doc_topic" - ), - topic_term=TopicTermsOutput( - PG_USER="postgres", - PG_PASS="postgres", - PG_HOST="localhost", - PG_PORT="5432", - DB_TABLE="topic_term" - ) - ) - - lda_topic_modeling(test) -""" + cb = get_compute_block() + generate_config_from_compute_block(cb, Path("cbc2.yaml")) diff --git a/test/files/dtm.pkl b/test/files/dtm.pkl deleted file mode 100644 index 0ea1d8894c78892ddc2fd6a7d5f9257910fef57d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1354452 zcmeIb&8{s=c3yX>`%^`^+!GAgPv92erWh4kJ?C-3(A~G{FGct2jqrN>O=I_YJTx;#0d;ZTK{?otz?$`hQ@xS`JfB3im z?jQf+U;fSC|Nd|P;@|$m|Ne)6^RIsY`+xP1KmYM}|MK^L`!|38cmKy9e*X`D^M{}R zYx3a|NiIy@c;bk@ckeE?0@+Aum0+<{^$SipZ@os|L-rq z`@_$F{U83v|L*_&7a#p7XA}6dj|NiD?#ucTxFP}WqgL^=nRT*Ah5}0QXC)8h&WY-+c*4 z;JE~<*JGX^=yM4|$cxS}t360S0uqpb1SIfG0{pzbH9hZJ(DY{=&Hc4D z`BK;BGfo0a2vp~e^&dZyVUN-!J?gui0M~7MCNsPv0O!zeO90l25Wk8=0w1i0Qg z2kU6=YfC@^5_l>Bo{Q*HIm|wH_4#!6zU@x}5}1zw&->K*I_>Ky=fJL_Tl-a9u8+!- zd9@`V0SQRp90EMoQ_tyUTvg_2WyB9{`MWQHH3T?cscUi>BZ0FB@co&k^;_q@wZF8U z{t}SDdIH>!tqk~~Er0hVAc64&s@G-i%Sy+0V#X&D;CwxC_OEA#1N!yeh_CtY8_cUL{VIfCMBU0SQPz0!e`P z6S=b_?kz0br>A^{0VKmro@mO%A-$2$6Lq$?7T00g{GAn{t| z^P0=3)t^QsT9}9HiY^Rqx|0`e23*vE`6}HyR_5KB@9OdJsOD(xS8=Z2lR)b{u#b+S zK)%#b`OPDNGYIhe2w6MNdD`iZoqpKtpRKd?vy=z@r!LK-zXT*80SQQ;hXAiPJ-)yA z;E(pk=_dgRY$w2dm%2T(86+S92}ocj0zBtiJ>iG;e*b4_-j@H}_TdOubnBetLAT~J zUIJ$lSbL6%L(iPS+7gg}1SBAVqX_W2mpZyWf6tqB_IiIiy8l`8Ra}$vto_^9X98Te z&#TL=%#-%=jB`coJrDWOt<#Unv$hZFqigfD;&`67{OF_7R=oQXkia|yypQL(7Iq>5 z2}nQ!&mrLJ?{luTlS%*r-uIADB_II_NI(J-IEuj8??0&DnioH`<^S~ky*QBha=c5079m_ef@mD1v0SQPz0uqpb z1SD_ydzU@x}5|DrdBp?9^Je5G}_g9|E#knOQf#(w7b8PB!i8%Qy z0(m~LU-@oXtMamrF0HXPZfTvZ{`84%&DV;jPOrA|xi0|;NZ@V+cs?$ji#T*?y#5l9 zz;Oh)PtoHlTWJdcu2<@ooW@E(0uqqG{Rr^$psP>TdcAAyUwwZ2mw*In0^I-U!8)4z z+V>{F>mS!2&8b;Ob6@+O1i0R*_nfw#D(AYL|1fr>Zl==&`0N+B5|F@L1bBT(ovTZ`k-%#LoZHvCu1Y`x5|Drd?m=Mf>)qP8dr-UH6xHABa2+e% zIw^TG59?^|YfC@^5|DrdBp?9^NML3HypK(txo3N86X1HbJzskekG}SDRRR)_fCMBU z0SQPz0&^4K{cP&oUE7@mBrr39e4b#>-1DBj{rHg_4!zpjQ}uJ<-uS)!TJtWgU*%hx z2mjgm(Wfc_2`neT^CBZzM{{3W0uqpb1SB8<2}nQ!5*SAy-*;o9<0_fyNCKn3pTc=S za~9Uo+}C~@)3WT{WkbfCTP9pn8t6j^?bqZ(tuyKi1LQ*Oq_;Bp?9^ydqG& zZm^ENigj&10$#8Au8AF;N8pFf()e-zpq=5mNnjHJ&RgoHqzi)2s=J^?T_tcj0q&Ed z8lfI~R9)*xU?u`jKmXPItfMnsGkdu&0e(KQbVAN4x-?#Y2}nQ!64;l(QO{@Up!-f` zb_qy80`n7C`#dBLoqtk0l)!TcRQDz8=yQlTsRSe-0SQPz0uqpb1SBvU0X~ zNI(MjBk=U!H<<0Y%kRsl-tXi&kpv`gH3Dm2FOHsbw&!}zKYM@KueJmva9sjCZ?;ZA z9&~HItHoDyvyNVEF8jSVfl=p@Jm|ftIh_O~AOQ(TKmrnwz*PwF{)m>lI5a)0_4G@dI5hXQuR(z8ms)j?U+%Mx=DxNBBp`vU z1bDuT)~$Vwif67?KK#&@zx&$=z&UkWR->;*!0UgtEB5SuIj_&AP)`pZwDxpI0uoqD zfZr2X8*iKhoM=wF98WiU@L)q?qF}tyLUW&rtV$$>iK(lr62ay=eK_e zNMJq!JYQ1h>(q|ECXm+)`)i*&e!XB0lU)7bCx}O ze`j%_u6!V&NecCDp$%rB_II_NMH>CUgy@t8Y2M-NMI%c)%UH|_Q>-QZRNoa zZTYwM$%D51-Iss_&LhD0uh(|KeZEwC>yfwRk009dzuG=?rCx0g`;~wM`U&Lyj@_R@ zPYLuB@O<^N((`-*oY&OzJF^1`NI(J-kbndvAb~p)$oHMtcbs*Pnc$VWM=f(oKmrnw zz!w7f+{OOl@&2pIpLO(omj2xz`dvSH(g*r!^M!$5r7uD*vBW%=Xx1igLx6KvX=~7o zTk4 z+I+@IU?c&~W9rBn=8}K}Bp?9^NI(J-IG;ei-@`t?Gdqxg1ny2?*5?g>T*qFO znFJ*8Tmsc|qL&DtlY9Nw`emPM^AI;WA9?pu`fcUM53T&!Pp$l2mw*J;6W~6}4Apx2 zX+MJi=OOhO(_d%Gygu01nZQmZAc2Yi_cL1gxh??-+?N3Nf9h-#XMfmB`y?)PX&(Le zCBXIBx5~HKsf&K=;mQ>V+~xXJbFhwH;hNav{Ry0X9;uJspSTm=i2&y|HD_eMTCeug zf3!WSE_u+=eVR`K5|DrdByc1FUe8ji9`MV3*3sP8mVg8#u#`acJYgMOnpgjQ32n~y;9qHFUV6-S@wQFX6c=WI?{KkXLR>c6M3G*7EeYkzIMwQbe*_a zw0d1<{(|I_*1SB8<3EYDKuWPAi zO;`27dev8JzZJJOzRG*_I{l{}-G}ugAOQ(TKmrnwfCMCP1p@iL8GG;EkE)Y%P`9NS zr+qI1{2X@gsi>3ZZST6H^3(UIeCBx;fwkv{IP_W6oOUUJrRM~HbZNc2`okl2uX(c$ zc2%#nU&XmD0SQPz0>=>WIeiRgt4Kfs5|F?#1bAITkEwc}Dx70E{RnV>Wd+vJ+}D=C%mjMREq>_CGufL2 z))J`BH|yxy{KSpQLq1gkXAs~Vr=HQv6KcYF>8u%-cIIpCr$07vDC_E+1h`JAb9QT2 z5|DrdB+yGBpX=DY@%k+z0N>PQS@ga;0nP_=Vxz3961WqA*1yZZ`A@wQgD1_xblXW!rXS1t5Sx0B<+kUQ1p!ZzihhBSXyO)3jz9ztZ zo%*%U9lvJY)@=Bpl|TEvTID%*k!iZ_f3ldDB1hVW;2THg!|?t~)A!_KiI% zzj-7ufjI2+#O8-{;j&-_WXm8wI{YG&h4|-Q#&NVlI zQRk05=+>#ple#tU)_D5an#cIh1mKE(-qqSlpqDFt=+?T%OJEBD&SC1(oWw7UTk208 zbZNZ)5|F@k2ymaLZk>R9Tk{zIngD!LUwgZHcLJP)oRf7l_q8P;0SRm+!1E<_Yu;Jn zb1v*z`Ww|p_49t_MYA63Xzt&|UOOLg=v{a`We)BOt{?i8`Pa?~Cvi@$> z-|$2)I?k}R;eZZHJUCJQUTCIY+CTni<~z!!K6+GL>qtNX5|F^$1bAIYoxAJ#x`SVK z#yXn&XWLa@tfOc5IZOSD2kYo8{o02FBrqQVo)f9_b-J#joC|whHlrjU0SQQ;mjK_7 zPJf=mm8QS81SB8<2}t111bjWb^VM}W3G7S2=f}Q$%`Sl@1h^kFhIKUewIv{d>L$^8$ z^GiSiM-ix=XRM<~^>b96YA)8%qx!Lq1SD`i0q*v2+kEv=E2}nQ!5;&Rw&w2Fd`qq+N`S*kidKdxL?uvI96&U(&J7rhHl=a9fV0(+fz@}lp0a8Cjf zkbndvAOQ(TKmrnY76Cse-1~ZSeN*o}wbMyJ0up#00iN@%$?-#5{_fw4!0gw(`n_xV zM$ft`)JM4vdNMH>CUjNX%Z`R~A=6M7-H%yL=vVN9wzOz2- z^oge5)9i`^>*&+CIIjdGAc0W??*1Ij`O+T6(L55kA_4A))GN+n&-W*g=M?+ylQU=P z-RE{b2}nQ!5_l#7UhhUtPd;>1Uh_ym0uqpb1SD`Af$DXfb@aH7tRw*mNMIcSo>!^s zvKb|Tu>?4mnU!@k_n&6NA@yk-oc9_8IH!AeOP$oc>zZEzzYyTu-Gv78pm&*T>l`f} z?4w)j^~V3y>v*ysT+ox-*<3#7NPBaEj|6+=UD_Xgpljn>aclFp^13g9ClRRr4yd}n zs`b5?Q7?6EJ@RBc>uBz`Y~oT|aqde%0^lU{QY$n%RmXSZLvYW2xJ`X%ySU)_DadtEK3k$?mwAOQ(T;LZeiUzR$0 z=FE>hy3VM4^p`p+zj-8Z2Ljw5qh=u=Ix4SuoI}=bJ?F<|4MtyX60TW8#0R*c1hjsJ;C>-&|1gdk)I(lOS zjwS&KOisY((Bv0rPzk5mJq1Eud^h_*S=h* z)USQ~S^^TdCIRm2t94J`=+^#6<=NVY@e+`L1SB8<2}nQ!5;%hZ-$z*c{r@w1zGKa& ze=e!!uhv^(W2EHJ|YkkiZuLJpZ`A zD*Y01>{s+Nx+;0m(fQ3M0SQRpt^{~)rtUQ_buvHeXzpuEKmrnwz&QkXE~lQ;jaBbP zfOB>BT-it3XZL6QWdyi>smrpg_s+W5>oXcDf#V7A^ZcVLbHAXy_3=kDj&(HmwIv_{ z2}nQ!5_k@Qt?vhjPkjzSC*6}ko-6D3hFFOIKh zMhToxfODRDerI+d0SQRpHG!W#meG8Ewd~hf@3UIXzjZ?LZp||){_K9L`mCd)<|Pk# zQ`uJ~AOQ(TKmrnYE`fZ1fSp8GPffqIHhGuEXB;+~`B+DDUt0nakbndvAc5->_|3-% z{G5*e&cxE!fBezWWXOxI%}+eKHqX`Km^bz8Irw?;*?nxS&))~2Tk{!z41wA1ht|}+ z=Zm>o`P{!ZfqXsZT(r&+eo2RQH1|i@ydTMYtmjQ;*3rAn>l_le6M^dfWF5WJ%+7Kgfu-jMfAqLctt5e(z%1vH zKG3>jcis`G__2<@%Q14Vs>eDyvZlF~6X?AT_@T=y86kn|66ihm_@URG*v=&&0SW9& zV3y}3eW1Nl<6mj!Nx$5$?2N;%{Fkox=EDzNTIcEh$qgHQI-jHFU(1^~^r(KVb1Z?Y zU0;3=D=9Gtn)})kkbng4Mu6vC>ec7Wd9bfOm;H|=z_~~rTg7Y=IEFy=cM?m__fr33 zrnAac0$kTB5Bq54=XxIjIHvYRfBEl^6W<%Bp9CZz0SP>l0IwIR&!pkh5|F^21bEJ5 z4c5`z*S;nJu4n2sr}^?ZYp?$A!f7u)=9Pd1u1|pHTx$~i(3bzx_TiFxRSwK?RR7dN zkE&}O2}nQ!5|DrdBp?9^NI(K-5!n0l5Bbrv<~*wI(m9vzj> z*`M4qe-Fp?Lt9MnLtFmt--`g}X4F)iqe@5Bd0HNLE}c8$(q5WRe+fK+0MA8~`=-*p zne_g9bya_?@7<^Q=O*x!bHJRbd3AChJN=g0qw=h+dsh9W{p#OGfY+hQn|-wMTf5$S zp72B0)-z555?D@v`!02Pre{aMFDbB&=DxNBo=l+n_t%pN?^C#sQ2f|OSyx{ZNPc*+ zjQm(BjFzZ=||MYdfKL{uE>0F%uGlAZ7fgk!g z%XKX7i|cg!Yo~BWm-bH_x-@>2e^tL)uj=C8t5u%a);XW8xz6gl>g%k2tSf;Y0-W3Q zWgX4^v+b%c*3q;3wElYnT&L9cQSM6M9t388Uo)CA-_Ogutmku}vNK*=0y7YJ%6Wat zoHLxMJ$mr^?LpO?y#zRaz5Yk}ReiCJj_!xNsiW(x&6j;)ug!OtxLywUp=;;w{keIS zzxuq9{`841-B16k+7&OjpuO|;`s0W8=GSiw0l24*$!?aj2yi`H_3=Yn{_aaa0?P?- zf2A(ZWP}9T1UP4H&t)FuMVCeEeKY~y*B@PX)_R;<^eTO}`eh$wuC!S{N`JSq5PhR7 z)BGunJm{Y`PX2;^(6id1e(KVGh+i6qKk+EfFKiV5rJDJc#*gx64s=xByX1jO>RskL zdyeFaeRf~gm%s=Dz2_M}bVO})NI(MjBv3skay{*P(r_vXNML3HJcm+e?s>-Ek{|Y7 zz4H4nnV-6qrhm(>@>J`se53Z))?XVps&Dh`OMvU!s)8Td@^^n30k~GWEZhFx+2{Th ztssHp2yni$Vzr)r+7h@j0nT~qm1nZ|`3Z2|mUc=Ux-?$@YY^byIbPZ==K@_CpZ?@Q zb3bkTDouawJ_7JeZ`RS=*Iq^dj;YJC=zVnp{P#AN&XMP)vX|!7Ujj!G@Z26r+gcFd z++kOWUuxy=x&$P!oIu`R*vm5+Apr?U;2s3lJ_m_I_oi`FoxSI{d;aP=v5wxILu)=b zq_*PN&p2%MRSC>MfODDJ>Mj3HHRG{cdCuCe`ePk!^|#ay|KEHh#y(10^SJ*^0@e9@ zCXFvsS6o>C;(6>>N7bhedhC=|lYj&yAc4II@LW&bs~&l?9ya^xJqd7~Q_q?<`@lY{ zAM0M50Ou$5+Edy6RS0nIuF~&a`{X*LR`cfXfwtmuAG^x$`kVwte;=K5kUHn|b|ry( z5Ey+Q&qjs66Kg$JTKh}q%6w@r&3707)_J?joU_i6=McNMU;I;h>mK%@z#GgHhPyOtrC4oKy zqwl9Ym)L#X)L!I4YtLVImio2)*-x$dz^~e89Y2(H^_m2#>&QAfYC7)UQTgZ(9hJ8? z4|P%I!%pqZtDgiUAOQ(TKmy+q;P-o4udl8BZ!M2>t`P9wfU|Z$K1Vo)j6Nm_fN&Zz1JB(?n`Vm z)3c7|zP1D;FrGkle{vt9<14?<9jc6;e^ggg#J=z?bp8E6Ugg`{XXh?yS#5@ zzLs8ZLOYf~n*is&@?;;a{9L~`f!^znA9`;pPA7qV32+~!j;c!D%*Q&K`)T+3Wn8aK zezZ4EKM6?S{sh)O7l=c9N#UQ`8-KJPeI8vm>(K|A``U98;JT&G-SwC5==;mc>#y)b zUwa+5x_2MsM~|D#O795pead$}TlTo#Xe$?fXv^RIa|mp`KE$KvOmW?+a7(QwO24$L zxLMY(*6-2Wk`MOLeOPa90>ArckMn_6UFSYFTK!!g`>9!n_*^G0*Rfmsm0xch@u~zQ z&`)60{Y9SC{!Tu7j>_{ntCj?wO@R9G zoCG8=oGhw*kG|2hef7rUhc2zR zHg0Jh{r4rX_I~5~SGsT4^JRxacE&oI`$yT-Pd%!>btG^Efjr;XN7S~41SD{80=>@@ z{Lp(-`F6VAx$#54&E(1}0`N+G<$L5B{j_T0hqnCB+TYqA@#tA|WL-Y@(O0Dzr#&Zu zQP+<=IVI~T=cnbjbU*#CZo?~e@42YAv<`9T()gqOd;7!>?d=o))Qr!4?DRX!rk~Wa z`f1h8KCxSI?tdmwabq3*9Hn&@f$Dm&j-J(@btNEyc?s}*NS(K1JCnfm2=Mv0b)U8N zM^B#hut(QvDI#-&XjH21Y7@CyOX zM`|w}?z40y7cd z^<`;K+@EO1vySF|+W4WluYC;yt?QTjXUDwh zwso4`bAuncweH>GM_rGtT(~~y)_la14`sbq*T(hcZ~0Ll#edXwBQHvR^*sUj!wt=- zrRy25{cHl9vu9J-Z+h-ebiYbtGt+OSW2=3eE$e>k;mRHa;J!3BacC=ksb8;utFHSJ zkihu_xSvzc@9cF4^qIS?qq+Z78y=}o<#G1hT!&U4_@OO-_qP$KIJ1s!t75bS<{-fL z8#vdM&e5%1NI(J-kU%d1p6BV$I-2|15|BVm;Kz?G?w_??%&DW6-IF&4?6eMb~if# zUcWg{mCioLZ2iG;XR$6@9qhg8nO6c5 zs0ncYrPdMdNZ@z^c|Ng^?_^uWtMgPmreN&%9z)2+_0SQPz0uqpb1SBAVs}kVn zMcIFTzDYa%wSOf5r>F8@e)OpvoLd4T32;B9j;ygH7q1)HPujgXiA#Uh(cEv@YvWpZ z*(ZN0`>F&aAOQ*7n*h)MYRYP#b+n3i{aOTiuP1)!wWhpYw{T9q-X!~U%=`M(eX5yN z0>2XAejLSPRKC0q$cv8Z*F19(;QFS{)ur7?KmzXw@b9(o9MAhX?RUA{+mAqA2kiYS z{+hX}!#cWmA7|%h&eXH}I=ep4kK~f}UVUaA?7ixZ&P%`O==@c_>hCG5>zR4zH#PlQ zHt{XLrTgSXm&UL4r(WvXe8%ldfa{c1SZ`^@X-hx?^AX@aZgqwq+VY=uKR?ec?UVV@ zrSbYpKmzw8aF^%7UFNvo3A^S*oTt=lPGi>+cugSBH}-4q`>yi-dhLX8L)YfnD~`U< zz3LpDmw8f;?!$T#kih-~xX)Xa@IzbvPv3`A>eIRGJwLqnu9Nwxi{`$z1SGJY0QXhu z`iw?OKmrnwfCSDbkgsdl=XYiY5|F@b1b9AFn*F9Zcx6fA%_XnY~Z@lfV)Joa@vjIrOawz_s>pM*@RYKmwx)@LW!9)#3YhXe&PVE4x*9>ppe2<}qFZ64;Lb_i5^W z6_3r#Tv?TMH21Y7AOQ(TKmrnwz*z*U&wajcIp>PNJ@uS!th$y!UO()$`DTgZd6E4v zADa7V(Hwge=w9|7)T?!QX+>%h!C1h_6ezF+$ghkm{1*AkF`1imJ~b0QU=T*qer zF3Mb~cbRY2Ig&T_to_=T1nx|L&j&dp_a&P9+WQiyxU-J#+eLqN`bq82pr-^Ru$2J! zU*=&Qt@f++DlYxCB_M(O5}5TlKws#6uYi-yK!9_WdQ@-J&3de(xv%|90({QrT%f%) z@JD;&X7Qu%)LHtok9!cv^M!r(bZ7NJUG!`Y)|bE&2>chtkk$KuTra{`FZcd;ud65|7`ab_o8{a46`GMwq@XPhlHuvSyy!3|>k6kH#chRTJd6(<8bq=rhR)WS$U>t$! z^>bW>Uo%zrJ?o?EneQ3|y#Cj?PIh@LfxIu$KDL|f)#yKUduB7-k-(_;C7d@HrQKR* zUzNZX0-U?lEjf+-LLj+ffAP5ISIn7u^=X->H3xoZ%inzoNZ`2ycuu4~mxz-~KmxN6 z$mbIFEdAMs1hxhloT;07bRShc{!TIXTm9xf-!Dfq zpSA=fAOQ(TKmuO~uBz4OF#nO65#&&cIWd7_Z9ki_q*>{M{}P#>{ps`+S>@gd0Q5vC2%hS)qTM_+M2rZ zV;ybfabE&^5SZ=!ZSAKOpZjU=!Fa};)!eM3Gxlyz_b0&Tf%{K7c0%sk)Uj2*WTVcP zmDgY4hraf5RRR)_fCMBUfinnHug|QbXY^*x=Mv!DRhne*%XMuDNZ>pI+?VKiomlw} z1bWXAe&`)$pJ9gT-$jBmIzz9&^guu8EPdIB1SBwy0QYz5xC(P;V(#pc^_FIw_O%IY z{droRmllm)fBZ(}Yvpl&8v(9Y>b9)MMbmdyWF5`@tJ-&)=W5ph{;5}+!+x(pfOEEY zx70!Rt~Y!B*83|sp|j6JpXluUp4DG<-Qia0S^Zjf4g#Euqr0IldUXA)SM|X6vX0I_i5)H>Q2lpym*m*u%eg|UpTAK9zshEPsggIf%9DQBmA~uH zB*3{yeI||TPo38hd+B7vr7q1gyMNAyJ$v8w_nrXPG4*}amtEq%tepE5{h;S|V|5AK zgTPt$6W_`f(C*o3DKX=MH z#Iv3@>r0h9=+gML{?tR)=9wjqIa2rPFY93U*8As$A2io_@2~^o!2Y zSN1`FXzuTAS9STmT5o;wpuKS|zoq$>`nT%ebze?%UD>7g+tTj2-YD_dEyZ8GCV}eu zUUM3|o}B>aZE2sxp-bcS?;`-;)G9jt(yroK>!b3t>fB{Nd12pWzPr!C^-A4qZt7%y z*3sNwYPa&Rk1oxx|E~n#hss3)dlFcC&WJ-FvRB_wU~QnO_1k z6Igqn5{J$_qrFK$0_PIob$V$RJYOnZns0W0=FC1>M{|F6du`vup|j6Pe_Q*___V2` zKAQmNB6aQaHfd(w+@H-}+Ao}{xN3d2x$S2k0$l&h&U)|f^W%?ZzO?Z}tNmPms$FqP z9{8cTzqd`@mS!J6ek^2M`mMEFd2>JQR^9Z+ZpFF(ECQU1)MruXpB7H72>j5Nf3;8i zTCMWBeoq3`Il20@%vH_7K3e%*WxaO}{Lrh+XP*-2A;7s#?TOvfC;P$9nyja$-)wgF zi#=PP_9FoaoJWA?LTYbEt?vi-=K0NsBmdp|><2sZv5w~cQky)fYxA_?w$^FopLIXy z#-6ob`;x#C0@ZnD9nGB8dissFsf&)zpZSiill6Gr%D(opsgJhm^!l~(+-)B&sYlJ3 zb+N1Zz2}TPOSP)&`Z59)_hnh`>n)%AURx)-E`h!8OY*k};fJ>T-Iss_+5~#V2wEA@a zUIaLIXHP{R=-K^P|K0>RXQ_9cnmKbm*3sP8z6JrVU+Ui7Q!neVj^@7h+ys8RQ+u3; zN?T%clXOW(8glU(Qzt@d;M?l%9ul&j9k^+akz1rONdrtzr=Mg{jZZw!HHRl}lem?VVwOf5}&A&B%_Wp9d>=!%z z_O{QeyZ2n?|4g8|&a9)KqqKSnRQy;+d-L`B?UlE;{#HNwN4Ms?N<8zXR{f_RcIEGS z9|1U~_C@P;bpmMel|VlC zu%F7qxg{V02}s~r0@dpd>*%pvS?z2BT=&$o`?9_Sz9x|86Z>l)zm|XmBp`w35vcwi zk=Kb{O>!BR``QwafCOeIkk2vf+55J?&jfm}8-D2LELswffCMCv1bkj55p4<71h`+& z+Vh+p`bs^gn|Z3jqty|9Xv^Py2}nQ!64;kO^?TJkr_p`8FuMdKAOQ(TKmrnwfCMBU z0SQPz0uqpb1SB8<2}ocr0(*adoc!on(^Eh7tbS&%o1Cy`@7w+)AOQ(TKmrnwfCMBU z0SQRpnFPM?9J~5G!p`vB-1yv$?pDae5|F^-2=H7kRhB=^Z$O;(vF_q8Q(2Lhb))-3p?w&I?)51*xT6NfI1*Ixn> z7)Ri0_u==0MrUrcH!c2X#<7m(zP1D;Ab}*%`}?UGx7OzKWX976%0ACCl=Y=b-mQ6- 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 Uvj5YMAC-Ro!_R;H7ytbK2iH$wH2?qr diff --git a/test/files/norm_docs_dump.sql b/test/files/norm_docs_dump.sql new file mode 100644 index 0000000..384d9d1 --- /dev/null +++ b/test/files/norm_docs_dump.sql @@ -0,0 +1,34 @@ +-- +-- PostgreSQL database dump +-- + +-- Dumped from database version 13.23 (Debian 13.23-1.pgdg13+1) +-- Dumped by pg_dump version 13.23 (Debian 13.23-1.pgdg13+1) + +SET statement_timeout = 0; +SET lock_timeout = 0; +SET idle_in_transaction_session_timeout = 0; +SET client_encoding = 'UTF8'; +SET standard_conforming_strings = on; +SELECT pg_catalog.set_config('search_path', '', false); +SET check_function_bodies = false; +SET xmloption = content; +SET client_min_messages = warning; +SET row_security = off; + +-- +-- Data for Name: normalized_docs_bib; Type: TABLE DATA; Schema: public; Owner: postgres +-- + +CREATE TABLE public.norm_docs ( + doc_id TEXT PRIMARY KEY, + tokens TEXT[] +); + +INSERT INTO public.norm_docs (doc_id, tokens) VALUES ('WOS:001016714700004', '{modern,contemporari,transhuman,seen,recent,rise,academ,popular,relev,specif,naiv,metaphys,idea,immort,return,rise,"modern contemporari","contemporari transhuman","transhuman seen","seen recent","recent rise","rise academ","academ popular","popular relev","relev specif","specif naiv","naiv metaphys","metaphys idea","idea immort","immort return","return rise","modern contemporari transhuman","contemporari transhuman seen","transhuman seen recent","seen recent rise","recent rise academ","rise academ popular","academ popular relev","popular relev specif","relev specif naiv","specif naiv metaphys","naiv metaphys idea","metaphys idea immort","idea immort return","immort return rise",articl,refrain,ethic,polit,assess,transhuman,"articl refrain","refrain ethic","ethic polit","polit assess","assess transhuman","articl refrain ethic","refrain ethic polit","ethic polit assess","polit assess transhuman",critiqu,exact,metaphys,idealist,natur,transhuman,pursuit,digit,immort,idea,technolog,advanc,precis,artifici,gener,intellig,immort,virtual,self,possibl,"critiqu exact","exact metaphys","metaphys idealist","idealist natur","natur transhuman","transhuman pursuit","pursuit digit","digit immort","immort idea","idea technolog","technolog advanc","advanc precis","precis artifici","artifici gener","gener intellig","intellig immort","immort virtual","virtual self","self possibl","critiqu exact metaphys","exact metaphys idealist","metaphys idealist natur","idealist natur transhuman","natur transhuman pursuit","transhuman pursuit digit","pursuit digit immort","digit immort idea","immort idea technolog","idea technolog advanc","technolog advanc precis","advanc precis artifici","precis artifici gener","artifici gener intellig","gener intellig immort","intellig immort virtual","immort virtual self","virtual self possibl",articl,follow,form,immanuel,kant,paralog,critiqu,pure,reason,kant,concern,substanti,immort,natur,soul,experienti,imposs,"articl follow","follow form","form immanuel","immanuel kant","kant paralog","paralog critiqu","critiqu pure","pure reason","reason kant","kant concern","concern substanti","substanti immort","immort natur","natur soul","soul experienti","experienti imposs","articl follow form","follow form immanuel","form immanuel kant","immanuel kant paralog","kant paralog critiqu","paralog critiqu pure","critiqu pure reason","pure reason kant","reason kant concern","kant concern substanti","concern substanti immort","substanti immort natur","immort natur soul","natur soul experienti","soul experienti imposs",articl,offer,theoret,practic,paralog,fals,logic,infer,argu,transhumanist,claim,digit,immort,possibl,fundament,stem,incorrect,major,premis,"articl offer","offer theoret","theoret practic","practic paralog","paralog fals","fals logic","logic infer","infer argu","argu transhumanist","transhumanist claim","claim digit","digit immort","immort possibl","possibl fundament","fundament stem","stem incorrect","incorrect major","major premis","articl offer theoret","offer theoret practic","theoret practic paralog","practic paralog fals","paralog fals logic","fals logic infer","logic infer argu","infer argu transhumanist","argu transhumanist claim","transhumanist claim digit","claim digit immort","digit immort possibl","immort possibl fundament","possibl fundament stem","fundament stem incorrect","stem incorrect major","incorrect major premis",concern,substanti,natur,inform,inform,theoret,paralog,second,concern,infinit,transform,pure,plastic,inform,practic,paralog,"concern substanti","substanti natur","natur inform","inform inform","inform theoret","theoret paralog","paralog second","second concern","concern infinit","infinit transform","transform pure","pure plastic","plastic inform","inform practic","practic paralog","concern substanti natur","substanti natur inform","natur inform inform","inform inform theoret","inform theoret paralog","theoret paralog second","paralog second concern","second concern infinit","concern infinit transform","infinit transform pure","transform pure plastic","pure plastic inform","plastic inform practic","inform practic paralog"}'); +INSERT INTO public.norm_docs (doc_id, tokens) VALUES ('WOS:001322577100012', '{unit,nation,panel,digit,cooper,emphas,inclus,growth,digit,network,digit,public,good,util,multistakehold,system,approach,"unit nation","nation panel","panel digit","digit cooper","cooper emphas","emphas inclus","inclus growth","growth digit","digit network","network digit","digit public","public good","good util","util multistakehold","multistakehold system","system approach","unit nation panel","nation panel digit","panel digit cooper","digit cooper emphas","cooper emphas inclus","emphas inclus growth","inclus growth digit","growth digit network","digit network digit","network digit public","digit public good","public good util","good util multistakehold","util multistakehold system","multistakehold system approach",similarli,inform,commun,technolog,ICT,innov,intervent,program,govern,india,digit,north,east,vision,emphas,need,inclus,growth,ICT,northeast,region,"similarli inform","inform commun","commun technolog","technolog ICT","ICT innov","innov intervent","intervent program","program govern","govern india","india digit","digit north","north east","east vision","vision emphas","emphas need","need inclus","inclus growth","growth ICT","ICT northeast","northeast region","similarli inform commun","inform commun technolog","commun technolog ICT","technolog ICT innov","ICT innov intervent","innov intervent program","intervent program govern","program govern india","govern india digit","india digit north","digit north east","north east vision","east vision emphas","vision emphas need","emphas need inclus","need inclus growth","inclus growth ICT","growth ICT northeast","ICT northeast region",line,articl,present,insight,field,studi,conduct,rural,part,manipur,india,incident,found,applic,rural,part,develop,world,"line articl","articl present","present insight","insight field","field studi","studi conduct","conduct rural","rural part","part manipur","manipur india","india incident","incident found","found applic","applic rural","rural part","part develop","develop world","line articl present","articl present insight","present insight field","insight field studi","field studi conduct","studi conduct rural","conduct rural part","rural part manipur","part manipur india","manipur india incident","india incident found","incident found applic","found applic rural","applic rural part","rural part develop","part develop world",articl,envis,commun,driven,sociodigit,transform,northeast,region,india,"articl envis","envis commun","commun driven","driven sociodigit","sociodigit transform","transform northeast","northeast region","region india","articl envis commun","envis commun driven","commun driven sociodigit","driven sociodigit transform","sociodigit transform northeast","transform northeast region","northeast region india",quest,articl,highlight,sociopolit,challeng,digit,transform,provid,insight,inclus,ICT,region,infrastructur,util,citizen,smart,govern,servic,demand,digit,empower,citizen,social,welfar,capac,build,commun,engag,"quest articl","articl highlight","highlight sociopolit","sociopolit challeng","challeng digit","digit transform","transform provid","provid insight","insight inclus","inclus ICT","ICT region","region infrastructur","infrastructur util","util citizen","citizen smart","smart govern","govern servic","servic demand","demand digit","digit empower","empower citizen","citizen social","social welfar","welfar capac","capac build","build commun","commun engag","quest articl highlight","articl highlight sociopolit","highlight sociopolit challeng","sociopolit challeng digit","challeng digit transform","digit transform provid","transform provid insight","provid insight inclus","insight inclus ICT","inclus ICT region","ICT region infrastructur","region infrastructur util","infrastructur util citizen","util citizen smart","citizen smart govern","smart govern servic","govern servic demand","servic demand digit","demand digit empower","digit empower citizen","empower citizen social","citizen social welfar","social welfar capac","welfar capac build","capac build commun","build commun engag"}'); + + +-- +-- PostgreSQL database dump complete +-- diff --git a/test/files/vocab.pkl b/test/files/vocab.pkl deleted file mode 100644 index eeaed7f9adadb3a4187af80b69453b1ae927883b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 136735 zcmZ^M2Y97L^*+1F?q;(~@BIQINN<8j?hs_=S=ys{P%evci!n|&YU@O=FEI2wqLx&B9j*3zvEl$ zHrsYS=)hLjBFzr`t#psp##&vInu~@&W!7M$+UlCzoI#|g-aR(nJ=p4MYc89GE92GC z(b{-@wASisZ%$`SZ>_&J-s+mtTq1@ly`!}`)!|mxR7)~8P@jv?wC3VWqEMx~XS_D2 z)z#6Qvg?6+9lBeqYkG50{i^hKk9W`NM&ml0ZM*HYYpZKUvjcxCwQ8-m)itxZLRPh7d=8*= zwsE{xN7I*Tw(Y+E?yat+n=|njjqhn77DQO4xpWS&NoYl@YuV=1J@(qYYnOdnUCTAw z_Be3=R@d^)PW-L(bdS`=yIWl=G?z%hN`G~@I@;=5vDvoQE(f=|R%$MZzm?i>-zdgm zw9zx(K4py1LAq6%OUDpWVq`#bbbr<6qQr;mqvHcr8*6Php zMucFcxk3s~tbC1T+dhY3oYrhEhQF1e>i9stw?0_!Z*{HJT)GTt3|n2FXtwWr$iWA- zy4G$k${&^CYOQ}@RvlgWWOL~fQUSM(gZnt8;2St*-Tuz6DySmu2F=AofPB^9| z#?8f3umZM28#ZZ9?e6LBtq!%iHf=6uKfzlgjlpiTe6!{c7Ku+KRO())4%^ua8MT(_Fe7Q7139y0&JcZ8m(? zN*fykk;ZEMVBc-5w1~urZBtS&f4k;VR*u(L8J|A_nrz>k8DY)$9a51L0F^n_(J}GV zj?E=JCAb$NWq2IZWT%*Ys6MNP;n=yktfvxSbQ!LKF1wJ7>_}y#dwgJS_xx7ZuGZ%S zRR(Lrvs+!e#nz8t`iz4LyQh>w0y+1H^<%zMjO-cf7l2tgUhS7y+e?J3k0R0D%7vem zvD$DyTHPh$M4-|buJxgJ`)DZZ4bHwo&F63Om_~YEkt%~KWA&a|z16i}a|XJqh~eto zR@eSkJo6%~RAk))noEXcnfN`hxza)?#uX`sY8di^no|%>&N#T)p*Mga zis@so#@We%?vYkkKf51-sJ9o>VjM!O)iuBY(VAD|Fyj{r85*jN_SCuuxfUPYTxDT6 zUvOuW-7OzjgiG)sIV(dd-I#{mAnp)3ixGXbVY1M0NT{&QHY8|u)zy3?glt2;5%tl7 zm7&JqIC<$9(E(_K;&GHb!LkwJ3^=CI>KfxRfW5Jf^5gzBje4pv$B z91a^ZRcgIjx#p_&2w+lj7S2<*i4IkV#2xcRz=Zf9E+8MPJWGgf_SWXqdeOdP)&DHV z$iVzD%Kzike?~~s9Iw84&^z#D3|w#b2pW6>67v_RI*6W~h{OtxS9=DAZ7Dnny)9#b zCr@TEz0^-mL5KLOG7B=QkI1PITR8%0I#>rcofcAp-TG>z=IJ4&Bb8ooDu(C`HjQQW zj&?(moCylWU}X-Jy(-1p+b`Ou)6#IH}<%uA)`FhW63@n-B8xVEOG)~cQ z9l6#5TmdjYT3y$3083b))(z^qX6KE{h@U1tv{>Jyj5$^rg?@`7zo|N_XgE4_vs$eH z>ohgx7WJ|OR!|a^oLk8O((i5)acVux)(bVb)pa|jGUEbL8H3`>seA{T3LS}Q?nEyA zL{sO~2eDG!g%u%3tbZnW?^Z@luWw=8`Z&|Tq@xs^_n@{6sEjpc9jz+9txQrA?!_wD zhmq(FO=@-B2i7h@;O%aV#Qj)&`XNIf0CoDSl`6W_>Ut3QJ%ILNQD}922h$nQ0MupD z!xz|BlM-e zAG?57*N+*?pXdt~OwQqlFvcaQGQvSaZyrW(IMzSGq^P0ybxcxKmt~)617p!zB zC~mE;UxMT*42dx^DCU3Mijo9DTc2RPLncsqE0{zQ$xnhpK(RU^$x~Jv16WxGHSeFc zQn>(07NUK#vee>p;@(lEIWThH}x|#^bIsW1Dq%RgdAiUWd1YSr=J`F z835iy`*NgG8ybPW(CT^%<82Y4A+4^zKsc2#)QtXMOy0&Kswi~fuiyjwUFjJ_McNMh z4Vw7`ure}G8?2AjN3fdwJ+!PAI`a<@$TMiUs0=i~Gp(+7Qc7Q?-VJ@IflN?!D|2dN z&{kSq?}6dG2r#9D`ae@zgDS&N(!pi#gP5KcMj*`pf2EWJ(q8x9sR7VpM?tF(z>uC- zh_CbiNkzhVgZBJiDw2ToWl56{1F>tId=RZ@(0?JEy->$e6aJT_pFd)P?xQd`D8n$U z@v>+Xi@>54$}-)wm^3N1S&%VHF?o`6%Ys(X7P2h}!(6ma@=*y8CMDFeRxxFgH)#RJ z0Lv8@!eZ(q?{EUWnrV}KXckazYQZi#CShK&#}T8tH40i3(~Oj5FP56bK`eos5~G|E#nNi(_yDA5t5{|dCyfFSpqTBo z5m0s6NszGE)xdm4n^Liy2pYm#7qR_>B3UdyskvfGnPQ*}&Z)MF6(&JAj*LLS6f2S_ z{FyY|VkMHkgpoJ72ox)m0v0t0J(WaRg~ZPxR5yax# zQmHFeCxIr$jm<|rL#?6`i^H;u*(wdGSR=MIp^#e8;)*q6TakL!Aj?>b6jKEbp{>Sl zpCC^uW)#~14A$DQIssnhC&>*=1~y!05@xi1SE|^fqQ-SY@jZr^qDL}+Dzrs98O@)? zdMPm)1IV`%tz!LBVhXBagV0Uo2NbOd#fD@xYsP4`7t$KG!(yXA$sSC51EE#)jn9R7 zuGly=d=xfXaMmW|VlRV;CPAy%G$kCX(oj-t76!WqIwg=uzs*yd!+>p(rPUZ}^8&(s znyfxDQU_bKiY+HWuNVOZU=nE+TUm_?RiHk!iqBZnB4P?iv9uw?yq$z9+pBuw^eg1N%>LKuGHQ&f-9}k4X)vG$3yeBHIy*BsiF)%MgrL9mgoeArzgX)#2_| zai|qE+?~~Sn3@Q6tT>#)dbGdcr#QvuNV6DbpORgxI70O!@fbHMoTH!Ts4}@DTyW~c z=u)dVQcXjYXf8cSLjNc-F|(9#t}vWOUr@^^WxqHHy9_8XcA8aui4!aYD=|u(5GVJ@2qDCfBNkLI9jutho0O_tc9jf`oq-bYw8VcA#c`tPd8a43Qsj~U&PXF_P-PbEjcDqbsc%V9{7Pz1 z04aP2INoQazKvFK^htSrb|Rf)6-+|vD9zNAQK;rzTh2*CY>+GA=jH{24LN@2B?d=Y zVzLx+-9A4JEmjT6@(WTQg;Yiwv!p0p$R!?Z(#Nf2ago=<5EpZ{spa(~4E2n`wB9N% z4w-4&D=rC{5%L4!;!+ZS32LP(sXpAtP#WZz_Har+7HiY8Cg12}C@{Dll$Q#N3}ql@|0? z@c@-)H<%Rw0hn%=$JgW_unGMnYA5l{p8^eKT@nbIk{8^EGwRp(7=Ha-yJuJ4L55-8D z+fOJO$2^FI7>wU49#QW~pk{kNxag-;amHaAE`G)e@r%ZCoPHKRCo{!xIx8q1W&g%; zOoFF6ch>3W=V#scWfFwa)NIZsS#t~wEAG}pWO zC{(Ui@uXE>r6u7h@)8PxMYRWZF!c3lwK^f%KapvE6|$j;&seL`(TZCFi(iL)0Wv0R z70-q$a0XVDQt})JpOre|)(^RH6wjyRcI;IAh688Gg_xbac)^H4|BY7hB8P1pEDP}- z?3BfCIc#N6D?e9~mzWz{nJNr##qUT;3us)e%$Lb#6Hu%jIAJVaVUs*c^Q4bQs>Q49 z*hDzc;We@*BI~WAeY$;mBA2|*58;8HcSaYy{ zc!Q$2gu&>CoN$SN^}JR5NnM0O!~Xu6;tH!diJl!n6>n01UkC>kcwS$;r6!mT@D~n@ z^npqbN&$nvEdnvtkc2Dm5G6>V>&@8Sie@~^?NBgPc|AP!=sfEOq z{TFB0uhCPv0Ys1NOuYD4 zR+#6I2_F;V-x@vTlV8Djy^a<8gH&2XrPp#U{YMO7SvcwbFEyWs_t;jniVtI&u>lVE ze<>D34~EgQXh`@UHR6wniA(!OlbWl4Yy!26mO?P^B9qCVl4O(MY^a}Pl{#2y@?>!j zWSamSgJU&AKiVdXCxC|ySbI!qNGM@SEYi-Iim8(|yvSNUYAU8p=FCJpxE^&(=FC(e z+wD)EET(0Wh(d_WH_fPXGBm&7D^kpuEKbx069nlV70o~* z{Dz?p#)``1=8`E4>f2es8W`c2e@%?A2P%DyVK}gGfYzGaTy7%ju874a&^b8-7Hg}O zm@u+}p#h&%g%JoQ(sd>`7iErY4PI9jWRS+r)b~%tVl}B?H3iKqzsaK@9$+;E_b6so zor>57V73^aFDB}-fu zBD;pfvVCZB?G{=eO?tbBMma(qh>~*;8?#zvZhaIIVNc9_b&|mf3}aXT_QL!o2EN|g zOX=Z(3AK|dl3+4-L0TzE3HM`zeQbO%8SQAIu%YxY{RprLu>*~LSruj{hHF1ki$4RM z_h+^QxWJXXI)I%}l$6N>NvaTpC(Yns14n0E?+#-36vG90PK~Ek2gh;)RtYR~2wA2& z(2dOy*!xiOm50nDP1?j^%5RAx3^9kL@^Dq>QRatRd=6_yEJavF%77VTj!;jOgC`E3 zPX*w(ffR-XloG?5;aK9)qbLNcu%TkQe}OVUza>&&?t#VSi^|Ld5sa(zmn<_KH;ZmE zP<4==n|<}32Bh*V3X2Sh8f*`xs5`0^y_{ASfLekTNSc0?>@fii&L>45+1De%k~{(I zS6%XbGf%g`0|ROzba2q7CI;be$S*SC(Hiy$(7gbo&duBG$;~$S3BVG{0j>3$`*|_M z#(IbwVdKGJPa_AlqRtUO8it@H_t0WCq7-$vG99B*EQFR|14PYkl!UI8QOr4*d|JgA z87ag?hu319V_%EXwm~9WqcL z?r;HTCrn#ISbJ%2IhIt6;k?k}m@;{d6~{AW41=Hg>ayy?nmM_-%E!edBA-B_<$0y% zpU9~+0d-a7B+_$Y6x1m0T~8*br#RDXPT@Q&gJ3!HFM(mRoJH3Hiqpzj2xhC>>E-Sw z2fgA94oIph#$e&Cj?V9;`g7*w=E@(N#0;XX;wzMVrsST*xyPSTy*-<(kRf0sRD$7c za=qfUoZ=j1YQSX-Y(VGa;#^TIAv%0=+x2-WFpI-^rjAa}XMs{7E?|N9MJHR+ur4Iq zW(Zh@`=g6uLhSBg;($Sur7NK!GD%VVUQ7;Rgli<1gc21FS22o9Ly3?dwk%y15<23B z`O7H+SY9x;UJ=q6fVK})i@P$^3o8?~i>tVdF`vRX_p*x-#ntLPHREeka(y=V-;NT# zN``^b>;T&eBW6ey>c3V6BbC>W{T}={VZ@}|f&-u|m&(N7atUn}*NI#aNXKy3bGj-Q zr=i@*iyJsaN*G%tmxCKqIi9@IFOP?tC}Be$J2L#H8mc<&6cKIV;mgen;ZW}|a<`EA z^CF@WeX9mbCAmg-TS{x*N@&fn*!6a@q?KYZ@Ro$NoIZiY9TRiS#ePtt^iGjpH6+FS zuF1_6y{G_IkO8hlHSWXjPI;siX#xLMsy=|R8}}p{h3&z&6D7F7;rmgf5yRBwPTJW$kTd2}AANCi{$5!zZwRj>9={*~B_Yn$82!2e`pK>PgC(N!= zLx08rNC1{N?Nnd_Ri+xQl@yOE6MhD>$zvqJXau0SagF|k<=`pRFF6f)UNo()$6=lO(4S3y|hDiqjsLJylD+8q>@Mn~qzhyTv1f$YVMdKyvC=INQzf+d^xa|-$?U%{> zjf6zC8WvAgMStPqRq`TThn+KCV}D{;`Us7ouOo-A1HZ>4*H76Au_=IY6Vxj~FnWz* zcEZ#d6UUK#BPMnzCjOHu5%>NX!;d?h-97MY7D?U&0Wu&G<}EA=e%Z753us`!!x7cn zmJ3%w4S^mcH@v@MjnciB;&0#s{<3Q@#osYBF$lRP2jSu$Y7G(v;2q14ne?tjRk_`f zZT39~O_UITN*}kx|Fl}*3tk<>WOzTMVK8vTzpQFYLzQW;0ap08Xab=EBc!^ApJv4e z*Zv1XjJhI{*LTWW`p95xadBeD5V1R3Igp%$`)bd!%lEsj*+ z^F3}hu0`6&7Nay&Oll)r;3rwr){n_;WQz=<0xl=Owl>nACWQ7jjv34cZfb|;CoV(h zh|P4V3RBxSSV&AC%~mn3jf3UEib-Ht8QYp2IR2u8GDtMNjl*FfmBeG7PE}C?!zj#X zBQ11I5tc>E%sY$G)xB8MGUp(U;xU_HZ?vlIj$^TS%3X`CTcWMGf|nma>!23bCDkLl zBq=;-`HYCr4B*M7X(Su_nGIhASR%}c< zdx%Zabl!vvS_b2FxMEY1Fh({;p*Nw_&Dxr)O++yfN*4Of+0KwNSUTC!5|-PrKAqPU z6_+jZ<~hnkX1GznUzD^D1)7iKXWE*}l_1H^?=kJ;`*zzzGAWm2UPnvvoI1v{x&Zs7gVdLWV=80axFm)(@?b7|+Ws6uI^tJ)tf4rR+>=A$h~zM~9T5w- z*ErlWB2dAdCraqgu|XDZP+S|1Am4=;cvz4UpJ!J~SY5FTY5N!~VJ&!gCD{tWBl z7dXlZ0CA}x!xqZML4?SP`z6+A0Z4fB2kd6+N*DwSc8)NHT6MI>^{`jG+Jlj|OKL^0 z zmX1*a86%GgjNvF*g&rP`KzGM%!fYRFgEq_v^lRK2$lENi5cKK>bI}l0m>`1Lx;96H z2_FUKpR4=|z@5awc@&Kn2p~I%9Vakhb(LQxtR(3E^`SUKt z@#I>sH^k|j5Oz{Aoz)SVazd8euxJK6F-sm!zE8@UX&5{)G1*QgJ^YQH;uMM<3uNyF z6sNMPiExE)(G;hV*b7D38EUII{bOUpv^nErV}pC&nUpjOl^kuRu!OcXS6Vm$tO37|P(6)+8sFLGr3@2N&m%lk2=RTb#=kmp}8n>cx3v<_Ty; zetPGNr0$1t0XfE;GBEjcf#*UFMGpDC^ddDFml4tUmg?khm>)(*>|$=yY+2XELZ=jGNDeO*IlyMusY zMD2j?8x)$>9>|I7QUTf^+OS@q3WzApHGJKsxPem03ovKI8#!MyB%c*GQN8=vIPw_O z6_DtgHl%o{047r}9rk*jc)_4?i>4b^8Aq^@rhECVArqQ(o7e|QhTU$|DsFcYM+mZe zP$PW@S2VN;G4Sbu5WSN^GyybYn?vPYUIiW8?>2sco0ggGzU8g5F#Ey>Ns4=%o`9ng z4Np!V!5npU`(7V#Mj4sl$eATKj5AK0bAKthZgCe6Xr|Dx&LW6a8gyrSFi-1;3E%O) zDy=YVNa^G7T_+(T!a#p7HN&8E;Pm}0wLLyo{6KO_t+4mV%yrha^&k4MqIfr0{Yb(_ z>HBarGz$;Vz`HXQ50^pQCTtKMmXuRrr5Ny#{EB~)+DltCxBibf)2c8+ z+4<5>Q)}H@@nt=>gRnaBm;@OlQMkc#5`J6En(>qqdiMG7-o;Rv6%C7+Y#<~^}YT~es=IP*T z2@|Ptw50>WqID_qw?;oi!0!Sx_$6aF59?h#SW9CUm`GqO;AQVVS??8ZO_gs&@nl;j z_g9Twq1GidoqxS%lGc^J*S+Ob0V{Zz5B{MxOo}Ih*$WdiRr5dC0)nZGs{d%b%RmJJ zn6~UU+8XO}b>w7sQ2QHrhsK=q;2j!s&I>mR-}L@cNJwqU?&`kf!;|9T$o<7fGe$vb zzdbQI+{65S?O%=^yfMn=vt) z;q>J}13#Ehl`aFo8atsXzawBS|8NWS#y2pyA9~{(a3i40-+!IYENo7cFvU7$fcA_Y z15$nDt#ts_>|xlt;O*H?4UPwx5}W4uHmRM8X$iC|t?&SCr{1NgG2UiJ(QPTUL3s24 zcf81!?OAHyL{4d^erE*;!q8edQ`@OB%Q^@HZ98=a1+d=mNVub&i*7=+`f;J1o+X9N z7*y_Tr@n1TiMZ{2Mtc*AmBYR~&Q#-bEb2Xrs_`LeYzVGci>dJ$6qmlmv$FmDq+*FI zwPCjD!VUc_br7aYWi9dJ>#!$TT7zWO;vB*53oX-59jXMzbNFT3sj?{!o=D53k{i?u zvO56Fw>MV}2}@DnbJ)!}$yR8m;IOigBpPT}Z09~`9^fff%JacEH&nGXV&yzv z#6ie8=6tkDU<2BCRt;k?N-aa)JF5jg2vE2wy?US$BCw{z0Upz((#}bYRwgjtb*~XP z1<~1I_?qq9ep#*vN5jQh?cCr@jPMGj%j z=35c4;kI+TXU5u%Eh7xKs)l84Vxy6ua8qhiYZD{F^Jc|nM%E0g4Ddn3I$l?86`Na^ zY(ueyaSsC^P!Pg!OttZxfXC~sTY9a`7PQi>j1tP?YH5i2jCY91{WXHEvx)`jRtikE z);hiNR%~PW^bl3AnMbxYPD)Tk9&g)OHZ#<0Zyd@%;`beF9_L^@^4ZZuo8tPqd6{S@ zYhFY+sC22>IV-vbhf7`7-o<*Z#14k*fx8-^6cvuvb~C=tFw7%d3K-|Qvpb#>1|L9J z*XfS9hmE@hb+$dAH*tzR+ncMzbSWZRUG_5J#OEp@oc10=B(oPUSb#U!;J)_e>Y^b@WKU?uSZuNN>~PUvYES6v zK&d^3x>>STq8ktA(W|3N{T1joq1h%ayoqtm9JCo&hQlZfIs0?1820LLi!r%v)V+Bb z2+NtCP8n&Z@rvsVUwgv~0nT9-&dL}yiNl0$RvYuC2E?su<37HCM_`i~=*Gltcz+WX z3Yp`R0Wra>G&dzSC<^g;&QdWk{e>}o=BJi;4%r14_;9D>h~*=88t!9VP#_lX%R-Ml zE|pGzs)CNrj!!)Yzj5RJWt-0C_;-T!mjNwEl!+%A!80tnTApO3DayP6Pqt=8qypVX zceu4NJS9uN02Tna$XYvQQ21fq3qJK`1|B5a9E0QpfGYg(3Gm4CF;2_dFcyxk}UuREZc^ z*DfwyY~0MkLSHVi36-Fr>R+0r^_QA13lu|kL0E|B9)y5F&FS8QA|O=tI&5*hPnR+t4rOmJQQ)QUl|4=N z8)MBX%;1pcCR-bEy?YiX?>9|^S}+Xb%_YzuIl9G3p^R9#X*0sr3|N$%i1NC=&F2*Y zu6*1cXaj_|)VU+R!`3Z2YC8r)kb7C*X~n^59lFR}))EG|L%?6O`EDD~9K?v?NES~8 zWa*>p?mbqU(mRNr+Us-Qj@*~l&jQTnLk5dD~G=E6cQ)>6~4KuG*JlxK6Aw14n{6q{r5--#}qEQcFyNL8t zON|!%OkEqn(~>X>a?Sj?niK);2Bq)7RaOieH{6e@g&u^af+LMzX!2wbn5ham@=MVx z;`Wl*+wwMQ*cRDCeO!4LyNg6sN>I24i2r_YQxn*#a*B z@bOFH4gTgho1puhdX!^`leOt(&CoI2Izkn%NW3UOr5OdkDzTK1=tufmJI`2E#Ot1` z9w+bbJy$@m_TUH>#r;8Y9l7+p;~zsZgwjR>eDa1^nd;G>L{DsG{8hR?t8*a?P6UI# zDV_zEE`z-#uE`*?OVH!!FDemEM)V*Ax!zWZA&e3s7yqj4IR*_J-o9wi-$XC>QTltx z3s1dp0s9~7loB}Rx0~L{5{LEwUGae>b{GA$yLnG^waC6vzWVV`O~r%+JIMQL6r?Cu z#($|E1-R1Hcz*eBjuuvDbl?M)%AeS(*<(EaVW}Ac5viM6|3@)mxIO&$AvrJsNC(?D zJ;uQ3|D_yJ94?l@Hq1tZpx;dUC??UcErPEFSrQ%`g#)ljQ(*g5Mxsa8@r=;qDKIn= z((>Cj#Y;vgoFBALfdS4__yI!RwkcC!e-6<-IJ=}pcj^>aCCeZhQF8E`mRIFRh8MW^+R0T#+HpuoyGV+w3~mL#H*#oTSp%(8^zal9BX z1x7;85>U&2(QtnL{ErPNDIArt7C#U<4<{LDQ5mYPB~$T3V?bZlvL z4C_Ch{x6nMjS9faKr>?5DddU_f>t_?ck1u}bFthMGMmL=2L}nTyy%w@=)3kz!U}4g zo*-ONx$raU$tz8PL7x|J93j=XX~9DRDz6m7#T2i$sykVP58$d3GlZ3RwTT%ZK{;Vo zpMq6b=NpwNoDj$0Wo|#%SVPT0YU*KA+Z%l%<{mph@O5XwTA$Spxxuvi2~YYnnmEVoIRF3qCEX% zhqp;Z+p)&B*j+H3F7)LeF-h zg!DY6DCpaKPzhYMv#4mf;{yx3WJNj{dbDfSGW-5fv77p2MF{fSt*{2?iR}fxJt#rF zNjj0w--y_gLd_$!X~SUbrNOY$4Xfb$ZmeztS|)KWVIi;u7rW!bUwha!7hwyd-47YNOu7ETR$NZU`E0;I}i+#Bc|OP1o2~U zZ5*r|xWUrH#{{_4AA(WU!yAso_5RS1G&-3dhE6GIa4^T-fO8%$yCAb-`l_==8!{Aq z4kK8CDo1zY-FO;Nj{vn4681!P*iv} zIn?h4W!x(Sy6yVyS~P{a}FeO35Yz=an|gqkx(@!X4%3n7{W zxd2zEG&>E`cfN`~h?^9KEVRu*KV}+XcxJ;-*9Hgut668{Zi}-g*k!H70bq-vh|QkT zY|~}&LFSY_W{5fQi|W4|iiXJ~)mdD7>X={pi81$G2c9N?NSXkaH%7;hEG)oI(4dcu zLdxWb)*C+v7*lol)*XCuA?U-NvBCCh|7eNL*gppoa3UIQ{&TG)-Z7p>V$x;Or^S2{ zGlr=l;KPBfVu4lS$--^TV>vo0v9!hG$|<4Y;HxRc@#SKLf^1(d!@&XM1oEKDjn?E7 z$#OXahOuwV6eo#_>;k+oG<#3B&PN3M<5_s;&TfRBVzkq1YNuL7_>H_ha8rdv)hbGm zF7#+&IGr37X5$%_l~a=k1r$(ca_U;VLGg{guZZ9}u|7*&grDK0`fSl40@%3erL$&C z2lFdU3+Hgg@YEYT1c3d=2^5HUu9}4ia`Sm2h5}H*XxltLP&d6P%tFM#5 z2nk$+yuu>)aU&`b@ z_jrIfTIqvwU*m@87H>k1V&R*mGmu-2_Ljw|cAFRl?yxLIn0;lWxIHf)>mUvzK(9L_ z;5@mb*naEPwL8TZ!$@_P`Z`?m1G2lhbX7eFUu-U1+!}sMd|{TFdo=ARHe}cMVdc#7hYRy~8bI^V zstG8#G+oPoLSkGADE}!!pA?H`5E%y>EDpp|d2+K)Jgq_ZRQsO{2qx!Q8MPOq@1LAXuI4<0tmo&06>;<>ER9JtL62g6&$P0;zLi{5} z#fxcJ`s=j1{WcMU0JTP#s%%s7QtCv|6MmPH8w6Eh4vw{kLD!d4E4%}*q*e&Qse!&{ z@M_|x$c?Y1k{y$}qdn{EiOwMo8?#k=khx z*6uzm$$!!cI!0HVKYNqmfD9If5gl{>P3Me+VS3=heTaI?X@Mv|3;K(2|Zn8Dt85%pp&LjzsFCkSvChIPo)x<5Qr8#MQ)o)-4YRea;<$T zcNz+qulJOYtv*tA^`1JF>UvCRpKFK1>{MX^#CMG1tOWaod=r&5!*xLJPY z-I-Nt80ROhpU#*{T|7@5yD>AXIQpY6I+aU-rC;bW8T@FcQri#Fx(&AYRBA36RJs+m zM4rK3`&n`-Rd3Ib*&p%fLDn-f$-q*Yb->LuW;24_G%MSM>atV0m9nx;WyA#VPskR_ zWdo3@cgtrTh;Tf7S|RWShSS9Cic`6XvpOVa$M`(XN?GC9#^b|L5~M3|8Y)l=x8eYT4*I2xoUpiq*5G;ItI)kx*}|WJCyPd`W1HQWiWDqNiim%*F(B zQD{Z|S}Pk9q}8776Ip7*f)2lS)**ePyZB_5mI(DTXoQ$K>tw@+jXWR0S=Z(x1@fot zC+}{rXN6`TKUv=jjYu+{ZD8F)3@j9IgSI!xH?&bGq3NprMn-eS#*YaW8`})b!AdVy zXs%S7sBLq3Wo=V+0zW|kJd(#xbZsV%%^=8koGno1ZLXd$N+&!J_*-ab6B2iPpQexr zMQ+I!S|Am+6^T#=-4gy862W7j@Iu_u>bmt*Z1pCfxl8qDr@~MHUk839ZW~H9{dOJ^0lE|QvvR0wOdMPj~d{sESM|1t4qpnz#ge00&&;8 zr-&UBn#FLh2_QZL1%s!0tdzQ=)io9S&19I|$MeWe34tOXn}XaC(ij*f&%R!q(qkU) zm*>Y98TBEN{mIH9zkz7Ee~!C2z)4GIj02rA@GW=y{6XYfdp-DIMfO8E32M$EB3nXy z0XbBC5=@D67{!6qRellImgd9NZYG(f3x=N)VM7@7b2phIGy=qRUmjkrqD2I9W;`;s zFPtqNC3aV0oi;+H)V){OJY#*97MuZAg@-HWrrL^)Ih~{7+?qq!(t_2yQzPW9(~q|i z`~kgLStINKtVcX;jUWOyF!PD&jWn>6%W9-1!_jG^FD9e86E7CTWU`6|`|m)k*k%Gu zp|OvKK;p@%@aRZW_eh?dN~DW&WiCBM@N_{c(Qk1Mr4oe%CK-+-iq@8TB#}dU&`)nu zj70X(!@b8u_COH5rh#BIwul%ubY{I6i!FD@!SOi20!(Yx0cj&9mD>wma*ag_2v;=b zM(Uc|^1PG`zQ>f%5^nP&Ey9Zy3$lcKbOD%#U3AT^NM`~g+;>H~o zQC&^^a+XkMLnlO9>aYk2qm$E#k-17IL-;b)R2Zkl$fby6R69AVMJI8mPzCTD05G;t zf^pGBr~Rj<-s)4gSi)&*IV~3A^XK%K&Mw0GX9>@k0Amlun~G;f;&XF`=LjN280NAC zof}i|tW=F{;?9l?7bQhAQo^AiBF~ALQ7893=W40rgcN}9E^)_kUQFh0)aOf-G8wnT zbesWWUJ&^JpnT#ljP)8~+g8x#qS(ghB-=`9d0dE#i*vijX?M6dOY7#DOCl}67qr+w znDb4>OH&IP_SLJ)B60mHnLROec`OrTw5#-2#36P_jdc&SD`S5V$>Tc;zpL^b1|}=$ z)gKcX-P^B;^z_Z;S0mX4xG(+JVt2yv+qIF~4FMwt$BnN?`gs%%mEfy|FI2_K{7Vzp z#mekU6ZUZL^(h&=h(OF6VuAKLZ5*i^BQfHYuvT$X1hXB&H>vb#+C-2CF;bCljs!|^ zvK~=ey+x}s`71?Yi{OtK-}*7d^1cy|EN_c4Cgrp<_}iy8SDDzDq|`F+9UoIGrGYjA8$^ppAT z$EhTQsUJ4@tSR;PhhkEDHQ?b$M1~jImgMz(V`}45g+j}67hWrfLp7gQMtN{7vo_-M|n{eMi!xk)!6`N%++2i69{+7Q# zd|Opk1S)uOKqtOWDw9dIr^FrnZL6G2PEU)BB{2B){YrzcD4R_+JOZMzcxGyIH8ZmK z=FwvyB>kKRkH)GO$}K|^4|c_<3=;2T?dDB@DkRqKqaJ z{R>lZgcNUgyyzwHu1C7i@mn#k-2e$_SU6wOc5)0~BmkX%X8}GS4O6d#HVtO{Ok+0| zyH~_535h4(uZrxZHovAO@OQ4ZzphS{QLamt=l9xwXfpjlLrn!$lLMw)4Rr+Kw&abN zkcu{B$Dd+C0myHK|2ZafmG@1r4IO^V@#oge2P357{rrgB+q-ksx26vbbxB;rzx<7duJ0RS*wQbWt7DFU-ouk^PL2I4}=gc}~ z8XDjxovG8%Su-?Dn}%`XPso$7ukM(JU3&>bhp|(D1fM<)rV>TD#P4Lo6A)dmW}pfz z&FtGu0ZaZp|!#ni%Ck+>9=Xjs@y31#*??zBKE~ zMuMWkhh&*)&BZ-RI|dy-FFUQd+ypQRt>vsHd^iDKs2D?}!|(V2(+bm?%a@>VVUg?E zilDPc#?@dY_Q=WzCRRP5va+>-Wd}T(tXEk$E?Q1kwGJ^~_|!ALcx430LGJ8$XtTOe zi&6e8KxJBU8E=t2*+VHTDZ0kA=F+8@aF)Mj>X@thcvLne4qE^_OZ`Nm8Y24Gh_w^c z7={*!3HZs>3WK5*f1PQ~>DCH-{}L9|Y0V{K(BJQYF*S|@5;+=gZLT-1InA65fJU+jroMgh`Scz8y(u{njo9?>pli0&-Fb3oG!>tjJ%y*NP{aFhKF?xzOT`)#4@-9^i7asqdH~MsV07Dq>`?~k*CIW4&r~{Q zgsdogrQ`->#-Y8ZH9Jt0f3c{GwDu4vhIcdQ`LmDZSDJw0%9)%73nQ3b&fV8Yz)wPB z+eaa_Uqa;426t03JZq3u&%Ny6dTOmE91hqIG@2v`g%0Q|Q3qL_^65O-YM|B0$$p6C zi%3$S4rO0?bO2jAY_X)QhcGne^L03xqYOe;=vpV%7k!+ zbtJoHfp9>36lX{dQQfe8@)y{*!7*$bVS(lEp;_3O!1T(x^*i*lo1>B;Y44181-Mw^ zu|x1m52qY|nkBxMBOHSGI-WgRQ)L^4MwjV6PW&9I^bgi&L9yvqOITpIzB@pQE2$wo z@3wb?YwCg7c#l>c{2gyD%~r+?a$N-m*DSH$jvUGo3yO({xw6ZWj6PD+t8?ZhfRaNO zEJv(4@@hK9YM=*G82nMomLMMKqsL<$&fq&YPPVZ?vg0;17UmOHekvH&R*uE6MB7|S z6#mREAkJgAN?67HBImQ(@F|f6tkwcp!`)B%Se2&$gs;8MeVoe6F+OoT2*G-MmO4E6 z@MVs&7i*aJ`GhPnwR5VpCuT((R)KoXOT{NmYqseY;mI5dIHtvRpQ26>z_^^MPAHI4 zoTi%i$VmEN-sxP=P)x$o;UXr+86v4Z=W(Vg#LqA-zM>vQAj$o+EEBhoXImz0E!=qC z)(lYLVrb|S(F#6)jHiWQDu$kXiF&LB=29+~ z)Cc@cnafmf2(vZXTVHND=;m{UdW$c4<0Ok$Ww{VsNjAqZWWu=TwRgF$5>2zqE?29H z2!z$|8p^(ODaK&)zW=Ifm%;37q7;5YdYkjvwHnuiRBUqszf|VJR4ErW&BYZ9z2cdi`JCguV5sNL=mD|WI?p|{{X`tU>-ME9RQ-)wtRH1C+ zKXm?1_CY$7K1FpG=UNB`>&@L9z%qy?+FMxPQsezoR+;vCk1CyryZ-v^QX~ZFC^l5# z$o$@E%{5YOrO14-x{sq48wEauEBF1Sa*5eZGI?k`Q0f}=U8))nlCNSZ0!_-oS(Va> z*E_z;={(M_^Mcgh%X?1K33b9BcCXp;T`hm1e5w*iC06_w;kK-B+##5{BKrQ08K z!1xoIidkeIVktss8^R2Fn3Ey_C|u`|KOqSOgL;rBoV|}w29_{v;p;uKvA9x({glc~ z++zGp1=xmzwbO_7=VUTZVHkY%sS-TOo`(pt+&-44B}9=xYt}C~74o!EGyNrnQizG# z_2b+Y=p)QeOvBroQ-kjGq-ev57Xa!-l;!nHN`3!r=pPY|=m-E-; zk`kt)M@VA~*t48U?jQafIYz%R)R21GnLp3TPzKR!Hz!(c@I4`h>h{4JvKuEZZjvJA?;pY#Uh&pfC` z{B!{fjjGv$HZ1TRoz`3_rZKRz{d!X!9;oU5!CRa>^Aw+~IO>nxW~%mA|VR#`*^0A8L67>?wS1?>{KRTf z2d5s-ig8uGgY%ZZNqu`qu&smBQCM22+dDW9N?`c*#FSJ9;%%okwS#0qh%rge}J z8G`}91FGIg1vAB9dIzV!CyThfF5B6`*=%w237iodO!Y^ezA!^}kgY-@fhJubq;O5X zgUlLZ>6^mCgT*>Hr7=e+!x!)13{xO{5NiqR7UKzf#u^OJG$EUE#b}sefi>31QU`bRHH{CH+OXtvwU*k4o5ffOKcT_m@2LH+t%@?p zZS=4>hKy+9IvrdJkZKI`6pN49Y1S3}$|y|@`Z)NfLUu6HdTKKg^6hN*1zSH<95Jkl z^4i)!#G!OT)(x%63{-YKaIZt5+HRy-rg(#7vcNtUH{Y|=aABq4bdwGW21_jn8iYQA zxT!Tz--Fsr%*fqm*lBLA(M|}TjYM;{K-;kL^6Ui{+rd;GFg=am3EvW}n*fIIPHdH> zk9_tSj9o|{zA$gLOxO`Sn(c@~RiA}G;4k0%Y=hRtVA>yUi!Kr7OxX^ku-`m1mH68p zBridjL$C`$&)Na~_n101X&~Eaaos7EtBn&LE8E$+jB0H!wE#LH2OCmn7wfV` z1;2z{t;;zG<<5*pyQ$0Ez3mPG#+Oq$C%8`Sp%_{L_QW*ngFS#=gqTsdkFJhIAUn_4 z+cJSQx>VdC7`WcgDYy?<8ijZml+g8yBBb);fPF;@S)q zfQhB4c7QTw5J^Mz`9O`4*-Q`8?>RWcZ50QLQvA)O)iw4*M5z+UB}n`BL)n6G6Ywz1 zFb`nmvkQQSV|tdcY+e2wt9Eb(27>?M{`PFRj;(p;=uD~*dO$e$_YS)u$Xhn z?p5QMQie0gzN#9RkjiZA^M+vo2JQP|>TtuOpA$?4`}<-09&+$OxS6i@hA&vul*mH1 z96`F_j=E}^0K??LX*HXjflD-!4YE@H)X_2ddI+mUj)Wytz2sMmpr<1wv2r`I64mDZlpBP;4E&m2xO zd_EE%km3ZwuZqi&d8APc$8EuU%Yd_y1(qRxbL?34aL~i%QF5Fb0*osJUlllBl!^ex z-7G9$4uxS6=c{`sSnZJN4C_7|rRj-e{@NfGGT8mBZ2U%|DsCm5OfFQU0Qj1BgKnp2 z42F5j?o_o9KUFPWJp`#v+s-T}hY*Gk#(}!QxuOF!gIV2h^g*5H zi4GBf-o(<+w<7QYbECf>#tK*j#ePWVh&#O??S&$xuW^OB{Z|! zTuc#1n=TuF32U|hWOxHjzLYg*h>ZtrP?vQy+w=|I%Q<0DXSc-76_l|a!k!4uhDduQ zNubXRT}2Y$7fiyqw~eT)8HJ4~-q~anet~fP+NgY$9GC#I7WN+aus!(%IDTHs2J@#q zyNB|=?wJA-G@fseZIu#?2ll>>Y#YOo>#z4ljA4=vlO#99@&rId?CWFAH^zi+S-Oe* zqXNyU6wk%JsUA|Y+^jqhEZ|!?=-fhlP!3E&Wh?s3$@zm-b$4-MXxd$hNd>hbUwqiauuC@SMxsdCtg0XfehQx`!z5?N3bNLng>EEh2f&q%`4syT2&ah z?@&!+%j_P+cQuY4Bz5?BD9m;tmAwY|eQO__CejBleqa>~<9hbPP?BEVHoig4KZ;qg z()#=EKenzRYaLS-T=I|x1FbNC`c!yT^Wjj9e}nfY6enfMJ|Z5=i0zI`Kjq9~Qb-*< zju}!R1ZO9Hd>U7&V89CvgaZ=>PHO0*8b#!cSh(TySV|qe#eYF9hV|GdHMoaJ8}46< z5AoG;Q1x-o4C#i8HugoAC%meJA+t`fpA^$EXGjf?Y@XdeWkbvesW0}1{?k;3(25*Q z=Q+4M?u0{p@S%N1^G8_>$_!1v4(-MmJ}cHmIv6GFe&lnZZH`3y_Vb}_!P9Yk0Altx z9nDqLwhXmpC1^7*cy*kAFM3NGgJcAKRpPfkcoFjH_7cT!P#k`zGHe}rS!M8dG^M^G zCd;5ON_g#3oYLs&){66*hRH&ZV|pC-b!E;mNccIjqW@m<6rPqa=7~`F8MTN%s^JL< zUxIierW~mC>yGN5L{g?S1T)Cq%K5YUhzQF2H@QCOWfVN}6LxuTi2;=&fN8h)7wZkP zgF)@hy|=RrhVc-vYNs!M)eu@~3H_URrHo?BAy37>YwCMk@F2z)lwi6EZN=`^-I2pN z@H?b=+^oDydU&X^`~JJPiuXwI4B`H(fiR}*KPf-*2hQJTlM^7DC+>)|$rI49F8!MV zE`TKM!l5B+f4R!0E14OqtH1Pyj46$DhBK$#d#-cKKtX!pm>drehs; z&()6U9AwxF2e8oT1akUxQZgZdqdL`A;n6Wc^w{bW)1m6%SCDl}s=N@6l5Qz=%w9HFS{>u>@PffI zo+%)H`()YaWcqN)bUBTog(MDX{a;?hE`hL7*2q39Oo!&yz-P2z`LayMSdB&U=?2wND&>b&61R>JCUc7)ZG-$K#ld3CnZlQ=%Oh!n)pcEW8UxXl>@5 zwe_u`Rt`68m{A)TEiw$_kHX&eCT%cmZ8p8RYF}fah_tuC1#s0aH@7X+bo|Up__W3($FMKdO9QYhimOU- z!EB8$+G~Uv8E+Bc(M*j&2?XKdlXqLIEejT4I6kWZ#Lu*k+(yHlL1`bkEv9q7>>1mE zH2eiFl~HPYuxARx*>@O^pn>Q+U_OTp*N$ka{niQmpp4)

q>JE~w_1vGeq1n{Jox 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

b(H-)Kk{%O4fzObBZSt54J9v7!lOlR_HWJ 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 diff --git a/test/test_lda_entrypoint.py b/test/test_lda_entrypoint.py index c3d92ba..f149f44 100644 --- a/test/test_lda_entrypoint.py +++ b/test/test_lda_entrypoint.py @@ -70,50 +70,26 @@ def postgres_conn(): def test_lda_entrypoint(s3_minio, postgres_conn): - input_dtm_file_name = "dtm" - input_vocab_file_name = "vocab" - doc_topic_table_name = "doc_topic" topic_terms_table_name = "topic_terms" - dtm_path = Path(__file__).parent / "files" / f"{input_dtm_file_name}.pkl" - dtm_bytes = dtm_path.read_bytes() - - vocab_path = Path(__file__).parent / "files" / \ - f"{input_vocab_file_name}.pkl" - vocab_bytes = vocab_path.read_bytes() + sql_dump_path = Path(__file__).parent / "files" / "norm_docs_dump.sql" + with open(sql_dump_path, "r") as f: + sql = f.read() - s3_minio.put_object( - Bucket=BUCKET_NAME, - Key=f"{input_dtm_file_name}.pkl", - Body=dtm_bytes - ) - s3_minio.put_object( - Bucket=BUCKET_NAME, - Key=f"{input_vocab_file_name}.pkl", - Body=vocab_bytes - ) + cur = postgres_conn.cursor() + cur.execute("DROP TABLE IF EXISTS norm_docs;") + cur.execute(sql) env = { "N_TOPICS": "5", - "dtm_S3_HOST": "http://127.0.0.1", - "dtm_S3_PORT": "9000", - "dtm_S3_ACCESS_KEY": MINIO_USER, - "dtm_S3_SECRET_KEY": MINIO_PWD, - "dtm_BUCKET_NAME": BUCKET_NAME, - "dtm_FILE_PATH": "", - "dtm_FILE_NAME": input_dtm_file_name, - "dtm_FILE_EXT": "pkl", - - "vocab_S3_HOST": "http://127.0.0.1", - "vocab_S3_PORT": "9000", - "vocab_S3_ACCESS_KEY": MINIO_USER, - "vocab_S3_SECRET_KEY": MINIO_PWD, - "vocab_BUCKET_NAME": BUCKET_NAME, - "vocab_FILE_PATH": "", - "vocab_FILE_NAME": input_vocab_file_name, - "vocab_FILE_EXT": "pkl", + "preprocessed_docs_PG_HOST": "127.0.0.1", + "preprocessed_docs_PG_PORT": "5432", + "preprocessed_docs_PG_USER": POSTGRES_USER, + "preprocessed_docs_PG_PASS": POSTGRES_PWD, + "preprocessed_docs_DB_TABLE": "norm_docs", + "docs_to_topics_PG_HOST": "127.0.0.1", "docs_to_topics_PG_PORT": "5432", @@ -136,15 +112,15 @@ def test_lda_entrypoint(s3_minio, postgres_conn): cur = postgres_conn.cursor() # 1. doc-topic distribution - cur.execute(f"SELECT * FROM {doc_topic_table_name} ORDER BY 1;") + cur.execute(f"SELECT * FROM public.{doc_topic_table_name} ORDER BY 1;") doc_topics = pd.DataFrame(cur.fetchall(), columns=[ desc[0] for desc in cur.description]) - assert len(doc_topics) == 26 + assert len(doc_topics) == 2 assert doc_topics.shape[1] == N_TOPICS # 2. topic-term listing cur.execute( - f"SELECT * FROM { + f"SELECT * FROM public.{ topic_terms_table_name} ORDER BY topic_id, weight DESC;") topic_terms = pd.DataFrame(cur.fetchall(), columns=[ desc[0] for desc in cur.description]) From 1ab7001c30da01cb642664e85717fe336edd9d37 Mon Sep 17 00:00:00 2001 From: PaulKalho Date: Mon, 15 Dec 2025 14:44:23 -0600 Subject: [PATCH 6/8] feat: keep doc_ids --- algorithms/lda.py | 31 ++++++++++++++++++++++++++----- algorithms/vectorizer.py | 1 + main.py | 12 ++---------- test/test_lda_entrypoint.py | 3 ++- test/test_lda_modeler.py | 27 +++++++++++++++++++++------ 5 files changed, 52 insertions(+), 22 deletions(-) diff --git a/algorithms/lda.py b/algorithms/lda.py index b916540..f8d3534 100644 --- a/algorithms/lda.py +++ b/algorithms/lda.py @@ -3,6 +3,8 @@ import numpy as np import pandas as pd +from typing import List + from sklearn.decomposition import LatentDirichletAllocation logger = logging.getLogger(__name__) @@ -13,6 +15,7 @@ def __init__( self, dtm: np.ndarray = None, vocab: dict = None, + doc_ids: List[str] = [], n_topics: int = 10, max_iter: int = 10, learning_method: str = "batch", @@ -21,6 +24,12 @@ def __init__( ): self.dtm: np.ndarray = dtm self.vocab: dict = vocab + self.doc_ids = doc_ids + + if len(self.doc_ids) != self.dtm.shape[0]: + raise ValueError( + "doc_ids length must match number of DTM rows" + ) self.n_topics = n_topics self.max_iter = max_iter @@ -58,6 +67,7 @@ def extract_doc_topics(self) -> pd.DataFrame: self.doc_topic_dist, columns=[f"topic_{i}" for i in range(self.n_topics)], ) + df.insert(0, "doc_id", self.doc_ids) logger.debug( f"Extracted doc-topic distribution DataFrame shape={df.shape}") @@ -68,17 +78,28 @@ def extract_topic_terms(self): Generate topic and top-terms DataFrame """ logger.info("Extracting top terms per topic...") - idx2term = {idx: term for term, idx in self.vocab.items()} + + # NOTE: + # The order of `terms` is guaranteed to match the DTM column order. + # This is because the vocabulary is built in NLPVectorizer using: + # sorted_terms = sorted(all_terms) + # vocab = {term: i for i, term in enumerate(sorted_terms)} + # The same vocab indices are then used to construct the DTM columns. + # Since Python dicts preserve insertion order (>=3.7), + # list(self.vocab.keys())[i] correctly maps to DTM column i, + # and thus to lda.components_[topic_idx][i]. + terms = list(self.vocab.keys()) topic_rows = [] for topic_idx, topic in enumerate(self.lda.components_): - sorted = np.argsort(topic)[::-1] - top_indices = sorted[:self.n_top_words] + sorted_idx = np.argsort(topic)[::-1] + top_indices = sorted_idx[: self.n_top_words] + for i in top_indices: topic_rows.append({ "topic_id": topic_idx, - "term": idx2term[i], - "weight": topic[i] + "term": terms[int(i)], + "weight": topic[i], }) df = pd.DataFrame(topic_rows) diff --git a/algorithms/vectorizer.py b/algorithms/vectorizer.py index 105a207..e02ee66 100644 --- a/algorithms/vectorizer.py +++ b/algorithms/vectorizer.py @@ -8,6 +8,7 @@ class NLPVectorizer: def __init__(self, preprocessed_output: List[PreprocessedDocument]): self.documents = preprocessed_output + self.doc_ids = [doc.doc_id for doc in preprocessed_output] # Frequencies self.token_frequency = Counter() diff --git a/main.py b/main.py index 7e396d8..5dba9f5 100644 --- a/main.py +++ b/main.py @@ -1,10 +1,6 @@ import logging import pandas as pd -from scystream.sdk.config import get_compute_block -from scystream.sdk.config.config_loader import generate_config_from_compute_block -from pathlib import Path - from scystream.sdk.core import entrypoint from scystream.sdk.env.settings import ( EnvSettings, @@ -65,7 +61,7 @@ def write_df_to_postgres(df, settings: PostgresSettings): def read_table_from_postgres(settings: PostgresSettings) -> pd.DataFrame: engine = _make_engine(settings) - query = f"SELECT * FROM {settings.DB_TABLE};" + query = f"SELECT * FROM {settings.DB_TABLE} ORDER BY doc_id;" return pd.read_sql(query, engine) @@ -92,6 +88,7 @@ def lda_topic_modeling(settings): lda = LDAModeler( dtm=dtm, vocab=vocab, + doc_ids=vectorizer.doc_ids, n_topics=settings.N_TOPICS, max_iter=settings.MAX_ITER, learning_method=settings.LEARNING_METHOD, @@ -106,8 +103,3 @@ def lda_topic_modeling(settings): # TODO: Use Spark Integration here write_df_to_postgres(doc_topics, settings.doc_topic) write_df_to_postgres(topic_terms, settings.topic_term) - - -if __name__ == "__main__": - cb = get_compute_block() - generate_config_from_compute_block(cb, Path("cbc2.yaml")) diff --git a/test/test_lda_entrypoint.py b/test/test_lda_entrypoint.py index f149f44..b69229b 100644 --- a/test/test_lda_entrypoint.py +++ b/test/test_lda_entrypoint.py @@ -116,7 +116,8 @@ def test_lda_entrypoint(s3_minio, postgres_conn): doc_topics = pd.DataFrame(cur.fetchall(), columns=[ desc[0] for desc in cur.description]) assert len(doc_topics) == 2 - assert doc_topics.shape[1] == N_TOPICS + # expect N_TOPICS + 1 for doc_id + assert doc_topics.shape[1] == N_TOPICS + 1 # 2. topic-term listing cur.execute( diff --git a/test/test_lda_modeler.py b/test/test_lda_modeler.py index e3cdae3..77b71f2 100644 --- a/test/test_lda_modeler.py +++ b/test/test_lda_modeler.py @@ -22,25 +22,40 @@ def small_dtm(): def test_lda_fit(small_dtm, small_vocab): - lda = LDAModeler(dtm=small_dtm, vocab=small_vocab, n_topics=2) + lda = LDAModeler( + dtm=small_dtm, + vocab=small_vocab, + doc_ids=["0", "1", "2"], + n_topics=2, + ) lda.fit() assert lda.lda.components_.shape == (2, 4) def test_extract_doc_topics(small_dtm, small_vocab): - lda = LDAModeler(dtm=small_dtm, vocab=small_vocab, n_topics=2) + lda = LDAModeler( + dtm=small_dtm, + vocab=small_vocab, + doc_ids=["0", "1", "2"], + n_topics=2, + ) lda.fit() df = lda.extract_doc_topics() assert isinstance(df, pd.DataFrame) - assert df.shape == (3, 2) - assert list(df.columns) == ["topic_0", "topic_1"] + assert df.shape == (3, 3) + assert list(df.columns) == ["doc_id", "topic_0", "topic_1"] def test_extract_topic_terms(small_dtm, small_vocab): - lda = LDAModeler(dtm=small_dtm, vocab=small_vocab, - n_topics=2, n_top_words=2) + lda = LDAModeler( + dtm=small_dtm, + vocab=small_vocab, + doc_ids=["1", "2", "3"], + n_topics=2, + n_top_words=2 + ) lda.fit() df = lda.extract_topic_terms() From 4d4b7585d11a1ce76bc76b2920e9eceba057eb9f Mon Sep 17 00:00:00 2001 From: PaulKalho Date: Mon, 15 Dec 2025 15:05:23 -0600 Subject: [PATCH 7/8] chore: remove minio from tests --- .github/workflows/ci.yaml | 12 ------------ test/test_lda_entrypoint.py | 33 +-------------------------------- 2 files changed, 1 insertion(+), 44 deletions(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 54f9789..a713081 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -65,18 +65,6 @@ jobs: runs-on: ubuntu-latest needs: validate-compute-block services: - minio: - image: lazybit/minio - ports: - - 9000:9000 - env: - MINIO_ROOT_USER: minioadmin - MINIO_ROOT_PASSWORD: minioadmin - options: >- - --health-cmd "curl -f http://localhost:9000/minio/health/live || exit 1" - --health-interval 5s - --health-retries 5 - --health-timeout 5s postgres: image: postgres:15 ports: diff --git a/test/test_lda_entrypoint.py b/test/test_lda_entrypoint.py index b69229b..7087b70 100644 --- a/test/test_lda_entrypoint.py +++ b/test/test_lda_entrypoint.py @@ -1,12 +1,10 @@ import os -import boto3 import pytest import psycopg2 import time import pandas as pd from pathlib import Path -from botocore.exceptions import ClientError from main import lda_topic_modeling MINIO_USER = "minioadmin" @@ -19,35 +17,6 @@ N_TOPICS = 5 -def ensure_bucket(s3, bucket): - try: - s3.head_bucket(Bucket=bucket) - except ClientError as e: - error_code = e.response["Error"]["Code"] - if error_code in ("404", "NoSuchBucket"): - s3.create_bucket(Bucket=bucket) - else: - raise - - -def download_to_tmp(s3, bucket, key): - tmp_path = Path("/tmp") / key.replace("/", "_") - s3.download_file(bucket, key, str(tmp_path)) - return tmp_path - - -@pytest.fixture -def s3_minio(): - client = boto3.client( - "s3", - endpoint_url="http://localhost:9000", - aws_access_key_id=MINIO_USER, - aws_secret_access_key=MINIO_PWD - ) - ensure_bucket(client, BUCKET_NAME) - return client - - @pytest.fixture(scope="session") def postgres_conn(): """Wait until postgres is ready, then yield a live connection.""" @@ -69,7 +38,7 @@ def postgres_conn(): raise RuntimeError("Postgres did not start") -def test_lda_entrypoint(s3_minio, postgres_conn): +def test_lda_entrypoint(postgres_conn): doc_topic_table_name = "doc_topic" topic_terms_table_name = "topic_terms" From 5ae0627bee5c443636d4644898572d27706597ae Mon Sep 17 00:00:00 2001 From: PaulKalho Date: Sat, 17 Jan 2026 14:56:34 -0600 Subject: [PATCH 8/8] chore: use list native --- algorithms/lda.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/algorithms/lda.py b/algorithms/lda.py index f8d3534..3364ee3 100644 --- a/algorithms/lda.py +++ b/algorithms/lda.py @@ -3,8 +3,6 @@ import numpy as np import pandas as pd -from typing import List - from sklearn.decomposition import LatentDirichletAllocation logger = logging.getLogger(__name__) @@ -15,7 +13,7 @@ def __init__( self, dtm: np.ndarray = None, vocab: dict = None, - doc_ids: List[str] = [], + doc_ids: list[str] = [], n_topics: int = 10, max_iter: int = 10, learning_method: str = "batch",