from typing import List, NewType, Optional, Union import gradio as gr from spacerini_utils.index import fetch_index_stats from spacerini_utils.search import _search, init_searcher, SearchResult HTML = NewType('HTML', str) searcher = init_searcher(sparse_index_path="sparse_index") def get_docid_html(docid: Union[int, str]) -> HTML: docid_html = ( f"🔒xsum/'+f'{docid}' ) return docid_html def process_results(results: List[SearchResult], language: str, highlight_terms: Optional[List[str]] = None) -> HTML: if len(results) == 0: return """

No results retrieved.



""" results_html = "" for result in results: tokens = result["text"].split() tokens_html = [] if highlight_terms: for token in tokens: if token in highlight_terms: tokens_html.append("{}".format(token)) else: tokens_html.append(token) tokens_html = " ".join(tokens_html) meta_html = ( """

""" ) docid_html = get_docid_html(result["docid"]) results_html += """{}

Document ID: {}

Score: {}

Language: {}

{}


""".format( meta_html, docid_html, result["score"], language, tokens_html ) return results_html + "
" def search(query: str, language: str, num_results: int = 10) -> HTML: results_dict = _search(searcher, query, num_results=num_results) return process_results(results_dict, language) stats = fetch_index_stats('sparse_index/') description = f"""#

🚀 🔎 None 🔍 🚀

None

Dataset Statistics: Total Number of Documents = {stats["documents"]}, Number of Terms = {stats["total_terms"]}

""" demo = gr.Blocks( css=".underline-on-hover:hover { text-decoration: underline; } .flagging { font-size:12px; color:Silver; }" ) with demo: with gr.Row(): gr.Markdown(value=description) with gr.Row(): query = gr.Textbox(lines=1, max_lines=1, placeholder="Type your query here...", label="Query") with gr.Row(): lang = gr.Dropdown( choices=[ "en", "detect_language", "all", ], value="en", label="Language", ) with gr.Row(): k = gr.Slider(1, 100, value=10, step=1, label="Max Results") with gr.Row(): submit_btn = gr.Button("Submit") with gr.Row(): results = gr.HTML(label="Results") def submit(query: str, lang: str, k: int): query = query.strip() if query is None or query == "": return "", "" return { results: search(query, lang, k), } query.submit(fn=submit, inputs=[query, lang, k], outputs=[results]) submit_btn.click(submit, inputs=[query, lang, k], outputs=[results]) demo.launch(enable_queue=True, debug=True)