From 327fce8db0c5ac62a1f40e6630d09cf57a0958ac Mon Sep 17 00:00:00 2001 From: Li Shumin Date: Sat, 19 Oct 2024 23:19:22 +0800 Subject: [PATCH] initial code upload --- AutoPM3_main.py | 432 ++++++++++++++++++++++++++++++++++++++ PM3-Bench/README.md | 0 README.md | 113 +++++++++- images/img1.png | Bin 0 -> 160806 bytes lit.py | 66 ++++++ protein.txt | 21 ++ requirements.txt | 85 ++++++++ table_functions.py | 499 ++++++++++++++++++++++++++++++++++++++++++++ utils.py | 178 ++++++++++++++++ 9 files changed, 1393 insertions(+), 1 deletion(-) create mode 100644 AutoPM3_main.py create mode 100644 PM3-Bench/README.md create mode 100644 images/img1.png create mode 100644 lit.py create mode 100644 protein.txt create mode 100644 requirements.txt create mode 100644 table_functions.py create mode 100644 utils.py diff --git a/AutoPM3_main.py b/AutoPM3_main.py new file mode 100644 index 0000000..d293efd --- /dev/null +++ b/AutoPM3_main.py @@ -0,0 +1,432 @@ +from langchain_community.llms import Ollama +from langchain.text_splitter import RecursiveCharacterTextSplitter,CharacterTextSplitter +from langchain_community.vectorstores import FAISS +from langchain.chains import RetrievalQA +from langchain import PromptTemplate +from langchain.globals import set_verbose, set_debug +import requests + +from bioc import biocxml +# Import the following stuff for implementing custom retrievers +from typing import List, Dict +from langchain_core.documents import Document +from langchain_core.retrievers import BaseRetriever + +from table_functions import table_extraction_n_sqlQA +from utils import extractTablesFromXML + +set_debug(False) + +# the second item is the number of returned chunks +# the third item is the abbreviated protein change notation +retriever_OK = [ False, 0, None ] + + +import textwrap +import os +import time +from argparse import ArgumentParser +import sys +import glob +import json +import re +import tempfile + + +os.environ['CURL_CA_BUNDLE'] = '' # Fix SSL error for Mutalyzer3 + +PROTEIN_MAPPING_FILE = './protein.txt' + +# enum types +VARIANT_QUERY = 0 +INTRANS_QUERY = 1 +C_VARIANT = 0 # c.123A>G +P_VARIANT = 1 # protein change + + +from func_timeout import func_set_timeout +import func_timeout + + +class VariantSpecificRetriever(BaseRetriever): + documents: List[Document] + k: int + protein_map: Dict[str, str] + + # Assumes "query" to be the target variant (in HGVS notation) + def _get_relevant_documents(self, query): + variant = query + # Remove the contig name (NM_xxxxxx) + target_var = variant.split(":")[-1] + # Remove c.() from the variant notation (by default is c.(123A>G) or c.123A>G) + var_dna = target_var.replace('c.', '').replace('(', '').replace(')', '') + # Translate the mutation to protein change using Mutalyzer + var_protein = None + var_protein_short = None + try: + r = requests.get(f'https://mutalyzer.nl/api/normalize/{variant}?only_variants=false') + j = r.json() + returned_prot = j['protein']['description'].split(':')[-1] + # Remove the p.() + m = re.match(r'p.\((.*)\)', returned_prot) + prot = m.group(1) + if len(prot) < 5: # Too short (sometimes Mutalyzer returns something like p.(=) ) + raise Exception(f'Protein change too short: {returned_prot}') + # Sometimes the protein mutation is like Cys1447Glnfs29 but some papers write as Cys1447fs, + # so we remove the whole Glnfs part + var_protein = re.sub(r'[A-Za-z]{3}fs.*', '', prot) + # Convert the protein to short form ( -> ) + var_protein_short = var_protein + for (k,v) in self.protein_map.items(): + var_protein_short = var_protein_short.replace(k, v) + # Remove X and * (meaning Terminal) from the protein notation, since we don't know the paper is using which one + var_protein = var_protein.replace('X', '').replace('*', '') + var_protein_short = var_protein_short.replace('X', '').replace('*', '') + #print(f'Protein : {var_protein} ({var_protein_short})') + except KeyError as e: + #print('Protein: [ERROR] Not found by Mutalyzer') + pass + except Exception as e: + #print(f'Protein : [ERROR] {e}') + pass + + # Done with conversion. Now do the retrieval (= regex matching) + + retrieved_chunks = [] + # Construct the regex pattern for DNA: + # 1. 123A>G becomes \s*123\s*A>G (allow spaces around numbers) + # 2. Further becomes \s*123\s*123A\s*>\s*G (allow spaces around > ) + dna_pattern = re.sub('([0-9]+)', '\\\\s*\\1\\\\s*', re.escape(var_dna)) + dna_pattern = re.sub('(>)', '\\\\s*\\1\\\\s*', dna_pattern) + dna_matcher = re.compile(dna_pattern, re.IGNORECASE) + for chunk in self.documents: + # Re-encode the text to get rid of those annoying Unicode \x80\x89 (whitespaces) + text = chunk.page_content.encode('utf-8').decode('unicode_escape').encode('latin-1').decode('utf-8') + if dna_matcher.search(text) or \ + var_protein and chunk.page_content.find(var_protein) >= 0 or \ + var_protein_short and chunk.page_content.find(var_protein_short) >= 0: + retrieved_chunks += [ chunk ] + # If neither DNA nor protein change could retrieve anything, + # we resort to matching by positions only... + if not retrieved_chunks: + dig_dna = re.findall(r'\d+', var_dna) + dig_protein = re.findall(r'\d+', var_protein) if var_protein else None + dig_dna_matcher = re.compile('\D' + str(dig_dna[0]) + '\D') if dig_dna else None + dig_protein_matcher = re.compile('\D' + str(dig_protein[0]) + '\D') if dig_protein else None + for chunk in self.documents: + if dig_dna_matcher and dig_dna_matcher.search(chunk.page_content) or \ + dig_protein_matcher and dig_protein_matcher.search(chunk.page_content): + retrieved_chunks += [ chunk ] + if len(retrieved_chunks) > 0: + retriever_OK[0] = True + retriever_OK[1] = len(retrieved_chunks) + retriever_OK[2] = var_protein_short + return retrieved_chunks[:self.k] + + +# Load the protein abbreviatioon map from a file +def load_protein_map(filename): + with open(filename, 'r') as f: + lines = f.read().splitlines() + m = { x.split()[0]: x.split()[1] for x in lines } + return m + + +# Load paper from XML file +def load_xml_paper(filename, filter_tables=False): + out_doc = '' + with open(filename, 'r', encoding='utf8') as fp: # better use utf8 + collection = biocxml.load(fp) + document = collection.documents[0] + for passage in document.passages: + section_type = passage.infons.get('section_type', '').upper() + if filter_tables and section_type in [ 'TABLE', 'REF', 'COMP_INT', 'AUTH_CONT', 'SUPPL' ]: + pass # filter away this section + else: + out_doc += passage.text + '\n' + return out_doc + + + +template_PM3_answer_chain_llama3 = """\ +<|begin_of_text|><|start_header_id|>system<|end_header_id|> +You are a specialist in biogenetics, answer only based on user's input!<|eot_id|> +<|start_header_id|>user<|end_header_id|> +The variant in HGVS format is {question}, don't include this in your answer if condisering compound het variants. +Given the context: '{context}' and target variant {c_variant}. Answer the question: {proposedQuestion}<|eot_id|>. +<|start_header_id|>assistant<|end_header_id|>\n +""" + + + +def split_docs(documents,chunk_size=1500,chunk_overlap=100): +# Responsible for splitting the documents into several chunks + + # Initializing the RecursiveCharacterTextSplitter with + # chunk_size and chunk_overlap + text_splitter = RecursiveCharacterTextSplitter( + chunk_size=chunk_size, + chunk_overlap=chunk_overlap + ) + + # Splitting the documents into chunks + chunks = text_splitter.split_documents(documents=documents) + + # returning the document chunks + return chunks + + + + + +# Creating the chain for Question Answering +def load_qa_chain(retriever, llm, prompt): + + return RetrievalQA.from_chain_type( + llm=llm, + retriever=retriever, # here we are using the vectorstore as a retriever + chain_type="stuff", + return_source_documents=True, # including source documents in output + chain_type_kwargs={'prompt': prompt, "verbose": False} # customizing the prompt + ) + + + + +# Prettifying the response +@func_set_timeout(300) +def get_answers_PM3(query, chain): + + # Getting response from chain + input_dict = {'query': query} + + response = chain(input_dict) + + return response + +def loadTextModel(model_name): + print("Loading model",model_name) + if "llama3" in model_name: + llm_a = Ollama(model=model_name,temperature=0.0, top_p = 0.9, stop=["<|start_header_id|>", "<|end_header_id|>", "<|eot_id|>", "<|reserved_special_token"]) + elif model_name == "phi3": + + llm_a = Ollama(model=model_name,temperature=0.0, top_p = 0.9, stop=["<|user|>","<|assistant|>","<|system|>","<|end|>","<|endoftext|>", "<|reserved_special_token"]) + else: + llm_a = Ollama(model=model_name,temperature=0.0, top_p = 0.9) + print("Loading model DONE") + return llm_a + +def main(): + parser = ArgumentParser(description='AutoPM3') + parser.add_argument( + '--model_name_text', + help="llm used for answering generated questions", + required=False, + default='llama3_loraFT-8b-f16', + ) + parser.add_argument( + '--model_name_table', + help="llm used for table queries", + required=False, + default='sqlcoder-7b-Mistral-7B-Instruct-v0.2-slerp.Q8_0', + ) + parser.add_argument( + '--query_variant', + help="query variant in HGVS format", + required=True, + ) + parser.add_argument( + '--paper_path', + help="paper_path of the query literature", + required=True, + ) + + + # print help message if no argument input + if len(sys.argv) <= 1 or sys.argv[1] == "-h" or sys.argv[1] == "--help": + parser.print_help(sys.stderr) + sys.exit(0) + + args = parser.parse_args() + results = query_variant_in_paper_xml(args.query_variant,args.paper_path,args.model_name_table,args.model_name_text) + print(results) + + +def query_variant_in_paper_xml(query_variant, xml_path, model_name_table, model_name_text): + + llm_a = loadTextModel(model_name_text) + llm_table = [Ollama(model=model_name_table, temperature=0.0, top_p=0.9) ] + + # Read protein abbreviation table + protein_map = load_protein_map(PROTEIN_MAPPING_FILE) + + # check if the query variant is in the correct format (TODO) + c_variant = query_variant.split(":")[-1] + + # Check if the paper (XML, PDF) exists + xml_fn =xml_path + + if not os.path.exists(xml_fn): + print('XML paper not found. Abort.') + sys.exit(-1) + + # Load the XML paper and filter away tables and useless sections, + # then split into chunks + doc_filtered = load_xml_paper(xml_fn, filter_tables=True) + doc_wrapper = [ Document(page_content = doc_filtered, metadata = {'source': 'local'}) ] + doc_chunks = split_docs(doc_wrapper) + # Try our custom retriever + variant_retriever = VariantSpecificRetriever(documents=doc_chunks, k=5, protein_map=protein_map) + variant_hgvs = query_variant + + try: + r = requests.get(f'https://mutalyzer.nl/api/normalize/{query_variant}?only_variants=false') + j = r.json() + protein = j['protein']['description'].split(':')[-1] + if protein == 'p.(=)': + raise Exception('invalid notation') + + c_protein_id = re.findall(r"\d+",protein) + except Exception as e: + + protein = None + protein_short = None + + + ########################## + # Do table queries first # + ########################## + table_src_contains_variant = False + table_query_results = [] + + # Find all the table CSV files for this PMID + #relevant_tables = [ f for f in table_csv_files if str(c_pmid) in f ] + relevant_tables = extractTablesFromXML(xml_fn) + c_variant_id = None + c_max = 0 + c_tmp_digit = re.findall(r"\d+",c_variant) + for c_digit in c_tmp_digit: + if len(c_digit) > c_max: # 3 + c_variant_id = c_digit + c_max = len(c_digit) + + if relevant_tables: + variant_alias = [c_variant_id, c_protein_id[0]] if protein is not None and len(c_protein_id) > 0 else [c_variant_id] + + csv_files = [] + csv_filenames = [] + # Write the extracted tables to temporary CSV files + for table in relevant_tables: + + tmpfile = tempfile.NamedTemporaryFile(mode='w', suffix='.csv', delete=True) + csv_files.append(tmpfile) + csv_filenames.append(tmpfile.name) + #print("temp tables",tmpfile.name) + table.to_csv(tmpfile.name,index=False) + table_query_return = table_extraction_n_sqlQA(csv_filenames, model_name_table, + query_variant_list=variant_alias, llm=llm_table, llm_qa=llm_table, show_errors=False) + + # Close and delete the temp files + for tmpfile in csv_files: + tmpfile.close() + + if table_query_return is None: + + pass + #print('[ERROR] Something went wrong with the tables.') + else: + ( table_query_results, table_src_contains_variant ) = table_query_return[:2] + # Collect the answer candidates from the returned results + table_results_plaintext = [] + for c_cmd in table_query_results: + for c_answer in c_cmd[1]: + if not isinstance(c_answer, tuple): + try: + table_results_plaintext.append(c_answer['plainText']) + except Exception as e: + pass + else: + table_results_plaintext = ["No table found"] + ########################### + # Now do the text queries # + ########################### + + # We use "protein" instead of "c_protein_id[0]" for text. + # - "protein": The protein change returned by Mutalzyer + # - "c_protein_id[0]": Only the digits in "protein" + + variant_alias = [c_variant, protein] if protein is not None and len(c_protein_id) > 0 else [c_variant] + + text_variant_hit = False + text_intrans_list = [] + text_src_contains_variant = False + text_variant_answer = "" + + MAX_RETRIES = 1 # number of retries before giving up + + PM3_answer_prompt = PromptTemplate.from_template(template_PM3_answer_chain_llama3) + for c_index, current_variant in enumerate(variant_alias): + + for query_type in range(2): # variant query, in-trans query + retriever_OK[0] = False + if query_type == VARIANT_QUERY: + my_predefined_query = f"Does the paper mention the queried variant ({current_variant}) and what is the surrounding context?" + f"""if such variant is existed, say *YES* at first otherwise say *None* (focus on variant: {current_variant})""" + elif query_type == INTRANS_QUERY: + my_predefined_query = f"If {current_variant} is compound heterozygous with another variant, name it; if {current_variant} is homozygous, say homozygous; if no related variant is found, say *None*. List all results seperated by comma and wrap the answers by *.""" + + num_retries = 0 + query_success = False + while not query_success and num_retries <= MAX_RETRIES: + try: + PM3_answer_chain = load_qa_chain(variant_retriever, llm_a, PM3_answer_prompt.partial(proposedQuestion=my_predefined_query, c_variant=current_variant)) + cur_answers_all = get_answers_PM3(variant_hgvs, PM3_answer_chain) + if not retriever_OK[0]: + break + else: + text_src_contains_variant = True + protein_short = retriever_OK[2] + cur_answers = cur_answers_all['result'] + query_success = True + except func_timeout.exceptions.FunctionTimedOut: + del llm_a; + llm_a = loadTextModel(model_name_text) + num_retries += 1 + + if not query_success: + continue + + # Wrapping the text for better output in Jupyter Notebook + wrapped_text = textwrap.fill(cur_answers_all['result'], width=100) + + if query_type == VARIANT_QUERY: + source_doc = cur_answers_all['source_documents'] + c_variant_inRetrieved = False + for page in source_doc: + c_rsids = re.findall(current_variant if c_index == C_VARIANT else c_protein_id[0], page.page_content) + if len(c_rsids) > 0: + c_variant_inRetrieved = True + if 'yes' in cur_answers.lower(): + text_variant_hit = True + if c_index == C_VARIANT: + text_variant_answer = "\n- **[DNA match result]**:"+cur_answers + else: + text_variant_answer += "\n- **[Protein match result]**:"+cur_answers + elif text_variant_answer == "": + text_variant_answer = "\n- **Variant not found in text part!**" + + elif query_type == INTRANS_QUERY: + if "none" not in cur_answers.lower() or "contain" in cur_answers.lower(): + text_intrans_list.append(cur_answers) + #text_intrans_list.append(cur_answers) + + + table_results_plaintext_output = [str(xx).strip("\n") + "\n\n" for xx in table_results_plaintext] + #print(f'# Output Summary: \n \n## **Query Variant and Relative Intrans-variant/Genotype Found in PaperTables**: \n{"".join([str(xx) for xx in table_results_plaintext_output])} \n \n## **Query Variant Found in PaperText**: \n- {text_variant_answer if text_variant_hit != "" else "Variant not found in text part!"} \n \n## **Query Variant\'s Intrans-variant Found in PaperText**: \n{text_intrans_list if text_variant_answer != "Variant not found in text part!" and text_intrans_list else "None!"}') + results = f'# Output Summary: \n \n## **Query Variant and Relative Intrans-variant/Genotype Found in PaperTables**: \n{"".join([str(xx) for xx in table_results_plaintext_output])} \n \n## **Query Variant Found in PaperText**: \n- {text_variant_answer if text_variant_hit != "" else "Variant not found in text part!"} \n \n## **Query Variant\'s Intrans-variant Found in PaperText**: \n{text_intrans_list if text_variant_answer != "Variant not found in text part!" and text_intrans_list else "None!"}' + return results + + +if __name__ == "__main__": + + main() + diff --git a/PM3-Bench/README.md b/PM3-Bench/README.md new file mode 100644 index 0000000..e69de29 diff --git a/README.md b/README.md index 98bbb5a..cb9140c 100644 --- a/README.md +++ b/README.md @@ -1 +1,112 @@ -# AutoPM3 \ No newline at end of file +# AutoPM3: Enhancing Variant Interpretation via LLM-driven PM3 Evidence Extraction from Scientific Literature + +[![License](https://img.shields.io/badge/license-MIT-blue)](https://opensource.org/license/mit/) + + +Contact: Ruibang Luo, Shumin Li + +Email: rbluo@cs.hku.hk, lishumin@connect.hku.hk + + +## Introduction +We introduce AutoPM3, a method for automating the extraction of ACMG/AMP PM3 evidence from scientific literature using open-source LLMs. It combines an optimized RAG system for text comprehension and a TableLLM equipped with Text2SQL for data extraction. We evaluated AutoPM3 using our collected PM3-Bench, a dataset from ClinGen with 1,027 variant-publication pairs. AutoPM3 significantly outperformed other methods in variant hit and in trans variant identification, thanks to the four key modules. Additionally, we wrapped AutoPM3 with a user-friendly interface to enhances its accessibility. This study presents a powerful tool to improve rare disease diagnosis workflows by facilitating PM3-relevant evidence extraction from scientific literature. + +![](./images/img1.png) +--- + +## Contents + +- [Latest Updates](#latest-updates) +- [Installations](#installation) + - [Dependency Installation](#dependency-installation) + - [Ollama Setup](#using-ollama-to-host-llms) +- [Usage](#usage) + - [Quick Start](#quick-start) + - [Advanced Usage](#advanced-usage-of-the-python-script) +- [TODO](#todo) +--- + +## Latest Updates +* v0.1 (Oct, 2024): Initial release. +--- + +## Installation +### Dependency Installation +```bash +conda create -n AutoPM3 python=3.10 +conda activate AutoPM3 +pip3 install -r requirements.txt +``` + +### Using Ollama to host LLMs +1. Download Ollama [Guidance](https://github.com/ollama/ollama) +2. Change the directory of Ollama models: +```bash +# please change the target folder as you prefer +mkdir ollama_models +export OLLAMA_MODELS=./ollama_models +``` + +3. Launch Ollama server: + +```bash + +ollama serve + +``` + +3. Download sqlcoder-mistral-7B model and fine-tuned Llama3: +```bash +cd $OLLAMA_MODELS +wget https://huggingface.co/MaziyarPanahi/sqlcoder-7b-Mistral-7B-Instruct-v0.2-slerp-GGUF/resolve/main/sqlcoder-7b-Mistral-7B-Instruct-v0.2-slerp.Q8_0.gguf?download=true +mv 'sqlcoder-7b-Mistral-7B-Instruct-v0.2-slerp.Q8_0.gguf?download=true' 'sqlcoder-7b-Mistral-7B-Instruct-v0.2-slerp.Q8_0.gguf' +echo "FROM ./sqlcoder-7b-Mistral-7B-Instruct-v0.2-slerp.Q8_0.gguf" >Modelfile1 +ollama create sqlcoder-7b-Mistral-7B-Instruct-v0.2-slerp.Q8_0 -f Modelfile1 + +wget http://bio8.cs.hku.hk/AutoPM3/llama3_loraFT-8b-f16.gguf +echo "FROM ./llama3_loraFT-8b-f16.gguf" >Modelfile2 +ollama create llama3_loraFT-8b-f16 -f Modelfile2 + +``` + +5. Check the created models: + +```bash + +ollama list + +``` + +6. (Optional) Download other models as the backend of the RAG system: +``` +# e.g. download Llama3:70B +ollama pull llama3:70B + +``` + +## Usage + +### Quick start + +* Step 1. Launch the local web-server: +```bash +streamlit run lit.py +``` +* Step 2. Copy the following `http://localhost:8501` to the brower and start to use. + +### Advanced usage of the python script + +* Check the help of AutoPM3_main.py +```bash +python AutoPM3_main.py -h +``` +* The example of running python scripts: +```bash +python AutoPM3_main.py +--query_variant "NM_004004.5:c.516G>C" ## HVGS format query variant +--paper_path ./xml_papers/20201936.xml ## paper path. +--model_name_text llama3_loraFT-8b-f16 ## change to llama3:70b or other hosted models as the backend of RAG as you prefer, noted that you need pull the model in Ollama in advance. +``` + +## TODO +* A fast set up for AutoPM3. \ No newline at end of file diff --git a/images/img1.png b/images/img1.png new file mode 100644 index 0000000000000000000000000000000000000000..4bbce00212b4cb627c895cb5038ac3ce2b55ad96 GIT binary patch literal 160806 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 Z{006r8Kd;vn<(I)lAOA1sr1tq{}%;TJpcdz literal 0 HcmV?d00001 diff --git a/lit.py b/lit.py new file mode 100644 index 0000000..2d3b014 --- /dev/null +++ b/lit.py @@ -0,0 +1,66 @@ +import streamlit as st +import os +import requests + +from AutoPM3_main import query_variant_in_paper_xml + + +# Function to load a XML file from a URL +def load_xml(url,pmid): + + temp_paper_file_root = "./xml_papers" + if(not os.path.exists(temp_paper_file_root)): + os.mkdir(temp_paper_file_root) + fn = str(pmid)+".xml" + xml_path = os.path.join(temp_paper_file_root,fn) + if(os.path.exists(xml_path)): + return xml_path + + headers = { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3" + } + response = requests.get(url, headers=headers) + if response.status_code == 200 and response.headers['Content-type'] == 'text/xml': + xml_data = response.content + # save it to the temp dir + with open(xml_path, 'wb') as f: + f.write(response.content) + return xml_path + else: + raise Exception('Invalid PMID. Make sure the publication has OpenAccess.') + return None + + +# Function to display model results +def display_results(model, data): + # Assuming 'model' is your trained model and 'data' is the input to the model + results = model.predict(data) + st.write(results) + +# Main +st.title('AutoPM3') + +variant_name = st.text_input('Step 1. Enter the variant (HGVS notation)') + +# Get the URL of the XML from the user +paper_url = '' +pmid = st.text_input('Step 2. Enter the PMID of the paper') +if pmid: + try: + pmid = int(pmid) + paper_url = f'https://www.ncbi.nlm.nih.gov/research/bionlp/RESTful/pmcoa.cgi/BioC_xml/{pmid}/unicode' + except ValueError: + st.write('Invalid PMID.') + +if st.button('Run', type='primary'): + summarized_results = "" + if paper_url and variant_name: + try: + # Load and display the XML + xml_path = load_xml(paper_url,pmid) + summarized_results = query_variant_in_paper_xml(variant_name, xml_path, 'sqlcoder-7b-Mistral-7B-Instruct-v0.2-slerp.Q8_0', 'llama3_loraFT-8b-f16') + # Display the summarized results + st.write(summarized_results) + except Exception as e: + st.write('An error has occurred.') + st.write(str(e)) diff --git a/protein.txt b/protein.txt new file mode 100644 index 0000000..0ac041c --- /dev/null +++ b/protein.txt @@ -0,0 +1,21 @@ +Ala A +Arg R +Asn N +Asp D +Cys C +Gln Q +Glu E +Gly G +His H +Ile I +Leu L +Lys K +Met M +Phe F +Pro P +Ser S +Ter X +Thr T +Trp W +Tyr Y +Val V diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..7a432d3 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,85 @@ +aiohappyeyeballs==2.4.3 +aiohttp==3.10.10 +aiosignal==1.3.1 +altair==5.4.1 +annotated-types==0.7.0 +anyio==4.6.2.post1 +async-timeout==4.0.3 +attrs==24.2.0 +beautifulsoup4==4.12.2 +bioc==2.1 +blinker==1.8.2 +cachetools==5.5.0 +certifi==2024.8.30 +charset-normalizer==3.4.0 +click==8.1.7 +dataclasses-json==0.6.7 +docopt==0.6.2 +exceptiongroup==1.2.2 +frozenlist==1.4.1 +func_timeout==4.3.5 +gitdb==4.0.11 +GitPython==3.1.43 +greenlet==3.1.1 +h11==0.14.0 +httpcore==1.0.6 +httpx==0.27.2 +idna==3.10 +intervaltree==3.1.0 +Jinja2==3.1.4 +jsonlines==4.0.0 +jsonpatch==1.33 +jsonpointer==3.0.0 +jsonschema==4.23.0 +jsonschema-specifications==2024.10.1 +langchain==0.2.16 +langchain-community==0.2.6 +langchain-core==0.2.41 +langchain-experimental==0.0.63 +langchain-text-splitters==0.2.4 +langsmith==0.1.136 +lxml==5.2.2 +markdown-it-py==3.0.0 +MarkupSafe==3.0.2 +marshmallow==3.23.0 +mdurl==0.1.2 +multidict==6.1.0 +mypy-extensions==1.0.0 +narwhals==1.9.4 +numpy==1.26.4 +orjson==3.10.7 +packaging==24.1 +pandas==2.2.2 +pillow==10.4.0 +propcache==0.2.0 +protobuf==5.28.2 +pyarrow==17.0.0 +pydantic==2.9.2 +pydantic_core==2.23.4 +pydeck==0.9.1 +Pygments==2.18.0 +python-dateutil==2.9.0.post0 +pytz==2024.2 +PyYAML==6.0.2 +referencing==0.35.1 +requests==2.32.3 +requests-toolbelt==1.0.0 +rich==13.9.2 +rpds-py==0.20.0 +six==1.16.0 +smmap==5.0.1 +sniffio==1.3.1 +sortedcontainers==2.4.0 +soupsieve==2.6 +SQLAlchemy==2.0.36 +streamlit==1.39.0 +tenacity==8.5.0 +toml==0.10.2 +tornado==6.4.1 +tqdm==4.66.5 +typing-inspect==0.9.0 +typing_extensions==4.12.2 +tzdata==2024.2 +urllib3==2.2.3 +watchdog==5.0.3 +yarl==1.15.5 diff --git a/table_functions.py b/table_functions.py new file mode 100644 index 0000000..c4a76aa --- /dev/null +++ b/table_functions.py @@ -0,0 +1,499 @@ +from langchain_community.llms import Ollama +from langchain.chains import RetrievalQA,RetrievalQAWithSourcesChain +from langchain import PromptTemplate +from langchain_core.output_parsers import StrOutputParser +import langchain +from langchain import SQLDatabase +from langchain_experimental.sql import SQLDatabaseChain +from langchain.chains.sql_database.prompt import PROMPT, SQL_PROMPTS +from langchain import LLMChain + +import pandas as pd +import ast +import textwrap +import os +import time +from argparse import ArgumentParser +import sys +import glob +import json +import re + + +import os +import time +from argparse import ArgumentParser +import sys +import json +import math +import requests +from func_timeout import func_set_timeout +import func_timeout + + +import sqlite3 + +langchain.verbose = False + +TABLE_PARAMETER = "{TABLE_PARAMETER}" +c_tr_index = "{c_tr_index}" +DROP_TABLE_SQL = f"DROP TABLE {TABLE_PARAMETER};" +GET_TABLES_SQL = "SELECT name FROM sqlite_schema WHERE type='table';" +GET_ROW_SQL = f"""SELECT * FROM {TABLE_PARAMETER} WHERE "index" = {c_tr_index};""" +def delete_all_tables(con): + tables = get_tables(con) + delete_tables(con, tables) + +def get_row(con, c_table, c_index): + cur = con.cursor() + sql = GET_ROW_SQL.replace(TABLE_PARAMETER, c_table); sql = sql.replace(c_tr_index, str(c_index)) + cur.execute(sql) + rows = cur.fetchall() + cur.close() + return rows + + +def get_tables(con): + cur = con.cursor() + cur.execute(GET_TABLES_SQL) + tables = cur.fetchall() + cur.close() + return tables + + +def delete_tables(con, tables): + cur = con.cursor() + for table, in tables: + sql = DROP_TABLE_SQL.replace(TABLE_PARAMETER, table) + cur.execute(sql) + cur.close() + +@func_set_timeout(40) +def table2text(llm, tableRow, question): + llm_chain = LLMChain( + llm=llm, + prompt=PromptTemplate.from_template(template_PM3_table2text) + ) + + result = llm_chain.generate([{"tableData":tableRow, "question":question}]) + return result.generations[0][0].text + + +@func_set_timeout(40) +def tableNtext_qa(llm, tableRow, pt, question): + llm_chain = LLMChain( + llm=llm, + prompt=PromptTemplate.from_template(template_PM3_tableNtext_qa) + ) + + result = llm_chain.generate([{"tableData":tableRow, "pt":pt, "question":question}]) + return result.generations[0][0].text + +@func_set_timeout(40) +def wrapper(func, query): + return(func(query)) + + + +def is_number(s): + try: + float(s) + return True + except ValueError: + pass + + return False + + +# for benchmarking only, generate half-sturctured data in plain text from single table_row +template_PM3_table2text = """ +### System: +You are reading the structured data given in the Context and try to rephrase it in plain text. In each line, the attribute name(header) is on the left of *:*, then corresponding attribute value is on the right. + +### Context: +{tableData} + +### User: +Each variant/mutation must contain alphabet letters with several digits, don't make up non-existed variants/mutations. +Limit your answer under 25 words. +Stop the answer by the word *END*. +Please read the above provided structured data in context and just answer the given question in short plain text. Question: {question}'\ +### Response: + +""" + + + + +template_PM3_tableNtext_qa = """ +### System: +You are reading the structured data and it's corresponding plain text description given in the Context, try to answer user's question based on these. For structured data, in each line, the attribute name(header) is on the left of *:*, then corresponding attribute value is on the right. + +### Context: +structured data {tableData} + +plain text description {pt} + +### User: +Limit your answer under 100 words and don't repeat the context or any info you are given. Please read the above provided structured data and it's corresponding plain text description in context and just answer the given question. Question: {question}'\ +### Response: + +""" + + + + +# for q4,8 +sqlquery_template = 'Given an input question, first create a syntactically correct {dialect} query to run, then look at the results \ +of the query and return the answer. Strict your query to a short one and dont give a long answer. *Never* use limitation to limit your query like: LIMIT {top_k} except user asked for certain row.\nWhen no specific column names are given, you can check for the answer in all columns using "OR" operator.\n\n\ +Unless exactly match is required by user, use LIKE other than = in the query\n\ +Never sort the results. If user asks for certain row, use LIMIT operator!\n\ +Never give a sql that will return all content in the table if not explicitly asked\n\ +Only give one query ended with \';\' eachtime!\n\ +Carefully check the statement after WHERE clause, don\'t mix up column_name with user\'s query string, and keep the string integral for matching!\n\ +When using LIKE operator, note to put column names on the left and query string on the right, don\'t reverse it\n\ +Don\'t forget to append ; at the end of query and no order is needed!\n\nPay attention to use only the column \ +names that you can see in the schema description. Be careful to not query for columns that do not exist. Also, pay \ +attention to which column is in which table.\n\nUse the following format:\n\nQuestion: Question here\nSQLQuery: SQL \ +Query to run\nSQLResult: Result of the SQLQuery\nAnswer: Final answer here\n\nOnly use the \ +following tables:\n{table_info}\n\nQuestion: {input}' + + +""" +# for q2 +sqlquery_template = 'Given an input question, first create a syntactically correct {dialect} query to run, then look at the results \ +of the query and return the answer. Only generate a single short query statement to run. *Never* use limitation to limit your query like: LIMIT {top_k}.\nThe query you generate should check all columns using OR operator.\n\n\ +The OR operator should involve all columns you can see, don\'t only choose several columns by yourself\n\ +Unless exactly match is required by user, use LIKE other than = in the query\n\ +Don\'t forget to append ; at the end of query\n\nPay attention to use only the column \ +names that you can see in the schema description. Be careful to not query for columns that do not exist. Also, pay \ +attention to which column is in which table.\n\nUse the following format:\n\nQuestion: Question here\nSQLQuery: SQL \ +Query to run\nSQLResult: Result of the SQLQuery\nAnswer: Final answer here\n\nOnly use the \ +following tables:\n{table_info}\n\nQuestion: {input}' +""" + +def table_extraction_n_sqlQA(current_paper_tables, model_name, query_variant_list, additional_question=None, llm=None, llm_qa=None, show_errors=True): + + df_list = [] + for c_table in current_paper_tables: + try: + df_list.append(pd.read_csv(c_table, header=None)) + except Exception as e: + print(f"current table is invalid: {c_table}") + valid_df_tables = [] + variant_insource = False + + for df in df_list: + c_len = 0 + for idx,row in df.iterrows(): + for row_i in range(len(row)): + c_len += len(str(row[row_i])) + + + c_num_col = len(df.axes[1]) + c_len /= len(list(df.iterrows())) + + #print(f"num_col: {c_num_col}; avg col_len= {c_len/c_num_col}") + + #print("-------------------------------") + if True:#c_len <= 80 and c_len >= 15: # filter extracted tables by avg row_len (large: plain text block, tiny: nonsense piece) + valid_df_tables.append(df) + for c_variant in query_variant_list: + for col in df.columns: + insource_result = df[df[col].astype(str).str.contains(c_variant, regex= True, na=False)] + if len(insource_result) > 0: + variant_insource = True + #print(insource_result) + break + if variant_insource: + break + #print(df) + table_chunks = math.ceil(len(valid_df_tables) / 5) + + basic_query_answers_list = [] + + for c_chunk in range(table_chunks): + shift = c_chunk*5 + conn = sqlite3.connect('PDFpaper_Table_extractions.db') + + delete_all_tables(conn) + + for df_idnex, df in enumerate(valid_df_tables[shift:shift+5 if c_chunkG" #"p.Asn346His" # c.104del # c.516G>C + + sqlite_db_path = "./PDFpaper_Table_extractions.db" + db = SQLDatabase.from_uri(f"sqlite:///{sqlite_db_path}") + + prompt = sqlquery_template.replace("{dialect}", db.dialect) + prompt = PromptTemplate.from_template(prompt) + + # return_direct: return the sql result directly + #@func_set_timeout(180)#设定函数超执行时间_ + db_chain = SQLDatabaseChain.from_llm(llm[0], db, prompt=prompt, use_query_checker=False, verbose=False, return_intermediate_steps=True, return_direct=True) + + c_unique_rows = [] + for c_vindx, query_variant in enumerate(query_variant_list): + for idx in range(current_end_index+1): + current_table = "current_paper_table_" + str(idx) + current_table_source_index = idx + shift + + ## basic QA + q0 = f"get the first row in table {current_table}? (take the result given by SQLResult:)" + try: + + result0 = wrapper(db_chain,q0) + + + except Exception as e: + if show_errors: + print(f"[ERROR] error when running question-0 on table {current_table}: {e}") + result0 = None + except func_timeout.exceptions.FunctionTimedOut: + result0 = None + del db_chain; llm.clear(); + llm.append(Ollama(model=model_name, temperature=0.0, top_p = 0.9)) + db_chain = SQLDatabaseChain.from_llm(llm[0], db, prompt=prompt, use_query_checker=False, verbose=False, return_intermediate_steps=True, return_direct=True) + + + ## basic QA + q1 = f"how many rows in table {current_table}? (take the result given by SQLResult:)" + try: + result1 = wrapper(db_chain,q1) + + except Exception as e: + if show_errors: + print(f"[ERROR] error when running question-1 on table {current_table}: {e}") + result1 = None + except func_timeout.exceptions.FunctionTimedOut: + result1 = None + del db_chain; llm.clear(); + llm.append(Ollama(model=model_name, temperature=0.0, top_p = 0.9)) + db_chain = SQLDatabaseChain.from_llm(llm[0], db, prompt=prompt, use_query_checker=False, verbose=False, return_intermediate_steps=True, return_direct=True) + + q2 = f"search for the string: '{query_variant}' through every column in table {current_table} using OR? (find all, no limit, column names should be like 0,1,2 as u can see in the schema)" + try: + result2 = wrapper(db_chain,q2) + + except Exception as e: + if show_errors: + print(f"[ERROR] error when running question-2 on table {current_table}: {e}") + result2 = None + except func_timeout.exceptions.FunctionTimedOut: + result2 = None + del db_chain; llm.clear(); + llm.append(Ollama(model=model_name, temperature=0.0, top_p = 0.9)) + db_chain = SQLDatabaseChain.from_llm(llm[0], db, prompt=prompt, use_query_checker=False, verbose=False, return_intermediate_steps=True, return_direct=True) + + q3 = f"Question: find all rows that contain the string '{query_variant}' in any column (don\'t only consider one column) (check all columns in table {current_table}) (find all, no limit)" + try: + result3 = wrapper(db_chain,q3) + + except Exception as e: + if show_errors: + print(f"[ERROR] error when running question-3 on table {current_table}: {e}") + result3 = None + except func_timeout.exceptions.FunctionTimedOut: + result3 = None + del db_chain; llm.clear(); + llm.append(Ollama(model=model_name, temperature=0.0, top_p = 0.9)) + db_chain = SQLDatabaseChain.from_llm(llm[0], db, prompt=prompt, use_query_checker=False, verbose=False, return_intermediate_steps=True, return_direct=True) + + q4 = f"Question: find all the rows that contain {query_variant} (query all columns in table {current_table} using OR) (find all, no limit)" + try: + result4 = wrapper(db_chain,q4) + + except Exception as e: + if show_errors: + print(f"[ERROR] error when running question-4 on table {current_table}") + result4 = None + except func_timeout.exceptions.FunctionTimedOut: + result4 = None + del db_chain; llm.clear(); + llm.append(Ollama(model=model_name, temperature=0.0, top_p = 0.9)) + db_chain = SQLDatabaseChain.from_llm(llm[0], db, prompt=prompt, use_query_checker=False, verbose=False, return_intermediate_steps=True, return_direct=True) + + basic_query_answers[current_table] = [(q1,result1["intermediate_steps"][-1] if result1 is not None else "sql error"),(q2,result2["intermediate_steps"][-1] if result2 is not None else "sql error"),(q3,result3["intermediate_steps"][-1] if result3 is not None else "sql error"), (q4,result4["intermediate_steps"][-1] if result4 is not None else "sql error")] + all_results = [result2, result3, result4] + + c_chunk_useful_answers = [] + + max_row_count = 0 + + for c_result in all_results: + if c_result is not None and len(c_result["result"]) > 0: + c_json_string = c_result["result"] + + c_list_results = ast.literal_eval(c_json_string.strip()) + + len_cl = len(c_list_results) + + for i in range(len_cl-1, -1, -1): + c_in = False + c_rowstr = json.dumps(c_list_results[i]) + for c_content in c_list_results[i]: + if query_variant in str(c_content): + if abs(len(query_variant) - len(str(c_content).strip())) >= 2: + if not is_number(str(c_content).strip()): + c_have_digits_0 = re.findall(rf"\d+{query_variant}\d+",str(c_content)) + c_have_digits_1 = re.findall(rf"{query_variant}\d+",str(c_content)) + c_have_digits_2 = re.findall(rf"\d+{query_variant}",str(c_content)) + c_single = re.findall(rf" {query_variant} ",str(c_content)) + if len(c_single) == len(c_have_digits_0) == len(c_have_digits_1) == len(c_have_digits_2) == 0: + if c_rowstr not in c_unique_rows and c_vindx == 0: # remove duplicate result from different querying variant_format + c_unique_rows.append(c_rowstr) + elif c_rowstr in c_unique_rows and c_vindx == 1: # remove duplicate result from different querying variant_format + break + c_in = True + break + if not c_in: + del c_list_results[i] + + c_rows_count = len(c_list_results) # choose max result of all similar questions + if not max_row_count < c_rows_count: + continue + + if result0 is not None: + r0_list = ast.literal_eval(result0["result"].strip())[0] + try: + r0_list = list(map(lambda x: x[1] + str(r0_list[:x[0]].count(x[1]) + 1) if r0_list.count(x[1]) > 1 else x[1], enumerate(r0_list))) + except Exception as e: + r0_list = None + + for c_index in range(len(c_list_results)): + if r0_list is None: + break + if len(r0_list) == len(c_list_results[c_index]): + + c_list_results[c_index] = dict(zip(r0_list, c_list_results[c_index])) + sub_dict = dict([(key, c_list_results[c_index][key]) for key in list(c_list_results[c_index].keys())[1:]]) + json_tablerow = json.dumps(sub_dict, indent=2) + c_question_summary = "rephrase and describe it in plain text" + c_question = "only list the existed variants/mutations in context in the following format *PatientID:... Variant:...*\nif no patient is explicitly mentioned put *PatientID:None* and don't mix up with variants/mutations. If no variants/mutations is explicitly mentioned put *Variant:None*." + + i_pre = int(list(c_list_results[c_index].values())[0]) - 1; + i_next = int(list(c_list_results[c_index].values())[0]) + 1; + json_list_answers = [] + if i_pre > 0: + pre_row = get_row(conn, current_table, i_pre)[0] + if str(pre_row[1]) == str(list(c_list_results[c_index].values())[1]): + json_list_answers.insert(0,dict(zip(r0_list[1:], list(pre_row)[1:]))) + #print(f"pre_row: {pre_row}") + + next_row = get_row(conn, current_table, i_next) + if len(next_row) > 0: + #print(f"next_row: {next_row[0]}") + next_row = next_row[0] + if str(next_row[1]) == str(list(c_list_results[c_index].values())[1]): + json_list_answers.append(dict(zip(r0_list[1:], list(next_row)[1:]))) + + #json_tablerow = json.dumps(json_list_answers, indent=2) + try: + c_text = table2text(llm[0], str(json_tablerow), c_question) + c_text_sum = table2text(llm[0], str(json_tablerow), c_question_summary) + except Exception as e: + + c_text = None + c_text_sum = None + llm.clear(); + llm.append(Ollama(model=model_name, temperature=0.0, top_p = 0.9)) + except func_timeout.exceptions.FunctionTimedOut: + + #print("func_timeout.exceptions.FunctionTimedOut") + #print("str(json_tablerow)",str(json_tablerow),"c_question",c_question) + c_text = None + c_text_sum = None + llm.clear(); + print("re-loading ollama") + llm.append(Ollama(model=model_name, temperature=0.0, top_p = 0.9)) + + # try again + try: + c_text = table2text(llm[0], str(json_tablerow), c_question) + c_text_sum = table2text(llm[0], str(json_tablerow), c_question_summary) + except func_timeout.exceptions.FunctionTimedOut: + c_text='LLM running failed' + c_text_sum = "LLM running failed" + llm.clear(); + print("re-loading ollama") + llm.append(Ollama(model=model_name, temperature=0.0, top_p = 0.9)) + if c_text is not None: + c_list_results[c_index]["plainText"] = f"## TableLLM Identified Record \n**Source**: - Table {current_table_source_index+1} - Row {c_list_results[c_index][0]} \n- **LLM extracted Variant/Genotypes with PatientID**: " + c_text +f" \n- **LLM Translated Row Summary**: {c_text_sum} " + f" \n- **Source Row Details**: {str(json_tablerow)} " + if c_text is not None: + + for c_tableRow in json_list_answers: + c_tableRow = json.dumps(c_tableRow, indent=2) + + try: + c_text = table2text(llm[0], str(c_tableRow), c_question) + c_text_sum = table2text(llm[0], str(c_tableRow), c_question_summary) + except Exception as e: + + c_text = None + c_text_sum = None + llm.clear(); + llm.append(Ollama(model=model_name, temperature=0.0, top_p = 0.9)) + except func_timeout.exceptions.FunctionTimedOut: + c_text = None + c_text_sum = None + llm.clear(); + llm.append(Ollama(model=model_name, temperature=0.0, top_p = 0.9)) + if c_text is not None: + c_list_results[c_index]["plainText"] += f"\n### Adjacent rows potentially contain intrans variant: \n- **LLM extracted Variant/Genotypes with PatientID**: " + c_text +f" \n- **LLM Translated Row Summary**: {c_text_sum} " + f" \n- **Source Row Details**: {str(c_tableRow)} " + + + + + else: c_list_results[c_index]["plainText"] = "GG" + + + #print(max_row_count, c_rows_count) + if max_row_count < c_rows_count: + max_row_count = c_rows_count + #c_chunk_useful_answers.append((c_result["intermediate_steps"][-2],c_json_string.strip())) + c_chunk_useful_answers = (c_result["intermediate_steps"][-2],c_list_results) + + + + ## given QA + if type(additional_question) is list: + for c_question in additional_question: + c_question = c_question + f" (only in table {current_table})" + try: + result = db_chain(c_question) + basic_query_answers[current_table].append((c_question,result["intermediate_steps"][-1])) + except Exception as e: + if show_errors: + print(f"error when running given question on table {current_table}: {e}") + basic_query_answers[current_table].append((c_question,["invalid_question!"])) + + elif type(additional_question) is str: + c_question = additional_question + f" (check all columns in table {current_table})" + try: + result = db_chain(c_question) + basic_query_answers[current_table].append((c_question,result["intermediate_steps"][-1])) + except Exception as e: + if show_errors: + print(f"error when running given question on table {current_table}: {e}") + basic_query_answers[current_table].append((c_question,["invalid_question!"])) + + + if len(c_chunk_useful_answers) > 0: + basic_query_answers_list.append(c_chunk_useful_answers) + + return [basic_query_answers_list, variant_insource] + diff --git a/utils.py b/utils.py new file mode 100644 index 0000000..6d8ab41 --- /dev/null +++ b/utils.py @@ -0,0 +1,178 @@ +import pandas as pd +from bioc import biocxml +from bs4 import BeautifulSoup +import re +from itertools import product + +import requests + + + + +def translateProtein2SingleChar(proteinNotation): + print("start translateProtein2SingleChar") + print("proteinNotation",proteinNotation) + try: + r = requests.get(f'https://mutalyzer.nl/api/normalize/{proteinNotation}?only_variants=false') + + j = r.json() + return j['equivalent_descriptions']['p'][0]['description'].split(":")[-1] + except Exception as e: + return None + + + +def sortVariantAlias(variantAlias,documents): + + for page in source_doc: + c_rsids = re.findall(current_variant,page.page_content) + + +def table_to_2d(table_tag): + rowspans = [] # track pending rowspans + rows = table_tag.find_all(['tr']) + # first scan, see how many columns we need + colcount = 0 + for r, row in enumerate(rows): + cells = row.find_all(['td', 'th'], recursive=False) + + ''' + colcount = max( + colcount, + sum(int(c.get('colspan', 1)) or 1 for c in cells[:-1]) + len(cells[-1:]) + len(rowspans)) + ''' + + colcount = max(colcount,sum(int(c.get('colspan', 1)) for c in cells) + len(rowspans)) + # update rowspan bookkeeping; 0 is a span to the bottom. + rowspans += [int(c.get('rowspan', 1)) or 1 or len(rows) - r for c in cells] + rowspans = [s - 1 for s in rowspans if s > 1] + + # it doesn't matter if there are still rowspan numbers 'active'; no extra + # rows to show in the table means the larger than 1 rowspan numbers in the + # last table row are ignored. + + # build an empty matrix for all possible cells + table = [[None] * colcount for row in rows] + + # fill matrix from row data + rowspans = {} # track pending rowspans, column number mapping to count + for row, row_elem in enumerate(rows): + span_offset = 0 # how many columns are skipped due to row and colspans + for col, cell in enumerate(row_elem.find_all(['td', 'th'], recursive=False)): + # adjust for preceding row and colspans + col += span_offset + while rowspans.get(col, 0): + span_offset += 1 + col += 1 + + # fill table data + rowspan = rowspans[col] = int(cell.get('rowspan', 1)) or len(rows) - row + colspan = int(cell.get('colspan', 1)) or colcount - col + # next column is offset by the colspan + span_offset += colspan - 1 + value = cell.get_text() + for drow, dcol in product(range(rowspan), range(colspan)): + try: + table[row + drow][col + dcol] = value + rowspans[col + dcol] = rowspan + except IndexError: + # rowspan or colspan outside the confines of the table + pass + + # update rowspan bookkeeping + rowspans = {c: s - 1 for c, s in rowspans.items() if s > 1} + + return table + + +def convert2DF(xml_data): + ''' + input: xml_data: the xml component of a table + + return: the converetd dataframe, collapse the table into 2D structure + + ''' + # parse XML string with BeautifulSoup + xml_data = re.sub(r'\\x..', '', xml_data) + + #print(xml_data) + soup = BeautifulSoup(xml_data, 'lxml') + + # find the table in the soup + table = soup.find('table') + + # if thead and tbody + heads = table.find('thead') + if(not heads): + # if no tags of thead in the table, lets make the head as the first row + new_body = table_to_2d(table) + df = pd.DataFrame(new_body[1:], columns=new_body[0]) + + return df + new_heads = table_to_2d(heads) + + # merge multiple row of heads by concatenate unique values + new_heads = [['' if value is None else value for value in row] for row in new_heads] + unique_columns = [list(set(column)) for column in zip(*new_heads)] + my_merged_header = [' '.join(column) for column in unique_columns] + + + + bodies = table.find('tbody') + + data = [] + new_body_data = table_to_2d(bodies) + for index,cur_body_row in enumerate(new_body_data): + + tmp_row = ['']*len(cur_body_row) + cur_body_row = ['' if value is None else value for value in cur_body_row] + + for k, cur_col in enumerate(cur_body_row): + tmp_row[k] = cur_col.replace("\\n",'') + + data.append(tmp_row) + df = pd.DataFrame(data, columns=my_merged_header) + return df +def extractTablesFromXML(XML_path): + + ''' + + XML_path: the path of the XML paper file + + return a list of dataframes, each df represents one table + + ''' + all_tables = [] + with biocxml.iterparse(XML_path) as reader: + for document in reader: + for i in range(len(document.passages)): + if(document.passages[i].infons['type']!='table'): + continue + cur_table_xml = document.passages[i].infons['xml'] + table_name = document.passages[i].infons['id'] + + df = convert2DF(cur_table_xml) + + all_tables.append(df) + + + + return all_tables + pass + +def reduceIntransDuplicates(text_in_trans_list): + + formated_in_trans_list = [] + for cur_answers in text_in_trans_list: + if('none' in cur_answers.lower() and 'contain' not in cur_answers.lower()): + continue + else: + formated_in_trans_list.extend(cur_answers.split(',')) + formated_in_trans_list = list(set(formated_in_trans_list)) + return formated_in_trans_list + pass +if __name__ == "__main__": + print("test extractTablesFromXML") + test_path = "/autofs/bal36md0/smli/smli/LLM-genome-curation/literatures/subset_report_XML/36546626.xml" + table_list = extractTablesFromXML(test_path) + print(len(table_list)) \ No newline at end of file