用深度学习做命名实体识别(二):文本标注工具brat

时间:2024-03-08 21:14:54

本篇文章,将带你一步步的安装文本标注工具brat。

brat是一个文本标注工具,可以标注实体,事件、关系、属性等,只支持在linux下安装,其使用需要webserver,官方给出的教程使用的是Apache2。

使用示例

8a891b6467697ede57e517f5505d8a6b.png

下载brat

建议下载brat的release版本,地址:https://github.com/nlplab/brat/releases/tag/v1.3p1

安装环境

本文将在Ubuntu18.04操作系统下介绍brat的安装过程。

安装过程

首先,安装apache2,使用命令:

sudo apt-get install apache2

 

安装完成后会在 /var 目录下生成一个www/html目录,进入该目录: 

cd /var/www/html

 

将下载的brat-1.3p1.zip文件移动到该目录下,使用 如下命令解压到当前目录:

unzip brat-1.3p1.zip

 

在当前目录下使用如下命令将brat-1.3p1重命名为brat

mv brat-1.3p1 brat

 

使用 如下命令对brat目录授权:

sudo chmod 777 -R /var/www/html/brat

 

进入brat目录

cd /var/www/html/bratsudo ./install.sh

 

执行以下命令,根据提示输入用户名、密码、管理员邮箱

./install.sh

 

现在开始配置apache2.conf文件:  执行命令:

vim /etc/apache2/apache2.conf

 

在文件末尾加入如下内容,注意缩进,(如果后面重启apache2服务的时候报错“...the control process exited with error code....”,可以看看是不是这里的缩进有问题,可以试试手动敲下面的配置,而不是直接复制粘贴):

<Directory /var/www/html/brat>
  AllowOverride Options Indexes FileInfo Limit
  Require all granted
  AddType application/xhtml+xml .xhtml
  AddType font/ttf .ttf
  Options +ExecCGI
  AddHandler cgi-script .cgi
</Directory>

 

重新启动apache2:

sudo service apache2 restart

 

然后打开 http://xxx.xxx.xxx.xxx/brat  , xxx是你brat所在主机的ip,默认80端口。

打开网页后,会发现报错,是关于协议什么的错误,这就是坑的地方,我们还需要一个步骤,如下:

cd /etc/apache2/mods-enabled
sudo ln -s ../mods-available/cgi.load

 

只有这样才能使用cgi模块,而这步在brat的官方文档中貌似没有提及。但是在issue的#1141中提到了这点。

接下来,重新加载apache2的配置:

sudo service apache2 reload

 

此时再访问 http://xxx.xxx.xxx.xxx/brat,就能看到下面的界面了:
65dab51b6200718614f50463ea8c8bcd.png

然后,用之前输入的用户名、密码登录后,就可以使用了,使用教程可以参考官方文档:   http://brat.nlplab.org/configuration.html

最后,我们看看如何添加多个用户:
找到/var/www/html/brat/config.py 对应的行,增加:

USER_PASSWORD = {
\'admn\': \'admin\',
\'test\': \'test\',
# (add USERNAME:PASSWORD pairs below this line.)
}

 

重新启动apache2后,使用test就可以登录了。

 

补充说明:

  • brat默认不支持中文标注,需要手动修改brat主目录/server/src路径下的projectconfig.py文件的第162行代码,注释源代码,然后另起一行加入新代码(修改之后记得重启apache2服务):
    # n  = re.sub(r\'[^a-zA-Z0-9_-]\', \'_\', n)
    n = re.sub(u\'[^a-zA-Z\u4e00-\u9fa5<>,0-9_-]\', \'_\', n)
    

     

  • 如果已经配置了支持中文,但是仍然报不支持的字符的问题,可能是你的配置里面有中文标点符号,要么全部改成英文标点,要么修改上面的正则,如下(修改之后记得重启apache2服务):
    # n  = re.sub(r\'[^a-zA-Z0-9_-]\', \'_\', n)
    n = re.sub(u\'[^a-zA-Z\u4e00-\u9fa5<>\u2014-\uff1b,0-9_-]\', \'_\', n)
    

      

  • 如果修改之后,仍然有字符问题,请检查配置文件的编码格式是否是UTF-8,且是标准的UTF-8,而不是带BOM的UTF-8,具体可以使用Notepad++打开文件再编码选项中查看和转换
  •  如果使用brat加载本地文件的时候报错“unable to read text file xxx/xxx/xxx/xxx.txt ”,请确保你的txt文件和ann文件已经授权给当前linux系统的登录用户,授权方式可以参考如下方式:
    sudo chmod 777 xxx.txt
    sudo chmod 777 xxx.ann
    

      

  • 请确保python2环境存在,并且python软连接指向的是python2,否则brat可能运行报错(最新的release版本只支持python2),如果需要安装python3可以建立新的软连接,名字叫python3即可;当然这只是参考处理方案,也可以采用虚拟环境的方式在python2下运行brat。

 

ok,工具搭建好了,下一篇《用深度学习做命名实体识别(三):文本数据标注过程》 将介绍如何标注我们的数据,本篇就这么多内容啦~,感谢阅读O(∩_∩)O,88~