知识图谱-命名实体-关系-免费标注工具-快速打标签-Python3
知识图谱-命名实体-关系-免费标注工具-快速打标签-Python3
一、功能介绍
你好! 这是一款实体关系联合标注的本地小程序,以 P y t h o n 3 Python3 Python3 实现。本系统是一种标注文本语料中命名实体与关系或属性的半自动化软件系统,应用 P y t h o n Python Python编程实现可视化界面和主要功能,利用 H T M L HTML HTML和 C S S CSS CSS提示标注教程与规范(无需关心它们如何实现)。
利用本系统进行文本标注将原始段落文本更新为带有事先定义的命名实体、关系或属性的文本标签数据。通过自动分配快捷键、背景色将不同实体在文本中进行区分,并生成固定格式文本呈现在标注界面。选中固定符号,将实体对之间标注关系,自动生成关系序号、关系类别以及头尾实体序号。执行导出生成一对一的文本和标签结果,通过格式化、撤销、取消标注等功能实现标注的更新。本系统帮助自然语言处理的标注专家对文本中实体或实体关系进行提取,导出结果用作机器训练、知识图谱构建等方向。
主要功能: 主要功能实现文本命名实体标注、实体间关系标注。
- 文本标注:用户根据提前约定的命名实体、关系属性标注规范,对导入的段落文本进行标注,主要通过背景色、快捷键以及自定义特殊符号组合形成文本的命名实体标注与区别。通过选中固定符号,标注实体间关系,系统自动更新标注的关系类别等信息。
- 撤销、取消标注:点击撤销按钮可实现操作回滚,返回到上一状态。也可以通过选中已经标注的实体、关系进行取消标注,系统会删除段中特殊符号。
- 格式化:导入文件之后,通过格式化文本,清除文本中多余的空行空格等冗余无效字符。
- 导出文件:导出文件即可以将用户标注的段落文本,解析生成文本与标签一对一的结果文件,存储在用户读取文本同一目录下。
1、代码文件夹结构
在 b i a o z h u biaozhu biaozhu文件夹中,有 c o n f i g s configs configs、 i m a g e s images images、 u t i l s utils utils三个文件夹,并且有 b i a o z h u . p y biaozhu.py biaozhu.py、 l o g i n . p y login.py login.py、 r e c o d e _ 1. p y recode\_1.py recode_1.py、 r e c o d e _ 2. p y recode\_2.py recode_2.py、 注册器 . p y 注册器.py 注册器.py 共5个 P y t h o n Python Python代码文件。
- configs configs configs文件中,是用以自定义命名实体、关系的文件,你可以使用文本文件方式打开,并自定义命名实体类别、关系。(自定义实体、关系,除了 configs configs configs文件夹, biaozhu.py biaozhu.py biaozhu.py也需要修改)
- images images images文件夹中,是一些图片文件,无需关心。
- utils utils utils文件夹中,除了用作渲染颜色的 Python Python Python文件外,还存有一些 HTML HTML HTML、 CSS CSS CSS文件(即使你完全不了解它们也不影响你正常使用)。
- biaozhu.py biaozhu.py biaozhu.py是主文件,你只需要运行它,就可以立即开始标注工作。
- login.py login.py login.py是一个登录窗口,和 biaozhu.py biaozhu.py biaozhu.py分离,如果你对它不感兴趣,也可以将它删除,即不登陆直接开始标注工作。
- 如果你希望尝试先登录,再标注的流程,那么你将用到 注册器.py 注册器.py 注册器.py。执行 注册器.py 注册器.py 注册器.py,会生成一个注册码,凭借注册码,可以在 login.py login.py login.py注册你的信息(本地模拟),程序会自动跳转到 biaozhu.py biaozhu.py biaozhu.py主文件。
- 注意, login.py login.py login.py、 注册器.py 注册器.py 注册器.py两个文件是非必要的,你可以直接运行 biaozhu.py biaozhu.py biaozhu.py开始你的工作。
2、运行环境
本系统通过 W i n d o w s Windows Windows、 P y t h o n 3.7 Python3.7 Python3.7 开发。在运行代码之前,你需要检查你的 P y t h o n Python Python本地环境是否具备下面这些工具,其中一些必备 python科学库
。
# Windows python3.7ast、tkinter、platform、collections、json、re、time、PIL、webbrowser、os、sys、datetime;
3、自定义命名实体、关系模板
自定义命名实体、关系,则需要在两处修改。第1处是 c o n f i g s configs configs文件夹、第2处是 b i a o z h u . p y biaozhu.py biaozhu.py文件中。
-
在 c o n f i g s configs configs文件夹中,包含 e n t i t y . c o n f i g entity.config entity.config和 r e l a t i o n . c o n f i g relation.config relation.config两个文件,通过文本文件的方式即可打开。
例如 e n t i t y . c o n f i g entity.config entity.config中,存储了命名实体字典,键为键盘上的快捷键,值为具体的命名实体。比如选中一段文本,按下键盘上的 a a a即可将选中的文本标注为 d i s dis dis这种实体。 r e l a t i o n . c o n f i g relation.config relation.config中,自定义关系,与之类似。
-
在 b i a o z h u . p y biaozhu.py biaozhu.py文件中,构造两个字典 d i c t 1 dict1 dict1, d i c t 2 dict2 dict2,分别表示键盘快捷键到命名实体,命名实体英文简写到键盘快捷键两个映射。
通过上面两个步骤的成功修改,即可将本工具用作你自己的本地化任务。(你可以尝试在这里将两个步骤并为一个步骤)
4、导入文件
- 运行 biaozhu.py biaozhu.py biaozhu.py主文件,自动弹出下方所示的主界面,即可开始标注工作。
- 进入主页面后点击右上方红色打开文件,选择待标注的文本文件(文件格式,后缀为 txt txt txt、 ann ann ann、 anns anns anns最为适宜)。导入文件后,会常驻提示去读文本所在的本地位置、提示当前键盘应当处于英文大写状态、导入文件状态、以及当前光标所处的文本段落位置。
5、选择自定义实体和关系文件
- 在主页面右侧选择模板中,点击选实体下拉框选择提前自定义的命名实体文件,点击选关系下拉框选择提前自定义的关系文件。这样的设计可以方便你进行多个标注任务。
- 如果读取的文件中有很多无效的空行空格等情况,点击右侧菜单栏的“格式化”,清理读取文本格式,方便后续标注。
6、文本标注
- 成功导入文本、选取实体和关系文件后,即可开始标注。保持键盘处于大写状态,用鼠标选中待标注的实体,在键盘上点击右侧菜单栏默认分配的快捷键即可完成实体的标注。无需把所有实体都标注完成后再标注关系,可以实体与关系交替标注。(显然,结合你标注任务的需要,可以只标注实体,不标注关系)。简言之,选中文本,按下键盘快捷键,界面自动渲染颜色和标注类别,并生成一个同心圆。 同心圆是为了方便两个实体之间标注关系。
- 通过选中固定的特殊符号(同心圆),按下快捷键,即可标注关系。标注关系时,系统会自动的为每个关系分配关系的序号、关系的类别、头尾实体信息。建议标注两个命名实体之后,紧接着标注两者关系。系统会自动生成标记信息,例如对“碘过量”这个实体标注关系 R7_K1 R7\_K1 R7_K1、对“碘缺乏”这个实体标注关系 R7_K2 R7\_K2 R7_K2。 R7_K1 R7\_K1 R7_K1它表示第7对关系,关系类别为 K K K的1(头)实体, 解码时,它会自动去寻找 R7_K2 R7\_K2 R7_K2 的2(尾)实体。
7、撤销和取消标注
在标注过程中,如果需要返回到上一步或者返回之前多步,可以点击右侧菜单栏的“撤销”,即可撤销。如果在标注完成后,发现需要取消标注某一实体或者关系,需要用鼠标选中待取消标注段,键入快捷键,即可取消标注,防止格式错误,取消标注后剩余文本将固定在原始位置。
选中文本
选择撤销
8、导出和导出并退出系统
点击 导出 即可将标注文件导出到本地,导出的内容样式即当前页面所看见的样式(并没有解析为三元组后再导出,因为这样可以方便下次继续标注),文件存储的位置和导入文件位置在同一目录下。也可以选择“导出并退出系统”即可导出文件并且退出系统,导出的文件会以读取文件名+用户信息+导出时间三者整体作为文件名保存在本地。如果无需导出文件直接退出,点击右上侧系统关闭按钮,会提示保存文件,即可退出系统。
9、导出文件后解析
- 直接导出的文件格式是没有解析的,原因在于不解析,可以方便下次继续标注,即导出文件后,再打开导出的文件继续标注(下次打开时,关系标签会重新标号,这不影响正常使用,因为在解析时,标签会匹配最近的一个符合规则的标签),另外一个原因在于,解析部分的工作也是私有化的,不同的知识图谱标注任务有不同的需求,模块化方便后续任务。为了便于理解,这里将 biaozhu.py biaozhu.py biaozhu.py导出的标注文件取名为 A A A文件。
这是直接导出的文件-A
- 运行 recode_1.py recode\_1.py recode_1.py文件,读入 biaozhu.py biaozhu.py biaozhu.py导出的标注文件 A A A,将其转换成下面这种格式的文件 B B B,类似于 Brat Brat Brat标注工具的 ann ann ann文件。 B B B文件中, recode_1.py recode\_1.py recode_1.py将每一段文字,都打上了标签。
- 为什么不直接转换成适合下游任务的一对一标签形式呢?因为在上一个步骤中,可以手动的或者通过编程规则化的修正一些文本和标签。例如,类别为 O O O的文本太多了,或者重复内容太多了,那么就可以删除,倘若转换成一对一的标签形式后再处理,将会增加一些不必要难度。
运行 recode_2.py recode\_2.py recode_2.py文件,读入 recode_1.py recode\_1.py recode_1.py生成的 B B B文件,最终将其转换为一对一适合下游任务的文件 C C C。( recode_2.py recode\_2.py recode_2.py实现的是实体关系联合抽取标注,你可以调整代码,以适应你自己的图谱工作,它很容易实现)。同时,会导出五元组 CSV CSV CSV文件(建议通过 wps wps wps或者记事本打开),在 CSV CSV CSV文件中,会显头实体、头实体类别、头尾实体间关系、尾实体类别、尾实体。
自动生成五元组表格,方便快速导入 Neo4j Neo4j Neo4j图库、 SQLServer SQL Server SQLServer、 MySQL MySQL MySQL结构化数据库。
生成的一对一适合下游任务标签。(你可以更改 r e c o d e _ 2. p y recode\_2.py recode_2.py, 以调整标签生成规则)
10、标注规范和KG规范
在标注过程中,如果需要查看标注教程、KG规范和标注规范,点击右侧菜单栏按钮,即可自动打开HTML网页查看信息。由于涉及到知识成果,文件夹中的 K G 规范 . h t m l KG规范.html KG规范.html 以及 标注规范 . h t m l 标注规范.html 标注规范.html 我会提供空白文件,但不会影响到你正常使用。
11、系统提示
如果键入了无效快捷键或者未选中文本,系统右上侧会提示当前状态。例如:未选中文本、无效快捷键、导入成功、导出失败、配置信息有误等。当原始文本为PDF、图片、表格等形式存在,需要通过自定义转换器转换成文本文档,再进一步通过上面步骤进行标注。
二、优点与未来工作
- 本项目使用特殊格式符号和背景色标注段落文本中的实体与关系,使用正则解析标注结果,相比一般的标注软件增加了标注实体间关系的功能以及撤销、取消标注功能。相比大型的标注平台,本项目中软件具有操作简便直接、使用门槛低等优点。
- 未来可以实现一键标注功能,即选中一个实体,即可将全篇同名实体全部标注。未来还可以将其通过网页形式部署,显然这也会涉及到用户信息的问题。
三、标注软件获取方式
获取程序包,以下方式皆可:
四、更新
鉴于之前大家提到的各种各样的需求,请查看下面的文章,或许会帮助到大家,倘若链接失效,可以到播客主页查找。
recode_2.py文件更新代码!(https://blog.csdn.net/AdamCY888/article/details/130747036)
utils文件夹下 colors.py 更新和colors_1.py 更新更新((https://blog.csdn.net/AdamCY888/article/details/130747230))
致谢
感谢 芳樽里的歌 的工作,其将开源标注工具 Y E D D A YEDDA YEDDA 移植到了 P y t h o n 3 Python3 Python3 。
本文的标注工具是在 芳樽里的歌 基础上的改进优化版本。
来源地址:https://blog.csdn.net/AdamCY888/article/details/127613010
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341