chen666-666 commited on
Commit
f4befb6
·
verified ·
1 Parent(s): ccf3425

Upload app.py

Browse files
Files changed (1) hide show
  1. app.py +43 -8
app.py CHANGED
@@ -508,13 +508,42 @@ def process_text(text, model_type="bert"):
508
  return ent_text, rel_text, kg_text, f"{total_duration:.2f} 秒"
509
 
510
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
511
  def process_file(file, model_type="bert"):
512
  try:
513
  with open(file.name, 'rb') as f:
514
  content = f.read()
515
 
516
  if len(content) > 5 * 1024 * 1024:
517
- return "❌ 文件太大", "", "", ""
518
 
519
  # 检测编码
520
  try:
@@ -529,15 +558,21 @@ def process_file(file, model_type="bert"):
529
  except:
530
  continue
531
  else:
532
- return "❌ 编码解析失败", "", "", ""
533
 
534
- # 直接调用process_text处理文本
535
- return process_text(text, model_type)
 
 
 
 
 
 
 
536
 
537
  except Exception as e:
538
  logging.error(f"文件处理错误: {str(e)}")
539
- return f"❌ 文件处理错误: {str(e)}", "", "", ""
540
-
541
 
542
 
543
  # ======================== 模型评估与自动标注 ========================
@@ -665,8 +700,8 @@ with gr.Blocks(css="""
665
  with gr.Tab("🗂 文件分析"):
666
  file_input = gr.File(file_types=[".txt", ".json"])
667
  file_btn = gr.Button("上传并分析")
668
- fout1, fout2, fout3, fout4 = gr.Textbox(), gr.Textbox(), gr.Textbox(), gr.Textbox()
669
- file_btn.click(fn=process_file, inputs=[file_input, model_type], outputs=[fout1, fout2, fout3, fout4])
670
 
671
  with gr.Tab("📊 模型评估"):
672
  eval_file = gr.File(label="上传标注 JSON")
 
508
  return ent_text, rel_text, kg_text, f"{total_duration:.2f} 秒"
509
 
510
 
511
+ from matplotlib.figure import Figure
512
+ from io import BytesIO
513
+
514
+ def generate_kg_image(entities, relations):
515
+ """
516
+ 生成知识图谱的图片
517
+ """
518
+ fig = Figure(figsize=(10, 8))
519
+ ax = fig.add_subplot(1, 1, 1)
520
+ ax.axis("off")
521
+
522
+ # 创建网络图
523
+ G = nx.DiGraph()
524
+ for entity in entities:
525
+ G.add_node(entity["text"], label=entity["type"])
526
+ for relation in relations:
527
+ G.add_edge(relation["head"], relation["tail"], label=relation["relation"])
528
+
529
+ # 绘制网络图
530
+ pos = nx.spring_layout(G)
531
+ nx.draw(G, pos, with_labels=True, node_color="lightblue", ax=ax)
532
+ nx.draw_networkx_edge_labels(G, pos, edge_labels={(u, v): d["label"] for u, v, d in G.edges(data=True)}, ax=ax)
533
+
534
+ # 保存为图片
535
+ buf = BytesIO()
536
+ fig.savefig(buf, format="png")
537
+ buf.seek(0)
538
+ return buf
539
+
540
  def process_file(file, model_type="bert"):
541
  try:
542
  with open(file.name, 'rb') as f:
543
  content = f.read()
544
 
545
  if len(content) > 5 * 1024 * 1024:
546
+ return "❌ 文件太大", "", "", "", None
547
 
548
  # 检测编码
549
  try:
 
558
  except:
559
  continue
560
  else:
561
+ return "❌ 编码解析失败", "", "", "", None
562
 
563
+ # 调用现有流程处理文本
564
+ ent_text, rel_text, kg_text, duration = process_text(text, model_type)
565
+
566
+ # 生成知识图谱图片
567
+ entities, _ = ner(text, model_type)
568
+ relations, _ = re_extract(entities, text)
569
+ kg_image = generate_kg_image(entities, relations)
570
+
571
+ return ent_text, rel_text, kg_text, duration, kg_image
572
 
573
  except Exception as e:
574
  logging.error(f"文件处理错误: {str(e)}")
575
+ return f"❌ 文件处理错误: {str(e)}", "", "", "", None
 
576
 
577
 
578
  # ======================== 模型评估与自动标注 ========================
 
700
  with gr.Tab("🗂 文件分析"):
701
  file_input = gr.File(file_types=[".txt", ".json"])
702
  file_btn = gr.Button("上传并分析")
703
+ fout1, fout2, fout3, fout4, fout5 = gr.Textbox(), gr.Textbox(), gr.Textbox(), gr.Textbox(), gr.File(label="下载知识图谱图片")
704
+ file_btn.click(fn=process_file, inputs=[file_input, model_type], outputs=[fout1, fout2, fout3, fout4, fout5])
705
 
706
  with gr.Tab("📊 模型评估"):
707
  eval_file = gr.File(label="上传标注 JSON")