doccano 导入失败时,长度为0的注解会静默处理,

wfveoks0  于 2个月前  发布在  其他
关注(0)|答案(2)|浏览(71)

当导入一个带有"label"注解的jsonl文件时,如果有任何文本长度为0的注解,Docanno将无法导入标签。
文本和元数据成功导入,但没有可用的标签。
在导入后,标签是可用的:

{"data": "EU rejects German call to boycott British lamb.", "label": [ [0, 2, "ORG"]]}
{"data": "Peter Blackburn", "label": [ [0, 15, "PERSON"] ]}
{"data": "President Obama", "label": [ [10, 15, "PERSON"] ]}

标签未导入:

{"data": "EU rejects German call to boycott British lamb.", "label": [ [0, 2, "ORG"]]}
{"data": "Peter Blackburn", "label": [ [15, 15, "PERSON"] ]}
{"data": "President Obama", "label": [ [10, 15, "PERSON"] ]}

我认为在这种情况下应该引发异常,或者使用警告消息跳过这些标签。

q35jwt9p

q35jwt9p1#

你会写你的环境吗?谢谢!

5hcedyr0

5hcedyr02#

需要捕获的错误是:

dd263a0 文件的第68行到第81行,类名为 classSpanLabel 的 Label 类中,__lt__ 方法存在问题。当前的实现只比较了 start_offset 和 end_offset 的大小,但实际上应该比较它们的起始位置。为了解决这个问题,可以在 __lt__ 方法中修改比较逻辑。

另外,在 dd263a0 文件的第85行到第105行,类名为 classLabelMaker 的类中,make 方法存在问题。当前的实现没有检查列是否存在于 DataFrame 中,直接进行了后续操作。为了解决这个问题,可以在 make 方法中添加检查列是否存在的逻辑。

以下是修改后的代码:


# 在 classSpanLabel 类中的 __lt__ 方法中修改比较逻辑

def __lt__(self, other):
    return self.start_offset < other.start_offset

# 在 classLabelMaker 类中的 make 方法中添加检查列是否存在的逻辑

def make(self, df: pd.DataFrame) -> List[Label]:
    if not self.check_column_existence(df):
        return []
    df_label = df.explode(self.column)
    df_label = df_label[[UUID_COLUMN, self.column]]
    df_label.dropna(subset=[self.column], inplace=True)
    labels = []
    for row in df_label.to_dict(orient="records"):
        try:
            label = self.label_class.parse(row[UUID_COLUMN], row[self.column])
            labels.append(label)
        except ValueError:
            pass
    return labels

相关问题