6个版本 (3个重大更新)
0.5.2 | 2021年4月1日 |
---|---|
0.5.0 | 2021年2月5日 |
0.4.1 | 2021年2月3日 |
0.2.2 | 2020年8月9日 |
0.1.0 | 2020年8月4日 |
#102 in #nlp
每月246次下载
22KB
395 行
Rust和Python的文本跨度工具
- Rust文档: https://docs.rs/textspan
使用(Python)
安装: pip install pytextspan
align_spans
def align_spans(spans: List[Tuple[int, int]], text: str, original_text: str) -> List[List[Tuple[int, int]]]: ...
将text
中定义的跨度转换为original_text
中定义的跨度。
这在例如你想在标准化文本中获得的跨度在原始文本中的跨度非常有用。
>>> import textspan
>>> spans = [(0, 3), (3, 6)];
>>> text = "foobarbaz";
>>> original_text = "FOo.BåR baZ";
>>> textspan.align_spans(spans, text, original_text)
[[(0, 3)], [(4, 7)]]
align_spans_by_mapping
def align_spans_by_mapping(spans: List[Tuple[int, int]], mapping: List[List[int]]) -> List[List[Tuple[int, int]]]: ...
通过给定的mapping
转换跨度。
一般来说,两个文本之间的字符对应关系不一定是一对一的、不是单射的,甚至不是数学映射 - textA
中的某些字符可能在textB
中没有对应,或者在textB
中有多个对应。因此,你应该将mapping
作为List[List[Tuple[int,int]]]
提供。
>>> import textspan
>>> spans = [(0, 2), (3, 4)]
>>> mapping = [[0, 1], [], [2], [4, 5, 6]]
>>> textspan.align_spans_by_mapping(spans, mapping)
[[(0, 2)], [(4, 7)]]
get_original_spans
def get_original_spans(tokens: List[str], original_text: str) -> List[List[Tuple[int, int]]]: ...
根据最短编辑脚本(SES)从标记中返回original_text
的跨度索引。
这在例如你想在标准化文本中获得的标记的原始文本中的跨度非常有用。
>>> import textspan
>>> tokens = ["foo", "bar"]
>>> textspan.get_original_spans(tokens, "FO.o BåR")
[[(0, 2), (3, 4)], [(6, 9)]]
lift_span_index
def lift_span_index(span: Tuple[int, int], target_spans: List[Tuple[int, int]]) -> Tuple[Tuple[int, bool], Tuple[int, bool]]: ...
示例
import textspan spans = [(0, 3), (3, 4), (4, 9), (9, 12)] assert textspan.lift_spans_index((2, 10), spans) == (0, 4)
lift_spans_index
def lift_spans_index(spans: List[Tuple[int, int]], target_spans: List[Tuple[int, int]]) -> List[Tuple[Tuple[int, bool], Tuple[int, bool]]]: ...
remove_span_overlaps
def remove_span_overlaps(tokens: List[Tuple[int, int]]) -> List[Tuple[int, int]]: ...
从给定的spans
中移除重叠的跨度。
首先保留最长的跨度 - 如果两个跨度重叠,则保留第一个跨度。如果两个跨度重叠且起始位置相同,则保留较长的跨度。
>>> import textspan
>>> spans = [(0, 2), (0, 3), (2, 4), (5, 7)]
>>> assert textspan.remove_span_overlaps(spans) == [(0, 3), (5, 7)]
remove_span_overlaps_idx
def remove_span_overlaps_idx(tokens: List[Tuple[int, int]]) -> List[int]: ...
从给定的spans
中移除重叠的跨度,并返回保留的跨度索引。
首先保留最长的跨度 - 如果两个跨度重叠,则保留第一个跨度。如果两个跨度重叠且起始位置相同,则保留较长的跨度。
>>> import textspan
>>> spans = [(0, 2), (0, 3), (2, 4), (5, 7)]
>>> assert textspan.remove_span_overlaps_idx(spans) == [1, 3]
依赖项
~1MB
~40K SLoC