| import csv
|
| import os
|
|
|
|
|
| class SIGSParser:
|
| def __init__(self, csv_path):
|
| self.lexicon = {}
|
| self.load_lexicon(csv_path)
|
|
|
|
|
| def load_lexicon(self, csv_path):
|
| """Loads the SIGS CSV into a fast lookup dictionary."""
|
| if not os.path.exists(csv_path):
|
| raise FileNotFoundError(f"❌ Could not find lexicon file at: {csv_path}")
|
|
|
| with open(csv_path, mode='r', encoding='utf-8') as f:
|
| reader = csv.DictReader(f)
|
| for row in reader:
|
|
|
|
|
| token = row.get('wire_token', '').strip()
|
| if token:
|
| self.lexicon[token] = {
|
| "title": row.get('title', 'N/A'),
|
| "definition": row.get('definition', 'N/A'),
|
| "category": row.get('category_name', 'N/A')
|
| }
|
| print(f"✅ SIGS Parser loaded {len(self.lexicon)} tokens.")
|
|
|
|
|
| def parse(self, sigs_message):
|
| """
|
| Takes a SIGS string (e.g., 'agr001 tim030') and returns details.
|
| """
|
| tokens = sigs_message.split()
|
| results = []
|
|
|
| for t in tokens:
|
| data = self.lexicon.get(t)
|
| if data:
|
| results.append(f"[{t.upper()}] {data['title']}: {data['definition']}")
|
| else:
|
| results.append(f"[{t.upper()}] ⚠️ Unknown Token")
|
|
|
| return "\n".join(results)
|
|
|
|
|
|
|
| if __name__ == "__main__":
|
|
|
| parser = SIGSParser("The_SIGS_Lexicon_v1-STATIC_COPY-Master_Lexicon.csv")
|
|
|
|
|
| print("\n--- Decoding Message: 'agr001 mot004' ---")
|
| print(parser.parse("agr001 mot004")) |