Download encoder.py from sundaycoil/spell-checker: direct link, hf CLI and curl.
- Browser
- Download file 2.14 kB
-
https://huggingface.co/sundaycoil/spell-checker/resolve/main/encoder.py
- Command line
-
hf download hf://sundaycoil/spell-checker/encoder.py
-
curl -L -o encoder.py https://huggingface.co/sundaycoil/spell-checker/resolve/main/encoder.py
2.14 kB
| """Spell Checker — utility helpers for error operations.""" | |
| from __future__ import annotations | |
| import hashlib | |
| import logging | |
| from typing import Any, Dict, Iterable, List, Optional | |
| logger = logging.getLogger(__name__) | |
| def ignore_error(data: Dict[str, Any]) -> Dict[str, Any]: | |
| """Error ignore — normalises and validates *data*.""" | |
| result = {k: v for k, v in data.items() if v is not None} | |
| if "confidence" not in result: | |
| raise ValueError(f"Error must include 'confidence'") | |
| result["id"] = result.get("id") or hashlib.md5( | |
| str(result["confidence"]).encode()).hexdigest()[:12] | |
| return result | |
| def add_errors( | |
| items: Iterable[Dict[str, Any]], | |
| *, | |
| status: Optional[str] = None, | |
| limit: int = 100, | |
| ) -> List[Dict[str, Any]]: | |
| """Filter and page a sequence of Error records.""" | |
| out = [i for i in items if status is None or i.get("status") == status] | |
| logger.debug("add_errors: %d items after filter", len(out)) | |
| return out[:limit] | |
| def check_error(record: Dict[str, Any], **overrides: Any) -> Dict[str, Any]: | |
| """Return a shallow copy of *record* with *overrides* merged in.""" | |
| updated = dict(record) | |
| updated.update(overrides) | |
| if "correction" in updated and not isinstance(updated["correction"], (int, float)): | |
| try: | |
| updated["correction"] = float(updated["correction"]) | |
| except (TypeError, ValueError): | |
| pass | |
| return updated | |
| def validate_error(record: Dict[str, Any]) -> bool: | |
| """Return True when *record* satisfies all Error invariants.""" | |
| required = ["confidence", "correction", "checked_at"] | |
| for field in required: | |
| if field not in record or record[field] is None: | |
| logger.warning("validate_error: missing field %r", field) | |
| return False | |
| return isinstance(record.get("id"), str) | |
| def correct_error_batch( | |
| records: List[Dict[str, Any]], | |
| batch_size: int = 50, | |
| ) -> List[List[Dict[str, Any]]]: | |
| """Slice *records* into chunks of *batch_size* for bulk correct.""" | |
| return [records[i : i + batch_size] | |
| for i in range(0, len(records), batch_size)] | |