| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419 |
- <?php
- require_once "../path.php";
- require_once "../public/_pdo.php";
- require_once "../public/function.php";
- require_once '../ucenter/setting_function.php';
- $user_setting = get_setting();
- if(isset($_GET["book"])){
- $in_book=$_GET["book"];
- }
- if(isset($_GET["para"])){
- $in_para=$_GET["para"];
- }
- $para_list=str_getcsv($in_para);
- $strQueryPara="(";//单词查询字串
- foreach($para_list as $para){
- $strQueryPara.="'{$para}',";
- }
- $strQueryPara=mb_substr($strQueryPara, 0,mb_strlen($strQueryPara,"UTF-8")-1,"UTF-8");
- $strQueryPara.=")";
- if(isset($_GET["debug"])){
- $debug=true;;
- }
- else{
- $debug=false;
- }
- function microtime_float()
- {
- list($usec, $sec) = explode(" ", microtime());
- return ((float)$usec + (float)$sec);
- }
- $time_start = microtime_float();
- //open database
- global $PDO;
- //查询单词表
- $db_file = _DIR_PALICANON_TEMPLET_."/p".$in_book."_tpl.db3";
-
- PDO_Connect("sqlite:$db_file");
- $query="SELECT paragraph,wid,real FROM \"main\" WHERE (\"paragraph\" in ".$strQueryPara." ) and \"real\"<>\"\" and \"type\"<>'.ctl.' ";
- if($debug){
- echo "filename:".$db_file."<br>";
- echo $query."<br>";
- }
- $FetchAllWord = PDO_FetchAll($query);
- $iFetch=count($FetchAllWord);
- if($iFetch==0){
- echo json_encode(array(), JSON_UNESCAPED_UNICODE);
- exit;
- }
- $voc_list=array();
- foreach($FetchAllWord as $word){
- $voc_list[$word["real"]]=1;
- }
- if($debug){
- echo "单词表共计:".count($voc_list)."词<br>";
- }
- //查询单词表结束
- $word_list=array();
- foreach($voc_list as $word=>$value){
- array_push($word_list,$word);
- }
- $lookup_loop=2;
- $dict_word_spell=array();
- $output=array();
- $db_file_list=array();
- //用户词典
- array_push($db_file_list , array(_FILE_DB_WBW_," ORDER BY rowid DESC"));
- array_push($db_file_list , array(_DIR_DICT_SYSTEM_."/sys_regular.db"," ORDER BY confidence DESC"));
- array_push($db_file_list , array(_DIR_DICT_SYSTEM_."/sys_irregular.db",""));
- array_push($db_file_list , array(_DIR_DICT_SYSTEM_."/union.db",""));
- array_push($db_file_list , array(_DIR_DICT_SYSTEM_."/comp.db",""));
- array_push($db_file_list , array(_DIR_DICT_3RD_."/pm.db",""));
- array_push($db_file_list , array(_DIR_DICT_3RD_."/bhmf.db",""));
- array_push($db_file_list , array(_DIR_DICT_3RD_."/shuihan.db",""));
- array_push($db_file_list , array(_DIR_DICT_3RD_."/concise.db",""));
- array_push($db_file_list , array(_DIR_DICT_3RD_."/uhan_en.db",""));
- for($i=0;$i<$lookup_loop;$i++)
- {
- $parent_list=array();
- $strQueryWord="(";//单词查询字串
- foreach($word_list as $word){
- $word=str_replace("'","’",$word);
- $strQueryWord.="'{$word}',";
- }
- $strQueryWord=mb_substr($strQueryWord, 0,mb_strlen($strQueryWord,"UTF-8")-1,"UTF-8");
- $strQueryWord.=")";
- if($debug){
- echo "<h2>第{$i}轮查询:$strQueryWord</h2>";
- }
- foreach($db_file_list as $db){
- $db_file=$db[0];
- $db_sort=$db[1];
- if($debug){
- echo "dict:$db_file<br>";
- }
- PDO_Connect("sqlite:{$db_file}");
- PDO_Execute("PRAGMA synchronous = OFF");
- PDO_Execute("PRAGMA journal_mode = WAL");
- PDO_Execute("PRAGMA foreign_keys = ON");
- PDO_Execute("PRAGMA busy_timeout = 5000");
- $strOrderby=$db[1];
-
- if($i==0){
- $query = "select * from dict where \"pali\" in {$strQueryWord} AND ( type <> '.n:base.' AND type <> '.ti:base.' AND type <> '.adj:base.' AND type <> '.pron:base.' AND type <> '.v:base.' AND type <> '.part.' ) ".$strOrderby;
- }
- else{
- $query = "select * from dict where \"pali\" in {$strQueryWord} ".$strOrderby;
- }
- if($debug){
- echo $query."<br>";
- }
- try {
- $Fetch = PDO_FetchAll($query);
- } catch (Exception $e) {
- if($debug){
- echo 'Caught exception: ', $e->getMessage(), "\n";
- }
- continue;
- }
-
- $iFetch=count($Fetch);
- if($debug){
- echo "count:{$iFetch}<br>";
- }
- if($iFetch>0){
- foreach($Fetch as $one){
- $id = $one["id"];
- if(isset($one["guid"])){
- $guid = $one["guid"];
- }
- else{
- $guid = "";
- }
- $pali = $one["pali"];
- $dict_word_spell["{$pali}"]=1;
- $type = $one["type"];
- $gramma = $one["gramma"];
- $parent = $one["parent"];
- if(inLangSetting($one["lang"],$user_setting["dict.lang"])){
- $mean = $one["mean"];
- }
- else{
- $mean = "";
- }
-
- if(isset($one["note"])){
- $note = $one["note"];
- }
- else{
- $note = "";
- }
-
- if(isset($one["parts"])){
- $parts = $one["parts"];
- }
- else if(isset($one["factors"])){
- $parts = $one["factors"];
- }
- else{
- $parts = "";
- }
-
- if(isset($one["partmean"])){
- $partmean = $one["partmean"];
- }
- else if(isset($one["factormean"])){
- $partmean = $one["factormean"];
- }
- else{
- $partmean = "";
- }
- if(inLangSetting($one["lang"],$user_setting["dict.lang"])==false){
- $partmean = "";
- }
- if(isset($one["part_id"])){
- $part_id = $one["part_id"];
- }
- else{
- $part_id = "";
- }
- if(isset($one["status"])){
- $status = $one["status"];
- }
- else{
- $status = "";
- }
- if(isset($one["dict_name"])){
- $dict_name = $one["dict_name"];
- }
- else{
- $dict_name = "";
- }
- if(isset($one["language"])){
- $language = $one["language"];
- }
- else{
- $language = "en";
- }
-
- array_push($output,array(
- "id"=>$id,
- "guid"=>$guid,
- "pali"=>$pali,
- "type"=>$type,
- "gramma"=>$gramma,
- "parent"=>$parent,
- "mean"=>$mean,
- "note"=>$note,
- "parts"=>$parts,
- "part_id"=>$part_id,
- "partmean"=>$partmean,
- "status"=>$status,
- "dict_name"=>$dict_name,
- "language"=>$language
- ));
- if(!empty($parent)){
- if($pali != $parent){
- $parent_list[$one["parent"]]=1;
- }
- }
- if($type!="part"){
- if(isset($one["factors"])){
- $parts=str_getcsv($one["factors"],'+');
- foreach($parts as $x){
- if(!empty($x)){
- if($x != $pali){
- $parent_list[$x]=1;
- }
- }
- }
- }
- }
- }
- }
- $PDO = null;
- }
- /*
- if($i==0){
- //自动查找单词词干
- $word_base=getPaliWordBase($in_word);
- foreach($word_base as $x=>$infolist){
- foreach($infolist as $gramma){
- array_push($output,
- array("pali"=>$in_word,
- "type"=>$gramma["type"],
- "gramma"=>$gramma["gramma"],
- "mean"=>"",
- "parent"=>$x,
- "parts"=>$gramma["parts"],
- "partmean"=>"",
- "language"=>"en",
- "dict_name"=>"auto",
- "status"=>128
- ));
- $part_list=str_getcsv($gramma["parts"],"+");
- foreach($part_list as $part){
- $parent_list[$part]=1;
- }
- }
- }
- }
- */
-
- if($debug){
- echo "parent:".count($parent_list)."<br>";
- //print_r($parent_list)."<br>";
- }
- if(count($parent_list)==0){
- break;
- }
- else{
- $word_list=array();
- foreach($parent_list as $x=>$value){
- array_push($word_list,$x);
- }
- }
-
- }
- //查询结束
- //删除无效数据
- $newOutput = array();
- foreach($output as $value){
-
- if($value["dict_name"]=="auto"){
- if(isset($dict_word_spell["{$value["parent"]}"])){
- array_push($newOutput,$value);
- }
- }
-
- else
- {
- array_push($newOutput,$value);
- }
- }
- if($debug){
- echo "<textarea width=\"100%\" >";
- echo json_encode($newOutput, JSON_UNESCAPED_UNICODE);
- echo "</textarea>";
- }
- if($debug){
- echo "生成:".count($output)."<br>";
- echo "有效:".count($newOutput)."<br>";
-
- }
- //开始匹配
- $counter=0;
- $output=array();
- foreach($FetchAllWord as $word){
- $pali=$word["real"];
- $type="";
- $gramma="";
- $mean="";
- $parent="";
- $parts="";
- $partmean="";
- foreach($newOutput as $dictword){
- if($dictword["pali"]==$pali){
- if($type=="" && $gramma==""){
- $type=$dictword["type"];
- $gramma=$dictword["gramma"];
- }
- if(trim($mean)=="" ){
- $mean=str_getcsv($dictword["mean"],"$")[0];
-
- }
- if($parent=="" ){
- $parent=$dictword["parent"];
- }
- if($parts=="" ){
- $parts=$dictword["parts"];
- }
- if($partmean==""){
- $partmean=$dictword["partmean"];
- }
- }
- }
- if($mean=="" && $parent!=""){
- foreach($newOutput as $parentword){
- if($parentword["pali"]==$parent){
- if($parentword["mean"]!=""){
- $mean=trim(str_getcsv($parentword["mean"],"$")[0]);
- if($mean!=""){
- break;
- }
- }
- }
- }
- }
- if( $type!="" ||
- $gramma!="" ||
- $mean!="" ||
- $parent!="" ||
- $parts!="" ||
- $partmean!=""){
- $counter++;
- }
- array_push($output,
- array("book"=>$in_book,
- "paragraph"=>$word["paragraph"],
- "num"=>$word["wid"],
- "pali"=>$word["real"],
- "type"=>$type,
- "gramma"=>$gramma,
- "mean"=>$mean,
- "parent"=>$parent,
- "parts"=>$parts,
- "partmean"=>$partmean,
- "status"=>3
- ));
- }
- if($debug){
- echo "<textarea width=\"100%\" >";
- }
- echo json_encode($output, JSON_UNESCAPED_UNICODE);
- if($debug){
- echo "</textarea>";
- }
- if($debug){
- echo "匹配".(($counter/count($FetchAllWord))*100)."<br>";
- foreach($output as $result){
- //echo "{$result["pali"]}-{$result["mean"]}-{$result["parent"]}<br>";
- }
- $queryTime=(microtime_float()-$time_start)*1000;
- echo "<div >搜索时间:$queryTime 毫秒</div>";
- }
- ?>
|