Asanaly commited on
Commit
cc29fed
·
verified ·
1 Parent(s): 3741524

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +28 -14
app.py CHANGED
@@ -1,26 +1,22 @@
1
  # app.py
2
-
3
  import gradio as gr
4
  import torch
5
  import numpy as np
6
  from transformers import AutoTokenizer, AutoModelForTokenClassification
7
 
8
  # ============================
9
- # 1. Модель мен токенизаторды жүктеу
10
  # ============================
11
- # Мысалы, мультилингвалды BERT (қазақ тілін қолдайды)
12
  model_checkpoint = "bert-base-multilingual-cased"
13
  tokenizer = AutoTokenizer.from_pretrained(model_checkpoint)
14
  model = AutoModelForTokenClassification.from_pretrained(model_checkpoint, num_labels=7)
15
 
16
- # Қазақ NER үшін label тізімі
17
  label_list = ["O", "B-PER", "I-PER", "B-ORG", "I-ORG", "B-LOC", "I-LOC"]
18
 
19
  # ============================
20
  # 2. NER функциясы
21
  # ============================
22
  def predict_ner(text):
23
- # Токенизация
24
  tokens = tokenizer(text.split(), return_tensors="pt", is_split_into_words=True)
25
  outputs = model(**tokens).logits
26
  predictions = np.argmax(outputs.detach().numpy(), axis=2)[0]
@@ -33,24 +29,42 @@ def predict_ner(text):
33
  label = label_list[predictions[idx]]
34
  word = text.split()[word_idx]
35
  if label != "O":
36
- results.append(f"{word} → {label}")
37
  already_seen.add(word_idx)
38
- if not results:
 
 
 
 
 
 
 
39
  return "Атаулар табылған жоқ"
40
- return "\n".join(results)
 
 
 
 
 
 
 
 
 
 
 
41
 
42
  # ============================
43
- # 3. Gradio интерфейсі
44
  # ============================
45
  iface = gr.Interface(
46
- fn=predict_ner,
47
- inputs=gr.Textbox(lines=5, placeholder="Мәтінді осында енгізіңіз..."),
48
- outputs=gr.Textbox(label="Анықталған атаулар (NER)"),
49
  title="Қазақ тіліндегі NER",
50
- description="Бұл құрал қазақ мәтіндеріндегі адам, ұйым және орын атауларын анықтайды"
51
  )
52
 
53
  # ============================
54
- # 4. Іске қосу
55
  # ============================
56
  iface.launch()
 
1
  # app.py
 
2
  import gradio as gr
3
  import torch
4
  import numpy as np
5
  from transformers import AutoTokenizer, AutoModelForTokenClassification
6
 
7
  # ============================
8
+ # 1. Модель мен токенизатор
9
  # ============================
 
10
  model_checkpoint = "bert-base-multilingual-cased"
11
  tokenizer = AutoTokenizer.from_pretrained(model_checkpoint)
12
  model = AutoModelForTokenClassification.from_pretrained(model_checkpoint, num_labels=7)
13
 
 
14
  label_list = ["O", "B-PER", "I-PER", "B-ORG", "I-ORG", "B-LOC", "I-LOC"]
15
 
16
  # ============================
17
  # 2. NER функциясы
18
  # ============================
19
  def predict_ner(text):
 
20
  tokens = tokenizer(text.split(), return_tensors="pt", is_split_into_words=True)
21
  outputs = model(**tokens).logits
22
  predictions = np.argmax(outputs.detach().numpy(), axis=2)[0]
 
29
  label = label_list[predictions[idx]]
30
  word = text.split()[word_idx]
31
  if label != "O":
32
+ results.append((word, label))
33
  already_seen.add(word_idx)
34
+ return results
35
+
36
+ # ============================
37
+ # 3. Түсті HTML шығару
38
+ # ============================
39
+ def highlight_ner(text):
40
+ entities = predict_ner(text)
41
+ if not entities:
42
  return "Атаулар табылған жоқ"
43
+
44
+ colored_text = text
45
+ for word, label in entities:
46
+ color = ""
47
+ if label.startswith("PER"):
48
+ color = "red"
49
+ elif label.startswith("ORG"):
50
+ color = "blue"
51
+ elif label.startswith("LOC"):
52
+ color = "green"
53
+ colored_text = colored_text.replace(word, f"<span style='color:{color}; font-weight:bold'>{word}</span>")
54
+ return colored_text
55
 
56
  # ============================
57
+ # 4. Gradio интерфейсі
58
  # ============================
59
  iface = gr.Interface(
60
+ fn=highlight_ner,
61
+ inputs=gr.Textbox(lines=10, placeholder="Қазақ мәтінін осында енгізіңіз..."),
62
+ outputs=gr.HTML(label="Анықталған атаулар"),
63
  title="Қазақ тіліндегі NER",
64
+ description="PER адам, ORG ұйым, LOC орын. Атаулар мәтінде түспен ерекшеленеді."
65
  )
66
 
67
  # ============================
68
+ # 5. Іске қосу
69
  # ============================
70
  iface.launch()