import sys
import os
cwd = os.getcwd()
sys.path.append(cwd)
import re
from backend.src.parser_generic import MedicalDocParser
class PrescriptionParser(MedicalDocParser):
def __init__(self, text):
MedicalDocParser.__init__(self, text)
def parse(self):
return {
'patient_name': self.get_field('patient_name'),
'patient_address': self.get_field('patient_address'),
'medicines': self.get_field('medicines'),
'directions': self.get_field('directions'),
'refills': self.get_field('refills')
}
def get_field(self, field_name):
pattern_dict = {
'patient_name': ('Name:\s*([A-Za-z\s-]+?)\s*(?=\| Date:|Date:)', 0),
'patient_address': ('Address:(.*)\n', 0),
'medicines': ('Address:[^\n]*\n(.*)Directions:', re.DOTALL),
'directions': ('Directions:.*?\n*(.*?)\nRefill:', re.DOTALL),
'refills': ('Refill:.*(\d).*times', 0)
}
pattern_object = pattern_dict.get(field_name)
if pattern_object:
matches = re.findall(pattern_object[0], self.text, flags=pattern_object[1])
if len(matches) > 0:
return matches[0].strip()
if __name__ == '__main__':
document_text = '''
Dr John Smith, M.D
2 Non-Important Street,
New York, Phone (000)-111-2222
Name: Marta Sharapova Date: 9/11/2022
Address: 9 tennis court, new Russia, DC
Prednisone 20 mg
Lialda 2.4 gram
Directions:
Prednisone, Taper 5 mg every 3 days,
Finish in 2.5 weeks
Lialda - take 2 pill everyday for 1 month
Refill: _2_times
'''
pp = PrescriptionParser(document_text)
print(pp.parse())