Spaces:
Sleeping
Sleeping
Upload app.py
Browse files
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 |
-
#
|
535 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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")
|