もちろん、この記事は中国の検索エンジンについて研究することではなく、PHP を使用してオンサイトの検索エンジンを構築する方法を共有することを目的としています。 この記事はこの系の記事です。
私が使用している単語セグメンテーション ツールは、中国科学院計算技術研究所の ICTCLAS のオープンソース バージョンです。 オープンソースの Bamboo もありますが、これについても後で調査します。
ICTCLAS のアルゴリズムは広く普及しており、公開された学術文書があり、コンパイルが簡単で、ライブラリへの依存関係がほとんどないため、 ICTCLAS から始めることは良い選択です。 ただし、現在提供されているのは C/C++、Java、および C# バージョンのコードのみであり、PHP バージョンのコードはありません。 どうすればよいでしょうか? C/C++ のソース コードと学術文書を研究して、PHP バージョンを開発することができるかもしれません。 ただし、プロセス間通信を使用して、PHP コードから C/C++ バージョンの実行可能ファイルを呼び出したいと考えています。
ソースコードをダウンロードして解凍した後、C++ 開発ライブラリとコンパイル環境を備えたマシン上で ictclas を直接作成します。 Makefile スクリプトにエラーがあり、テストを実行するコードに ' が追加されていません。 /' と表示されますが、もちろん Windows のように正常に実行することはできません。 ただし、コンパイル結果には影響しません。
中国語の単語分割のための PHP クラスは以下のとおりです。 proc_open() 関数を使用して単語分割プログラムを実行し、パイプラインを通じて対話します。分割するテキストを入力し、単語分割結果を読み取ります。
コードをコピーします コードは次のとおりです:
class NLP{
private static $cmd_path;
// '/' で終わらない
static function set_cmd_path($path){
self:: $cmd_path = $path;
}
プライベート関数 cmd($str){
$descriptorspec = array(
0 => array("pipe", "r"),
1 => array( "パイプ", "w"),
);
$cmd = self::$cmd_path . "/ictclas" = proc_open($cmd, $descriptorspec, $pipes); )) {
$str = iconv('utf-8', 'gbk', $str);
$output = stream_get_contents($pipes[1]); fclose($pipes [0]);
$return_value = proc_close($process);
/*
$cmd = "printf '$input' | " $cmd_path . " /ictclas";
$output = join("n", $output);出力 = iconv( 'gbk', 'utf-8', $output);
return $output
}
/**
* 単語の分割を実行し、単語リストを返します。*/
function tokenize($str){
$tokens = array();
$output = self::cmd($input);
if($output){
$ps = preg_split('/s+/', $output);
foreach($ps as $p){
list($ seg, $tag ) =explode('/', $p);
$item = array(
'seg' => $seg,
'tag' => $tag,
); = $item;
}
}
return $tokens;
}
}
NLP::set_cmd_path(dirname(__FILE__)); 使い方は非常に簡単です (ICTCLAS がコンパイルされた実行可能ファイルであることを確認してください)辞書は現在のディレクトリにあります):
コードをコピーします
コードは次のとおりです:
require_once('NLP.php')
var_dump(NLP::tokenize('Hello,世界!'));
http://www.bkjia.com/PHPjc/323981.html
www.bkjia.comtrue
http://www.bkjia.com/PHPjc/323981.html
技術記事
もちろん、この記事は中国の検索エンジンについて研究することではなく、PHP を使用してオンサイトの検索エンジンを構築する方法を共有することを目的としています。 この記事はこの系の記事です。 私が使用している単語分割ツールは...