Python:从字符串索引中获取标记和NER标记
我有一个字符串,以及字典中该字符串的标记信息Python:从字符串索引中获取标记和NER标记,python,Python,我有一个字符串,以及字典中该字符串的标记信息 string = "Steve works in Meta Graphics" tags = {"tags": [(0, 4, "PER"), (15, 27, "ORG")]} 我需要使用这些信息并生成以下字符串表示形式 string_tag_tuples = [("Steve", "PER"), ("works&qu
string = "Steve works in Meta Graphics"
tags = {"tags": [(0, 4, "PER"), (15, 27, "ORG")]}
我需要使用这些信息并生成以下字符串表示形式
string_tag_tuples = [("Steve", "PER"), ("works", "O"), ("in", "O"), ("Meta Graphics", "ORG")]
从
labels
中提供的信息更容易获取令牌及其相关标记,但是,如何将O
标记分配给字符串中的其他令牌并获得所需的输出?我想这是关于标记的
各种LIB使用它们自己的方案,我使用spacy,它有BILOU标签来实现这一点。
我想这是关于标签的 各种LIB使用它们自己的方案,我使用spacy,它有BILOU标签来实现这一点。
我会分两步来做。首先,识别文本的标记部分,并将其他部分存储为字符串。然后,将存储为字符串的所有内容转换为标记为
“0”
的元素
该程序的输出为:
First step: [('Steve', 'PER'), ' works in ', ('Meta Graphics', 'ORG')]
Second step: [('Steve', 'PER'), ('works', '0'), ('in', '0'), ('Meta Graphics', 'ORG')]
我会分两步来做。首先,识别文本的标记部分,并将其他部分存储为字符串。然后,将存储为字符串的所有内容转换为标记为
“0”
的元素
该程序的输出为:
First step: [('Steve', 'PER'), ' works in ', ('Meta Graphics', 'ORG')]
Second step: [('Steve', 'PER'), ('works', '0'), ('in', '0'), ('Meta Graphics', 'ORG')]
这是另一个解决方案
string = "Steve works in Meta Graphics"
tags = {"tags": [(0, 4, "PER"), (15, 27, "ORG")]}
根据起始索引对标签进行排序并查找缺失的索引,在上述情况下5-14
将丢失索引
tags_ = tags['tags']
sorted_ = sorted(tags_, key=lambda x : x[0], reverse=True)
gaps = []
for i, j in zip(sorted_, sorted_[1:]):
gaps.append((j[1] + 1, i[0] - 1, 'O'))
tags_.extend(gaps)
# print(tags_) [(0, 4, 'PER'), (15, 27, 'ORG'), (5, 14, 'O')]
最后,使用拼接提取和更新标记结果检查排序索引
tag_result = []
for s, e, tag in sorted(tags_, key=lambda x: x[0]):
if tag == "O":
tag_result.extend([(v, "O") for v in string[s:e].strip().split()])
else:
tag_result.append((string[s:e], tag))
这是另一个解决方案
string = "Steve works in Meta Graphics"
tags = {"tags": [(0, 4, "PER"), (15, 27, "ORG")]}
根据起始索引对标签进行排序并查找缺失的索引,在上述情况下5-14
将丢失索引
tags_ = tags['tags']
sorted_ = sorted(tags_, key=lambda x : x[0], reverse=True)
gaps = []
for i, j in zip(sorted_, sorted_[1:]):
gaps.append((j[1] + 1, i[0] - 1, 'O'))
tags_.extend(gaps)
# print(tags_) [(0, 4, 'PER'), (15, 27, 'ORG'), (5, 14, 'O')]
最后,使用拼接提取和更新标记结果检查排序索引
tag_result = []
for s, e, tag in sorted(tags_, key=lambda x: x[0]):
if tag == "O":
tag_result.extend([(v, "O") for v in string[s:e].strip().split()])
else:
tag_result.append((string[s:e], tag))