仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1067|回复: 19
打印 上一主题 下一主题

[学习教程] PHP网站制作之一个用php写的中文分词类

[复制链接]
逍遥一派 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-2-4 00:09:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
学会了生成静态网页,现在你应该接触一下XML了,恩,XML也了解了,那么AJAX你也得接触接触吧?AJAX完了....然后...中文   一个用php写的中文分词类

<?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;
    }
}
?>

来历参考:
http://www.phpchina.cn/code/2006/0607/381.html
http://www.xuchao.cn/?play=reply&id=851

没有人会喜欢和见异思迁的人交朋友,因为这种人太不安分,太不可靠,因此,你必须要强迫自己完成自己的目标,哪怕可能会很难受,也得坚持,毅力就是这么锻炼出来的。
愤怒的大鸟 该用户已被删除
沙发
发表于 2015-2-4 09:39:41 | 只看该作者
个人呢觉得,配wamp 最容易漏的一步就是忘了把$PHP$目录下的libmysql.dll拷贝到windows系统目录的system32目录下,还有重启apache。
第二个灵魂 该用户已被删除
板凳
发表于 2015-2-9 02:09:28 | 只看该作者
最后祝愿,php会给你带来快乐的同时 你也会给他带来快乐。
地板
发表于 2015-2-12 08:49:15 | 只看该作者
基础有没有对学习php没有太大区别,关键是兴趣。
柔情似水 该用户已被删除
5#
发表于 2015-2-24 05:29:50 | 只看该作者
说php的话,首先得提一下数组,开始的时候我是最烦数组的,总是被弄的晕头转向,不过后来呢,我觉得数组里php里最强大的存储方法,所以建议新手们要学好数组。
飘灵儿 该用户已被删除
6#
发表于 2015-3-7 11:02:56 | 只看该作者
多看优秀程序员编写的代码,仔细理解他们解决问题的方法,对自身有很大的帮助。
谁可相欹 该用户已被删除
7#
发表于 2015-3-8 00:17:25 | 只看该作者
建数据库表的时候,int型要输入长度的,其实是个摆设的输入几位都没影响的,只要大于4就行,囧。
逍遥一派 该用户已被删除
8#
 楼主| 发表于 2015-3-8 21:10:12 | 只看该作者
要进行开发,搭建环境是首先需要做的事,windows下面我习惯把环境那个安装在C盘下面,因为我配的环境经常出现诡异事件,什么事都没做环境有的时候就不能用啦。
冷月葬花魂 该用户已被删除
9#
发表于 2015-3-16 13:49:57 | 只看该作者
实践是检验自己会不会的真理。
山那边是海 该用户已被删除
10#
发表于 2015-3-17 09:39:42 | 只看该作者
使用 jquery 等js框架的时候,要随时注意浏览器的更新情况,不然很容易发生框架不能使用。
莫相离 该用户已被删除
11#
发表于 2015-3-24 05:57:10 | 只看该作者
在我安装pear包的时候老是提示,缺少某某文件,才发现 那群extension 的排列是应该有一点的顺序,而我安装的版本的排序不是正常的排序。没办法我只好把那群冒号加了上去,只留下我需要使用的扩展。
小妖女 该用户已被删除
12#
发表于 2015-3-27 14:18:54 | 只看该作者
首先我是坚决反对新手上来就用框架的,因为对底层的东西一点都不了解,造成知识上的真空,会对以后的发展不利。我的观点上手了解下框架就好,代码还是手写。当然啦如果是位别的编程语言的高手的话,这个就另当别论啦。
若天明 该用户已被删除
13#
发表于 2015-3-28 17:39:07 | 只看该作者
建数据库表的时候,int型要输入长度的,其实是个摆设的输入几位都没影响的,只要大于4就行,囧。
老尸 该用户已被删除
14#
发表于 2015-3-30 15:49:28 | 只看该作者
爱上php,他也会爱上你。
精灵巫婆 该用户已被删除
15#
发表于 2015-3-31 11:35:12 | 只看该作者
你很难利用原理去编写自己的代码。对于php来说,系统的学习我认为还是很重要的,当你有一定理解后,你可你针对某种效果研究,我想那时你不会只是复制代码的水平了。
小魔女 该用户已被删除
16#
发表于 2015-3-31 16:55:59 | 只看该作者
这些中手常用的知识,当你把我说的这些关键字都可以熟练运用的时候,你可以选择自己
飘飘悠悠 该用户已被删除
17#
发表于 2015-4-4 12:27:42 | 只看该作者
再就是混迹于论坛啦,咱们的phpchina的论坛就很强大,提出的问题一般都是有达人去解答的,以前的帖子也要多看看也能学到不少前辈们的经验。别的不错的论坛例如php100,javaeye也是很不错的。
深爱那片海 该用户已被删除
18#
发表于 2015-4-6 09:02:59 | 只看该作者
因为blog这样的可以让你接触更多要学的知识,可以接触用到类,模板,js ,ajax
分手快乐 该用户已被删除
19#
发表于 2015-4-12 03:36:37 | 只看该作者
本人接触php时间不长,算是phper中的小菜鸟一只吧。由于刚开始学的时候没有名师指,碰过不少疙瘩,呗很多小问题卡过很久,白白浪费不少宝贵的时间,在次分享一些子的学习的心得。
蒙在股里 该用户已被删除
20#
发表于 2015-4-14 23:16:30 | 只看该作者
至于模板嘛,各位高人一直以来就是争论不休,我一只小菜鸟就不加入战团啦,咱们新手还是多学点东西的好。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-22 23:27

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表