apak commited on
Commit
fa04cb7
·
verified ·
1 Parent(s): be052ba

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +187 -191
app.py CHANGED
@@ -1,219 +1,215 @@
1
  import torch
2
  import wikipedia
3
- import spaces
4
- import os
5
- import re
6
  import gradio as gr
7
- from transformers import AutoModelForCausalLM, AutoTokenizer, pipeline
 
 
 
 
 
 
8
 
9
- # --- 1. MODELLERİN HAZIRLANMASI ---
10
- ner_pipe = pipeline("ner", model="xlm-roberta-large-finetuned-conll03-english", aggregation_strategy="simple", device=-1)
11
- model_id = "Qwen/Qwen2.5-1.5B-Instruct"
12
- tokenizer = AutoTokenizer.from_pretrained(model_id)
 
 
 
 
 
 
 
 
13
 
14
  try:
15
- llm_model = AutoModelForCausalLM.from_pretrained(model_id, torch_dtype=torch.bfloat16, device_map="cpu", trust_remote_code=True)
16
- IS_LLM_ENABLED = True
 
 
 
 
 
17
  except Exception as e:
18
- IS_LLM_ENABLED = False
19
-
20
- # --- 2. YARDIMCI FONKSİYONLAR ---
21
- def get_wiki_summary(term):
22
- """Varlık için Wikipedia özeti getirir."""
23
- try:
24
- wikipedia.set_lang("tr")
25
- search_results = wikipedia.search(term)
26
- if not search_results: return None
27
- return wikipedia.summary(search_results[0], sentences=2, auto_suggest=False)
28
- except: return None
29
-
30
- def get_random_examples():
31
- """Wikipedia'dan rastgele cümleler çekerek örnek listesi oluşturur."""
32
- wikipedia.set_lang("tr")
 
 
 
 
 
 
 
 
 
33
  try:
34
- random_titles = wikipedia.random(pages=3)
35
- return [[wikipedia.summary(t, sentences=1, auto_suggest=False)] for t in random_titles]
 
 
 
 
 
 
36
  except:
37
- return [["Oppenheimer filmi geçen yıl vizyona girdi."], ["Sefiller romanı Victor Hugo tarafından yazılmıştır."]]
38
 
39
- @spaces.GPU
40
- def refine_label_with_llm(entity_text, full_sentence, wiki_context, custom_label_definitions):
41
- if not IS_LLM_ENABLED: return "MISC", "LLM Aktif Değil"
42
-
43
- device = "cuda" if torch.cuda.is_available() else "cpu"
44
- llm_model.to(device)
45
 
46
- # 1. Etiket Tanımları (Bilgi Kaynağı)
 
 
47
  label_rules = ""
48
- for k, v in custom_label_definitions.items():
49
- label_rules += f"### {k}\n- TANIM: {v['tanim']}\n- ANAHTARLAR: {', '.join(v['anahtar_kelimeler'])}\n\n"
 
 
 
 
 
 
 
 
 
50
 
51
- # 2. Sistematik CoT ve Kuralların Tanımlanması
52
- prompt = f"""Sen yüksek hassasiyetli bir semantik analiz uzmanısın.
53
- Görevin, '[[{entity_text}]]' varlığını aşağıdaki 4 adımlı Sistematik CoT protokolüne göre sınıflandırmaktır.
54
 
55
- ETİKET TANIMLARI:
56
  {label_rules}
57
 
58
- SİSTEMATİK CoT ADIMLARI:
59
- 1. **Sentaktik İnceleme:** Cümle içinde varlığın sağındaki ve solundaki kelimeleri (niteleyicileri) tespit et. Varlık bir fiille mi (yazıldı, vizyona girdi) yoksa bir isimle mi (yazılımı, ödülü) ilişkili?
60
- 2. **Bilgi Entegrasyonu:** Wikipedia verisindeki genel tanımı oku. Varlığın tarihsel veya teknik kimliğini belirle.
61
- 3. **Çelişki ve Hiyerarşi Denetimi:** Wikipedia bilgisi ile cümledeki kullanım amacı çelişiyor mu? (Örn: Wiki 'film' diyor ama cümle 'kitap' diyorsa, cümledeki kullanım esastır).
62
- 4. **Etiket Eşleşmesi:** Elde edilen nihai kanıtları, 'ETİKET TANIMLARI'ndaki en yakın kategoriyle eşleştir ve son kararı ver.
63
-
64
- REFERANS ANALİZLER (FEW-SHOT):
65
- Örnek 1 (Tam Uyum):
66
- VARLIK: 'Inception'
67
- CÜMLE: "Dün gece Inception filmini tekrar izledim."
68
- WIKI: "Inception, Christopher Nolan tarafından yönetilen 2010 yapımı bilimkurgu filmidir."
69
- ANALİZ:
70
- - Adım 1: Cümlede 'film' ve 'izlemek' kelimeleri görsel esere işaret ediyor.
71
- - Adım 2: Wiki verisi varlığın bir film olduğunu doğruluyor.
72
- - Adım 3: Kaynaklar arasında çelişki yok.
73
- - Adım 4: MOVIE etiketi uygundur.
74
- CEVAP: MOVIE
75
-
76
- Örnek 2 (Kritik Çelişki):
77
- VARLIK: 'Gizli Bahçe'
78
- CÜMLE: "Yazar son romanı 'Gizli Bahçe' ile ödül aldı."
79
- WIKI: "Gizli Bahçe: 1993 yapımı bir dram filmidir."
80
- ANALİZ:
81
- - Adım 1: Cümlede 'roman' ve 'yazar' kelimeleri varlığı doğrudan kitap olarak niteliyor.
82
- - Adım 2: Wiki verisi bu ismi bir film (movie) olarak gösteriyor.
83
- - Adım 3: ÇELİŞKİ TESPİT EDİLDİ. Kaynak hiyerarşisi gereği cümledeki 'roman' ifadesi Wikipedia'dan daha önceliklidir.
84
- - Adım 4: BOOK etiketi uygundur.
85
- CEVAP: BOOK
86
-
87
- GÜNCEL GÖREV:
88
- - HEDEF VARLIK: {entity_text}
89
- - ORİJİNAL CÜMLE: "{full_sentence}"
90
- - HARİCİ BİLGİ (Wikipedia): "{wiki_context}"
91
-
92
- ÇIKTI KURALLARI:
93
- - Cevabında asla yıldız (*) veya markdown kullanma.
94
- - Analiz adımlarını yukarıdaki 4 adımlı protokole göre yaz.
95
-
96
- ÇIKTI FORMATI:
97
- Analiz: [4 Adımlı CoT Analizi]
98
- Cevap: [SADECE_ETIKET_ADI]"""
99
 
100
  messages = [{"role": "user", "content": prompt}]
101
  text = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
102
- model_inputs = tokenizer([text], return_tensors="pt").to(device)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
103
 
104
- try:
105
- generated_ids = llm_model.generate(model_inputs.input_ids, max_new_tokens=450, do_sample=False, temperature=0.1)
106
- response_ids = [output_ids[len(input_ids):] for input_ids, output_ids in zip(model_inputs.input_ids, generated_ids)]
107
- full_output = tokenizer.batch_decode(response_ids, skip_special_tokens=True)[0].strip()
108
-
109
- # Markdown temizliği ve Etiket Ayıklama
110
- clean_output = full_output.replace("*", "")
111
- final_label = "MISC"
112
- valid_keys = list(custom_label_definitions.keys())
113
- match = re.search(r"Cevap:\s*([A-Z_]+)", clean_output, re.IGNORECASE)
114
-
115
- if match:
116
- extracted = match.group(1).upper().strip()
117
- if extracted in valid_keys: final_label = extracted
118
-
119
- return final_label, clean_output
120
- except Exception as e:
121
- return "MISC", f"Hata: {str(e)}"
122
-
123
- # --- 3. ANA İŞLEM HATTI ---
124
  def process_ner(text):
125
- current_logs = ["🚀 <b>Sistem Başlatıldı:</b> Metin analiz ediliyor..."]
126
- final_results = []
127
- yield "<br>".join(current_logs), []
128
-
129
- custom_labels = {
130
- "MOVIE": {"tanim": "Sinematik eserler.", "anahtar_kelimeler": ["film", "dizi"], "ornekler": ["Inception", "Ezel"]},
131
- "BOOK": {"tanim": "Yazılı edebi eserler.", "anahtar_kelimeler": ["kitap", "roman"], "ornekler": ["Sefiller", "Nutuk"]},
132
- "SOFTWARE": {"tanim": "Dijital sistemler.", "anahtar_kelimeler": ["yazılım", "kod"], "ornekler": ["Linux", "Python"]},
133
- "AWARD": {"tanim": "Resmi ödüller.", "anahtar_kelimeler": ["ödül", "oscar"], "ornekler": ["Nobel", "Altın Portakal"]},
134
- "PRODUCT": {"tanim": "Ticari ürünler.", "anahtar_kelimeler": ["marka", "model"], "ornekler": ["iPhone", "Tesla"]},
135
- "NORP": {"tanim": "Etnik ve dini gruplar.", "anahtar_kelimeler": ["millet", "topluluk"], "ornekler": ["Türkler", "Ruslar"]},
136
- "GPE": {"tanim": "Siyasi bölgeler.", "anahtar_kelimeler": ["ülke", "şehir"], "ornekler": ["Türkiye", "İstanbul"]}
137
- }
138
-
139
- initial_results = ner_pipe(text)
140
-
141
- for entity in initial_results:
142
- word = entity['word'].replace(" ", " ").strip()
143
- label = entity['entity_group']
144
-
145
  if label in ["PER", "ORG", "LOC"]:
146
- res = {"Varlık": word, "İlk Etiket": label, "Nihai Etiket": label, "Kaynak": "Model"}
147
- current_logs.append(f"✅ <b>{word}</b>: {label} (Doğrudan Tespit)")
148
- elif label == "MISC":
149
- current_logs.append(f"🔍 <b>Analiz Başladı:</b> '{word}'")
150
- yield "<br>".join(current_logs), [[r["Varlık"], r["İlk Etiket"], r["Nihai Etiket"], r["Kaynak"]] for r in final_results]
151
-
152
- wiki_text = get_wiki_summary(word)
153
- if wiki_text:
154
- current_logs.append(f"<div style='margin-left:20px; border-left:2px solid #007bff; padding-left:10px; color:#555;'>🌐 <b>Wiki:</b> {wiki_text}</div>")
155
- new_label, cot_text = refine_label_with_llm(word, text, wiki_text, custom_labels)
156
- current_logs.append(f"<div style='margin-left:20px; border-left:2px solid #28a745; padding-left:10px;'>🧠 <b>CoT Analizi:</b> {cot_text}</div>")
157
- res = {"Varlık": word, "İlk Etiket": label, "Nihai Etiket": new_label, "Kaynak": "RAG+LLM"}
158
  else:
159
- current_logs.append(f"⚠️ '{word}' için Wikipedia kaydı bulunamadı.")
160
- res = {"Varlık": word, "İlk Etiket": label, "Nihai Etiket": "MISC", "Kaynak": "Model"}
161
-
162
- final_results.append(res)
163
- # Tablo çıktısında Nihai Etiket bold yapılır
164
- table_display = [[r["Varlık"], r["İlk Etiket"], f"<b>{r['Nihai Etiket']}</b>", r["Kaynak"]] for r in final_results]
165
- yield "<br>".join(current_logs), table_display
166
-
167
- current_logs.append("✨ <b>Analiz Tamamlandı.</b>")
168
- yield "<br>".join(current_logs), [[r["Varlık"], r["İlk Etiket"], f"<b>{r['Nihai Etiket']}</b>", r["Kaynak"]] for r in final_results]
169
-
170
- # --- 4. GRADIO ARAYÜZÜ ---
171
- with gr.Blocks(title="RAG-NER Uzman Karar Destek Sistemi") as demo:
172
- gr.Markdown("# 🚀 RAG-NER Uzman Karar Destek Sistemi")
173
-
174
- with gr.Tab("Metin Analizi"):
175
- input_text = gr.Textbox(
176
- label="Analiz Edilecek Metin",
177
- placeholder="Analiz etmek istediğiniz metni buraya girin...",
178
- lines=3
179
- )
180
-
181
- # EKSİK OLAN ÖRNEKLER BÖLÜMÜ BURADA TANIMLANDI
182
- examples_list = [
183
- ["Türk yönetmen Nuri Bilge Ceylan, Venedik Film Festivali'nde Altın Aslan ödülünü kazandığı Kış Uykusu filmiyle uluslararası üne kavuştu."],
184
- ["Amerikalı yazar George Orwell'in ünlü kitabı 1984, Apple şirketinin Macintosh tanıtım reklamında ilham kaynağı olarak kullanılmış ve Windows işletim sistemine karşı bir metafor haline gelmişti."],
185
- ["Fransız oyuncu Marion Cotillard, Christopher Nolan'ın Inception filmiyle Oscar ödülüne aday gösterilmiş ve daha önce La Vie en Rose performansıyla En İyi Kadın Oyuncu Akademi Ödülü'nü kazanmıştı."]
186
- ]
187
-
188
- gr.Examples(
189
- examples=examples_list,
190
- inputs=input_text,
191
- label="Hazır Örnek Senaryolar"
 
 
 
 
192
  )
193
-
 
194
  with gr.Row():
195
- # Log çıktısı için HTML bileşeni
196
- log_output = gr.HTML(label="Sistem Günlüğü")
197
- # Tablo çıktısı (Markdown desteği ile kalın yazıları gösterir)
198
- table_output = gr.Dataframe(
199
- headers=["Varlık", "İlk Etiket", "Nihai Etiket", "Kaynak"],
200
- datatype="markdown",
201
- wrap=True
202
  )
203
-
204
- btn = gr.Button("Analiz Et", variant="primary")
205
-
206
- # Buton fonksiyonu
207
- btn.click(
208
- process_ner,
209
- inputs=input_text,
210
- outputs=[log_output, table_output]
211
  )
212
 
213
- # --- 5. KULLANICI DENETİMİ (LOGIN) ---
214
- if __name__ == "__main__":
215
-
216
- demo.launch(
217
- auth=("admin", "1113"),
218
- auth_message="Lütfen uzman paneline erişmek için giriş yapın."
219
- )
 
1
  import torch
2
  import wikipedia
 
 
 
3
  import gradio as gr
4
+ from transformers import pipeline, AutoTokenizer, AutoModelForCausalLM
5
+ from fuzzywuzzy import process
6
+ import re
7
+
8
+ # -------------------------------
9
+ # 1. MODELLER VE KÜRESEL AYARLAR
10
+ # -------------------------------
11
 
12
+ # Türkçe için daha iyi bir NER modeli (multilingual ve Türkçe performansı yüksek)
13
+ NER_MODEL = "savasy/bert-base-turkish-ner-cased" # Alternatif: "dbmdz/bert-large-cased-finetuned-conll03-german" multilingual
14
+ ner_pipe = pipeline(
15
+ "ner",
16
+ model=NER_MODEL,
17
+ aggregation_strategy="simple",
18
+ device=0 if torch.cuda.is_available() else -1
19
+ )
20
+
21
+ # LLM (Qwen2.5 1.5B - hafif ve hızlı)
22
+ MODEL_ID = "Qwen/Qwen2.5-1.5B-Instruct"
23
+ tokenizer = AutoTokenizer.from_pretrained(MODEL_ID, trust_remote_code=True)
24
 
25
  try:
26
+ llm_model = AutoModelForCausalLM.from_pretrained(
27
+ MODEL_ID,
28
+ torch_dtype=torch.bfloat16 if torch.cuda.is_available() else torch.float32,
29
+ device_map="auto",
30
+ trust_remote_code=True
31
+ )
32
+ LLM_AVAILABLE = True
33
  except Exception as e:
34
+ print(f"LLM yüklenemedi: {e}")
35
+ llm_model = None
36
+ LLM_AVAILABLE = False
37
+
38
+ # Wikipedia Türkçe
39
+ wikipedia.set_lang("tr")
40
+
41
+ # Özel etiket tanımları
42
+ CUSTOM_LABELS = {
43
+ "MOVIE": {"tanim": "Sinema filmleri ve diziler", "anahtar": ["film", "filmi", "dizi", "yönetmen"]},
44
+ "BOOK": {"tanim": "Kitaplar ve yazılı edebi eserler", "anahtar": ["kitap", "roman", "yazar", "yazıldı"]},
45
+ "SOFTWARE": {"tanim": "Yazılım ve işletim sistemleri", "anahtar": ["yazılım", "program", "uygulama", "işletim sistemi"]},
46
+ "AWARD": {"tanim": "Ödüller ve madalyalar", "anahtar": ["ödül", "oscar", "nobel", "altın"]},
47
+ "PRODUCT": {"tanim": "Ticari ürünler ve markalar", "anahtar": ["telefon", "araba", "model", "marka", "ürün"]},
48
+ "NORP": {"tanim": "Milliyet, etnik grup, din", "anahtar": ["türk", "amerikalı", "fransız", "müslüman", "hristiyan"]},
49
+ "GPE": {"tanim": "Ülkeler, şehirler, coğrafi bölgeler", "anahtar": ["türkiye", "istanbul", "paris", "abd"]}
50
+ }
51
+
52
+ # -------------------------------
53
+ # 2. YARDIMCI FONKSİYONLAR
54
+ # -------------------------------
55
+
56
+ def get_best_wiki_summary(entity):
57
+ """Wikipedia'dan en uygun özeti getirir (fuzzy matching ile)"""
58
  try:
59
+ candidates = wikipedia.search(entity, results=5)
60
+ if not candidates:
61
+ return None
62
+ # En iyi eşleşeni seç
63
+ best_title, score = process.extractOne(entity, candidates)
64
+ if score < 60: # Eşleşme düşükse vazgeç
65
+ return None
66
+ return wikipedia.summary(best_title, sentences=2, auto_suggest=False)
67
  except:
68
+ return None
69
 
70
+ def batch_llm_refine(entities_data):
71
+ """Birden fazla varlığı tek prompt'ta analiz eder (batch processing)"""
72
+ if not LLM_AVAILABLE or not entities_data:
73
+ return {e["entity"]: ("MISC", "LLM kullanılamıyor") for e in entities_data}
 
 
74
 
75
+ device = next(llm_model.parameters()).device
76
+
77
+ # Prompt hazırlığı
78
  label_rules = ""
79
+ for k, v in CUSTOM_LABELS.items():
80
+ label_rules += f"### {k}\n- TANIM: {v['tanim']}\n- ANAHTAR KELİMELER: {', '.join(v['anahtar'])}\n\n"
81
+
82
+ tasks = ""
83
+ for i, item in enumerate(entities_data, 1):
84
+ tasks += f"""
85
+ GÖREV {i}:
86
+ - VARLIK: {item['entity']}
87
+ - CÜMLE: "{item['sentence']}"
88
+ - WIKI: "{item['wiki'] or 'Bilgi yok'}"
89
+ """
90
 
91
+ prompt = f"""Sen bir NER uzmanısın. Aşağıdaki varlıkları sırayla analiz et ve her biri için sadece etiketi ver.
 
 
92
 
93
+ ETİKET KURALLARI:
94
  {label_rules}
95
 
96
+ FEW-SHOT ÖRNEK:
97
+ VARLIK: Inception | CÜMLE: Inception filmini izledim | WIKI: Christopher Nolan filmi → MOVIE
98
+ VARLIK: 1984 | CÜMLE: Orwell'in kitabı 1984 | WIKI: Roman → BOOK
99
+ VARLIK: iPhone | CÜMLE: Yeni iPhone aldım | WIKI: Apple telefonu → PRODUCT
100
+
101
+ Şimdi görevler:
102
+ {tasks}
103
+
104
+ ÇIKTI FORMATI (her satır bir görev):
105
+ GÖREV X: [ETIKET]
106
+ """
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
107
 
108
  messages = [{"role": "user", "content": prompt}]
109
  text = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
110
+ inputs = tokenizer([text], return_tensors="pt").to(device)
111
+
112
+ with torch.no_grad():
113
+ generated = llm_model.generate(
114
+ inputs.input_ids,
115
+ max_new_tokens=512,
116
+ temperature=0.1,
117
+ do_sample=False
118
+ )
119
+
120
+ response = tokenizer.decode(generated[0][inputs.input_ids.shape[-1]:], skip_special_tokens=True)
121
+
122
+ # Etiketleri çıkar
123
+ results = {}
124
+ for i, item in enumerate(entities_data, 1):
125
+ pattern = rf"GÖREV {i}:\s*([A-Z_]+)"
126
+ match = re.search(pattern, response)
127
+ label = match.group(1) if match and match.group(1) in CUSTOM_LABELS else "MISC"
128
+ results[item["entity"]] = (label, response) # Tüm analiz metni ortak
129
+ return results
130
+
131
+ # -------------------------------
132
+ # 3. ANA İŞLEM
133
+ # -------------------------------
134
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
135
  def process_ner(text):
136
+ logs = ["🚀 Analiz başlatıldı..."]
137
+ yield "<br>".join(logs), []
138
+
139
+ # NER ile varlıkları çıkar
140
+ raw_entities = ner_pipe(text)
141
+ misc_entities = []
142
+
143
+ results = []
144
+ for ent in raw_entities:
145
+ word = ent['word'].strip()
146
+ label = ent['entity_group']
147
+
 
 
 
 
 
 
 
 
148
  if label in ["PER", "ORG", "LOC"]:
149
+ results.append({"Varlık": word, "İlk": label, "Nihai": label, "Kaynak": "NER Model"})
150
+ logs.append(f"✅ <b>{word}</b> → {label} (doğrudan)")
151
+ else: # MISC veya bilinmeyen
152
+ wiki = get_best_wiki_summary(word)
153
+ if wiki:
154
+ logs.append(f"🌐 <b>{word}</b> için Wiki bulundu")
 
 
 
 
 
 
155
  else:
156
+ logs.append(f"⚠️ <b>{word}</b> için Wiki bulunamadı")
157
+ results.append({"Varlık": word, "İlk": "MISC", "Nihai": "MISC", "Kaynak": "Fallback"})
158
+ misc_entities.append({"entity": word, "sentence": text, "wiki": wiki})
159
+
160
+ yield "<br>".join(logs), [[r["Varlık"], r["İlk"], f"<b>{r['Nihai']}</b>", r["Kaynak"]] for r in results]
161
+
162
+ # Batch LLM rafinasyonu
163
+ if misc_entities and LLM_AVAILABLE:
164
+ logs.append("🧠 LLM ile toplu analiz yapılıyor...")
165
+ yield "<br>".join(logs), [[r["Varlık"], r["İlk"], f"<b>{r['Nihai']}</b>", r["Kaynak"]] for r in results]
166
+
167
+ refined = batch_llm_refine(misc_entities)
168
+ for item in misc_entities:
169
+ entity = item["entity"]
170
+ new_label, _ = refined.get(entity, ("MISC", ""))
171
+ # Sonuçları güncelle
172
+ for r in results:
173
+ if r["Varlık"] == entity:
174
+ r["Nihai"] = new_label
175
+ r["Kaynak"] = "RAG+LLM"
176
+
177
+ logs.append("✨ Analiz tamamlandı!")
178
+ yield "<br>".join(logs), [[r["Varlık"], r["İlk"], f"<b>{r['Nihai']}</b>", r["Kaynak"]] for r in results]
179
+
180
+ # -------------------------------
181
+ # 4. GRADIO ARAYÜZ
182
+ # -------------------------------
183
+
184
+ with gr.Blocks(title="RAG-NER Türkçe", theme=gr.themes.Soft()) as demo:
185
+ gr.Markdown("# 🇹🇷 RAG-NER: Gelişmiş Türkçe Varlık Tanılama")
186
+ gr.Markdown("Standart NER + Wikipedia + Yerel LLM ile yüksek doğruluklu özel varlık tanıma")
187
+
188
+ with gr.Tab("Analiz"):
189
+ txt_input = gr.Textbox(
190
+ label="Metin Girin",
191
+ lines=4,
192
+ placeholder="Örnek: Türk yönetmen Nuri Bilge Ceylan, Kış Uykusu filmiyle Altın Aslan ödülünü kazandı..."
193
  )
194
+ btn = gr.Button("Analiz Et", variant="primary", size="lg")
195
+
196
  with gr.Row():
197
+ log_out = gr.HTML(label="İşlem Günlüğü")
198
+ table_out = gr.Dataframe(
199
+ headers=["Varlık", "İlk Etiket", "Nihai Etiket", "Kaynak"],
200
+ datatype=["str", "str", "markdown", "str"],
201
+ interactive=False
 
 
202
  )
203
+
204
+ examples = gr.Examples(
205
+ examples=[
206
+ ["Türk yönetmen Nuri Bilge Ceylan, Venedik Film Festivali'nde Altın Aslan ödülünü kazandığı Kış Uykusu filmiyle uluslararası üne kavuştu."],
207
+ ["Amerikalı yazar George Orwell'in ünlü kitabı 1984, Apple şirketinin Macintosh tanıtım reklamında ilham kaynağı olarak kullanılmış ve Windows işletim sistemine karşı bir metafor haline gelmişti."],
208
+ ["Fransız oyuncu Marion Cotillard, Christopher Nolan'ın Inception filmiyle Oscar ödülüne aday gösterilmiş ve daha önce La Vie en Rose performansıyla En İyi Kadın Oyuncu Akademi Ödülü'nü kazanmıştı."],
209
+ ],
210
+ inputs=txt_input
211
  )
212
 
213
+ btn.click(process_ner, inputs=txt_input, outputs=[log_out, table_out])
214
+
215
+ demo.queue(max_size=20).launch()