按任务学习
在 SMILES CSV 中标记重复结构候选
保留每个源行,在旁边写入 chematic 的规范 SMILES,并且无需将文件发送到服务器即可标记重复候选。
完成内容
一份保留源行的 CSV 报告,其中包含原始 SMILES、本地规范形式,以及明确的 unique、duplicate 或 invalid 状态。
步骤
- 创建带有 smiles 表头和若干输入行的 molecules.csv。
- 安装 chematic 后运行下面仅使用标准库的 Python 脚本。
- 在删除或合并任何行之前检查 molecule-report.csv。
import csv
import chematic
seen = {}
with open("molecules.csv", newline="") as src, open("molecule-report.csv", "w", newline="") as out:
reader = csv.DictReader(src)
fields = ["source_row", "smiles", "canonical_smiles", "status"]
writer = csv.DictWriter(out, fieldnames=fields)
writer.writeheader()
for source_row, row in enumerate(reader, start=2):
smiles = row["smiles"].strip()
try:
canonical = chematic.from_smiles(smiles).smiles
status = f"duplicate_of_row_{seen[canonical]}" if canonical in seen else "unique"
seen.setdefault(canonical, source_row)
except ValueError:
canonical, status = "", "invalid_smiles"
writer.writerow({"source_row": source_row, "smiles": smiles,
"canonical_smiles": canonical, "status": status})预期结果
将 CCO 和 OCC 放在不同的行时,两行的 canonical_smiles 都是 C(C)O;后一个行会标记为 duplicate_of_row_2。无效 SMILES 也会作为 invalid_smiles 保留在报告中。
遇到问题时
相同的规范 SMILES 只是重复复核候选,并不能证明记录有相同的盐形式、立体化学、来源或预期身份。请保留原始行和软件包版本,并在删除数据前验证标准化策略。