You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python读取CSV匹配症状异常:无法正确识别疾病问题排查

问题诊断与修复方案

核心错误点

  • CSV读取参数错误:csv.reader('dataset.csv') 传入的是字符串而非打开的文件对象,导致CSV读取器将字符串的每个字符当作单独行处理,这就是输出"d."的直接原因(字符串第一个字符是'd')。正确写法应为csv.reader(csv_file)。
  • 代码缩进错误:for row in csv_reader: 及后续逻辑缩进脱离了with open(...)代码块,文件在with结束后已自动关闭,此时迭代csv_reader会读取无效内容。
  • 症状匹配精度问题:数据集里部分症状前缀带有and (比如and shortness of breath),且存在大小写不一致(比如Fever和fever),直接全等匹配会导致大量漏判。

修正后的代码

#!/usr/bin/env python3

import argparse
import csv

# 解析命令行参数
parser = argparse.ArgumentParser()
parser.add_argument('-t', '--task', help='输入需要匹配的症状,用逗号分隔')
parser.add_argument('-d', '--dataset', help='指定数据集文件路径')
args = parser.parse_args()

# 处理输入症状:去空格、统一转为小写
task_symptoms = [sym.strip().lower() for sym in args.task.split(', ')]

# 存储疾病与匹配次数的字典
disease_counts = {}

try:
    # 打开数据集文件
    with open(args.dataset, 'r') as csv_file:
        csv_reader = csv.reader(csv_file)
        
        # 遍历每一行数据
        for row in csv_reader:
            if not row:
                continue
                
            disease = row[0].strip()
            # 处理数据集症状:去除and前缀、去空格、统一小写
            cleaned_symptoms = []
            for sym in row[1:]:
                sym_clean = sym.strip().lower()
                if sym_clean.startswith('and '):
                    sym_clean = sym_clean[4:]
                cleaned_symptoms.append(sym_clean)
            
            # 统计匹配的症状数量
            match_count = 0
            for task_sym in task_symptoms:
                if task_sym in cleaned_symptoms:
                    match_count += 1
            
            disease_counts[disease] = match_count
    
    if not disease_counts:
        print("数据集内无有效数据。")
        exit()
        
    # 获取最高匹配次数
    max_match = max(disease_counts.values())
    # 筛选出所有最高匹配的疾病
    probable_diseases = [k for k, v in disease_counts.items() if v == max_match]
    
    # 输出结果
    if len(probable_diseases) == 1:
        print(f'The patient is likely suffering from {probable_diseases[0]}.')
    else:
        print(f'The patient is likely suffering from one of these: {", ".join(probable_diseases)}.')

except FileNotFoundError:
    print("错误:无法找到指定的数据集文件。")
except AttributeError:
    print("错误:请使用-t和-d参数分别传入症状和数据集路径。")

测试示例

执行命令:

python3 your_script.py -t "Wheezing, coughing" -d dataset.csv

输出结果:

The patient is likely suffering from Asthma.

内容的提问来源于stack exchange,提问作者Sophia Hamdani

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 23:45:34