·用户注册
·用户登陆
·用户中心
首页
+
网络学院
+
网页特效
+
实用工具
+
网络资源
+
字体下载
+
娱乐世界
+
时尚前沿
+
图片中心
+
动漫天地
+
金石社区
成语
-
邮编
-
IP查询
-
PR值
-
ALEXA排名
-
许愿
-
缘份测试
-
网页设计
-
网络编程
-
图形图像
-
音乐
-
游戏
-
搞笑
-
美女
您现在的位置:
金石网
>>
网络学院
>>
网络编程
>>
PHP教程
>> 文章正文
一个用PHP写的中文分词函数
『 更新时间:2008-2-16 』『 字体:
变小
变大
』『 作者:佚名 | 来源:互联网 』
<?
php
class
Segmentation {
var
$options
=
array
(
'
lowercase
'
=>
TRUE
,
'
segment_english
'
=>
FALSE
);
var
$dict_name
=
'
Unknown
'
;
var
$dict_words
=
array
();
function
setLowercase(
$value
) {
if
(
$value
) {
$this
->
options[
'
lowercase
'
]
=
TRUE
;
}
else
{
$this
->
options[
'
lowercase
'
]
=
FALSE
;
}
return
TRUE
;
}
function
setSegmentEnglish(
$value
) {
if
(
$value
) {
$this
->
options[
'
segment_english
'
]
=
TRUE
;
}
else
{
$this
->
options[
'
segment_english
'
]
=
FALSE
;
}
return
TRUE
;
}
function
load(
$dict_file
) {
if
(
!
file_exists
(
$dict_file
)) {
return
FALSE
;
}
$fp
=
fopen
(
$dict_file
,
'
r
'
);
$temp
=
fgets
(
$fp
,
1024
);
if
(
$temp
===
FALSE
) {
return
FALSE
;
}
else
{
if
(
strpos
(
$temp
,
"
\t
"
)
!==
FALSE
) {
list
(
$dict_type
,
$dict_name
)
=
explode
(
"
\t
"
,
trim
(
$temp
));
}
else
{
$dict_type
=
trim
(
$temp
);
$dict_name
=
'
Unknown
'
;
}
$this
->
dict_name
=
$dict_name
;
if
(
$dict_type
!==
'
DICT_WORD_W
'
) {
return
FALSE
;
}
}
while
(
!
feof
(
$fp
)) {
$this
->
dict_words[
rtrim
(
fgets
(
$fp
,
32
))]
=
1
;
}
fclose
(
$fp
);
return
TRUE
;
}
function
getDictName() {
return
$this
->
dict_name;
}
function
segmentString(
$str
) {
if
(
count
(
$this
->
dict_words)
===
0
) {
return
FALSE
;
}
$lines
=
explode
(
"
\n
"
,
$str
);
return
$this
->
_segmentLines(
$lines
);
}
function
segmentFile(
$filename
) {
if
(
count
(
$this
->
dict_words)
===
0
) {
return
FALSE
;
}
$lines
=
file
(
$filename
);
return
$this
->
_segmentLines(
$lines
);
}
function
_segmentLines(
$lines
) {
$contents_segmented
=
''
;
foreach
(
$lines
as
$line
) {
$contents_segmented
.=
$this
->
_segmentLine(
rtrim
(
$line
))
.
"
\n
"
;
}
do
{
$contents_segmented
=
str_replace
(
'
'
,
'
'
,
$contents_segmented
);
}
while
(
strpos
(
$contents_segmented
,
'
'
)
!==
FALSE
);
return
$contents_segmented
;
}
function
_segmentLine(
$str
) {
$str_final
=
''
;
$str_array
=
array
();
$str_length
=
strlen
(
$str
);
if
(
$str_length
>
0
) {
if
(
ord
(
$str
{
$str_length
-
1
})
>=
129
) {
$str
.=
'
'
;
}
}
for
(
$i
=
0
;
$i
<
$str_length
;
$i
++
) {
if
(
ord
(
$str
{
$i
})
>=
129
) {
$str_array
[]
=
$str
{
$i
}
.
$str
{
$i
+
1
};
$i
++
;
}
else
{
$str_tmp
=
$str
{
$i
};
for
(
$j
=
$i
+
1
;
$j
<
$str_length
;
$j
++
) {
if
(
ord
(
$str
{
$j
})
<
129
) {
$str_tmp
.=
$str
{
$j
};
}
else
{
break
;
}
}
$str_array
[]
=
array
(
$str_tmp
);
$i
=
$j
-
1
;
}
}
$pos
=
count
(
$str_array
);
while
(
$pos
>
0
) {
$char
=
$str_array
[
$pos
-
1
];
if
(
is_array
(
$char
)) {
$str_final_tmp
=
$char
[
0
];
if
(
$this
->
options[
'
segment_english
'
]) {
$str_final_tmp
=
preg_replace
(
"
/([\!\"\#\$\%\&\'\(\)\*\+\,\-\.\/\:\;\<\=\>\?\@\[\\\\\]\^\_\`\{\|\}\~\t\f]+)/
"
,
"
$1
"
,
$str_final_tmp
);
$str_final_tmp
=
preg_replace
(
"
/([\!\"\#\$\%\&\'\(\)\*\+\,\-\.\/\:\;\<\=\>\?\@\[\\\\\]\^\_\`\{\|\}\~\t\f])([\!\"\#\$\%\&\'\(\)\*\+\,\-\.\/\:\;\<\=\>\?\@\[\\\\\]\^\_\`\{\|\}\~\t\f])/
"
,
"
$1 $2
"
,
$str_final_tmp
);
}
if
(
$this
->
options[
'
lowercase
'
]) {
$str_final_tmp
=
strtolower
(
$str_final_tmp
);
}
$str_final
=
"
$str_final_tmp$str_final
"
;
$pos
--
;
}
else
{
$word_found
=
0
;
$word_array
=
array
(
0
=>
''
);
if
(
$pos
<
4
) {
$word_temp
=
$pos
+
1
;
}
else
{
$word_temp
=
5
;
}
for
(
$i
=
1
;
$i
<
$word_temp
;
$i
++
) {
$word_array
[
$i
]
=
$str_array
[
$pos
-
$i
]
.
$word_array
[
$i
-
1
];
}
for
(
$i
=
(
$word_temp
-
1
);
$i
>
1
;
$i
--
) {
if
(
array_key_exists
(
$word_array
[
$i
]
,
$this
->
dict_words)) {
$word_found
=
$i
;
break
;
}
}
if
(
$word_found
) {
$str_final
=
"
$word_array[$word_found]$str_final
"
;
$pos
=
$pos
-
$word_found
;
}
else
{
$str_final
=
"
$char$str_final
"
;
$pos
--
;
}
}
}
return
$str_final
;
}
}
?>
【点击数:】【
发表评论
】【
加入收藏
】【
告诉好友
】【
打印此文
】【
关闭窗口
】
相
关文章
您的姓名:
评分等级:
1分
2分
3分
4分
5分
评论内容:
1、严禁发表危害国家安全、政治、黄色淫秽等内容的评论。
2、用户需对自己在使用金石网服务过程中的行为承担法律责任。
3、本站管理员有权保留或删除评论内容。
4、评论内容只代表网友个人观点,与本网站立场无关。
PHP的数据库增删改查源代码
PHP中引用&的使用注意事项
草根的进化 PHP语言发展简史
PHP快速入门教程之for循环!
PHPer为什么被认为是草根?
自己总结的PHP知识
安装JDK 就可同时运行PHP和Java?
使用PHP配置并连接access数据库
实例应用:使用PHP来进行加密与解密
PHP对文本数据库的基本操作方法
网
友评论
|
设为首页
|
加入收藏
|
联系我们
|
版权申明
|
友情链接
|
站点地图
|
网站帮助
|
网站留言
|
广告服务
|
Copyright © 2001-2008
K
ings
N
et.biz All Rights Reserved.
闽ICP备05026663号