mirror of
https://github.com/explosion/spaCy.git
synced 2024-12-25 01:16:28 +03:00
Fix SpanGroup
and Span
typing (#12009)
* Correct Span.label, Span.kb_id types. Fix SpanGroup.__iter__(). * Extend test. * Rename test. Fix typo. * Add comment. * Fix types for Span.label, Span.kb_id, Span.char_span(). * Update spacy/tests/doc/test_span_group.py Co-authored-by: Adriane Boyd <adrianeboyd@gmail.com> * Update docs. * Fix typo. * Update spacy/tokens/span_group.pyx Co-authored-by: Adriane Boyd <adrianeboyd@gmail.com> Co-authored-by: Adriane Boyd <adrianeboyd@gmail.com>
This commit is contained in:
parent
c223cd7a86
commit
eef3d950b4
|
@ -1,7 +1,10 @@
|
||||||
|
from typing import List
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
from random import Random
|
from random import Random
|
||||||
from spacy.matcher import Matcher
|
from spacy.matcher import Matcher
|
||||||
from spacy.tokens import Span, SpanGroup
|
from spacy.tokens import Span, SpanGroup, Doc
|
||||||
|
from spacy.util import filter_spans
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture
|
@pytest.fixture
|
||||||
|
@ -240,3 +243,13 @@ def test_span_group_extend(doc):
|
||||||
def test_span_group_dealloc(span_group):
|
def test_span_group_dealloc(span_group):
|
||||||
with pytest.raises(AttributeError):
|
with pytest.raises(AttributeError):
|
||||||
print(span_group.doc)
|
print(span_group.doc)
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.issue(11975)
|
||||||
|
def test_span_group_typing(doc: Doc):
|
||||||
|
"""Tests whether typing of `SpanGroup` as `Iterable[Span]`-like object is accepted by mypy."""
|
||||||
|
span_group: SpanGroup = doc.spans["SPANS"]
|
||||||
|
spans: List[Span] = list(span_group)
|
||||||
|
for i, span in enumerate(span_group):
|
||||||
|
assert span == span_group[i] == spans[i]
|
||||||
|
filter_spans(span_group)
|
||||||
|
|
|
@ -95,8 +95,8 @@ class Span:
|
||||||
self,
|
self,
|
||||||
start_idx: int,
|
start_idx: int,
|
||||||
end_idx: int,
|
end_idx: int,
|
||||||
label: int = ...,
|
label: Union[int, str] = ...,
|
||||||
kb_id: int = ...,
|
kb_id: Union[int, str] = ...,
|
||||||
vector: Optional[Floats1d] = ...,
|
vector: Optional[Floats1d] = ...,
|
||||||
) -> Span: ...
|
) -> Span: ...
|
||||||
@property
|
@property
|
||||||
|
|
|
@ -18,6 +18,7 @@ class SpanGroup:
|
||||||
def doc(self) -> Doc: ...
|
def doc(self) -> Doc: ...
|
||||||
@property
|
@property
|
||||||
def has_overlap(self) -> bool: ...
|
def has_overlap(self) -> bool: ...
|
||||||
|
def __iter__(self): ...
|
||||||
def __len__(self) -> int: ...
|
def __len__(self) -> int: ...
|
||||||
def append(self, span: Span) -> None: ...
|
def append(self, span: Span) -> None: ...
|
||||||
def extend(self, spans: Iterable[Span]) -> None: ...
|
def extend(self, spans: Iterable[Span]) -> None: ...
|
||||||
|
|
|
@ -158,6 +158,16 @@ cdef class SpanGroup:
|
||||||
return self._concat(other)
|
return self._concat(other)
|
||||||
return NotImplemented
|
return NotImplemented
|
||||||
|
|
||||||
|
def __iter__(self):
|
||||||
|
"""
|
||||||
|
Iterate over the spans in this SpanGroup.
|
||||||
|
YIELDS (Span): A span in this SpanGroup.
|
||||||
|
|
||||||
|
DOCS: https://spacy.io/api/spangroup#iter
|
||||||
|
"""
|
||||||
|
for i in range(self.c.size()):
|
||||||
|
yield self[i]
|
||||||
|
|
||||||
def append(self, Span span):
|
def append(self, Span span):
|
||||||
"""Add a span to the group. The span must refer to the same Doc
|
"""Add a span to the group. The span must refer to the same Doc
|
||||||
object as the span group.
|
object as the span group.
|
||||||
|
|
|
@ -202,6 +202,23 @@ already present in the current span group.
|
||||||
| `other` | The span group or spans to append. ~~Union[SpanGroup, Iterable[Span]]~~ |
|
| `other` | The span group or spans to append. ~~Union[SpanGroup, Iterable[Span]]~~ |
|
||||||
| **RETURNS** | The span group. ~~SpanGroup~~ |
|
| **RETURNS** | The span group. ~~SpanGroup~~ |
|
||||||
|
|
||||||
|
## SpanGroup.\_\_iter\_\_ {#iter tag="method" new="3.5"}
|
||||||
|
|
||||||
|
Iterate over the spans in this span group.
|
||||||
|
|
||||||
|
> #### Example
|
||||||
|
>
|
||||||
|
> ```python
|
||||||
|
> doc = nlp("Their goi ng home")
|
||||||
|
> doc.spans["errors"] = [doc[0:1], doc[1:3]]
|
||||||
|
> for error_span in doc.spans["errors"]:
|
||||||
|
> print(error_span)
|
||||||
|
> ```
|
||||||
|
|
||||||
|
| Name | Description |
|
||||||
|
| ---------- | ----------------------------------- |
|
||||||
|
| **YIELDS** | A span in this span group. ~~Span~~ |
|
||||||
|
|
||||||
## SpanGroup.append {#append tag="method"}
|
## SpanGroup.append {#append tag="method"}
|
||||||
|
|
||||||
Add a [`Span`](/api/span) object to the group. The span must refer to the same
|
Add a [`Span`](/api/span) object to the group. The span must refer to the same
|
||||||
|
|
Loading…
Reference in New Issue
Block a user