0

来自我的 IOB 语料库,例如:

    mention Tag
170     
171 467 O
172     
173 Vincennes   B-LOCATION
174 .   O
175     
176 Confirmation    O
177 des O
178 privilèges  O
179 de  O
180 la  O
181 ville   B-ORGANISATION
182 de  I-ORGANISATION
183 Tournai I-ORGANISATION
184 1   O
185 (   O
186 cf  O
187 .   O
188 infra   O
189 ,   O

我尝试进行简单的统计,例如注释提及的总数、标签总数等。

用熊猫加载我的数据集后,我得到了这个:

df = pd.Series(data['Tag'].value_counts(), name="Total").to_frame().reset_index()
df.columns = ['Label', 'Total']
df

输出 :

   Label        Total
0   O          438528
1               36235
2   B-LOCATION  378
3   I-LOCATION  259
4   I-PERSON    234
5   I-INSTALLATION  156
6   I-ORGANISATION  150
7   B-PERSON    144
8   B-TITLE 94
9   I-TITLE 89
10  B-ORGANISATION  68
11  B-INSTALLATION  62
12  I-EVENT 8
13  B-EVENT 2

首先,我如何通过重新组合 IOB 前缀(例如(示例))获得类似的表示形式:

Label, Total
PERSON, 300
LOCATION, 154
ORGANISATION, 67
etc.

其次,如何从我的输出中排除“O”和空字符串标签,我用.mask().where()在我的系列上进行了测试,但它失败了。

谢谢你的线索。

4

1 回答 1

1

删除 B-, I- 部分, groupby, sum

df['label'] = df.label.str[2:]
df.groupby(['label']).sum()

对于第二部分,只返回标签列字符串长度大于2的数据

df.loc[df.label.str.len()>2]
于 2021-09-15T14:39:27.987 回答