说明书数据处理

将各列数据拉取出来

import pandas as pd

# 读取原始文件
df = pd.read_excel('高血压.xlsx')

# 选择需要的列
selected_columns = ['注意事项']
df_selected = df[selected_columns]

# 将结果保存到新文件
df_selected.to_excel('./gao_clean/注意事项.xlsx', index=False)

需要其他列就更改列名即可

抽取结果:

image-20230720231142355

针对这样的数据

【通用名称】 尼索地平胶囊
【商品名称】 蒂益欣
【英文名称】 Nisoldipine Capsules
【汉语拼音】 Ni Suo Di Ping Jiao Nang"
import pandas as pd
import re

# 读取Excel文件
df = pd.read_excel('./gao_clean/clean_name1.xlsx')

# 提取出【通用名称】并删除其他内容
df['通用名称'] = df['商品名称'].apply(lambda x: re.findall(r'【通用名称】\s*(\S+)', x)[0])

# 只保留【通用名称】列,并将结果保存到新文件
df = df[['通用名称']]
df.to_excel('./gao_clean/clean_name2.xlsx', index=False)

如果有这样的情况

【方名】 理中安蛔汤 《类证治裁》
【汉语拼音】 Li Zhong An Hui Tang
import pandas as pd
import re

# 读取Excel文件
df = pd.read_excel('./gao_all/药品名称.xlsx')

# 提取出【通用名称】和【方名】后面的内容并删除其他内容
def extract_name(x):
    common_name_match = re.findall(r'【通用名称】\s*(\S+)', x)
    if common_name_match:
        return common_name_match[0]
    else:
        other_name_match = re.findall(r'【方名】\s*(\S+)', x)
        if other_name_match:
            return other_name_match[0]
        else:
            print(f'Error: failed to extract name from "{x}"')
            return None

df['通用名称或方名'] = df['药品名称'].apply(extract_name)

# 只保留【通用名称/方名】列,并将结果保存到新文件
df = df[['通用名称或方名']]
df.to_excel('./gao_all/药品名称1.xlsx', index=False)

使用正则表达式和re模块来匹配并提取【通用名称】

抽取结果

image-20230720231107060

将抽取出来的通用名称进行构造问题

import pandas as pd
import re

# 读取Excel文件
df = pd.read_excel('高血压.xlsx')

# 提取出所有的【通用名称】并删除其他内容
df['通用名称'] = df['药品名称'].apply(lambda x: re.findall(r'【通用名称】\s*(\S+)', x))

# 构造问题,并将结果存储到Excel文件中
question = "{drug}是用于什么病症的?"
df_result = pd.DataFrame(columns=['问题'])

for i, row in df.iterrows():
    drug = row['通用名称'][0] # 获取第一个通用名称
    result = re.sub(r'【通用名称】\s*(\S+)', drug, row['药品名称']) # 替换通用名称
    df_result.loc[i] = [question.format(drug=drug)] # 添加问题到结果DataFrame
    df.loc[i, '药品名称'] = result # 更新药品名称

df.to_excel('./gao_clean/question_clean.xlsx', index=False) # 保存处理后的Excel文件
df_result.to_excel('./gao_clean/question.xlsx', index=False) # 保存结果到Excel文件

去除方名的构造问题

import pandas as pd
import re

# 读取Excel文件
df = pd.read_excel('原始药品说明书(去重).xlsx')

# 提取出所有的【通用名称】或【方名】并删除其他内容
def extract_name(x):
    common_name_match = re.findall(r'【通用名称】\s*(\S+)', x)
    if common_name_match:
        return common_name_match[0]
    else:
        other_name_match = re.findall(r'【方名】\s*(\S+)', x)
        if other_name_match:
            return other_name_match[0]
        else:
            return ""  # 如果未找到通用名称或方名,则返回一个空字符串

df['通用名称或方名'] = df['药品名称'].apply(extract_name)

# 构造问题,并将结果存储到Excel文件中
question = "{drug}的注意事项是什么?"
df_result = pd.DataFrame(columns=['问题'])

for i, row in df.iterrows():
    drug = row['通用名称或方名'] # 获取通用名称或方名
    if drug:
        result = re.sub(r'【通用名称】\s*(\S+)|【方名】\s*(\S+)', drug, row['药品名称']) # 替换通用名称或方名
        df_result.loc[i] = [question.format(drug=drug)] # 添加问题到结果DataFrame
        df.loc[i, '药品名称'] = result # 更新药品名称
    else:
        df_result.loc[i] = [""] # 如果通用名称或方名为空,则将问题设置为空字符串

df.to_excel('./gao_all/question_clean.xlsx', index=False) # 保存处理后的Excel文件
df_result.to_excel('./gao_all/question_注意.xlsx', index=False) # 保存结果到Excel文件

这个是又抽取了一遍通用名称,构造问题后可以删除保存处理后的Excel文件

全部抽取后,我是手动合并了问题和答案

文件格式转换

代码xlsx转json

import pandas as pd
import json

# 读取 xlsx 文件
df = pd.read_excel('instruction_small.xlsx')

# 将每一行数据转换成一个 JSON 对象
data = []
for i, row in df.iterrows():
    row_dict = row.to_dict()
    data.append(row_dict)

# 将 JSON 对象保存到文件中
with open('instruction_small.json', 'w', encoding='utf-8') as f:
    json.dump(data, f, ensure_ascii=False, indent=4)

通过免费在线将 XLSX 转换为 JSON (aspose.app)网站进行文件转换

image-20230720234720415

文章作者: MakerGao
版权声明: 本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 MakerGao
喜欢就支持一下吧