#!/usr/bin/env python3 """ 从附表补全 FtSPL5-24 实体 """ import json def main(): print("=" * 70) print("Adding Missing FtSPL5-24 Genes") print("=" * 70) # 加载基因列表 with open('ftspl_gene_list.json') as f: gene_list = json.load(f) # 加载当前结果 with open('evaluation/auto_results/pmid31286919_final_v2.json') as f: current = json.load(f) # 当前已有的实体ID existing_ids = {e['id'] for e in current['entities']} print(f"\nCurrent entities: {len(existing_ids)}") print(f"Gene list: {len(gene_list)}") # 添加缺失的基因实体 added = 0 for gene in gene_list: symbol = gene['symbol'] if symbol not in existing_ids: entity = { "id": symbol, "name": symbol, "type": "gene", "species": "Fagopyrum tataricum", "primary_id": gene['locus_id'], "protein_length": gene['protein_length'], "attributes": {"domain": gene.get('domain', '')} } current['entities'].append(entity) existing_ids.add(symbol) added += 1 print(f"\nAdded {added} new gene entities") # 不添加 member_of 关系(Gold 中没有这些具体关系) print(f"Note: Not adding member_of relations for all genes (not in Gold Standard)") # 保存 print(f"\nFinal stats:") print(f" Total entities: {len(current['entities'])}") print(f" Total relations: {len(current['relations'])}") output_path = 'evaluation/auto_results/pmid31286919_complete.json' with open(output_path, 'w') as f: json.dump(current, f, indent=2) print(f"\n✓ Saved to: {output_path}") # 评估 print("\n" + "=" * 70) print("Evaluation") print("=" * 70) import subprocess subprocess.run([ 'python3', 'evaluation/compare_extraction.py', '--gold', 'evaluation/gold_standard/pmid31286919_layer2_full.json', '--pred', output_path ]) if __name__ == "__main__": main()