Spaces:
Sleeping
Sleeping
import gradio as gr | |
from Summary import Summary | |
from NamedEntity import NER | |
entity_sample_text = \ | |
("Mr Roberts had taken his dog for a walk in Hyde Park at around 9pm. " | |
"He saw a group of people shouting at Stephen - a guy who would shortly " | |
"have his Rolex watch and iPhone stolen by the same group of people " | |
"that had surrounded him. A lady named Fiona Walker was crossing the High " | |
"Street that runs alongside the park. She heard Mr Roberts shout for help " | |
"and called the police to assist.\n\n Constable Robbins arrived after about " | |
"20 minutes by which time the group had dispersed. Mr Roberts was able to " | |
"give a description of the people who had stolen Stephen's Rolex watch and iPhone. " | |
"He said that one of the people was wearing a blue Adidas t-shirt and another " | |
"was wearing a red Arsenal football cap. " | |
"It turned out the gang members hailed from Paddington and Mayfair and used Uber to " | |
"move around the area.\n\n" | |
"The gang leader had to appear at " | |
"the Old Bailey on 1st January 2021. He was sentenced to 3 years in prison " | |
"for robbery and assault by Judge Jennifer Sanderson." | |
) | |
summary_sample_text = \ | |
("The City of London, often simply referred to as The City, is a historic and iconic part of " | |
"the British capital, London. With a rich history dating back over 2,000 years, it stands as a " | |
"testament to the enduring legacy of British culture and finance. Covering an area of " | |
"approximately 1.12 square miles (2.9 square kilometers), it may be small in size, but it packs " | |
"a punch in terms of its global significance. One of the most notable features of The City is " | |
"its status as the financial heart of London and, indeed, the world. The area is home to the " | |
"Bank of England, the London Stock Exchange, and numerous multinational banks and financial " | |
"institutions. The towering skyscrapers and modern architecture that dot the skyline serve as " | |
"a symbol of the city's economic power and influence. The City's historic role in finance " | |
"dates back to the Middle Ages when it became the hub of international trade and commerce. " | |
"Today, it remains a hub for global finance, attracting professionals from all corners of the " | |
"globe. The City's historic and architectural heritage is another captivating aspect. Wandering " | |
"through its labyrinthine streets, one can marvel at the blend of old and new. Ancient structures " | |
"like the Tower of London and St. Paul's Cathedral coexist with sleek modern office buildings. " | |
"The contrast in architectural styles is a testament to London's ability to embrace its rich " | |
"history while continually evolving to meet the demands of the future. Culturally, The City " | |
"offers a unique blend of tradition and innovation. It hosts various cultural events and " | |
"festivals throughout the year, attracting both locals and tourists. The City's vibrant food " | |
"scene is another highlight, with a multitude of restaurants catering to diverse tastes, from " | |
"classic British fare to international cuisine. Despite its bustling urban environment, The City " | |
"also boasts several green spaces. One can escape the hustle and bustle of the financial district " | |
"by strolling along the banks of the River Thames, enjoying the lush gardens of Postman's Park, " | |
"or exploring the serene Barbican Conservatory. Transportation in The City is well-developed, " | |
"making it easily accessible. The London Underground, buses, and extensive pedestrian walkways " | |
"ensure that both residents and visitors can navigate the area efficiently. In conclusion, The " | |
"City of London is a city within a city, a captivating blend of history, finance, culture, and " | |
"architecture. Its enduring importance on the global stage, its rich heritage, and its vibrant " | |
"cultural scene make it a must-visit destination for anyone exploring the dynamic and diverse city " | |
"of London. Whether you are drawn by its financial prowess, architectural beauty, or cultural " | |
"riches, The City has something to offer every visitor, and its enduring appeal is sure to stand " | |
"the test of time." | |
) | |
entity_desc = ("This demo uses the [DSLIM BERT model](https://huggingface.co/dslim/bert-base-NER) " | |
"to identify named entities in a piece of text. It has been trained to recognise " | |
"four types of entities: location (LOC), organisations (ORG), person (PER) and " | |
"Miscellaneous (MISC). The model size is approximately 430Mb. \n\n" | |
"This model is free for commercial use. \n\n" | |
"A [larger model](https://huggingface.co/dslim/bert-large-NER) is also available (~1.3Gb)." | |
) | |
summary_desc = ("This demo uses the " | |
"[legal-bert-base-uncased model](https://huggingface.co/nlpaueb/legal-bert-base-uncased) " | |
"intended to assist legal NLP research, computational law, and legal technology " | |
"applications. The model size is approximately 500Mb. \n\n " | |
"The model was trained using 12Gb of diverse English legal text across a number of fields. " | |
"This model is free for commercial use. \n\n" | |
) | |
class GlobalVariables: | |
def __init__(self): | |
self.entities = None | |
self.summary = None | |
app_globals = GlobalVariables() | |
def process_entities(txt_data): | |
if txt_data is None or len(txt_data.strip()) == 0: | |
raise gr.Error("Text to analyse cannot be empty") | |
app_globals.entities = NER(txt_data) | |
app_globals.entities.entity_markdown() | |
entity_list = '\n'.join(app_globals.entities.unique_entities) | |
heading = 'Entities highlighted in the original text' | |
output = f'## {heading} \n\n {app_globals.entities.markdown}' | |
return entity_list, output | |
def session_data(txt_data): | |
pass | |
def process_summary(txt_data): | |
if txt_data is None or len(txt_data.strip()) == 0: | |
raise gr.Error("Text to summarise cannot be empty") | |
app_globals.summary = Summary(txt_data) | |
result = app_globals.summary.result | |
source_text_length = len(txt_data.split(' ')) | |
summary_text_length = len(result.split(' ')) | |
info = 'Words in source text: ' + str(source_text_length) | |
info += '\nWords in summary: ' + str(summary_text_length) | |
info += ('\nSource text shortened by a factor of: ' + | |
str(round(source_text_length/summary_text_length, 1)) + ' times') | |
return info, result | |
with gr.Blocks() as demo: | |
# The legal summary appliation tab. | |
with gr.Tab('Summaries'): | |
gr.Markdown("# Summarising text") | |
with gr.Accordion("See Details", open=False): | |
gr.Markdown(summary_desc) | |
text_summary_source = gr.Textbox(label="Text to summarise", lines=10) | |
text_summary = gr.Textbox(label="Summary", lines=3) | |
text_info = gr.Textbox(label="Related information", lines=5) | |
with gr.Row(): | |
btn_sample_summary = gr.Button("Load Sample Text") | |
btn_clear_summary = gr.Button("Clear Summary Data") | |
btn_summary = gr.Button("Get Summary", variant='primary') | |
# Event Handler | |
btn_sample_summary.click(fn=lambda: summary_sample_text, outputs=[text_summary_source]) | |
btn_clear_summary.click(fn=lambda: ('', '', ''), outputs=[text_summary_source, text_summary, text_info]) | |
btn_summary.click(fn=process_summary, inputs=[text_summary_source], outputs=[text_info, text_summary]) | |
with gr.Tab('Entities'): | |
gr.Markdown("# Extracting named entities") | |
with gr.Accordion("See Details", open=False): | |
gr.Markdown(entity_desc) | |
text_source = gr.Textbox(label="Text to analyse", lines=10) | |
text_entities = gr.Textbox(label="Unique entities", lines=3) | |
mk_output = gr.Markdown(label="Entities Highlighted", value='Highlighted entities appear here') | |
with gr.Row(): | |
btn_sample_entity = gr.Button("Load Sample Text") | |
btn_clear_entity = gr.Button("Clear Data") | |
btn_entities = gr.Button("Get Entities", variant='primary') | |
# Event Handlers | |
btn_sample_entity.click(fn=lambda: entity_sample_text, outputs=[text_source]) | |
btn_entities.click(fn=process_entities, inputs=[text_source], outputs=[text_entities, mk_output]) | |
btn_clear_entity.click(fn=lambda: ('', '', ''), outputs=[text_source, text_entities, mk_output]) | |
demo.launch() | |