quote($word);
$row=PDO_FetchOne($query);
if($row[0]==0){
return false;
}
else{
return true;
}
}
/*
*自动拆分复合词
*功能:将一个单词拆分为两个部分
*输入:想要拆的词
*输出:数组,第一个为前半部分,第二个为后半部分,前半部分是在现有字典里搜索到的。
*范例:
while(($split=mySplit($splitWord))!==FALSE){
array_push($part,$split[0]);
$splitWord=$split[1];
}
循环结束后$part里放的就是拆分结果
算法:从最后一个字母开始,一次去掉一个字母,然后在现有字典里搜索剩余的部分(前半部分)
如果搜索到,就返回。第二次,将剩余的部分,也就是后半部分应用相同的算法。
直到单词长度小于5
中间考虑了连音规则:
~a+i~=~i~
在拆分的时候要补上前面的元音
有时后面的词第一个辅音会重复
word+tha~=wordttha~
需要去掉后面的单词的一个辅音
*/
function mySplit($strWord){
$doubleword="kkggccjjṭṭḍḍttddppbb";
$len=mb_strlen($strWord,"UTF-8");
if($len>5){
for($i=$len-1;$i>3;$i--){
$str1=mb_substr($strWord,0,$i,"UTF-8");
$str2=mb_substr($strWord,$i,NULL,"UTF-8");
if(isExsit($str1)){
//如果字典里存在,返回拆分结果
$left2=mb_substr($str2,0,2,"UTF-8");
//如果第二个部分有双辅音,去掉第一个辅音。因为巴利语中没有以双辅音开头的单词。
if(mb_strpos($doubleword,$left2,0,"UTF-8")!==FALSE){
$str2=mb_substr($str2,1,NULL,"UTF-8");
}
return array($str1,$str2);
}
else{
//补上结尾的a再次查找
$str1=$str1."a";
if(isExsit($str1)){
$left2=mb_substr($str2,0,2,"UTF-8");
if(mb_strpos($doubleword,$left2,0,"UTF-8")!==FALSE){
$str2=mb_substr($str2,1,NULL,"UTF-8");
}
return array($str1,$str2);
}
}
}
//如果没找到。将ā变为a后再找。因为两个a复合后会变成ā
if(mb_substr($strWord,0,1,"UTF-8")=="ā"){
$strWord='a'.mb_substr($strWord,1,NULL,"UTF-8");
for($i=$len-1;$i>3;$i--){
$str1=mb_substr($strWord,0,$i,"UTF-8");
$str2=mb_substr($strWord,$i,NULL,"UTF-8");
//echo "$str1 + $str2 = ";
if(isExsit($str1)){
//echo "match";
$left2=mb_substr($str2,0,2,"UTF-8");
if(mb_strpos($doubleword,$left2,0,"UTF-8")!==FALSE){
$str2=mb_substr($str2,1,NULL,"UTF-8");
}
return array($str1,$str2);
}
else{
$str1=$str1."a";
if(isExsit($str1)){
//echo "match";
$left2=mb_substr($str2,0,2,"UTF-8");
if(mb_strpos($doubleword,$left2,0,"UTF-8")!==FALSE){
$str2=mb_substr($str2,1,NULL,"UTF-8");
}
return array($str1,$str2);
}
}
}
}
//如果没找到将开头的e变为i再次查找
if(mb_substr($strWord,0,1,"UTF-8")=="e"){
$strWord='i'.mb_substr($strWord,1,NULL,"UTF-8");
for($i=$len-1;$i>3;$i--){
$str1=mb_substr($strWord,0,$i,"UTF-8");
$str2=mb_substr($strWord,$i,NULL,"UTF-8");
if(isExsit($str1)){
//echo "match";
$left2=mb_substr($str2,0,2,"UTF-8");
if(mb_strpos($doubleword,$left2,0,"UTF-8")!==FALSE){
$str2=mb_substr($str2,1,NULL,"UTF-8");
}
return array($str1,$str2);
}
else{
$str1=$str1."a";
if(isExsit($str1)){
$left2=mb_substr($str2,0,2,"UTF-8");
if(mb_strpos($doubleword,$left2,0,"UTF-8")!==FALSE){
$str2=mb_substr($str2,1,NULL,"UTF-8");
}
return array($str1,$str2);
}
}
}
}
}
return(FALSE);
}
function mySplit2($strWord){
$output = array();
$len=mb_strlen($strWord,"UTF-8");
if($len>2){
for($i=$len-1;$i>1;$i--){
foreach($sandhi as $row){
if(mb_substr($strWord,$i,$row[3],"UTF-8")==$row[2]){
$str1=mb_substr($strWord,0,$i-1,"UTF-8").$row[0];
$str2=$row[1].mb_substr($strWord,$i+$row[2],NULL,"UTF-8");
if(isExsit($str1)){
array_push($output,array($str1,$str2));
}
}
}
}
}
return($output);
}
switch($op){
case "pre"://预查询
$dictFileName=_FILE_DB_REF_INDEX_;
PDO_Connect("sqlite:$dictFileName");
echo "";
$query = "select word,count from dict where \"eword\" like ".$PDO->quote($word.'%')." OR \"word\" like ".$PDO->quote($word.'%')." limit 0,100";
$Fetch = PDO_FetchAll($query);
$iFetch=count($Fetch);
if($iFetch>0){
for($i=0;$i<$iFetch;$i++){
$outXml = "";
$word=$Fetch[$i]["word"];
$outXml = $outXml."$word";
$outXml = $outXml."".$Fetch[$i]["count"]."";
$outXml = $outXml."";
echo $outXml;
}
}
echo "";
break;
case "search":
$dictFileName=_FILE_DB_REF_;
PDO_Connect("sqlite:$dictFileName");
//直接查询
$query = "select dict.dict_id,dict.mean,info.shortname from dict LEFT JOIN info ON dict.dict_id = info.id where \"word\" = ".$PDO->quote($word)." limit 0,30";
$Fetch = PDO_FetchAll($query);
$iFetch=count($Fetch);
$count_return+=$iFetch;
if($iFetch>0){
for($i=0;$i<$iFetch;$i++){
$mean=$Fetch[$i]["mean"];
$mean = str_replace("[[","",$mean);
$mean = str_replace("]]","",$mean);
$dictid=$Fetch[$i]["dict_id"];
$dict_list[$dictid]=$Fetch[$i]["shortname"];
$outXml = "
";
$outXml = $outXml."
";
$outXml = $outXml."
".$Fetch[$i]["shortname"]."
";
$outXml = $outXml."
{$mean}
";
$outXml = $outXml."
";
echo $outXml;
}
}
if(substr($word,0,1)=="_" && substr($word,-1,1)=="_"){
echo "";
foreach($dict_list as $x=>$x_value) {
echo "
$x_value";
}
echo "
";
break;
}
//去除尾查
$newWord=array();
for ($row = 0; $row < count($case); $row++) {
$len=mb_strlen($case[$row][1],"UTF-8");
$end=mb_substr($word, 0-$len,NULL,"UTF-8");
if($end==$case[$row][1]){
$base=mb_substr($word, 0,mb_strlen($word,"UTF-8")-$len,"UTF-8").$case[$row][0];
if($base!=$word){
$gr="".str_replace("$"," ",$case[$row][2])."";
if(isset($newWord[$base])){
$newWord[$base] .= "
".$gr;
}
else{
$newWord[$base] = $gr;
}
}
}
}
if(count($newWord)>0){
foreach($newWord as $x=>$x_value) {
$query = "select dict.dict_id,dict.mean,info.shortname from dict LEFT JOIN info ON dict.dict_id = info.id where \"word\" = ".$PDO->quote($x)." limit 0,30";
$Fetch = PDO_FetchAll($query);
$iFetch=count($Fetch);
$count_return+=$iFetch;
if($iFetch>0){
//语法信息
foreach($_local->grammastr as $gr){
$x_value = str_replace($gr->id,$gr->value,$x_value);
}
echo $x . ":" . $x_value . "
";
for($i=0;$i<$iFetch;$i++){
$mean=$Fetch[$i]["mean"];
$dictid=$Fetch[$i]["dict_id"];
$dict_list[$dictid]=$Fetch[$i]["shortname"];
$outXml = "";
$outXml = $outXml."
";
$outXml = $outXml."
".$Fetch[$i]["shortname"]."
";
$outXml = $outXml."
".$mean."
";
$outXml = $outXml."
";
echo $outXml;
}
}
}
}
//去除尾查结束
//模糊查
//模糊查结束
//查连读词
if($count_return<2){
echo "Junction:
";
$newWord=array();
for ($row = 0; $row < count($un); $row++) {
$len=mb_strlen($un[$row][1],"UTF-8");
$end=mb_substr($word, 0-$len,NULL,"UTF-8");
if($end==$un[$row][1]){
$base=mb_substr($word, 0,mb_strlen($word,"UTF-8")-$len,"UTF-8").$un[$row][0];
$arr_un=explode("+",$base);
foreach ($arr_un as $oneword)
{
echo "$oneword + ";
}
echo "
";
}
}
}
//拆复合词
$splitWord=$word;
$part=array();
if($count_return<2)
{
echo "Try to split comp:
";
while(($split=mySplit($splitWord))!==FALSE){
array_push($part,$split[0]);
$splitWord=$split[1];
}
if(count($part)>0){
array_push($part,$splitWord);
$newPart=ltrim(array_reduce($part,"myfunction"),"+");
echo "{$newPart}
";
}
}
echo "不满意吗?试试强力拆分。";
echo "";
//拆复合词结束
//查内容
if($count_return<4){
$word1=$org_word;
$wordInMean="%$org_word%";
echo "include $org_word:
";
$query = "select dict.dict_id,dict.word,dict.mean,info.shortname from dict LEFT JOIN info ON dict.dict_id = info.id where \"mean\" like ".$PDO->quote($wordInMean)." limit 0,30";
$Fetch = PDO_FetchAll($query);
$iFetch=count($Fetch);
$count_return+=$iFetch;
if($iFetch>0){
for($i=0;$i<$iFetch;$i++){
$mean=$Fetch[$i]["mean"];
$pos=mb_stripos($mean,$word,0,"UTF-8");
if($pos){
if($pos>20){
$start=$pos-20;
}
else{
$start=0;
}
$newmean=mb_substr($mean,$start,100,"UTF-8");
}
else{
$newmean=$mean;
}
$pos=mb_stripos($newmean,$word1,0,"UTF-8");
$head=mb_substr($newmean,0,$pos,"UTF-8");
$mid=mb_substr($newmean,$pos,mb_strlen($word1,"UTF-8"),"UTF-8");
$end=mb_substr($newmean,$pos+mb_strlen($word1,"UTF-8"),NULL,"UTF-8");
$heigh_light_mean="$head$mid$end";
$outXml = "";
$outXml = $outXml."
".$Fetch[$i]["word"]."
";
$outXml = $outXml."
".$Fetch[$i]["shortname"]."
";
$outXml = $outXml."
".$heigh_light_mean."
";
$outXml = $outXml."
";
echo $outXml;
}
}
}
echo "";
foreach($dict_list as $x=>$x_value) {
echo "
$x_value";
}
echo "
";
break;
}
?>