如果化合物的数量找不到如何处理
当从文献或数据中提取化合物数量时,如果未能找到特定化合物的数量,可以采取以下几种策略来处理:
- 设置默认值:为缺失的化合物数量设置一个默认值(例如0)。
- 忽略该化合物:如果化合物数量不重要或者不影响整体分析,可以选择忽略它。
- 记录缺失情况:在最终的数据集中记录该化合物数量缺失的情况,以便后续分析时注意。
- 手动补充:如果有条件,可以通过查阅原始文献或其他可靠来源手动补充缺失的化合物数量。
- 使用统计方法:如果数据集较大,可以使用统计方法(如插补法)来估计缺失的数值。
在代码实现中,通常会结合这些策略。例如,在 deal_with_quantity
函数中,如果未找到化合物数量,则返回0:
def deal_with_quantity(quantity):
try:
if quantity is None:
return 0
# 其他处理逻辑...
except:
return 0
这样可以在数据处理过程中自动处理缺失值,确保程序不会因为空值而中断。
这个文件中如果化合物的数量找不到如何处理
在这个文件中,当化合物的数量(quantity
)找不到时,程序会将其设置为 0
或者空字符串,并继续执行后续操作。具体处理方式如下:
默认值设置:在多个地方,当
quantity
为空或无效时,会将其设为0
或空字符串。if quantity == '': quantity0 = 0 else: quantity0 = deal_with_quantity(quantity)
函数
deal_with_quantity
处理:该函数负责处理各种格式的quantity
值,包括范围值和带有单位的值。如果quantity
为空或无效,最终返回0
。def deal_with_quantity(quantity): try: if quantity is None: return 0 if '-' in str(quantity) and re.findall('\D', str(quantity).replace('-', '')) == '': ranges = quantity.split('-') average = (float(ranges[0].replace('(', '').replace(')', '')) + float(ranges[1].replace('(', '').replace(')', ''))) / 2.0 return float(re.sub("[^\d\.]", "", str(average))) elif '–' in str(quantity): ranges = quantity.split('–') average = (float(ranges[0].replace('(', '')) + float(ranges[1].replace(')', ''))) / 2.0 return float(re.sub("[^\d\.]", "", str(average))) else: try: return float(str(quantity).replace('ten', '10').replace('nine', '9').replace('eight', '8').replace('seven', '7').replace('six', '6').replace('five', '5').replace('four', '4').replace('three', '3').replace('two', '2').replace('zero', '0').replace(',', '').replace('◦', '').replace(')', '').replace('vol', '').replace('m2', '').replace('(', '').replace('°', '').replace('≈', '').replace('(', '').replace(')', '').replace('g', '').replace('to', '').replace('∼', '').replace('˜', '').replace('-', '').replace('∼', '').replace(',', '').replace('wt', '').replace('·', '').replace('⩾', '').replace('˜', '').replace('+', '').replace('≈', '').replace('±', '').replace('0.27-0.28', '0.27')) except: return 0 except: return 0
分类材料:在
ClassfyMaterials
和ClassfyMaterialsRatio
函数中,如果某个材料的数量未找到,也会将其设为0
或空字符串。for material, quantity in material_quantity.items(): if quantity == '': quantity0 = 0 else: quantity0 = deal_with_quantity(quantity)
通过这些处理方式,程序能够确保即使某些化合物的数量找不到,也不会导致程序崩溃,而是继续正常运行并记录相关数据。
这个文件中如果化合物的数量找不到如何进行判断的
在这个文件中,如果化合物的数量(quantity
)找不到,会通过以下方式来判断并处理:
初始化为空字符串:在提取材料数量时,如果某个化合物的数量没有找到,默认值会被设置为空字符串
''
。material_quantity[''] = ''
处理空字符串:在后续处理过程中,如果遇到空字符串,会将其转换为数值
0
。if quantity == '': quantity0 = 0 else: quantity0 = deal_with_quantity(quantity)
deal_with_quantity
函数:该函数负责将字符串形式的数量转换为浮点数。如果输入是空字符串或无法解析的数量,返回0
。def deal_with_quantity(quantity): try: if quantity is None: return 0 if '-' in str(quantity) and re.findall('\D', str(quantity).replace('-',''))=='': ranges = quantity.split('-') average = (float(ranges[0].replace('(', '').replace(')', '')) + float(ranges[1].replace('(', '').replace(')', ''))) / 2.0 return float(re.sub("[^\d\.]", "", str(average))) elif '–' in str(quantity): ranges = quantity.split('–') average = (float(ranges[0].replace('(', '')) + float(ranges[1].replace(')', ''))) / 2.0 return float(re.sub("[^\d\.]", "", str(average))) else: return float(re.sub("[^\d\.]", "", str(quantity))) except: return 0
分类材料:在分类材料时,如果没有找到数量,也会使用默认值
0
进行处理。for type, words in material_word.items(): type_material_quantitys[type] = {} for material, quantity in material_quantity.items(): if quantity == '': quantity0 = 0 else: quantity0 = deal_with_quantity(quantity) categorized = False for type, words in material_word.items(): if material in words: categorized = True type_material_quantitys[type][material] = quantity0 if not categorized: if material: uncategorizes.append([material, quantity, material_unit[material], material_percent[material]])
综上所述,如果化合物的数量找不到,系统会将其初始化为 ''
,并在后续处理中将其转换为 0
。这样可以确保程序能够继续运行,并且不会因为缺失的数据而中断。