我有一个如下所示的数据框
df = pd.DataFrame({'text_1':['WHITE SOFT PARAFFIN 100G', 'VITAMIN B12 1MG/ML INJ 10ML','vitamin B1 100mg, B6 200mg, B12 200mcg tab','UREA CREAM 10% BP 100G', 'TOBRAMYCIN 0.3%/DEXA 1% EYE DROP 5ML','TERAzosin 5MG TAB (HYTRIN)','SODIUM CHLORIDE 0.9% EYE DROP 5ML/10ML']})
我想从示例数据框中显示的药物列表中提取剂量信息。
虽然我能够达到 90% 的准确率,但我想与您核对一下如何以万无一失的方式或以稳健的方式最大限度地减少捕获不需要的信息
例如,我尝试了下面的方法,但它产生了错误的输出
df['text_1'].str.findall('[0-9]+\s*[mgMG/lLcC]+')
最后一行应该是 5ML/10ML
但它被分成了两部分(这是不正确的)
另一个提示是我知道我的所有剂量值都以 number optionally followed by a space and unit like
MG, MCG
、ML
、G
、g
、{{1} }、mg
或 mcg
等
例如:ml
,我想提取WHITE SOFT PARAFFIN 100G
。同样,对于 100G
,我想提取 VITAMIN B12 1MG/ML INJ 10ML
。我们提取 1MG/ML and 10ML
和 1MG/ML
因为它满足我的提示
所以,我希望我的输出如下
答案 0 :(得分:1)
怎么样
df.text_1.str.findall(r"\d+\s*[mc]*[lg]+/*(?:\d*\s*[mc]*[lg]+)?", flags=re.IGNORECASE)
输出:
0 [100G]
1 [1MG/ML, 10ML]
2 [100mg, 200mg, 200mcg]
3 [100G]
4 [5ML]
5 [5MG]
6 [5ML/10ML]
Name: text_1, dtype: object
关于正则表达式:
我们至少需要一些数字:\d+
空格是可选的 \s*
可能有 m
或 c
之类的前缀[mc]*
真正的单位应该在那里[lg]+
这些 /*
第二部分稍微修改了一下,具体
\d*
?
?:
我们使用不区分大小写的方式来从 M
等中节省一些空间