(3)读取词库
来源:互联网 发布:设置数据标签格式 编辑:程序博客网 时间:2024/05/17 02:46
这个类的主要作用是解析出单词和对应的翻译,划分单词分类的不包含在这个类里
<?phpclass Oxford{private $OfileName=null;private $ODicString='';private $ODicUnit=array();private $ODicWord=array();private $ODicTrans=array();private $ODicEncoding=null;public function __construct($fname){$encode=mb_detect_encoding($fname, array('GB2312','GBK','UTF-8','BIG5','LATIN1'));$this->OfileName=mb_convert_encoding(trim($fname), 'GB2312', $encode);$temp=file_get_contents($this->OfileName, false, null, 0, 64);$this->ODicEncoding=mb_detect_encoding($temp, array('GB2312','GBK','UTF-8','BIG5','LATIN1'));}//读取文件并保存到$OfileName中protected function readDicFromFile(){if(!file_exists($this->OfileName)){die('文件不存在'.__LINE__);}if(!is_readable($this->OfileName)){die('文件不可读'.__LINE__);}$fp=fopen($this->OfileName, 'r') or die('打开文件失败'.__LINE__);while(!feof($fp)){$this->ODicString .= fread($fp, 10240);}fclose($fp);if(strtoupper($this->ODicEncoding)!='UTF-8'){$this->ODicString=mb_convert_encoding($this->ODicString, 'UTF-8', $this->ODicEncoding);}}//根据音标进行分割并保存到ODicUnit单元中,保存为数组protected function splitWithVoice($pattern='#(?<=\r\n)/[^/]+?/(?=\s)#ui'){$this->ODicUnit=preg_split($pattern, $this->ODicString);}//从第二个到倒数第二个单元里面,保存的都是上一个单词的翻译,和下一个单词//根据音标分割成单元后,第一个单元里保存的是第一个单词,最后一个单元里则保存的是最后一个翻译//并且单词是结尾,单词和上一个单词的翻译之间肯定是存在回车换行符的,根据这个特征,提取出单词//所以依次从第二个单元到倒数第二个单元里,根据特征提取出单词。protected function grepWord(){//提取首单词$this->ODicWord[]=trim(strtolower($this->ODicUnit[0]));$pat='#\r\n(.*)(?:\r\n)$#i'; //提取单词$len=count($this->ODicUnit);for($i=1; $i<$len-1; $i++){if(preg_match($pat, $this->ODicUnit[$i], $match)){$this->ODicWord[]=trim(strtolower($match[1]));}else{die('匹配单词失败'.__LINE__."<br />");}}}//从第二个到倒数第二个单元里面,保存的都是上一个单词的翻译,和下一个单词//根据音标分割成单元后,第一个单元里保存的是第一个单词,最后一个单元里则保存的是最后一个翻译//在每个单元中反向搜索单词第一次出现的位置,根据这个位置可以提取出上一个单词的翻译protected function grepTrans(){$len=count($this->ODicUnit);for($i=1; $i<$len-1; $i++){if($pos=strripos($this->ODicUnit[$i], $this->ODicWord[$i])){array_push($this->ODicTrans,substr($this->ODicUnit[$i], 0, $pos));}else{die("此方法不可行".__LINE__."<br />");}}array_push($this->ODicTrans,$this->ODicUnit[$len-1]);}public function oxf(){$this->readDicFromFile();$this->splitWithVoice();$this->grepWord();$this->grepTrans();$len=count($this->ODicWord);$oxfWord=array();for($i=0; $i<$len; $i++){$oxfWord[$this->ODicWord[$i]] = $this->ODicTrans[$i];//echo $this->ODicWord[$i]."<br />";}return $oxfWord;//return $this->ODicUnit;}}//class Oxford/* $oxf=new Oxford(' E:/CodeEdit/php/ciba/TXT格式的牛津电子词典/牛津电子词典/A/A-c.txt ');$res=$oxf->oxf();echo count($res)."<br /><br />"; echo "<pre>";print_r($res); */
0 0
- (3)读取词库
- (2)读取词库
- 金山词霸的词库读取程序
- 读取金山词霸的词库程序
- 金山词霸的词库读取程序(补充)
- (1)词库介绍
- Java读取星际译王(StarDict)词库[88250原创]
- 电商搜索同义词库(synonyms)
- 电商搜索中断词库(stopwords)
- java之英语单词库(一)
- 【转】libscws(简体中文分词库)
- QQ拼音输入法词库和搜狗输入法词库[相互导入](使用Excel公式)
- 搜狗词库爬虫(1):基础爬虫架构和爬取词库分类
- 针对盘古dll重写词库读取 及新词增删改查方法
- 解决NLPIR-ICTCLAS2014分词系统词库过大,造成读取缓慢问题
- 如何创建词库?请教各位大侠:)急!
- asp 分词搜索(带爬虫的),分词词库。
- 搜狗词库转为txt格式(小小输入法)
- 安装redis入门学习
- C语言的规范书写..【Pnoter】
- (2)读取词库
- ym—— Android 5.0学习之动画
- 学习笔记(6)-----用户管理系统v1.0
- (3)读取词库
- Windows Server 2008 相关下载
- 用Swift实现一款天气预报APP(二)
- UVa 571 - Jugs
- 【HDU 1081】To The Max(求子矩阵元素和)
- 【转】Sublime Text 3 安装Package Control
- (4)存储单词和翻译
- 信息安全:OpenSSL之RC4加密简单示例
- Xcode6为什么干掉pch(Precompile Prefix Header)&如何添加pch文件