#text #nlp #algorithm

textspan

文本跨度实用工具

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

Download history 5/week @ 2024-03-16 18/week @ 2024-03-30 1/week @ 2024-04-06 19/week @ 2024-05-18 9/week @ 2024-05-25 1/week @ 2024-06-01

每月246次下载

MIT许可证

22KB
395

Rust和Python的文本跨度工具

creates.io pypi Action Status

使用(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