如何使用PHP调用斯坦福词性标注工具(Stanford POS Tagger)

在使用PHP作为编程语言的前提下,如果我现在手里有一段中文,我想知道其中有多少名词、多少动词,我可以使用百度自然语言处理API。但是这个API只支持对中文的词性标注,英文的词性标注并不支持。这个时候就可以考虑使用斯坦福大学的词性标注工具Stanford Tagger,网址如下:

https://nlp.stanford.edu/software/tagger.shtml

如果用Python来调用这个工具,其实非常容易,但是我的网站一直使用PHP开发的,因此就不得不寄托于用PHP来完成英文文章的词性标注。

其实我之前根据上面页面的提示做过很多次尝试,但都以失败告终,一直搞不清楚原因。今天我突然想起来这档子事儿,决定再试一次,于是又重新看了文档,这才发现了问题的根源:我没有在自己的电脑上安装Java。

现在我已经成功在自己电脑上装好了Stanford POS Tagger的PHP版,我把整个过程给大家分享一下。

第一步:启动PHP开发环境,创建项目文件夹

我使用的是M1芯片的Macbook Air,并通过安装MAMP Pro来准备PHP开发环境,启动MAMP Pro后,在localhost文件夹中创建了一个名为Tagger的文件夹,在其中创建了一个名为index.php的文件。

第二步:安装Composer

什么是Composer?为什么要安装Composer?

在前面提到的工具主页中有这样一段话:

PHP: Patrick Schur in 2017 wrote PHP wrapper for Stanford POS and NER taggers. Also on packagist. Other choices: PHP wrapper by Anthony Gentile; PHP wrapper by Charles Hays (on github).

其中提到的wrapper for Stanford POS and NER taggers对应的超链接是:https://github.com/patrickschur/stanford-nlp-tagger

这是一个GitHub的工具主页,里面又有这样的描述:

Installation with Composer

$ composer require patrickschur/stanford-nlp-tagger

Composer是一个跨平台的插件安装工具,使用方法非常简单(其实我自己花了好几个小时才搞明白使用方法,搞明白之后真得发现这玩意巨简单无比),接下来我详细说明一下安装Composer的方法:

1)前往Composer的官网,下载Composer到上面所述的localhost文件夹内的Tagger文件夹:

官网:https://getcomposer.org/download/

虽然这个页面有很多话,但是可以直接前往Manual Download部分点击下载Latest Stable对应的文件,下载下来后看到的是一个名为composer.phar的文件,这个就是Composer。

2)运行Composer

为什么这一步不是安装Composer而是运行Composer呢,因为Composer不需要安装,可以直接运行,运行的方法是:

打开Mac的终端(Terminal),然后输入cd,并将Tagger文件夹的地址拖动到cd后面,这样就可以在终端中打开Tagger文件夹了。

cd /Users/codeslator/Sites/localhost/Tagger

上面就是我用的打开Tagger文件夹的命令,其中的codeslator是我的电脑的名字。

我非常喜欢Mac里通过拖动Finder下方的文件夹地址至终端就可以直接插入地址的方法,非常方便。

接下来输入:

php composer.phar就可以运行了,此时终端中会弹出一堆文字。

第三步:通过Composer下载wrapper for Stanford POS and NER taggers

如果按照GitHub主页所说的命令来下载,此时是不可以的。因为我其实并没有将Composer安装在Mac上,而只是放到了Tagger这个文件夹里,因此我不能使用:

$ composer require patrickschur/stanford-nlp-tagger

而是应该使用:

php composer.phar require patrickschur/stanford-nlp-tagger

前面的php composer.phar相当于composer

这个时候我的Tagger文件夹里就慢慢出现了一个文件和一个文件夹,分别是:

composer.lock和vendor

这个vendor就是我们要用的词性标注工具扩展,我们目前并不需要打开这个vendor文件夹。

##第四步:下载标注工具

前面我说vendor只是“词性标注工具扩展”,因为真正的标注工具并不是这个,而是工具官网上标明的:

Download Stanford Tagger version 4.2.0 [75 MB]

我现在看到的版本是4.2.0,因为这个工具一直在更新。

这个工具下载后是一个名为stanford-tagger-4.2.0.zip的压缩包,我们需要将这个包解压缩后放到vendor文件夹里面,解压缩后是一个名为stanford-postagger-full-2020-11-17的文件夹。使用的版本不一样,这个文件夹名字后面的日期就不一样。

此时我们还不能使用这个标注工具,因为还有一个重要的工作没有完成,那就是安装Java。

##第五步: 安装Java

前往Java的下载页面:https://www.java.com/zh-CN/download/

从这里找到适配当前操作系统的版本下载并安装即可。

##第六步:通过代码来调用词性标注工具

GitHub页面的参考代码是:

$pos = new \StanfordTagger\POSTagger();
 
$pos->tag('My dog also likes eating sausage.');

但实际上这段代码还不够,应该这样写:

index.php

<?php

include "vendor/autoload.php";

$pos = new \StanfordTagger\POSTagger();
 
$result = $pos->tag('My dog also likes eating sausage.');

echo $result;

?>

要想成功运行这段代码,还需要在最上面加一句:include "vendor/autoload.php";

以后遇到这种需要通过composer安装的程序,一定要记住:要引入vendor文件夹里的autoload.php文件,这样才可以调用程序。

运行上面这段代码后,才能看到想要的结果:

My_PRP$ dog_NN also_RB likes_VBZ eating_JJ sausage_NN ._.

以上就是使用PHP调用斯坦福词性标注工具(Stanford POS Tagger)的方法。