about summary refs log tree commit diff stats
path: root/archive/2025/summer/bsc_gerg/src/knowledge/resolver.py
diff options
context:
space:
mode:
authorMartin Fink <martin@finkmartin.com>2025-09-11 09:19:48 +0200
committerGitHub <noreply@github.com>2025-09-11 09:19:48 +0200
commit17af5f6fc0538f615b8612dcd2cb77c2affad63f (patch)
tree76e4c260123b68b93da2417482024ba11f9838ee /archive/2025/summer/bsc_gerg/src/knowledge/resolver.py
parenta910d0a3e57f4de47cf2387ac239ae8d0eaca507 (diff)
parent3e5d3ca82193e8e8561beb9ceac9982f376d84e2 (diff)
downloadresearch-work-archive-artifacts-17af5f6fc0538f615b8612dcd2cb77c2affad63f.tar.gz
research-work-archive-artifacts-17af5f6fc0538f615b8612dcd2cb77c2affad63f.zip
Merge pull request #10 from walamana/main
Add bsc_gerg
Diffstat (limited to 'archive/2025/summer/bsc_gerg/src/knowledge/resolver.py')
-rw-r--r--archive/2025/summer/bsc_gerg/src/knowledge/resolver.py38
1 files changed, 38 insertions, 0 deletions
diff --git a/archive/2025/summer/bsc_gerg/src/knowledge/resolver.py b/archive/2025/summer/bsc_gerg/src/knowledge/resolver.py
new file mode 100644
index 000000000..1e5d7a8b8
--- /dev/null
+++ b/archive/2025/summer/bsc_gerg/src/knowledge/resolver.py
@@ -0,0 +1,38 @@
+from typing import Annotated, AsyncIterable, Optional, Any
+
+from pydantic import Field
+
+from src.terminology.event import Event, VerifiedDefinitionResolved
+from src.terminology.models import TextSource, Definition
+from src.terminology.terminology import DefinitionResolver
+
+
+class CSVDefinitionResolver(DefinitionResolver):
+    definitions: Annotated[dict[str, Definition], Field(default_factory=dict)]
+    source: Optional[TextSource] = None
+
+
+    def model_post_init(self, __context: Any) -> None:
+        langs = ["de"]
+        self.source = self.blackboard.add_text_source("DICTIONARY")
+        for lang in langs:
+            with open(f"data/{lang}-glossary.csv", "r") as f:
+                data = f.read().split("\n")
+                for row in data:
+                    key, value = row.split("\t")
+                    self.definitions[key] = Definition(
+                        text=value,
+                        verified=True,
+                        partial=False,
+                        source=self.source,
+                    )
+
+    async def activate(self, event: Event) -> AsyncIterable[Event]:
+        term = event.term
+        term_str = term.normalized_or_text()
+        if term_str in self.definitions:
+            definition = self.definitions[term_str]
+            if definition in term.definitions:
+                return
+            term.definitions.append(definition)
+            yield VerifiedDefinitionResolved(term=term, definition=definition)