使用spaCy用BIOscheme注释文本

2024-10-05 14:21:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要使用基于规则方法的BIO-scheme注释文本语料库(我有一个预定义的标记及其标记列表)。我使用spaCy的EntityRuler类来完成这个任务。我的问题是,是否有一种简洁有效的方法来实现spaCy的生物标记?另外,我正在努力实现多标记生物标记:

 'He used sodium-bicarb 5 gr' -> 
['O', 'O', 'B-DRUG', 'I-DRUG', 'I-DRUG', 'B-STRENGTH', 'I-STRENGTH')

我有一个简单的(基于规则的)脚本来标记我感兴趣的实体:

^{pr2}$

输出:

ipratropium 23 34 DRUG
20mg 61 65 STRENGTH
denzapine 67 76 DRUG
amil-co 81 88 DRUG

因此,我不确定如何将'amil-co'拆分为三个标记'B-DRUG, I-DRUG and I-DRUG'。在

理想情况下,我希望有以下注释:

    token          BIO
0   He             O
1   has            O
2   been           O
3   prescribed     O
4   ipratropium    B-DRUG
5   -              I-DRUG
6   albuterol      I-DRUG
7   a              O
8   small          O
9   dose           O
10  of             O
11  20             B-STRENGTH
12  mg             I-STRENGTH
13  ,              O
14  denzapine      B-DRUG
15  and            O
16  amil           B-DRUG
17  -              I-DRUG
18  co             I-DRUG
19  .              O

还有,在我的词汇表drug_patterns.json中,相同的长标记可能多次出现:

{"label": "DRUG", "pattern": [{"lower": "ipratropium"}]}
{"label": "DRUG", "pattern": [{"lower": "ipratropium"}, {"lower": "bromide"}]}
{"label": "DRUG", "pattern": [{"lower": "ipratropium"}, {"lower": "-"}, {"lower": "albuterol"}]}

而不是整个ipratropium-albuterol将只选取firs(最短)标记ipratropium(如输出中所示)。有没有简单的方法告诉斯帕西挑选最长的代币?在

任何想法都将得到高度赞赏。在


Tags: 方法标记spacy规则生物lowerlabelstrength
1条回答
网友
1楼 · 发布于 2024-10-05 14:21:23

好吧,这是一个令人尴尬的简单解决方案,但希望其他人会感兴趣。只需使用标记的.ent_iob_.ent_type_属性。即:

pd.DataFrame([(e.text, e.ent_iob_, e.ent_type_) for e in doc])


    0   1   2
0   He  O   
1   has O   
2   been    O   
3   prescribed  O   
4   ipratropium B   DRUG
5   -   O   
6   albuterol   O   
7   a   O   
8   small   O   
9   dose    O   
10  of  O   
11  20  B   STRENGTH
12  mg  I   STRENGTH
13  ,   O   
14  denzapine   B   DRUG
15  and O   
16  amil    B   DRUG
17  -   I   DRUG
18  co  I   DRUG
19  .   O   

然后我们可以很容易地将最后两列用连字符以适当的格式组合起来。斯皮西太棒了!在

相关问题 更多 >