scws这样的中文分词插件比较不错,简单的学习了一下。它包涵一些专有名称、人名、地名、数字年代等规则集合,可以直接将语句按这些规则分开成一个一个关键词,准确率在90%-95%之间。按照安装说明把scws的扩展放入php的扩展目录里,下载规则文件和词典文件,并在php配置文件中引用它们,就可以用scws进行分词了
1) 修改 php 扩展代码以兼容支持 php 5.4.x
2) 修正 php 扩展中 scws_get_tops 的 limit 参数不允许少于 10 的问题
3) libscws 增加 scws_fork() 从既有的 scws 实例产生分支并共享词典/规则集,主要用于多线程开发。
4) 新增部分版本的 win32 的 dll 扩展
代码如下 |
复制代码 |
<?php
//实例化分词插件核心类
$so = scws_new();
//设置分词时所用编码
$so->set_charset(‘utf-8’);
//设置分词所用词典(此处使用utf8的词典)
$so->set_dict('/path/dict.utf8.xdb');
//设置分词所用规则
$so->set_rule('/path/rules.utf8.ini ');
//分词前去掉标点符号
$so->set_ignore(true);
//是否复式分割,如“中国人”返回“中国+人+中国人”三个词。
$so->set_multi(true);
//设定将文字自动以二字分词法聚合
$so->set_duality(true);
//要进行分词的语句
$so->send_text(“欢迎来到火星时代IT开发”);
//获取分词结果,如果提取高频词用get_tops方法
while ($tmp = $so->get_result())
{
print_r($tmp);
}
$so->close();
?>
|
注:如以上例子,输入的文字,词典,规则文件这三者的字符集必须统一;另外mysql 4.XX有的是不支持中文全文搜索的,可以存入关键字对应的区位码以方便全文搜索。
版本列表
版本 类型 平台 性能 其它
SCWS-1.1.x C 代码 *Unix*/*PHP* 准确: 95%, 召回: 91%, 速度: 1.2MB/sec
PHP扩展分词速度: 250KB/sec [下载] [文档] [安装说明]
php_scws.dll(1) PHP扩展库 Windows/PHP 4.4.x 准确: 95%, 召回: 91%,
php_scws.dll(2) PHP扩展库 Windows/PHP 5.2.x 准确: 95%, 召回: 91%,
php_scws.dll(3) PHP扩展库 Windows/PHP 5.3.x 准确: 95%, 召回: 91%,
php_scws.dll(4) PHP扩展库 Windows/PHP 5.4.x 准确: 95%, 召回: 91%,
PSCWS23 PHP源代码 不限 (不支持UTF-8) 准确: 93%, 召回: 89%,
PSCWS4 PHP源代码 不限 准确: 95%, 召回: 91%,
数据库操作类是所有程序都可以实现的一个功能,下面我来分享一个PHP mysql数据库操作类,这个数据库操作类的特点是对所有保存到数据库的内容进入了过滤,可以很好的处理sql注入了。
代码如下 |
复制代码 |
<?php
//数据库处理类
class db
{
//SQL执行后的数据保存变量;
var $db;
//读取或设置当前数据的位置
var $position=0;
//执行SQL语句并把结果保存为db变量中;
function sub_sql($str)
{
global $prefix;//全局函数,表前缀
return str_replace("#@__",$prefix,$str);
}
function Sql($str)
{
$str=$this->sub_sql($str);
$result = mysql_query($str);
$i=0;
while($row = mysql_fetch_array($result))
{
$str_array[$i]=$row;
$i++;
}
if(empty($str_array))
{
$str_array=array();
}
$this->db=$str_array;
}
//读取一条数据并把数据往后移一位,如果数据为空则返回为null;
function Get_One()
{
$re=empty($this->db[$this->position])?null:$this->db[$this->position];
$this->position=$re?$this->position+1:$this->position;
return $re;
}
//判断是否数据读取到结尾了
function Judge()
{
$re=empty($this->db[$this->position])?true:false;
return $re;
}
//取得db里面的个数
function Get_Num()
{
return count($this->db);
}
//更新数据库里面的数据,$t为表名,$v格式为数组格式,上标为字段名,下标为数据;$w为条件上标为字段名下标为数据,$p为条件0为等号,1为大于,-1为小于;
function Set_Updata($t,$v,$w,$p=0)
{
$this->Sql($t);
$v_str="";
$w_str="";
$f="";
foreach($v as $key=>$vaule)
{
if(!is_numeric($key))
{
if(empty($v_str))
{
$v_str=htmlspecialchars($key)."='".htmlspecialchars($vaule)."'";
}else
{
$v_str=$v_str.",".htmlspecialchars($key)."='".htmlspecialchars($vaule)."'";
}
}
}
switch($p)
{
case 0:
$f="=";
break;
case 1:
$f=">";
break;
case -1:
$f="<";
break;
}
if(!empty($f))
{
foreach($w as $key=>$vaule)
{
if(!is_numeric($key))
{
if(empty($v_str))
{
$w_str=htmlspecialchars($key).$f.htmlspecialchars($vaule)."'";
}else
{
$w_str=$w_str.",".htmlspecialchars($key).$f.htmlspecialchars($vaule)."'";
}
}
}
}
$sql="UPDATE ".$t." SET ".$v_str." where ".$w_str;
return $result = mysql_query($sql);
}
//删除一数据$w为条件上标为字段名下标为数据,$p为条件0为等号,1为大于,-1为小于;
function Set_Del($t,$w,$p=0)
{
$this->sub_sql($t);
$w_str="";
$f="";
switch($p)
{
case 0:
$f="=";
break;
case 1:
$f=">";
break;
case -1:
$f="<";
break;
}
if(!empty($f))
{
foreach($w as $key=>$vaule)
{
if(!is_numeric($key))
{
if(empty($v_str))
{
$w_str=htmlspecialchars($key).$f.htmlspecialchars($vaule)."'";
}else
{
$w_str=$w_str.",".htmlspecialchars($key).$f.htmlspecialchars($vaule)."'";
}
}
}
}
$str="DELETE FROM ".$t." WHERE ".$w_str;
return $result = mysql_query($str);
}
function Add($t,$v)
{
$this->sub_sql($t);
$k_str="";
$v_str="";
foreach($v as $key=>$vaule)
{
if(!is_numeric($key)){
if(empty($k_str))
{
$k_str=htmlspecialchars($key);
$v_str="'".htmlspecialchars($vaule)."'";
}else
{
$k_str=$k_str.",".htmlspecialchars($key);
$v_str=$v_str.","."'".htmlspecialchars($vaule)."'";
}
}
}
$str="INSERT INTO ".$t."(".$k_str.")"."value(".$v_str.")";
return $result = mysql_query($str);
}
}
?>
|
我们知道新版的php5.3是不支持mysql自带的mssql_connect这个数据连接函数,如果需要连接sqlserver数据库,我们只能使用了com 接口来做哦。
1.Com链接,ADODB.Connection
代码如下 |
复制代码 |
$conn = new Com(“ADODB.Connection”); //实例化一个Connection对象
$connstr = “provider=sqloledb;datasource=.;uid=sa;pwd=123456;database=jnold;”;
$conn->Open($connstr);
$rs = new Com(“ADODB.Recordset”); //实例化一个Recordcount对象
$rs->Open(‘select * from News where bigclassid = 59 And LeadPostil is null’, $conn, 1, 1);
$count = $rs->RecordCount;
echo “共有{$count}条纪录<br />”;
for($i = 0; $i < $count ; $i++){
$arr_result[$i]['Title'] = addslashes($rs->Fields(‘Title’)->Value);//标题
$arr_result[$i]['Color'] = addslashes($rs->Fields(‘titlecolor’)->Value?$rs->Fields(‘titlecolor’)->Value:”);//标题颜色
$arr_result[$i]['WenHao'] = addslashes($rs->Fields(‘OtherText’)->Value);//文号
}
|
2.ODBC连接mssql
代码如下 |
复制代码 |
$dbhost = ”;
$dbuser = ”; //你的mssql用户名
$dbpass = ”; //你的mssql密码
$dbname = ”; //你的mssql库名
$connect=odbc_connect(“Driver={SQL Server};Server=$dbhost;Database=$dbname”,”$dbuser”,”$dbpass”);
$sql=”select * from content”;
$exec=odbc_exec($connect,$sql);
while($row = (odbc_fetch_array($exec)))
{
$row['id'] //?取字段值
…
}
|
我们知道mssql不像php那样可以使用time哦,他生成的是时间格式DateTime这样就显示不对了,如下
代码如下 |
复制代码 |
while( $row = sqlsrv_fetch_array( $result, SQLSRV_FETCH_ASSOC))
{
print_r($row['datetime']);//这个字段是mssql的时间格式
}
结果是
DateTime Object
(
[date] => 2011-10-20 00:00:00
[timezone_type] => 3
[timezone] => Asia/Chongqing
)
|
解决办法
第一个方法:php文档开头定义ini_set(”mssql.datetimeconvert”,0);
第二个方法:修改php.ini,找到;mssql.datetimeconvert = On ,去掉前面的分号,修改on为off。
第三个方法:只有把mssql的时间字段用convert函数转换成字符串。
比如 SELECT *,convert(char,datetime字段,120) as str_datetime FROM 表名
这个str_datetime就是字符串了。第三个参数为120,刚好是我们需要的格式 yyyy-mm-dd hh:ii:ss
今天在windows中配置了php mysql环境,很高兴测试一段代码结果提示Call to undefined function mysql_connect()这证明数据库配置不成功哈。
代码如下 |
复制代码 |
<?php
$conn = mysql_connect('localhost','root','password');
var_dump($conn);
?>
|
基本就是改配置文件php.ini
首先要确保php.ini中extension_dir = "./ext",该设置是php引用dll的目录;
1.将php文件夹下libmysql.dll和php5ts.dll两个文件拷贝至windows目录下的system32下;或者在环境变量中增加D:php;D:phpext。这两个目录是php的安装目录和扩展dll的目录。
2.修改windows安装目录下的php.ini 去掉;extension=php_mysql.dll前面的分号;
3.extension_dir = "d:phpext (文件在PHP.INI中)。
你看看你的php.ini的配置找到
代码如下 |
复制代码 |
extension=php_mysql.dll
extension=php_mysqli.dll把前面的分号去掉
|
我用的是apache,所以如果还这行的话,再看看主配置文件里的路径和引用都设置好了没有 PHPIniDir "PHP.INI的路径" 还要加一句 LoadModule*************的内容 这个网上都可以找得到。一般情况下到这里基本可以解决。
找到你的PHP根目录,找到两个文件 libmysql.dll和php5ts.dll 将之复制到system32下面。记住是PHP下面的。不是MYSQL
标签:[!--infotagslink--]