无插件的php分词类库

 更新时间:2014年12月20日 01:44  点击:352

     最近做实验,苦于php分词的问题,从网上找了很多,但都不行,导致试验结果不是很好,今天早晨抱着不放弃的努力,又试着重网上找开源的php分词词库,终于功夫不负有心人。


     发现了一个很好的分词类库phpanalysis2.0。


     原文连接地址:http://www.phpbone.com/phpanalysis/


      分词系统简介:PHPAnalysis分词程序使用居于unicode的词库,使用反向匹配模式分词,理论上兼容编码更广泛,并且对utf-8编码尤为方便。 由于PHPAnalysis是无组件的系统,因此速度会比有组件的稍慢,不过在大量分词中,由于边分词边完成词库载入,因此内容越多,反而会觉得速度越快,这是正常现象,PHPAnalysis的词库是用一种类似哈希(Hash)的数据结构进行存储的,因此对于比较短的字符串分词,只需要占极小的资源,比那种一次性载入所有词条的实际性要高得多,并且词库容量大小不会影响分词执行的速度。

      PHPAnalysis分词系统是基于字符串匹配的分词方法进行分词的,这种方法又叫做机械分词方法,它是按照一定的策略将待分析的汉字串与 一个“充分大的”机器词典中的词条进行配,若在词典中找到某个字符串,则匹配成功(识别出一个词)。按照扫描方向的不同,串匹配分词方法可以分为正向匹配 和逆向匹配;按照不同长度优先匹配的情况,可以分为最大(最长)匹配和最小(最短)匹配;按照是否与词性标注过程相结合,又可以分为单纯分词方法和分词与 标注相结合的一体化方法。常用的几种机械分词方法如下:

1)正向最大匹配法(由左到右的方向);

2)逆向最大匹配法(由右到左的方向);

3)最少切分(使每一句中切出的词数最小)。

      还可以将上述各种方法相互组合,例如,可以将正向最大匹配方法和逆向最大匹配方法结合起来构成双向匹配法。由于汉语单字成词的特点,正向最小匹配和逆向 最小匹配一般很少使用。一般说来,逆向匹配的切分精度略高于正向匹配,遇到的歧义现象也较少。统计结果表明,单纯使用正向最大匹配的错误率为1/169, 单纯使用逆向最大匹配的错误率为1/245。但这种精度还远远不能满足实际的需要。实际使用的分词系统,都是把机械分词作为一种初分手段,还需通过利用各 种其它的语言信息来进一步提高切分的准确率。另一种方法是改进扫描方式,称为特征扫描或标志切分,优先在待分析字符串中识别和切分出一些带有明 显特征的词,以这些词作为断点,可将原字符串分为较小的串再来进机械分词,从而减少匹配的错误率。另一种方法是将分词和词类标注结合起来,利用丰富的词类 信息对分词决策提供帮助,并且在标注过程中又反过来对分词结果进行检验、调整,从而极大地提高切分的准确率。

     PHPAnalysis分词先对需要分词的词进行粗分,然后对粗分的短句子进行二次逆向最大匹配法(RMM)的方法进行分词,分词后对分词结果进行优化,然后才得到最终的分词结果。


PHPAnalysis类API文档


一、比较重要的成员变量$resultType   = 1        生成的分词结果数据类型(1 为全部, 2为 词典词汇及单个中日韩简繁字符及英文, 3 为词典词汇及英文)

                                    这个变量一般用 SetResultType( $rstype ) 这方法进行设置。

$notSplitLen  = 5        切分句子最短长度

$toLower      = false    把英文单词全部转小写

$differMax    = false    使用最大切分模式对二元词进行消岐

$unitWord     = true     尝试合并单字(即是新词识别)

$differFreq   = false    使用热门词优先模式进行消岐二、主要成员函数列表1、public function __construct($source_charset='utf-8', $target_charset='utf-8', $load_all=true, $source='') 函数说明:构造函数

参数列表:

$source_charset      源字符串编码

$target_charset      目录字符串编码

$load_all            是否完全加载词典(此参数已经作废)

$source              源字符串

如果输入输出都是utf-8,实际上可以不必使用任何参数进行初始化,而是通过 SetSource 方法设置要操作的文本2、public function SetSource( $source, $source_charset='utf-8', $target_charset='utf-8' )函数说明:设置源字符串

参数列表:

$source              源字符串

$source_charset      源字符串编码

$target_charset      目录字符串编码

返回值:bool3、public function StartAnalysis($optimize=true)函数说明:开始执行分词操作

参数列表:

$optimize            分词后是否尝试优化结果

返回值:void

一个基本的分词过程:

//////////////////////////////////////

$pa = new PhpAnalysis();


$pa->SetSource('需要进行分词的字符串');


//设置分词属性

$pa->resultType = 2;

$pa->differMax  = true;


$pa->StartAnalysis();


//获取你想要的结果

$pa->GetFinallyIndex();

////////////////////////////////////////4、public function SetResultType( $rstype )函数说明:设置返回结果的类型

实际是对成员变量$resultType的操作

参数 $rstype 值为:

1 为全部, 2为 词典词汇及单个中日韩简繁字符及英文, 3 为词典词汇及英文

返回值:void5、public function GetFinallyKeywords( $num = 10 )函数说明:获取出现频率最高的指定词条数(通常用于提取文档关键字)

参数列表:

$num = 10  返回词条个数

返回值:用","分隔的关键字列表6、public function GetFinallyResult($spword=' ')函数说明:获得最终分词结果

参数列表:

$spword    词条之间的分隔符

返回值:string7、public function GetSimpleResult()函数说明:获得粗分结果

返回值:array8、public function GetSimpleResultAll()函数说明:获得包含属性信息的粗分结果

属性(1中文词句、2 ANSI词汇(包括全角),3 ANSI标点符号(包括全角),4数字(包括全角),5 中文标点或无法识别字符)

返回值:array9、public function GetFinallyIndex()函数说明:获取hash索引数组

返回值:array('word'=>count,...) 按出现频率排序10、public function MakeDict( $source_file, $target_file='' )函数说明:把文本文件词库编译成词典

参数列表:

$source_file   源文本文件

$target_file   目标文件(如果不指定,则为当前词典)

返回值:void11、public function ExportDict( $targetfile )函数说明:导出当前词典全部词条为文本文件

参数列表:

$targetfile  目标文件

返回值:void


[!--infotagslink--]

相关文章

  • 推荐 几种Apache Lucene 分词系统

    1、 StopAnalyzer StopAnalyzer能过滤词汇中的特定字符串和词汇,并且完成大写转小写的功能。 2、 StandardAnalyzer StandardAnalyzer根据空格和符号来完成分词,还可以完成数...2016-01-28
  • php实现中文分词的例子

    有很多的cms都有分词的功能,多数都是用于tag标签中,本人自己写了一个分词的方式,没有强大的词库,在网上下载了一个词库和一个分词的代码 将词库和代码结合加以调试实...2016-11-25
  • Python预测分词的实现

    本文将结合实例代码,介绍Python预测分词的实现,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-06-18
  • php实现scws中文分词搜索的方法

    这篇文章主要介绍了php实现scws中文分词搜索的方法,详细介绍了scws中文分词搜索的具体步骤与相关使用技巧,并提供了scws的本站下载地址,需要的朋友可以参考下...2015-12-27
  • PHPAnalysis简单方便的PHP分词系统类

    PHP分词软件有许多了,如有一个名为PHPAnalysis分词系统类,我们下面一起来看看这个PHPAnalysisP分词系统类的使用方法。 PHPAnalysis分词程序使用居于unicode的词库,...2016-11-25
  • SCWS 中文分词 php安装使用例子

    SCWS是一个非常不错的分词系统了,它可以把中文分词并且准确还不错了,这里小编来为各位介绍php版的SCWS 中文分词安装与应用例子. 今天发现一个很好用的中文分词工具...2016-11-25
  • 一个用PHP写的中文分词函数

    <?php class Segmentation { var $options = array('lowercase' => TRUE, 'segment_english' => FALSE); var $dict_name = 'Unknown'; var $dict_words = array(...2016-11-25
  • php简单中文分词系统

    结构:首字散列表、trie索引树结点 优点:分词中,不需预知待查询词的长度,沿树链逐字匹配。 缺点:构造和维护比较复杂,单词树枝多,浪费了一定的空间 * @version 0.1 * @todo...2016-11-25
  • 用python实现前向分词最大匹配算法的示例代码

    这篇文章主要介绍了用python实现前向分词最大匹配算法的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-08-06
  • php做的简单中文分词代码

    中文搜索引擎来说, 中文分词是整个系统最基础的部分之一, 因为目前基于单字的中文搜索算法并不是太好. 当然, 本文不是要对中文搜索引擎做研究, 而是分享如果用 PHP 做...2016-11-25
  • Drupal 7结合Apache Solr 4.7实现中文分词教程

    Solr是一个高性能,采用Java5开发,基于Lucene的全文搜索服务器。同时对其进行了扩展,提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展并对查询性能进行了优化,...2016-11-25
  • 浅谈中文分词

    NLP(Natural language processing)自然语言处理一直都是比较热门的领域,现在不管是搜索,推荐神马的基本都需要和nlp打交道,而中文的nlp处理的第一步就是分词了,所以中文分词...2016-09-20
  • php实现的中文分词类完整实例

    小编推荐的这篇文章详细介绍了php实现的中文分词类完整实例,非常有用,感兴趣的同学快来看看吧。 代码如下复制代码 classSegmentation { var$options=array...2017-07-06
  • 中文分词的php代码

    以前有用过dedecms分词功能,经过测试还是不理想,后来经过一些处理得到的结果还是可以接受的,今天我再看到这款分词法,拿出来给大家看看。 <?php教程 class NLP{ priva...2016-11-25