Nikhil Singh commited on
Commit
767cd38
·
1 Parent(s): b10c920
Files changed (1) hide show
  1. app.py +9 -27
app.py CHANGED
@@ -42,24 +42,16 @@ def get_sentences(further_cleaned_text):
42
  def get_model(model_name: str = None, multilingual: bool = False):
43
  if model_name is None:
44
  model_name = "urchade/gliner_base" if not multilingual else "urchade/gliner_multilingual"
45
-
46
- global _MODEL
47
-
48
- if _MODEL.get(model_name) is None:
49
  _MODEL[model_name] = GLiNER.from_pretrained(model_name, cache_dir=_CACHE_DIR)
50
-
51
  return _MODEL[model_name]
52
 
53
- def parse_query(sentences: List[str], labels: List[str], threshold: float = 0.3, nested_ner: bool = False, model_name: str = None, multilingual: bool = False) -> List[Dict[str, Union[str, list]]]:
54
- model = get_model(model_name, multilingual=multilingual)
55
-
56
  results = []
57
-
58
  for sentence in sentences:
59
  _entities = model.predict_entities(sentence, labels, threshold=threshold)
60
- entities = [{"text": entity["text"], "label": entity["label"]} for entity in _entities]
61
- results.extend(entities)
62
-
63
  return results
64
 
65
  def refine_entities_with_t5(entities):
@@ -74,34 +66,25 @@ def present(email_file, labels, multilingual=False):
74
  cleaned_text = clean_email(email)
75
  further_cleaned_text = remove_special_characters(cleaned_text)
76
  sentence_list = get_sentences(further_cleaned_text)
77
-
78
  entities = parse_query(sentence_list, labels, threshold=0.3, nested_ner=False, model_name="urchade/gliner_base", multilingual=multilingual)
79
-
80
- # Format entities for DataFrame: Convert list of dicts to list of lists
81
- entities = [[entity['text'], entity['label']] for entity in entities]
82
-
83
  refined_entities = refine_entities_with_t5(entities)
84
-
85
  email_info = {
86
  "Subject": email.subject,
87
  "From": email.from_,
88
  "To": email.to,
89
  "Date": email.date,
90
- "Extracted Entities": refined_entities
 
91
  }
92
- return [email_info[key] for key in email_info]
93
 
94
  labels = ["PERSON", "PRODUCT", "DEAL", "ORDER", "ORDER PAYMENT METHOD", "STORE", "LEGAL ENTITY", "MERCHANT", "FINANCIAL TRANSACTION", "UNCATEGORIZED", "DATE"]
95
 
96
  demo = gr.Interface(
97
- fn=present,
98
  inputs=[
99
  gr.components.File(label="Upload Email (.eml file)"),
100
- gr.components.CheckboxGroup(
101
- choices=labels,
102
- label="Labels to Detect",
103
- value=labels, # Default all selected
104
- ),
105
  gr.components.Checkbox(label="Use Multilingual Model")
106
  ],
107
  outputs=[
@@ -112,7 +95,6 @@ demo = gr.Interface(
112
  gr.components.Dataframe(headers=["Text", "Label"], label="Extracted Entities"),
113
  gr.components.Textbox(label="Refined Entities")
114
  ],
115
- layout="horizontal",
116
  title="Email Info Extractor",
117
  description="Upload an email file (.eml) to extract its details and detected entities."
118
  )
 
42
  def get_model(model_name: str = None, multilingual: bool = False):
43
  if model_name is None:
44
  model_name = "urchade/gliner_base" if not multilingual else "urchade/gliner_multilingual"
45
+ if model_name not in _MODEL:
 
 
 
46
  _MODEL[model_name] = GLiNER.from_pretrained(model_name, cache_dir=_CACHE_DIR)
 
47
  return _MODEL[model_name]
48
 
49
+ def parse_query(sentences, labels, threshold=0.3, nested_ner=False, model_name=None, multilingual=False):
50
+ model = get_model(model_name, multilingual)
 
51
  results = []
 
52
  for sentence in sentences:
53
  _entities = model.predict_entities(sentence, labels, threshold=threshold)
54
+ results.extend([{"text": entity["text"], "label": entity["label"]} for entity in _entities])
 
 
55
  return results
56
 
57
  def refine_entities_with_t5(entities):
 
66
  cleaned_text = clean_email(email)
67
  further_cleaned_text = remove_special_characters(cleaned_text)
68
  sentence_list = get_sentences(further_cleaned_text)
 
69
  entities = parse_query(sentence_list, labels, threshold=0.3, nested_ner=False, model_name="urchade/gliner_base", multilingual=multilingual)
 
 
 
 
70
  refined_entities = refine_entities_with_t5(entities)
 
71
  email_info = {
72
  "Subject": email.subject,
73
  "From": email.from_,
74
  "To": email.to,
75
  "Date": email.date,
76
+ "Extracted Entities": entities, # Prepare entities for DataFrame if needed
77
+ "Refined Entities": refined_entities
78
  }
79
+ return [email_info[key] for key in ["Subject", "From", "To", "Date", "Extracted Entities", "Refined Entities"]]
80
 
81
  labels = ["PERSON", "PRODUCT", "DEAL", "ORDER", "ORDER PAYMENT METHOD", "STORE", "LEGAL ENTITY", "MERCHANT", "FINANCIAL TRANSACTION", "UNCATEGORIZED", "DATE"]
82
 
83
  demo = gr.Interface(
84
+ fn=present,
85
  inputs=[
86
  gr.components.File(label="Upload Email (.eml file)"),
87
+ gr.components.CheckboxGroup(choices=labels, label="Labels to Detect", value=labels),
 
 
 
 
88
  gr.components.Checkbox(label="Use Multilingual Model")
89
  ],
90
  outputs=[
 
95
  gr.components.Dataframe(headers=["Text", "Label"], label="Extracted Entities"),
96
  gr.components.Textbox(label="Refined Entities")
97
  ],
 
98
  title="Email Info Extractor",
99
  description="Upload an email file (.eml) to extract its details and detected entities."
100
  )