基于词典匹配的实体标注方法、模块及装置转让专利

申请号 : CN202011079331.0

文献号 : CN112347765B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 胡振中刘毅吴浪韬

申请人 : 清华大学

摘要 :

本发明公开一种基于词典匹配的实体标注方法、模块及装置,包括:将实体词语按小至大排成有序词典;为实体词语建立前向索引条F,F中第i个元素为实体词语前i个字符在有序词典中的最大前缀;将句子s按大小插入有序词典,利用有序词典中比句子s小的最大实体词语作为最大公共前缀基词w,计算s与w的前x个相同的字符,进而得到句子s在有序词典最大前缀;利用最大前缀标注信息对句子s的对应实体词语添加标注信息,并将其从s中切出,否则将s中第一个字切出,将切出后剩余部分作为句子s,重复以上步骤,直到s为空字符串。本发明经过一次二分搜索就能得到一个切分实体,进而得到预标注结果,通过这种预标注方法来减少用户的重复性劳动。

权利要求 :

1.一种基于词典匹配的实体标注方法,其特征在于,包括:

将实体词语按由小至大的顺序依次排列,形成有序词典;

为每个实体词语建立一个前向索引条F,F中第i个元素为实体词语前i个字符构成的字符串在有序词典中的最大前缀;

获取待标注的句子s,将待标注的句子s按照大小顺序虚拟插入到有序词典中的相应位置,若所述有序词典中没有比句子s小的实体词语,则所述有序词典中不存在句子s的前缀,若所述有序词典中有比句子s小的实体词语,则从比句子s小的实体词语中选择最大的实体词语作为最大公共前缀基词w,计算s与w的前x个相同的字符,构成s与w的最大公共前缀p,若x等于w的词长w.length,则w即为s的在所述有序词典中的最大前缀;若x=0,则所述有序词典中不存在s的前缀;否则0

若有序词典中存在句子s的最大前缀,利用最大前缀的标注信息对句子s的对应实体词语添加标注信息,并将与最大前缀对应的实体词语从s中切出,否则将s中第一个字切出,将切出后剩余部分作为句子s,继续重复虚拟插入到所述有序词典和查找最大前缀以及添加标注信息,直到s为空字符串。

2.根据权利要求1所述的基于词典匹配的实体标注方法,其特征在于,

实体词语大小按照Unicode编码对两个实体词语逐字符进行比较,如果有第一个不同字符,则字符编码大的实体词语大,否则长度大的实体词语大。

3.根据权利要求1所述的基于词典匹配的实体标注方法,其特征在于,

还包括:获取已标注句子,所述已标注句子包括句子和该句子的标注信息,所述标注信息包括实体位置、实体词语和实体类别,将所述已标注句子中的标注信息更新到所述有序词典中,对每一个实体,如果所述有序词典中无该实体词语则添加实体词语和实体类别到有序词典中,否则将有序词典中实体的类别修改为新的实体类别。

4.根据权利要求1所述的基于词典匹配的实体标注方法,其特征在于,

采用句子单元存储一个句子的所有信息,句子单元中存储了句子的内容、标注信息以及状态信息,每一条实体的标注信息都采用格式包括起始索引、结束索引、类别的三元组进行表示,起始索引、结束索引用于记录实体词语在句子中的起始、结束位置,类别用于记录实体词语所属的类别信息,采用句子列表记录所有句子单元构成的列表;

采用实体单元存储一个实体,实体单元中封装了实体的实体词语、实体类别和前向索引条,采用实体列表存储实体单元形成的所述有序词典。

5.一种基于词典匹配的实体标注模块,其特征在于,包括:

词典排序单元,用于将实体词语按照词语字符串由小至大的顺序依次排列,形成有序词典;

前向索引构建单元,用于为每个实体词语建立一个前向索引条F,F中第i个元素为实体词语词语前i个字符构成的字符串在有序词典中的最大前缀;

预标注单元,用于获取待标注的句子s,将待标注的句子s按照大小顺序虚拟插入到有序词典中的相应位置,若所述有序词典中没有比句子s小的实体词语,则所述有序词典中不存在句子s的前缀,若所述有序词典中有比句子s小的实体词语,则从比句子s小的实体词语中选择最大的实体词语作为最大公共前缀基词w,计算s与w的前x个相同的字符,构成s与w的最大公共前缀p,若x等于w的词长w.length,则w即为s的在所述有序词典中的最大前缀;若x=0,则所述有序词典中不存在s的前缀;否则0

若所述有序词典中存在句子s的最大前缀,利用最大前缀的标注信息对句子s的对应实体词语添加标注信息,并将与最大前缀对应的实体词语从s中切出,否则将s中第一个字切出,将切出后剩余部分作为句子s,继续重复虚拟插入到所述有序词典和查找最大前缀以及添加标注信息,直到s为空字符串。

6.根据权利要求5所述的基于词典匹配的实体标注模块,其特征在于,

还包括Unicode编码比较单元,用于将实体词语转换为Unicode编码,实体词语大小按照Unicode编码对两个实体词语逐字符进行比较,如果有第一个不同字符,则字符编码大的实体词语大,否则长度大的实体词语大。

7.根据权利要求5所述的基于词典匹配的实体标注模块,其特征在于,

还包括词典更新单元,用于获取一个或多个已标注句子,所述已标注句子包括句子和该句子的标注信息,所述标注信息包括实体位置、实体词语和实体类别,将所述已标注句子中的标注信息更新到有序词典中,对每一个实体,如果有序词典中无该实体词语则添加实体词语和实体类别到有序词典中,否则将有序词典中实体的类别修改为新的实体类别。

8.一种实体标注装置,其特征在于,包括权利要求5至7中任一项所述的实体标注模块,还包括:句子列表模块,所述句子列表模块采用句子单元存储一个句子的所有信息,句子单元中存储了句子的内容、标注信息集合以及状态信息,每一条实体的标注信息都采用格式包括起始索引、结束索引、类别的三元组进行表示,起始索引、结束索引用于记录实体词语在句子中的起始、结束位置,类别用于记录实体词语所属的类别信息,采用句子列表记录所有句子单元构成的列表;

实体列表模块,用于采用实体单元存储一个实体,实体单元中封装了实体词语、实体类别和前向索引条,采用实体列表存储实体单元形成的所述有序词典;

标注管理模块,用于通过索引记录当前展示和操作的句子单元在句子列表中的位置,用于从指定路径读取实体标注文件并添加到所述句子列表中,用于将句子列表中的内容按照实体标注文件的格式保存到指定路径,其中,实体标注文件中存储有待标注或已标注的句子,用于将文件中的实体‑类别对添加到实体列表中,和将实体列表中的实体单元按照实体‑类别对的格式导出为文件;

图形用户界面模块,用于可视化展示句子列表模块、实体列表模块、标注管理模块、实体标注模块的相关操作。

9.根据权利要求8所述的实体标注装置,其特征在于,所述句子列表模块采用富文本格式来显示标注信息。

10.根据权利要求8所述的实体标注装置,其特征在于,

所述实体标注文件包括BIO或BIOES标注文件。

说明书 :

基于词典匹配的实体标注方法、模块及装置

技术领域

[0001] 本发明涉及人工智能技术领域,具体地说,涉及一种基于词典匹配的实体标注方法、模块及装置。

背景技术

[0002] 由于互联网和大数据的不断发展,人们在各个方面积累了大量的原始数据,从这些琐碎的数据中获取结构化的知识是实现机器智能化的重要途径之一。随着自然语言处理技术的日渐成熟,从文本中自动提取出实体和关系等关键信息已经成为了一件可行的事情,这为计算机理解文本知识打下了基础。其中,实体提取也称为命名实体识别,是指从文本中识别出具有特定意义的命名实体如人名、地名、设备等等。从文本中提取实体和关系需要进行文本切词,并利用预先使用大量的标注数据训练的模型对切词进行标注,出于准确性的考虑,预先使用的大量的标注数据通常需要由人工进行标注。
[0003] 目前对于文本的切词方法包括:
[0004] (1)基于词典的分词方法:将待分词文本按某种策略切分出小片段,并在词典中查找,查找到则切分为一个词语。
[0005] (2)基于统计的分词方法:将相邻的、同时出现次数多的几个字切分为一个词语,不依赖于词典,能够识别新词。
[0006] (3)基于神经网络的分词方法:通过分好词的文本对神经网络模型进行训练,利用得到的模型去切分句子。
[0007] 其中,由于在分词时通常不考虑未出现过的词语,因此基于词典的分词方法应用较为广泛。基于词典的分词方法中,词典也是按照词长进行分类的,例如词长为一个字符的词典,词长为两个字符的词典,从句子剩余部分中截取前缀子串用于比对时,只需要查找与子串具有相同长度的词典,通常相同词长的词典按顺序存储词语,以便使用二分搜索法加快查找。如果词典中存在与子串相同的词则切出该子串,否则去除子串的末位字符再用另一个对应词长的词典进行比对,这一过程重复进行,直到子串比对成功或子串中只剩下一个字符,即完成一次切词。
[0008] 上述分词方法的缺点是需要建立不同词长的词典,每次都要从词长最大的词典开始搜索,当文本中存在较长的词时,需要查找的词典的数量就会很多,切分一次词所需要的搜索次数也会相应增加。另外,长词出现的频率一般比较低,那么对于经常出现的短词来说,每次切分都要先到长词的词典中进行查找是十分低效的。
[0009] 而且,对于切分出的词的标注,目前已经有一些中文实体标注辅助工具,它们为用户提供一个容易操作的图形用户界面。如BRAT是一个基于web的文本标注工具,它支持用户通过修改配置文件来自定义实体类别(但不支持中文类别),标注时选中某段文本并选择实体类别即可;YEDDA是一个基于tkinter的文本标注工具,同样支持自定义实体类别和实体标注,但实体类别数只有7种。然而,这些工具只提供用于展示和交互的图形用户界面,而不能起到辅助人工标注的作用,人工标注的工作量仍然很大。

发明内容

[0010] 为解决以上问题,本发明公开一种基于词典匹配的实体标注方法,包括:
[0011] 将实体词语按由小至大的顺序依次排列,形成有序词典;
[0012] 为每个实体词语建立一个前向索引条F,F中第i个元素为实体词语前i个字符构成的字符串在有序词典中的最大前缀;
[0013] 获取待标注的句子s,将待标注的句子s按照大小顺序虚拟插入到有序词典中的相应位置,若所述有序词典中没有比句子s小的实体词语,则所述有序词典中不存在句子s的前缀,
[0014] 若所述有序词典中有比句子s小的实体词语,则从比句子s小的实体词语中选择最大的实体词语作为最大公共前缀基词w,计算s与w的前x个相同的字符,构成s与w的最大公共前缀p,若x等于w的词长w.length,则w即为s的在所述有序词典中的最大前缀;若x=0,则所述有序词典中不存在s的前缀;否则0
[0015] 若有序词典中存在句子s的最大前缀,利用最大前缀的标注信息对句子s的对应实体词语添加标注信息,并将与最大前缀对应的实体词语从s中切出,否则将s中第一个字切出,将切出后剩余部分作为句子s,继续重复虚拟插入到所述有序词典和查找最大前缀以及添加标注信息,直到s为空字符串。
[0016] 可选地,实体词语大小按照Unicode编码对两个实体词语逐字符进行比较,如果有第一个不同字符,则字符编码大的实体词语大,否则长度大的实体词语大。
[0017] 可选地,还包括:获取已标注句子,所述已标注句子包括句子和该句子的标注信息,所述标注信息包括实体位置、实体词语和实体类别,将所述已标注句子中的标注信息更新到所述有序词典中,对每一个实体,如果所述有序词典中无该实体词语则添加实体词语和实体类别到有序词典中,否则将有序词典中实体的类别修改为新的实体类别。
[0018] 可选地,采用句子单元存储一个句子的所有信息,句子单元中存储了句子的内容、标注信息以及状态信息,每一条实体的标注信息都采用格式包括起始索引、结束索引、类别的三元组进行表示,起始索引、结束索引用于记录实体词语在句子中的起始、结束位置,类别用于记录实体词语所属的类别信息,采用句子列表记录所有句子单元构成的列表;
[0019] 采用实体单元存储一个实体,实体单元中封装了实体的实体词语、实体类别和前向索引条,采用实体列表存储实体单元形成的所述有序词典。
[0020] 本发明还提供一种基于词典匹配的实体标注模块,包括:
[0021] 词典排序单元,用于将实体词语按照词语字符串由小至大的顺序依次排列,形成有序词典;
[0022] 前向索引构建单元,用于为每个实体词语建立一个前向索引条F,F中第i个元素为实体词语词语前i个字符构成的字符串在有序词典中的最大前缀;
[0023] 预标注单元,用于获取待标注的句子s,将待标注的句子s按照大小顺序虚拟插入到有序词典中的相应位置,若所述有序词典中没有比句子s小的实体词语,则所述有序词典中不存在句子s的前缀,
[0024] 若所述有序词典中有比句子s小的实体词语,则从比句子s小的实体词语中选择最大的实体词语作为最大公共前缀基词w,计算s与w的前x个相同的字符,构成s与w的最大公共前缀p,若x等于w的词长w.length,则w即为s的在所述有序词典中的最大前缀;若x=0,则所述有序词典中不存在s的前缀;否则0
[0025] 若所述有序词典中存在句子s的最大前缀,利用最大前缀的标注信息对句子s的对应实体词语添加标注信息,并将与最大前缀对应的实体词语从s中切出,否则将s中第一个字切出,将切出后剩余部分作为句子s,继续重复虚拟插入到所述有序词典和查找最大前缀以及添加标注信息,直到s为空字符串。
[0026] 可选地,还包括Unicode编码比较单元,用于将实体词语转换为Unicode编码,实体词语大小按照Unicode编码对两个实体词语逐字符进行比较,如果有第一个不同字符,则字符编码大的实体词语大,否则长度大的实体词语大。
[0027] 可选地,还包括词典更新单元,用于获取一个或多个已标注句子,所述已标注句子包括句子和该句子的标注信息,所述标注信息包括实体位置、实体词语和实体类别,将所述已标注句子中的标注信息更新到有序词典中,对每一个实体,如果有序词典中无该实体词语则添加实体词语和实体类别到有序词典中,否则将有序词典中实体的类别修改为新的实体类别。
[0028] 本发明还提供一种实体标注装置,包括如上所述的实体标注模块,还包括:
[0029] 句子列表模块,所述句子列表模块采用句子单元存储一个句子的所有信息,句子单元中存储了句子的内容、标注信息集合以及状态信息,每一条实体的标注信息都采用格式包括起始索引、结束索引、类别的三元组进行表示,起始索引、结束索引用于记录实体词语在句子中的起始、结束位置,类别用于记录实体词语所属的类别信息,采用句子列表记录所有句子单元构成的列表;
[0030] 实体列表模块,用于采用实体单元存储一个实体,实体单元中封装了实体词语、实体类别和前向索引条,采用实体列表存储实体单元形成的所述有序词典;
[0031] 标注管理模块,用于通过索引记录当前展示和操作的句子单元在句子列表中的位置,
[0032] 用于从指定路径读取实体标注文件并添加到所述句子列表中,用于将句子列表中的内容按照实体标注文件的格式保存到指定路径,其中,实体标注文件中存储有待标注或已标注的句子,
[0033] 用于将文件中的实体‑类别对添加到实体列表中,和将实体列表中的实体单元按照实体‑类别对的格式导出为文件;
[0034] 图形用户界面模块,用于可视化展示句子列表模块、实体列表模块、标注管理模块、实体标注模块的相关操作。
[0035] 可选地,所述句子列表模块采用富文本格式来显示标注信息。
[0036] 可选地,所述实体标注文件包括BIO或BIOES标注文件。
[0037] 本发明在有序词典中为每个实体词语建立一个前向索引条,利用二分法将句子虚拟插入到有序词典中,并利用前向索引条从句子中切分出实体词语并打上相应的类别标签,通过设置前向索引条,可以仅经过一次而不是多次二分搜索就能得到一个切分实体,进而得到预标注结果,通过这种预标注方法来减少用户的重复性劳动。

附图说明

[0038] 通过结合下面附图对其实施例进行描述,本发明的上述特征和技术优点将会变得更加清楚和容易理解。
[0039] 图1是本发明实施例的实体标注装置的模块构成图;
[0040] 图2是本发明实施例的实体标注方法的逻辑示意图;
[0041] 图3是本发明实施例的实体标注模块的单元构成图;
[0042] 图4是本发明实施例的图形用户界面模块的功能视图。

具体实施方式

[0043] 下面将参考附图来描述本发明所述的基于词典匹配的实体标注方法、模块及装置的实施例。本领域的普通技术人员可以认识到,在不偏离本发明的精神和范围的情况下,可以用各种不同的方式或其组合对所描述的实施例进行修正。因此,附图和描述在本质上是说明性的,而不是用于限制权利要求的保护范围。此外,在本说明书中,附图未按比例画出,并且相同的附图标记表示相同的部分。
[0044] 所述实体是指从文本中识别出的命名实体,命名实体指现实世界中具体或抽象的实体,如计算机、火车、飞机、楼房、老师等等都是实体。
[0045] 实体词语是指用于表示该实体的唯一的标识符。实体位置是指该实体词语在已标注句子中的位置。
[0046] 实体类别是指按照实体词语划分的不同类别,例如,上述的计算机、火车、飞机、楼房、老师可以分别划分为设备、交通工具、建筑、职业这些实体类别。
[0047] 本实施例的基于词典匹配的实体标注方法包括以下步骤:
[0048] S1,将实体词语按从前往后由小至大的顺序依次排列,形成有序词典;
[0049] 其中,实体词语大小按照Unicode编码比较,对两个实体词语逐字符进行比较,如果有第一个不同字符,则字符编码大的字符串大,否则长度大的实体词语大。当且仅当两个字符串的长度和各个位置的字符都相同才确定两个实体词语相等。
[0050] S2,为每个实体词语建立一个前向索引条F,F中第i个元素为实体词语前i个字符构成的字符串在有序词典中的最大前缀,若不存在则记为None。所述最大前缀是指该实体词语的前i个字符与排在该实体词语前面的所有实体词语的最大的相同字符串。
[0051] 以有序词典[AB、ABC、ABCC、ABDD、BCD]为例,AB、ABC、ABCC、ABDD、BCD分别对应有一个前向索引条F,例如:
[0052] “AB”的前一个字符“A”在有序词典中不存在前缀,则记为None。
[0053] “ABC”的前一个字符“A”在有序词典中不存在前缀,则记为None;“ABC”的前两个字符“AB”在有序词典中存在最大前缀“AB”,则该位置记为“AB”。
[0054] “ABDD”的前一个字符“A”在有序词典中不存在前缀,则记为None;“ABDD”的前两个字符“AB”在有序词典中存在最大前缀“AB”,则该位置记为“AB”;“ABDD”的前三个字符“ABD”在有序词典中的最大前缀为“AB”,则该位置记为“AB”。
[0055] 各实体词语依次类推则可以分别建立对应的前向索引条F,添加了前向索引条F的有序词典如下表1所示:
[0056] 表1
[0057]
[0058] S3,获取待标注的句子s,将待标注的句子s按照该句子s的大小顺序虚拟插入(可以采用例如二分法)到有序词典中的相应位置。若有序词典中有比句子s小的实体词语,则从比句子s小的实体词语中选择最大的实体词语作为最大公共前缀基词w,计算s与w的最大公共前缀长度x,即s与w最多前x个字符相同,构成s与w的最大公共前缀p。若x等于w的词长(记为w.length),那么w即为s在有序词典中的最大前缀;若x=0,说明有序词典中不存在s的前缀;否则0
[0059] 以表1为例,若s位于最上端,则表示有序词典中不存在s的前缀,否则找到s上方最接近的第一个词w。计算s与w的最大公共前缀长度x,即s与w最多前x个字符相同。若x等于w的词长(记为w.length),那么w即为s的最大前缀;若x=0,说明有序词典中不存在s的前缀;否则0
[0060] S4,若有序词典中存在s的最大前缀,利用最大前缀的标注信息对句子s的该实体词语添加标注信息,并将与最大前缀对应的实体词语从s中切出,否则将s中第一个字切出,将切出后剩余部分作为句子s,继续重复步骤S3、S4,直到s为空字符串。
[0061] 通过以上方法可以将待标注句子s中的实体利用词典进行预标注。
[0062] 下面以一个句子为例来说明一下。
[0063] 句子s取“ABDDA”,这个句子按照Unicode编码比较会被插入到表1的“ABDD”和“BCD”之间。
[0064] 由于该句子不是在最上端,则找到该句子上方最接近的一个实体词语“ABDD”,由于“ABDD”与“ABDDA”的最大公共前缀是“ABDD”,且最大公共前缀长度等于该最接近实体词语“ABDD”的长度4,因此“ABDD”即为s在有序词典中的最大前缀,则用最大前缀“ABDD”的标注信息对句子s的“ABDD”进行标注。然后切出“ABDD”,将剩余的“A”继续用二分法插入到有序词典中,则其会被插入到“AB”的上面。其在有序词典中没有最大公共前缀,直接切出单字符“A”,s为空,结束。
[0065] 句子s取“ABCDE”,这个句子其会被插入到表1的“ABCC”与“ABD”之间。由于该句子不是在最上端,则找到该句子上方最接近的一个实体词语“ABCC”,由于“ABCC”与“ABCDE”的最大公共前缀是“ABC”,且“ABC”的长度(最大公共前缀的长度)为3,小于该最接近的实体词语“ABCC”的长度4,则“ABCC”的前向索引表中第3个元素即为s在有序词典中的最大前缀,即“ABC”为“ABCDE”的最大前缀。
[0066] 将“ABC”从“ABCDE”中切除后,再将“DE”继续用二分法放置到有序词典中,会被插入到表1的“BCD”之后,其与“BCD”最大公共前缀长度为0(没有公共前缀),说明“DE”在有序词典中没有前缀,切出单字“D”;再将“E”用二分法放置到有序词典中,同样由于“E”在有序词典中没有前缀,切出单字“E”,s为空。
[0067] 进一步地,还包括步骤S5(此步骤S5并不限定其位置,其可以在任一步骤之前或之后):
[0068] 获取一个已标注句子,所述已标注句子包括句子和该句子的标注信息,所述标注信息包括实体位置、实体词语和实体类别,将所述已标注句子中的标注信息更新到有序词典中,对每一个实体词语,如果有序词典中无该实体词语则添加实体词语和实体类别到有序词典中,否则将有序词典中实体词语的类别修改为新的实体类别。
[0069] 进一步地,在完成对待标注句子的标注后,将标注后的句子进行可视化展示,以便于用户可以查看是否有标注错误,进行更正。
[0070] 进一步地,本实施例设计了几种数据类型用以存储句子和词典,其中,采用句子单元存储一个句子的所有信息,句子单元中封装了句子的内容sntc、标注信息集合tags以及状态信息state。每一条实体的标注信息都采用格式为“起始索引,结束索引,类别”的三元组进行表示,起始索引、结束索引这两个元素都是整数,用来记录实体词语在句子中的起始、结束位置,类别这个元素则记录了实体词语所属的类别信息。采用SntcList记录所有句子单元构成的列表。
[0071] 其中,实体单元用于存储一个实体,WordItem中封装了实体的内容word、实体类别kind和前向索引条forward。WordList用于存储实体单元按照实体词语的字符串从小到大顺序构成的有序列表。
[0072] 本发明还提供一种基于词典匹配的实体标注模块10,如图3所示,包括词典排序单元11,前向索引构建单元12、预标注单元13。所述实体标注模块10可以是集成于计算机设备中,该计算机设备包括:处理器、存储器、输入模块。本发明所称的模块是指能够完成特定功能的一系列计算机程序指令段。所述实体标注模块10由处理器执行,完成对句子进行预标注的功能。
[0073] 存储器包括至少一种类型的可读存储介质。所述至少一种类型的可读存储介质可为如闪存、硬盘、多媒体卡、卡型存储等的非易失性存储介质。在一些实施例中,所述可读存储介质可以是所述计算机设备的内部存储单元,例如该计算机设备的硬盘。在另一些实施例中,所述可读存储介质也可以是所述计算机设备的外部存储器,例如所述计算机设备上配备的插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)等。
[0074] 在本实施例中,所述存储器的可读存储介质用于存储实体标注模块10。所述存储器还可以用于存储输入和输出数据。
[0075] 处理器在一些实施例中可以是一中央处理器(Central Processing Unit,CPU),微处理器或其他数据处理芯片,用于运行存储器中存储的程序代码或处理数据,例如执行实体标注模块10对应的程序代码等。
[0076] 其中,词典排序单元11用于将实体词语按从前往后由小至大的顺序依次排列,形成有序词典;
[0077] 前向索引构建单元12用于为每个实体词语建立一个前向索引条F,F中第i个元素为实体词语前i个字符构成的字符串在有序词典中的最大公共前缀,若不存在则记为None。所述最大公共前缀是指该实体词语的前i个字符与排在该实体词语前面的所有实体词语的最大的相同字符串。
[0078] 以有序词典[AB、ABC、ABCC、ABDD、BCD]为例,AB、ABC、ABCC、ABDD、BCD分别对应有一个前向索引条F,例如:
[0079] “AB”的前一个字符“A”在有序词典中不存在前缀,则记为None。
[0080] “ABC”的前一个字符“A”在有序词典中不存在前缀,则记为None;“ABC”的前两个字符“AB”在有序词典中存在最大前缀“AB”,则该位置记为“AB”。
[0081] “ABDD”的前一个字符“A”在有序词典中不存在前缀,则记为None;“ABDD”的前两个字符“AB”在有序词典中存在最大前缀“AB”,则该位置记为“AB”;“ABDD”的前三个字符“ABD”在有序词典中的最大前缀为“AB”,则该位置记为“AB”。
[0082] 各实体词语依次类推则可以分别建立对应的前向索引条F,添加了前向索引条F的有序词典如下表1所示:
[0083] 表1
[0084]
[0085]
[0086] S3,获取待标注的句子s,将待标注的句子s按照该句子s的大小顺序虚拟插入到有序词典中的相应位置。若有序词典中有比句子s小的实体词语,则从比句子s小的实体词语中选择最大的实体词语作为最大公共前缀基词w,计算s与w的最大公共前缀长度x,即s与w最多前x个字符相同,构成构成s与w的最大公共前缀p。若x等于w的词长(记为w.length),那么w即为s在有序词典中的最大前缀;若x=0,说明有序词典中不存在s的前缀;否则0
[0087] 以表1为例,若s位于最上端,则表示有序词典中不存在s的前缀,否则找到s上方最接近的第一个词w。计算s与w的最大公共前缀长度x,即s与w最多前x个字符相同。若x等于w的词长(记为w.length),那么w即为s的最大前缀;若x=0,说明有序词典中不存在s的前缀;否则0
[0088] S4,若有序词典中存在s的最大前缀,利用最大前缀的标注信息对句子s的该实体词语添加标注信息,并将与最大前缀对应的实体词语从s中切出,否则将s中第一个字切出,将切出后剩余部分作为句子s,继续重复步骤S3、S4,直到s为空字符串。
[0089] 通过以上方法可以将待标注句子s中的实体利用有序词典进行预标注。
[0090] 下面以一个句子为例来说明一下。
[0091] 句子s取“ABDDA”,这个句子按照Unicode编码比较会被插入到表1的“ABDD”和“BCD”之间。
[0092] 由于该句子不是在最上端,则找到该句子上方最接近的一个实体词语“ABDD”,由于“ABDD”与“ABDDA”的最大公共前缀是“ABDD”,且最大公共前缀长度等于该最接近实体词语“ABDD”的长度4,因此“ABDD”即为s在有序词典中的最大前缀,则用最大前缀“ABDD”的标注信息对句子s的“ABDD”进行标注。然后切出“ABDD”,将剩余的“A”继续用二分法插入到有序词典中,则其会被插入到“AB”的上面。其在有序词典中没有最大公共前缀,直接切出单字符“A”,s为空,结束。
[0093] 句子s取“ABCDE”,这个句子其会被插入到表1的“ABCC”与“ABD”之间。由于该句子不是在最上端,则找到该句子上方最接近的一个实体词语“ABCC”,由于“ABCC”与“ABCDE”的最大公共前缀是“ABC”,且“ABC”的长度(最大公共前缀的长度)为3,小于该最接近的实体词语“ABCC”的长度4,则“ABCC”的前向索引表中第3个元素即为s在有序词典中的最大前缀,即“ABC”为“ABCDE”的最大前缀。
[0094] 将“ABC”从“ABCDE”中切除后,再将“DE”继续用二分法放置到有序词典中,会被插入到表1的“BCD”之后,其与“BCD”最大公共前缀长度为0(没有公共前缀),说明“DE”在有序词典中没有前缀,切出单字“D”;再将“E”用二分法放置到有序词典中,同样由于“E”在有序词典中没有前缀,切出单字“E”,s为空。
[0095] 进一步地,还包括Unicode编码比较单元,用于将实体词语转换为Unicode编码,实体词语大小按照Unicode编码对两个实体词语逐字符进行比较,如果有第一个不同字符,则字符编码大的字符串大,否则长度大的实体词语大。
[0096] 进一步地,还包括词典更新单元,用于获取一个或多个已标注句子,所述已标注句子包括句子和该句子的标注信息,所述标注信息包括实体位置、实体词语和实体类别,将所述已标注句子中的标注信息更新到有序词典中,对每一个实体,如果有序词典中无该实体则添加实体词语和实体类别到有序词典中,否则将有序词典中实体词语的类别修改为新的实体类别。也即是说,认为一段文本中实体类别更可能是最近一次出现的类别。当然,可以采用其他实现方式,例如可以为实体词语的每种类别添加一个计数器,先统计各类别的计数,并最终以计数最多的类别作为该实体词语的类别。
[0097] 本发明还提供一种实体标注装置20,所述实体标注装置20可以安装于计算机设备中。根据实现的功能,如图1所示,所述实体标注装置20可以包括实体标注模块10,还包括句子列表模块21和实体列表模块22、标注管理模块23、图形用户界面模块24。本发明所述模块是指一种能够被计算机设备的处理器所执行,并且能够完成固定功能的一系列计算机程序段,其存储在计算机设备的存储器中。所述计算机程序段可以使用python3语言编写,采用面向对象的方法,将功能的实现代码封装在相应的类中,再由类构成各模块,各个模块包含的类分别如下:
[0098] ·句子列表模块21:SntcItem、SntcList
[0099] ·实体列表模块22:WordItem、WordList
[0100] ·标注管理模块23:TagManager
[0101] ·图形用户界面模块24:EntityTagFrame
[0102] 其中图形用户界面模块24通过wxPython图形库实现,在编写程序过程中遵循业务逻辑与用户界面分离的思想,即把软件的功能实现尽可能放在标注管理器模块之中,方便对程序进行调试和修改。
[0103] 实体标注装置20的简要逻辑视图如图2所示,用户对句子进行的所有标注操作,如更改句子的标注状态、添加标注信息等都可以反映到对句子列表中句子单元的修改上,之后句子列表通过图形用户界面将结果反馈给用户。而当用户完成一个句子的标注并提交时,句子列表用提交的句子单元去更新实体列表。然后实体标注模块再利用实体列表对后续待标注的新句子进行预标注,并把预标注结果保存到句子列表中,进而将预标注过的句子单元展示给用户,用户可以修改标注信息,确认标注信息无误后将添加了标注的句子保存在句子单元。
[0104] 在本实施例中,关于各模块/单元的功能如下:
[0105] 所述句子列表模块21包含以下几个功能:
[0106] ·添加标注信息:当对一个句子的实体进行标注后,在标注信息集合中添加一条标注信息,即“起始索引,结束索引,类别”三元组;
[0107] ·删除标注信息:传入起始索引和结束索引,删除标注信息集合中位于两个索引区间内的所有标注信息;
[0108] ·清空标注信息:清空标注信息集合;
[0109] ·更改标注状态:将标注状态更改为“未标注”、“待完成”和“已完成”三者之一;
[0110] ·提取所有实体:将句子单元中包含的所有实体以“实体‑类别”对的方式提取出来。
[0111] ·添加句子单元:根据句子内容、标注信息集合、标注状态构建一个句子单元并添加到句子列表尾部。
[0112] 实体列表模块22,包括以下功能:
[0113] ·添加实体单元:根据实体、类别构建一个实体单元并插入到实体列表中,保证插入之后实体列表仍是有序表;
[0114] ·查找实体:在实体列表中查找一个实体,若查找成功则返回匹配的实体单元;
[0115] 实体标注模块10则用于进行自动标注:传入一个句子s,通过上述步骤S1、S2、S3、S4对句子进行分词,并把所有匹配实体的类别以及在句子中的位置以标注信息集合的方式返回,使得添加了标注信息的句子s保存在一个句子单元中。
[0116] 进一步地,还包括标注管理模块23,
[0117] 标注管理模块23中需要有一个索引用于记录当前展示和操作的句子单元在句子列表中的位置,其功能设计如下:
[0118] ·当前句子单元:通过索引返回句子列表中相应位置的句子单元;
[0119] ·转到下一句:按照指定状态查找句子列表中的下一个句子单元,若找到则对应修改索引与所述下一个句子单元对应;
[0120] ·转到上一句:按照指定状态查找句子列表中的上一个句子单元,若找到则对应修改索引与所述上一个句子单元对应;
[0121] ·更新实体列表:使用词典更新单元,通过当前句子单元或整个句子列表来更新实体列表中的WordItem;
[0122] ·打开实体标注文件:从指定路径读取实体标注文件内容并创建相应的句子列表;
[0123] ·保存实体标注文件:将句子列表中的内容按照实体标注文件的格式保存到指定路径;
[0124] ·导入句子集合:从指定路径读取未标注的句子集合并初始化句子列表;
[0125] ·导出句子集合:仅把句子列表中所有SntcItem的句子内容导出到文件,不包含任何标注信息;
[0126] ·导入BIO或BIOES标注文件:为了兼容通用的标注方法,支持从BIO或BIOES标注文件中读取信息并初始化句子列表;
[0127] ·导出BIO或BIOES标注文件:将标注完成的句子全部按BIO格式或BIOES格式导出到文件;
[0128] ·导入实体‑类别对集合:将指定文件中的实体‑类别对全部添加到实体列表中,这样用户可以利用一些已有信息来辅助预标注;
[0129] ·导出实体‑类别对集合:将实体列表中的所有WordItem按照实体‑类别对的格式导出为文件,便于用户查看和标注新文件时导入。
[0130] 进一步地,还包括图形用户界面模块24,
[0131] 图形用户界面模块24主要用来接受用户的输入,并通过标注管理模块23中的方法来实现其主要功能,如图4,其文件处理方面包括新建、打开、保存或另存为、导入、导出等功能,设置方面包括实体类型、页码跳转、可见句子状态、本句状态、开启预标注等功能,标注方面包括显示标注信息、标注实体、剔除实体、上一句、下一句等功能。
[0132] 本装置采用富文本格式来显示标注信息,相比于普通文本,富文本可以带有文本格式设置,因而具有更强的可读性。例如,对于“提高设备及引线的安装高度”这样一句话,其标注信息可以通过富文本格式显示如下:
[0133] 提高设备<设备>及引线<设备>的安装高度<属性>
[0134] 进一步地,还包括打包模块,用于利用PyInstaller将所述实体标注装置20打包成EXE可执行文件。
[0135] 以上所述仅为本发明的优选实施例,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。