Notes
python -m markitdown "/home/daytona/workspace/attachments/95f478f9-b205-405d-a24e-9be85e3e3f7c/7 immunization amended.pptx"
python3 -c " from pptx import Presentation from pptx.util import Inches import os path = '/home/daytona/workspace/attachments/95f478f9-b205-405d-a24e-9be85e3e3f7c/7 immunization amended.pptx' prs = Presentation(path) for i, slide in enumerate(prs.slides, 1): # Get slide title if available title = '' for shape in slide.shapes: if shape.has_text_frame and shape.shape_type == 13: continue if hasattr(shape, 'text') and shape.name.lower().startswith('title'): title = shape.text.strip() break print(f'=== SLIDE {i} ===' + (f' [{title}]' if title else '')) # Slide text content for shape in slide.shapes: if shape.has_text_frame: for para in shape.text_frame.paragraphs: text = para.text.strip() if text: print(f' {text}') # Speaker notes if slide.has_notes_slide: notes = slide.notes_slide.notes_text_frame.text.strip() if notes: print(f' [NOTES]: {notes}') print() "
which python3 && python3 --version && pip3 list 2>/dev/null | grep -i pptx; ls /home/daytona/skills/pptx/scripts/ 2>/dev/null || ls /home/daytona/skills/pptx/ 2>/dev/null
ls /home/daytona/skills/pptx/scripts/office/
cd /home/daytona/workspace && python3 /home/daytona/skills/pptx/scripts/office/unpack.py "/home/daytona/workspace/attachments/95f478f9-b205-405d-a24e-9be85e3e3f7c/7 immunization amended.pptx" /home/daytona/workspace/immunization_unpacked/ && echo "Done"
ls /home/daytona/workspace/immunization_unpacked/ppt/
python3 -c " import os, xml.etree.ElementTree as ET slides_dir = '/home/daytona/workspace/immunization_unpacked/ppt/slides' notes_dir = '/home/daytona/workspace/immunization_unpacked/ppt/notesSlides' ns = { 'a': 'http://schemas.openxmlformats.org/drawingml/2006/main', 'p': 'http://schemas.openxmlformats.org/presentationml/2006/main', 'r': 'http://schemas.openxmlformats.org/officeDocument/2006/relationships' } def get_text(xml_path): tree = ET.parse(xml_path) root = tree.getroot() texts = [] for t in root.iter('{http://schemas.openxmlformats.org/drawingml/2006/main}t'): if t.text and t.text.strip(): texts.append(t.text.strip()) return ' '.join(texts) # Slides slide_files = sorted([f for f in os.listdir(slides_dir) if f.endswith('.xml') and not f.startswith('_')]) note_files = sorted([f for f in os.listdir(notes_dir) if f.endswith('.xml') and not f.startswith('_')]) print(f'Found {len(slide_files)} slides, {len(note_files)} note slides') for sf in slide_files[:5]: print(' ', sf) for nf in note_files[:5]: print(' NOTE:', nf) "
python3 -c " import os, xml.etree.ElementTree as ET, re slides_dir = '/home/daytona/workspace/immunization_unpacked/ppt/slides' notes_dir = '/home/daytona/workspace/immunization_unpacked/ppt/notesSlides' def get_paragraphs(xml_path): tree = ET.parse(xml_path) root = tree.getroot() paragraphs = [] for para in root.iter('{http://schemas.openxmlformats.org/drawingml/2006/main}p'): runs = [] for t in para.iter('{http://schemas.openxmlformats.org/drawingml/2006/main}t'): if t.text: runs.append(t.text) text = ''.join(runs).strip() if text: paragraphs.append(text) return paragraphs def get_slide_title(xml_path): tree = ET.parse(xml_path) root = tree.getroot() # Look for title placeholder for sp in root.iter('{http://schemas.openxmlformats.org/presentationml/2006/main}sp'): ph = sp.find('.//{http://schemas.openxmlformats.org/presentationml/2006/main}ph') if ph is not None: ph_type = ph.get('type', '') if ph_type in ('title', 'ctrTitle'): runs = [] for t in sp.iter('{http://schemas.openxmlformats.org/drawingml/2006/main}t'): if t.text: runs.append(t.text) return ''.join(runs).strip() return '' # Sort naturally def natural_key(s): return [int(c) if c.isdigit() else c for c in re.split(r'(\d+)', s)] slide_files = sorted([f for f in os.listdir(slides_dir) if f.endswith('.xml') and not f.startswith('_')], key=natural_key) note_files = sorted([f for f in os.listdir(notes_dir) if f.endswith('.xml') and not f.startswith('_')], key=natural_key) # Map note slide number to file note_map = {} for nf in note_files: num = re.search(r'(\d+)', nf).group(1) note_map[int(num)] = nf output = [] for sf in slide_files: num = int(re.search(r'(\d+)', sf).group(1)) slide_path = os.path.join(slides_dir, sf) title = get_slide_title(slide_path) slide_text = get_paragraphs(slide_path) header = f'=== SLIDE {num}' + (f': {title}' if title else '') + ' ===' output.append(header) for line in slide_text: output.append(f' {line}') # Notes if num in note_map: note_path = os.path.join(notes_dir, note_map[num]) note_paras = get_paragraphs(note_path) # Filter out slide content echo (notes slides repeat slide text) slide_set = set(slide_text) real_notes = [p for p in note_paras if p not in slide_set] if real_notes: output.append(' --- SPEAKER NOTES ---') for n in real_notes: output.append(f' {n}') output.append('') print('\n'.join(output)) "
| Group | Vaccines |
|---|---|
| Birth | Hep B |
| Childhood | DTP, Polio, Hep B (2, 4, 6/12 months); Hib (2, 4, 12 months); MMR (12/12); DT (15-19 yrs) |
| Adult | Boosters; 50 yrs - DT (unless booster <10 yrs) |
| Travellers | Yellow fever, Typhoid |
| Non-immune females | MMR |
| Risky lifestyle | Hep B, Hep A |
| Aboriginal & >50 yrs, or non-Aboriginal & >65 yrs | Influenza (yearly); Pneumococcus (5-yearly) |
What about types of public health surveillance?
types of public health surveillance passive active sentinel syndromic
| Type | Who Reports | Speed | Completeness | Cost |
|---|---|---|---|---|
| Passive | Providers report to health dept. | Slow | Low-moderate | Low |
| Active | Health dept. seeks out cases | Fast | High | High |
| Sentinel | Selected sites only | Moderate | Partial (representative) | Moderate |
| Syndromic | Pre-diagnostic symptom data | Fastest | Variable | Moderate |
| Laboratory | Lab networks | Moderate-slow | High for confirmed cases | High |
| IBS | Formal structured sources | Moderate | Moderate | Moderate |
| EBS | Formal + informal sources | Fast | Variable | Low-moderate |