我想基于我通过spaCy提取的(精炼)命名实体对数据进行注释

时间:2019-07-16 17:35:28

标签: regex python-3.x annotations

为了提取命名实体,我与Spacy合作处理了大约7000个句子。我提取了: Long,Date,Star,Para,Astr,Plan,Names AS实体。如您在链接中所见:

https://ibb.co/rtQm5B9

现在我要(分配)为每个句子添加注释

“观察”或“不观察”标签1和0

基于我提供的命名实体。我已经在熊猫数据框中收集了数据,并添加了实体元组  (文字,类型实体)像这样(2h 14m,Date)。有时候一句话中有多个实体

问题是我不知道如何访问每一行中的元组,以及如何基于每一列中的实体定义新列。

我的数据如下:(python数据框)

https://ibb.co/vdfXJFD

tail of data

如何基于实体列创建新列,例如,如果存在带有标签数据和长的实体(列实体中每个元组中的第二个元素中的第二个元素),那么我们可以将其分配给新列标签1和如果没有,我们可以指定标签0

1 个答案:

答案 0 :(得分:0)

我以某种方式解决了它:

def annot_observation_01(x):
    y=0
    if x is not None:
        for idx in range(0,len(x)):
                    if any ([x[idx][1] == 'LONG', x[idx][1] == 'DATE']):
                        y=1
                    else:
                        y=0   
    else:
        y=0
    return y

然后将其添加到我的数据框中,如下所示:

dfAstroNova['label'] = dfAstroNova['entities'].apply(lambda x: annot_observation_01(x))

enter image description here

如您在代码中所看到的,它说如果实体中的标签是“ LONG”或“ DATE”,它给列标签提供值1,那么当两个标签“ LONG”都给它值1时,如何编写我的函数? ”和“ DATE”出现在句子中?