\"\" and \"type\"<>'.ctl.' ";
if($debug){
echo "filename:".$db_file."
";
echo $query."
";
}
$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)."词
";
}
//查询单词表结束
$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 "
第{$i}轮查询:$strQueryWord
";
}
foreach($db_file_list as $db){
$db_file=$db[0];
$db_sort=$db[1];
if($debug){
echo "dict:$db_file
";
}
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."
";
}
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}
";
}
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"];
$mean = $one["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(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)."
";
//print_r($parent_list)."
";
}
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 "";
}
if($debug){
echo "生成:".count($output)."
";
echo "有效:".count($newOutput)."
";
}
//开始匹配
$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 "";
}
if($debug){
echo "匹配".(($counter/count($FetchAllWord))*100)."
";
foreach($output as $result){
//echo "{$result["pali"]}-{$result["mean"]}-{$result["parent"]}
";
}
$queryTime=(microtime_float()-$time_start)*1000;
echo "搜索时间:$queryTime 毫秒
";
}
?>