Python 使用n-grams从书面文本中定位和提取数字数据 问题:

Python 使用n-grams从书面文本中定位和提取数字数据 问题:,python,regex,parsing,n-gram,Python,Regex,Parsing,N Gram,我试图解析人工生成的文本,以提取定量数据,并使用Python将其输出到表中 我从半结构化电子邮件中提取了大约14000份患者记录。我能够解析出(匿名)患者id、日期和治疗计划。治疗计划字符串的长度通常不超过30个单词,由某人手动编写。它包含我试图提取和制表的信息,以及一些我可以忽略的无关注释。为Unigram运行一个单词包模型会产生约2000个单词的词汇,因此它不是特别多样化。一袋6克的单词会导致2.2MB的词汇表文件大小,因此内存不应该是一个问题 使用Unigram,我能够识别哪些记录包含感兴

我试图解析人工生成的文本,以提取定量数据,并使用Python将其输出到表中

我从半结构化电子邮件中提取了大约14000份患者记录。我能够解析出(匿名)患者id、日期和治疗计划。治疗计划字符串的长度通常不超过30个单词,由某人手动编写。它包含我试图提取和制表的信息,以及一些我可以忽略的无关注释。为Unigram运行一个单词包模型会产生约2000个单词的词汇,因此它不是特别多样化。一袋6克的单词会导致2.2MB的词汇表文件大小,因此内存不应该是一个问题

使用Unigram,我能够识别哪些记录包含感兴趣的药物。如果有20种感兴趣的药物,我有一个包含列的Pandas数据框架:

patient_id || date || raw_plan_text || drug_1 || drug_2 || ... || drug_20
其中,drugh\N列是简单的布尔值,指示计数向量器返回大于0的计数的位置

目标: 接下来我要做的是分析药物的剂量和服用频率。治疗计划字符串可能包含以下子字符串:

<dosage> <drug_name> <intake_frequency>
目前的做法: 我掌握了每种感兴趣药物的典型剂量的一些领域知识,以及摄入频率的常见表示法(例如,“qid”表示每天四次,“prn”表示根据需要)。正如我所提到的,频率可以是一个简单的单字符(“prn”)或双字符(“4-6小时prn”)。剂量也是如此

我计划使用药物单谱图和剂量+频率ngrams对相关记录进行克隆,并引导正则表达式在药物名称前后搜索要提取的适当子字符串,考虑术语的可变顺序。当患者的原始治疗计划文本中有不止一种药物时,情况会变得有点棘手。我担心将错误的剂量/频率与错误的药物联系起来。我想我可以使用标点符号作为分隔符,但由于我不能直观地检查所有记录,我不能保证这是足够的,因为语料库是自由形式的


我想问那些有知识的人:有没有更好的方法来使用高阶ngram来解决我的问题?我一直在寻找类似的问题,但很多问题都与文本分类和情感分析有关。谢谢

老实说,这种方法似乎充满了陷阱。是的……每当一个解决方案集中在regex的稳定性能上,我都会附和你的观点。这感觉像是一件愚蠢的差事,但我正试图弄清楚这是问题本身还是我对它的天真态度。为什么要使用ngrams呢?为什么不找出感兴趣的药物,然后在该药物周围开一个窗口呢?我最初使用1克是为了对语料库有一个感觉(例如,药物名称的拼写错误)并纠正一些常见的拼写错误。关于剂量和频率的bi/三联图的类似想法:如果我知道这些子串在语料库中是什么样子,我就知道如何解析它们。
patient_id || date || raw_plan_text || drug1 || drug1_dose || drug1_freq || ...