Ubuntu下CRF++中文分词实验(一)文档阅读 工具安装

文章目录

  • 介绍
    • 1、实验内容
    • 2、本文内容
    • 3、系列文章
  • 一、概念入门
  • 二、CRF++文档简要阅读
    • CRF++的官方文档
      • Introduction(介绍)
      • Download (下载链接)
      • Installation (安装说明)

介绍

1、实验内容

实验内容:应用CRF++工具,进行中文分词任务
工具:CRF++ -0.58
环境:Ubuntu18.04 LTS
实验时间:2019.10.28
:本文只涉及Linux下的安装/使用说明,Windows下的安装/使用说明请看下列博文:

[1] CRF++使用教程
[2] CRF++使用简介(windows下非接口)
[3] Windows下CRF++ 分词实践及Python分词效果评测
[4] CRF++ for NER

2、本文内容

一、概念入门:对中文分词任务、常用分词技术、CRF、CRF++等概念的学习。
二、CRF++文档简要阅读:对CRF++的官方文档(含下载链接)的学习。

3、系列文章

  • Ubuntu下CRF++中文分词实验(一)文档阅读 工具安装(本文)
  • Ubuntu下CRF++中文分词实验(二)使用说明 示例学习
  • 待续

一、概念入门

中文分词任务:中文分词,是指将一句文本切分成一个一个单独的语法词技术,也即将连续的字序列重新组合成词序列的过程。中文分词技术在自然语言理解、搜索、语音等方面都有很广泛的应用。

常用的分词技术
1、基于词典分词算法:字符串匹配(例如最长字符串匹配)
2、基于统计机器学习算法:隐马尔科夫模型(hidden markov model, HMM)、条件随机场(conditional random field, CRF)

扩展阅读:有哪些比较好的中文分词方案?——知乎

CRF:conditional random field,条件随机场

扩展阅读:如何用简单易懂的例子解释条件随机场(CRF)模型?——知乎
相关书籍:《统计学习方法》by李航 第11章 条件随机场

二、CRF++文档简要阅读

CRF++的官方文档

CRF++ 使用:CRF++官方文档的翻译——华校专,曾任阿里巴巴资深算法工程师、智易科技首席算法研究员,现任腾讯高级研究员,《Python 大战机器学习》的作者。
AI算法工程师手册——华校专开源笔记

Introduction(介绍)

CRF++是条件随机字段(CRF)的一种简单,可自定义的开源实现,用于对顺序数据进行分段/标记。
CRF++专为通用目的而设计,将应用于各种NLP任务,例如命名实体识别(Named Entity Recognition),信息提取(Information Extraction)和文本分块(Text Chunking)。

Download (下载链接)

Source (Linux下的源代码):CRF++ -0.58.tar.gz
Binary package for MS-Windows (Windows下的二进制包):CRF++

Installation (安装说明)

  • Requirements(环境需求)
    • C++ compiler (gcc 3.0 or higher)(C++编译器,gcc3.0版本或更高)

注:Ubuntu 18.04 操作系统默认预装gcc 7.3版本,在终端下输入命令:
gcc --version,可以查看自己的gcc版本。
gcc --version
gcc是(GNU Compiler Collection)的缩写,意思是GNU编译器套件,是一个可以编译C、C++等多种编程语言的编译器。

  • How to make(如何安装)

官方文档中给的命令如下,进入解压后的CRF++ -0.58文件夹内打开终端,逐行运行即可:

$ ./configure 
$ make
$ su  # 此条命令用于获取root权限,需要输入密码
# make install # 此条命令不是注释,获取root权限后,符号$会变成#

执行以上命令的具体过程:
下载到本地的CRF++工具包名称为CRF++-0.58.tar.gz
打开终端,切换到CRF++工具包所在的文件夹下(或者直接在文件夹的空白处右键点击打开终端),运行命令tar解压该文件:

tar -xvzf CRF++-0.58.tar.gz

命令tar部分参数含义:(可以在终端下运行命令tar --help查看)
-x:extract files from an archive(封存)
-v:verbosely(详细地) list files processed
-z:filter the archive throuh gzip
-f:use archive file or device AHIVE

(命令tar运行时的输出内容,即解压出来的各个文件名称,下图未截全)
Ubuntu下CRF++中文分词实验(一)文档阅读 工具安装_第1张图片
在终端下运行cd命令进入解压后的文件、并运行ls命令查看该文件里的内容:

cd CRF++-0.58

能够看到目录下有一个名字叫做configure的文件,长这样:
在这里插入图片描述
如果在终端下运行命令file configure,或者在文件夹里右键点击configure文件-选择Properties,就可以看到configure文件是一个shell script(shell 脚本),如下图所示:
在这里插入图片描述
Ubuntu下CRF++中文分词实验(一)文档阅读 工具安装_第2张图片

注:关于shell入门
shell
1、shell是【用户】与【操作系统内核】之间的接口,它接收用户的命令,然后调用相关程序。shell分为图形界面和命令行界面,通常shell单指命令行界面的shell。
2、shell同时又是一门编程语言,不编译,一边执行一边翻译,属于解释语言或脚本语言(script)。脚本语言还有Python、JS、PHP等。
命令行shell举例
bash(Unix/linux 系统)、
cmd.exe(Windows NT 系统)、
Windows PowerShell(支持 .NET Framework 技术的 Windows NT 系统)
Ubuntu下CRF++中文分词实验(一)文档阅读 工具安装_第3张图片

使用命令./configure运行该shell脚本,这就是官方文档中shell代码的第一行命令:
(下图为运行时的前半部分输出内容,前面都是checking for…)
Ubuntu下CRF++中文分词实验(一)文档阅读 工具安装_第4张图片
在一大堆的checking for…后,命令行中输出了以下内容:

1、configure脚本创建了config.status脚本
2、config.status文件根据相应的配置文件.in创建文件:

  • 根据Makefile.in创建Makefile(重要)
  • 根据Makefile.msvc.in创建Makefile.msvc
  • 根据swig/version.h.in创建swig/version.h
  • 根据config.h.in创建config.h

3、最后,config.status文件执行了depfileslibtool的命令
(其中libtool在下面还有见到)
Ubuntu下CRF++中文分词实验(一)文档阅读 工具安装_第5张图片

INI文件:INI是英文“初始化”(initialization)的缩写。INI文件为配置文件,被用来对操作系统或特定程序初始化或进行参数设置。

运行过shell脚本后使用命令ls查看文件内容,发现多了几个文件,也就是刚刚运行configure脚本时创建的:
Ubuntu下CRF++中文分词实验(一)文档阅读 工具安装_第6张图片运行命令make,也就是官方文档中的代码第二行:

命令make:扫描文件夹内的 Makefile 文件,根据Makefile文件中的内容,对目标进行编译(compile)、链接(link)等等操作。
扩展阅读:例解 Linux 下 Make 命令

可以看到下图中:
第一行为make all-am,证明make找到了Makefile文件,自动从all-处开始执行;
第二行为Entering directory,也就是进入当前文件夹;
接下来,用shell程序运行libtool这个shell脚本,通过--mode=complie这个参数执行着complie命令(将.cpp编译成.o
Ubuntu下CRF++中文分词实验(一)文档阅读 工具安装_第7张图片
下图依旧是执行libtool脚本,只不过参数--mode变成了link(将.o链接成可执行文件)
最后一行是Leaving directory,离开当前文件夹
Ubuntu下CRF++中文分词实验(一)文档阅读 工具安装_第8张图片
运行了命令make后,再使用命令ls查看文件夹内容,会发现新生成了好多文件:
1、源文件crf_learn.cppcrf_test.cpp通过编译生成了目标文件crf_learn.ocrf_test.o,目标文件通过链接生成了可执行文件crf_learncrf_test最终的这两个可执行文件将在之后用到
(注:这两个可执行文件目前存放在隐藏文件夹./.libs里,等待着下一条命令将其安装到电脑中,在本文件夹内生成了同名脚本文件crf_learncrf_test
2、encoder.cpp生成了encoder.oencoder.lo(以下用.o.lo代替)
3、feature_index.cpp生成了.o.lo
4、feature_cache.cpp生成了.o.lo
5、feature.cpp生成了.o.lo
6、lbfgs.cpp生成了.o.lo
7、libcrfpp.cpp生成.o.lo.la
8、node.cpp生成了.o.lo
9、param.cpp生成了.o.lo
10、path.cpp生成了.o.lo
11、tagger.cpp生成了.o.lo
Ubuntu下CRF++中文分词实验(一)文档阅读 工具安装_第9张图片

cpp文件转换为可执行文件的过程:
Ubuntu下CRF++中文分词实验(一)文档阅读 工具安装_第10张图片
GNU Libtool功能:让用户只需要执行源码包的configure脚本,剩下的事情(源码包编译组装成共享库)都交给libtool来完成
.lo文件: 使用libtool编译出的目标文件,用于决定哪些目标文件可能被组装成共享库
.la文件: 使用libtool编译出的库文件,其实是个文本文件,记录同名动态库和静态库的相关信息
扩展阅读:GNU libtool使用简介

运行完了命令make后,还剩两行命令:

$ su
# make install  # 此条命令不是注释,获取root权限后,符号$会变成#

其中命令su是用来获取root权限的,运行该命令后会提示输入密码(Password):
(可以看到下图中,@号的前面从用户名变成了root,光标的前面从$变成了#
在这里插入图片描述

linux运行命令su后提示authentication failure怎么办?

然后运行最后一条命令make install
输出信息中:
第一行仍旧是Entering directory;
第二行为Linux命令test,试探我的电脑里是否有路径/usr/local/lib,如果没有这个路径就用命令mkdir建立这个路径;
接下来是执行libtool脚本,这次--mode参数变成了install
(此处用到了上一步生成的libcrfpp.la文件)


第一条横线下的提示信息告诉我们,Libraries已经被下载到路径/usr/local/lib里;
还告诉我们,如果要链接到给定目录LIBDIR中已安装的库,则必须使用libtool,并指定库的完整路径名


第二条横线下又是一个命令testinstall,把./.libs中的可执行文件crf_learncrf_test安装到默认路径usr/local/bin
最后一个命令testinstall,把crfpp.h安装到默认路径usr/local/include
最后一行,Leaving directory
Ubuntu下CRF++中文分词实验(一)文档阅读 工具安装_第11张图片
路径下的可执行文件:
Ubuntu下CRF++中文分词实验(一)文档阅读 工具安装_第12张图片
总结:
回头看看官方文档给的这四条命令:

$ ./configure 
$ make
$ su  # 此条命令用于获取root权限,需要输入密码
# make install  # 此条命令不是注释,获取root权限后,符号$会变成#

其实就是这样的流程:
先运行configure脚本文件(检查我的电脑各种配置,并根据Makefile.in文件生成Makefile文件)
再用命令make执行Makefile中的内容(编译链接任务)
再用命令make install执行Makefile中的内容(安装任务)

事实上:这是一个常见的GNU程序的安装流程
程序开发人员只需要写一些简单的含有预定义宏的文件,就可以由【工具1:autoconf】生成configure脚本文件,并由【工具2:automake】生成Makefile.in文件
于是用户就可以使用./configure+make+make install这三条命令把程序安装到Linux系统中

扩展阅读:
Linux 命令详解(三)./configure、make、make install 命令
Configure文件学习
automake、autoconf 使用详解
浅谈 Shell 脚本配置文件格式

你可能感兴趣的:(#,Linux,#,NLP)