from sklearn.feature_extraction.text import CountVectorizer
from sklearn.naive_bayes import MultinomialNB
import re
clinical_data = [
    "Patient ID: 001, Age: 45, Diagnosis: Diabetes",
    "Patient ID: 002, Age: 60, Diagnosis: Hypertension",
    "Patient ID: 003, Age: 29, Diagnosis: Diabetes",
    "Patient ID: 004, Age: 40, Diagnosis: BloodPressure",
    "Patient ID: 005, Age: 52, Diagnosis: Depression"
]
def rule_based(data):
    return [re.findall(r'Patient ID: (\d+), Age: (\d+), Diagnosis: (\w+)', record) for record in data]
def pattern_based(data):
    patterns=["Patient ID","Age","Diagnosis"]
    extracted_data=[]
    for record in data:
        record_data=[]
        for pattern in patterns:
            match=re.search(f'{pattern}:(\w+)',record)
            record_data.append(match.group(1) if match else None)
        extracted_data.append(tuple(record_data))
    return extracted_data
def machine_learning(data):
    vectorizer=CountVectorizer()
    X=vectorizer.fit_transform(data)
    y=[record.split(", ")[2].split(": ")[1] for record in data]
    clf=MultinomialNB().fit(X,y)
    predictions=clf.predict(X)
    return list(zip([record.split(", ")[2].split(": ")[1] for record in data],y,predictions))
rule_based_result=rule_based(clinical_data)
pattern_based_result=pattern_based(clinical_data)
machine_learning_result=machine_learning(clinical_data)
print("Rule based",rule_based_result)
print("Pattern based",pattern_based_result)
print("Machine learning",machine_learning_result)
