Skip to content

Commit 38cb9d9

Browse files
committed
renameing parse_result.py to result.py
1 parent 3e8c645 commit 38cb9d9

1 file changed

Lines changed: 70 additions & 0 deletions

File tree

src/hyperbase/parsers/result.py

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
from __future__ import annotations
2+
3+
import json
4+
from dataclasses import dataclass, field
5+
from typing import Any, cast
6+
7+
from hyperbase.hyperedge import Hyperedge
8+
9+
10+
@dataclass
11+
class ParseResult:
12+
edge: Hyperedge
13+
text: str
14+
tokens: list[str]
15+
tok_pos: Hyperedge
16+
failed: bool = False
17+
errors: list[str] = field(default_factory=list)
18+
extra: dict[str, Any] = field(default_factory=dict)
19+
source: dict[str, Any] = field(default_factory=dict)
20+
21+
def to_dict(self) -> dict[str, Any]:
22+
d: dict[str, Any] = {
23+
"edge": str(self.edge),
24+
"text": self.text,
25+
"tokens": self.tokens,
26+
"tok_pos": str(self.tok_pos),
27+
"failed": self.failed,
28+
"errors": self.errors,
29+
"extra": self.extra,
30+
"source": self.source,
31+
}
32+
return d
33+
34+
def to_json(self) -> str:
35+
return json.dumps(self.to_dict(), ensure_ascii=False, default=str)
36+
37+
@classmethod
38+
def from_dict(cls, d: dict[str, Any]) -> ParseResult:
39+
from hyperbase.builders import hedge
40+
41+
edge = d["edge"]
42+
if isinstance(edge, str):
43+
edge = hedge(edge)
44+
elif not isinstance(edge, Hyperedge):
45+
raise TypeError(
46+
f"'edge' must be a str or Hyperedge, got {type(edge).__name__}"
47+
)
48+
edge = cast(Hyperedge, edge)
49+
tok_pos = d.get("tok_pos")
50+
if isinstance(tok_pos, str):
51+
tok_pos = hedge(tok_pos)
52+
elif tok_pos is not None and not isinstance(tok_pos, Hyperedge):
53+
raise TypeError(
54+
f"'tok_pos' must be a str or Hyperedge, got {type(tok_pos).__name__}"
55+
)
56+
tok_pos = cast(Hyperedge, tok_pos)
57+
return cls(
58+
edge=edge,
59+
text=d["text"],
60+
tokens=d["tokens"],
61+
tok_pos=tok_pos,
62+
failed=d.get("failed", False),
63+
errors=d.get("errors", []),
64+
extra=d.get("extra", {}),
65+
source=d.get("source", {}),
66+
)
67+
68+
@classmethod
69+
def from_json(cls, json_str: str) -> ParseResult:
70+
return cls.from_dict(json.loads(json_str))

0 commit comments

Comments
 (0)