feat: add example stubs (3) (#12801)

* feat: add example stubs

* fix: add required annotations

* fix: mypy issues

* fix: use Py36-compatible Portocol

* Minor reformatting

* adding further type specifications and removing internal methods

* black formatting

* widen type to iterable

* add private methods that are being used by the built-in convertors

* revert changes to corpus.py

* fixes

* fixes

* fix typing of PlainTextCorpus

---------

Co-authored-by: Basile Dura <basile@bdura.me>
Co-authored-by: Adriane Boyd <adrianeboyd@gmail.com>
This commit is contained in:
Sofie Van Landeghem 2023-08-02 08:15:12 +02:00 committed by GitHub
parent 0fe43f40f1
commit 0737443096
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 74 additions and 2 deletions

View File

@ -8,6 +8,7 @@ from typing import (
List, List,
Optional, Optional,
Protocol, Protocol,
Sequence,
Tuple, Tuple,
Union, Union,
overload, overload,
@ -134,7 +135,12 @@ class Doc:
def text(self) -> str: ... def text(self) -> str: ...
@property @property
def text_with_ws(self) -> str: ... def text_with_ws(self) -> str: ...
ents: Tuple[Span] # Ideally the getter would output Tuple[Span]
# see https://github.com/python/mypy/issues/3004
@property
def ents(self) -> Sequence[Span]: ...
@ents.setter
def ents(self, value: Sequence[Span]) -> None: ...
def set_ents( def set_ents(
self, self,
entities: List[Span], entities: List[Span],

View File

@ -63,7 +63,7 @@ def create_plain_text_reader(
path: Optional[Path], path: Optional[Path],
min_length: int = 0, min_length: int = 0,
max_length: int = 0, max_length: int = 0,
) -> Callable[["Language"], Iterable[Doc]]: ) -> Callable[["Language"], Iterable[Example]]:
"""Iterate Example objects from a file or directory of plain text """Iterate Example objects from a file or directory of plain text
UTF-8 files with one line per doc. UTF-8 files with one line per doc.

View File

@ -0,0 +1,66 @@
from typing import Any, Callable, Dict, Iterable, List, Optional, Tuple
from ..tokens import Doc, Span
from ..vocab import Vocab
from .alignment import Alignment
def annotations_to_doc(
vocab: Vocab,
tok_annot: Dict[str, Any],
doc_annot: Dict[str, Any],
) -> Doc: ...
def validate_examples(
examples: Iterable[Example],
method: str,
) -> None: ...
def validate_get_examples(
get_examples: Callable[[], Iterable[Example]],
method: str,
): ...
class Example:
x: Doc
y: Doc
def __init__(
self,
predicted: Doc,
reference: Doc,
*,
alignment: Optional[Alignment] = None,
): ...
def __len__(self) -> int: ...
@property
def predicted(self) -> Doc: ...
@predicted.setter
def predicted(self, doc: Doc) -> None: ...
@property
def reference(self) -> Doc: ...
@reference.setter
def reference(self, doc: Doc) -> None: ...
def copy(self) -> Example: ...
@classmethod
def from_dict(cls, predicted: Doc, example_dict: Dict[str, Any]) -> Example: ...
@property
def alignment(self) -> Alignment: ...
def get_aligned(self, field: str, as_string=False): ...
def get_aligned_parse(self, projectivize=True): ...
def get_aligned_sent_starts(self): ...
def get_aligned_spans_x2y(
self, x_spans: Iterable[Span], allow_overlap=False
) -> List[Span]: ...
def get_aligned_spans_y2x(
self, y_spans: Iterable[Span], allow_overlap=False
) -> List[Span]: ...
def get_aligned_ents_and_ner(self) -> Tuple[List[Span], List[str]]: ...
def get_aligned_ner(self) -> List[str]: ...
def get_matching_ents(self, check_label: bool = True) -> List[Span]: ...
def to_dict(self) -> Dict[str, Any]: ...
def split_sents(self) -> List[Example]: ...
@property
def text(self) -> str: ...
def __str__(self) -> str: ...
def __repr__(self) -> str: ...
def _parse_example_dict_data(example_dict): ...
def _fix_legacy_dict_data(example_dict): ...