我有如下所示的数据框架
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、mg、mcg或ml等开始。
例如:WHITE SOFT PARAFFIN 100G,我想提取100G。同样,对于VITAMIN B12 1MG/ML INJ 10ML,我想提取1MG/ML and 10ML。我们提取1MG/ML和10ML,因为它满足我的提示。
因此,我希望我的输出如下所示

发布于 2021-03-31 07:18:02
怎么样
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关于regex:
\d+
\s*空间是可选的
[mc]*
m或c这样的前缀可能在那里[lg]+,
在这些/*的末尾,斜杠
第二部分稍作修改,特别是
在斜杠后,数字可能存在,也可能不存在,即\d*
?
?:我们使用不区分大小写的方法,从M等方面节省一些空间。
https://stackoverflow.com/questions/66882946
复制相似问题