简易中文分词 (SCWS) ver 3.1/2.1 (实例演示)

源码地址:http://scws.tguanlim.com/

<?php
/*-----------------------------------------------------------------------*/
PHP-简易中文分词(SCWS)ver3.1/2.1(实例演示)

(*)基于词频词典逐点搜索最长词,双向根据词频取较高之分法

-----------------------------------------------------------------------
作者:马明练(hightman)(MSN:MingL_Mar@msn.com)(php-QQ群:17708754)
网站:http://php.twomice.net
时间:2006/03/05
目的:学习研究交流用,希望有好的建议及用途希望能进一步交流.
-----------------------------------------------------------------------
运行环境:PHP4.x.*(x>0)(编译需要--enable-dba--with-[cdb|gdbm])
/*-----------------------------------------------------------------------*/

/**
*查看源码的参数<*.php?source>
*/
if(isset($_SERVER['QUERY_STRING'
])
&&!
strcasecmp($_SERVER['QUERY_STRING'],'source'
))
{
highlight_file(__FILE__
);
exit(
0
);
}

/**
*实例进行
*/

//尝试计算实列运算时间
functionget_microtime
()
{
list(
$usec,$sec)=explode('',microtime
());
return((float)
$usec+(float)$sec
);
}
$time_start=get_microtime
();

//分词结果之回调函数(param:分好的词组成的数组)
functionwords_cb($ar
)
{
echo
implode('',$ar
);
flush
();
}

//实例化前的参数指定与读取
$dict='dict/dict.cdb'
;
$mydata=NULL;
//待切数据
$version=3;
//采用版本
$autodis=false;
//是否识别名字
$ignore=false;
//是否忽略标点
$debug=false;
//是否为除错模式
$is_cli=(php_sapi_name()=='cli');
//是否为cli运行环境

//根据不同版本的环境读取参数设置
if($is_cli
)
{
$argc=$_SERVER['argc'
];
for(
$i=1;$i<$argc;$i
++)
{
$optarg=$_SERVER['argv'][$i
];
if(!
strncmp($optarg,"--",2
))
{
$cmp=substr($optarg,2
);
if(!
strcasecmp($cmp,"help"
))
{
$mydata=NULL
;
break;
}
elseif(!
strcasecmp($cmp,"autodis"
))
$autodis=true
;
elseif(!
strcasecmp($cmp,"ignore"
))
$ignore=true
;
elseif(!
strcasecmp($cmp,"v2"
))
$version=2
;
elseif(!
strcasecmp($cmp,"debug"
))
$debug=true
;
elseif(!
strcasecmp($cmp,"dict"
))
{
$i
++;
$dict=$_SERVER['argv'][$i
];
}
}
elseif(
is_null($mydata
))
$mydata=trim($optarg
);

if(!
is_null($mydata)&&is_file($mydata
))
$mydata=@file_get_contents($mydata
);
}
}
else
{
//部分参数选项
$checked_ignore=$checked_autodis=$checked_v2=''
;

//是否指定有第2版
if(isset($_REQUEST['version'])&&$_REQUEST['version']==2
)
{
$version=2
;
$checked_v2='selected'
;
}

//是否指定一个词典格式
$selected_gdbm=$selected_text=$selected_sqlite=''
;
if(isset(
$_REQUEST['dict'
]))
{
if(
$_REQUEST['dict']=='gdbm'
)
{
$dict='dict/dict.gdbm'
;
$selected_gdbm='selected'
;
}
elseif(
$_REQUEST['dict']=='text'
)
{
$dict='dict/cwords.txt'
;
$selected_text='selected'
;
}
elseif(
$_REQUEST['dict']=='sqlite'
)
{
$dict='dict/dict.sqlite'
;
$selected_sqlite='selected'
;
}
else
{
$_REQUEST['dict']='cdb'
;
}
}

//是否开启人名识别(缺省关闭)
if(isset($_REQUEST['autodis'])&&!strcmp($_REQUEST['autodis'],'yes'
))
{
$autodis=true
;
$checked_autodis='checked'
;
}

//是否清除标点符号
if(isset($_REQUEST['ignore'])&&!strcmp($_REQUEST['ignore'],'yes'
))
{
$ignore=true
;
$checked_ignore='checked'
;
}

//是否开启debug
if(isset($_REQUEST['debug'])&&!strcmp($_REQUEST['debug'],'yes'
))
{
$debug=true
;
$checked_debug='checked'
;
}

//切分数据
if(!isset($_REQUEST['mydata'])||empty($_REQUEST['mydata'
]))
{
$mydata=@file_get_contents('sample.txt'
);
}
else
{
$mydata=&$_REQUEST['mydata'
];
if(
get_magic_quotes_gpc
())
$mydata=stripslashes($mydata
);
}
}

//清除最后的/r/n/t
if(!is_null($mydata
))
$mydata=trim($mydata
);

//实例化分词对像(mydata非空)
$object='my_SimpledCWS'.$version
;
require(
$object.'.class.php'
);

$cws=new$object($dict
);
$cws->set_ignore_mark($ignore
);
$cws->set_autodis($autodis
);
$cws->set_debug($debug
);

?>
<?php
if(!$is_cli){
?>
<html>
<head>
<title>PHP简易中文分词(SCWS)第<?phpecho$version;?>版在线演示(byhightman)</title>
<metahttp-equiv="Content-type"content="text/html;charset=gbk">
<styletype="text/css">
<!--
td,body{background-color:#efefef;font-family:tahoma;font-size:14px;}
.demotx{font-size:12px;width:100%;height:140px;}
small{font-size:12px;}
//-->
</style>
</head>
<body>
<h3>
<fontcolor=red>PHP简易中文分词(SCWS)</font>
<fontcolor=blue>第<?phpecho$version;?>版</font>-在线演示(byhightman)
</h3>
基本功能:根据词频词典进行机械分词、中外人名智能辨认(词典格式:gdbm/cdb等)
<hr/>

<tablewidth=100%border=0>
<tr>
<formmethod=post>
<tdwidth=100%>
<strong>请输入文字点击提交尝试分词:</strong><br/>
<textareaname=mydatacols=60rows=8class=demotx><?phpecho$mydata;?></textarea>
<small>
<inputtype=checkboxname=autodisvalue="yes"<?phpecho$checked_autodis;?>>智能识别人名
&nbsp;
<inputtype=checkboxname=ignorevalue="yes"<?phpecho$checked_ignore;?>>清除标点符号
&nbsp;
<inputtype=checkboxname=debugvalue="yes"<?phpecho$checked_debug;?>>debug(v2)
&nbsp;
<br/>
词典格式:
<selectname=dictsize=1>
<optionvalue=cdb>CDB</option>
<optionvalue=gdbm<?phpecho$selected_gdbm;?>>GDBM</option>
<optionvalue=text<?phpecho$selected_text;?>>Text</option>
<optionvalue=sqlite<?phpecho$selected_sqlite;?>>SQLite2.x</option>
</select>
&nbsp;
尝试采用第
<selectname=versionsize=1style="color:red;font-weight:bold;">
<optionvalue=3>3</option>
<optionvalue=2<?phpecho$checked_v2;?>>2</option>
</select>
版分词算法
&nbsp;&nbsp;
</small>
<inputtype=submit>
</td>
</form>
</tr>
<tr>
<td><hr/></td>
</tr>
<tr>
<tdwidth=100%>
<strong>分词结果(原文总长度<?phpechostrlen($mydata);?>字符)</strong>
<br/>
<textareacols=60rows=8class=demotxreadonly>
<?php}else{
?>
_____________________________________________________________________

PHP简易中文分词程序(SCWS)-第<?phpecho$version;?>版-byhightman
_____________________________________________________________________
1.基于词频词典逐点搜索最长词,双向根据词频取较高之分法
2.用法:<?phpecho$_SERVER['argv'][0];?>[选项]<string|file>
3.选项:--autodis打开人名识别
--ignore清除结果中的标点符号
--v2使用第2版分词算法(缺省第3版)
--dict<file>直接指定词典文件,后缀(.cdb|.gdbm|.txt|.sqlite)
--help显示本页帮助文件
4.结果:直接输出分词结果,词之间以空格分隔
_____________________________________________________________________

<?php}
?>
<?php
//执行切分,分词结果数组执行words_cb()
$cws->segment($mydata,'words_cb'
);

//切分时间统计
$time_end=get_microtime
();
$time=$time_end-$time_start
;

//以下显示结果
?>
<?php
if(!$is_cli){
?>
</textarea>
<small>
分词耗时:<?phpecho$time;?>秒,
词典查询次数:<?phpecho$cws->_dict->query_times;?>
</small>
</td>
</tr>
</table>
<hr/>
<small>
注:本程序代码及相关词典免费开放下载,供研究学习交流.
参见网页<ahref=http://php.twomice.nettarget=_blank>http://php.twomice.net</a>
或直接<ahref="?source"target="_blank">查看源码</a>
</small>
</body>
</html>
<?php}elseif(!empty($mydata)){
?>

_____________________________________________________________________
总长:<?phpechostrlen($mydata);?>字符,耗时:<?phpecho$time;?>秒,查词次数:<?phpecho$cws->_dict->query_times;?>
<?php}?>

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


SQLite架构简单,又有Json计算能力,有时会承担Json文件/RESTful的计算功能,但SQLite不能直接解析Json文件/RESTful,需要用Java代码硬写,或借助第三方类库,最后再拼成insert语句插入数据表,代码非常繁琐,这里就不展示了。参考前面的代码可知,入库的过程比较麻烦,不能只用SQL,还要借助Java或命令行。SPL是现代的数据计算语言,属于简化的面向对象的语言风格,有对象的概念,可以用点号访问属性并进行多步骤计算,但没有继承重载这些内容,不算彻底的面向对象语言。...
使用Python操作内置数据库SQLite以及MySQL数据库。
破解微信数据库密码,用python导出微信聊天记录
(Unity)SQLite 是一个软件库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。SQLite 是在世界上最广泛部署的 SQL 数据库引擎。SQLite 源代码不受版权限制。本教程将告诉您如何使用 SQLite 编程,并让你迅速上手。.................................
安卓开发,利用SQLite实现登陆注册功能
相比大多数数据库而言,具有等优势,广泛应用于、等领域。
有时候,一个项目只有一个数据库,比如只有SQLite,或者MySQL数据库,那么我们只需要使用一个固定的数据库即可。但是一个项目如果写好了,有多个用户使用,但是多个用户使用不同的数据库,这个时候,我们就需要把软件设计成可以连接多个数据库的模式,用什么数据库,就配置什么数据库即可。4.Users实体类,这个实体类要和数据库一样的,形成一一对应的关系。11.Sqlite数据库,需要在代码里面创建数据库,建立表,再建立数据。8.我们开启MySQL数据库,然后进行调试,看程序的结果。2.安装SqlSugar。
基于Android的背单词软件,功能强大完整。
SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统。说白了就是使用起来轻便简单,
Android的简单购物车案例
SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。它是D.RichardHipp建立的公有领域项目。它的设计目标是嵌入式的,而且已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如 Tcl、C#、PHP、Java等,还有ODBC接口,同样比起Mysql、PostgreSQL这两款开源的世界著名数据库...
Qt设计较为美观好看的登录注册界面(包含SQLite数据库以及TCP通信的应用)
SQLite是用C语言开发的跨平台小型数据库,可嵌入其他开发语言,也可在单机执行。SPL是用Java开发的跨平台的数据计算语言,可嵌入Java,可在单机执行,可以数据计算服务的形式被远程调用。两者的代码都是解释执行的。...
新建库.openDATA_BASE;新建表createtableLIST_NAME(DATA);语法:NAME关键字...<用逗号分割>删除表droptableNAME;查看表.schema查看表信息新建数据insertintoLIST_NAMEvalues();语法:CLASS,PARAMETER...,CLASS是类别,PARAMETER是参数<用逗号分割新建的
importsqlite3classDemo01:def__init__(self):self.conn=sqlite3.connect("sql_demo_001.db")self.cursor1=self.conn.cursor()self.cursor1.execute("select*fromtable_001wherename=?andid=?",('ssss&#0
 在客户端配置文件<configuration>节点下,添加:<connectionStrings>      <add name="localdb" connectionString="Data Source=config/local.db;Version=3;UseUTF16Encoding=True;" providerName="System.Data.SQLite.SQLiteFactory"/&g
提到锁就不得不说到死锁的问题,而SQLite也可能出现死锁。下面举个例子:连接1:BEGIN(UNLOCKED)连接1:SELECT...(SHARED)连接1:INSERT...(RESERVED)连接2:BEGIN(UNLOCKED)连接2:SELECT...(SHARED)连接1:COMMIT(PENDING,尝试获取EXCLUSIVE锁,但还有SHARED锁未释放,返回SQLITE_BUSY)连接2:INSERT...
SQLite是一种嵌入式数据库,它的数据库就是一个文件。由于SQLite本身是C写的,而且体积很小,所以,经常被集成到各种应用程序中,甚至在iOS和Android的App中都可以集成。Python就内置了SQLite3,所以,在Python中使用SQLite,不需要安装任何东西,直接使用。在使用SQLite前,我们先要搞清楚几个概念:表
设计思想————首先要确定有几个页面、和每个页面的大致布局由于是入门,我也是学习了不是很长的时间,所以项目比较low。。。。第一个页面,也就是打开APP的首页面:今天这个博客,先实现添加功能!:首先对主界面进行布局:其中activity_main.xml的代码为<?xmlversion="1.0"encoding="