dict_find3.php 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295
  1. <?php
  2. //查询参考字典
  3. require_once 'casesuf.inc';
  4. require_once "../path.php";
  5. require_once "./_pdo.php";
  6. $op=$_GET["op"];
  7. $word=mb_strtolower($_GET["word"],'UTF-8');
  8. $org_word=$word;
  9. $count_return=0;
  10. $dict_list=array();
  11. global $PDO;
  12. PDO_Connect(_FILE_DB_REF_);
  13. function isExsit($word){
  14. global $PDO;
  15. $query = "SELECT count(*) as co from dict where \"word\" = ?";
  16. $row=PDO_FetchOne($query,array($word));
  17. if($row[0]==0){
  18. return false;
  19. }
  20. else{
  21. return true;
  22. }
  23. }
  24. function myfunction($v1,$v2)
  25. {
  26. return $v1 . "+" . $v2;
  27. }
  28. function mySplit($strWord){
  29. //echo("<br>".$strWord."<br>");
  30. $doubleword="kkggccjjṭṭḍḍttddppbb";
  31. $len=mb_strlen($strWord,"UTF-8");
  32. if($len>5){
  33. for($i=$len-1;$i>3;$i--){
  34. $str1=mb_substr($strWord,0,$i,"UTF-8");
  35. $str2=mb_substr($strWord,$i,NULL,"UTF-8");
  36. //echo "$str1 + $str2 = ";
  37. if(isExsit($str1)){
  38. //echo "match";
  39. $left2=mb_substr($str2,0,2,"UTF-8");
  40. if(mb_strpos($doubleword,$left2,0,"UTF-8")!==FALSE){
  41. $str2=mb_substr($str2,1,NULL,"UTF-8");
  42. }
  43. return array($str1,$str2);
  44. }
  45. else{
  46. $str1=$str1."a";
  47. if(isExsit($str1)){
  48. //echo "match";
  49. $left2=mb_substr($str2,0,2,"UTF-8");
  50. if(mb_strpos($doubleword,$left2,0,"UTF-8")!==FALSE){
  51. $str2=mb_substr($str2,1,NULL,"UTF-8");
  52. }
  53. return array($str1,$str2);
  54. }
  55. }
  56. }
  57. //not found
  58. if(mb_substr($strWord,0,1,"UTF-8")=="ā"){
  59. $strWord='a'.mb_substr($strWord,1,NULL,"UTF-8");
  60. for($i=$len-1;$i>3;$i--){
  61. $str1=mb_substr($strWord,0,$i,"UTF-8");
  62. $str2=mb_substr($strWord,$i,NULL,"UTF-8");
  63. //echo "$str1 + $str2 = ";
  64. if(isExsit($str1)){
  65. //echo "match";
  66. $left2=mb_substr($str2,0,2,"UTF-8");
  67. if(mb_strpos($doubleword,$left2,0,"UTF-8")!==FALSE){
  68. $str2=mb_substr($str2,1,NULL,"UTF-8");
  69. }
  70. return array($str1,$str2);
  71. }
  72. else{
  73. $str1=$str1."a";
  74. if(isExsit($str1)){
  75. //echo "match";
  76. $left2=mb_substr($str2,0,2,"UTF-8");
  77. if(mb_strpos($doubleword,$left2,0,"UTF-8")!==FALSE){
  78. $str2=mb_substr($str2,1,NULL,"UTF-8");
  79. }
  80. return array($str1,$str2);
  81. }
  82. }
  83. }
  84. }
  85. //not found
  86. if(mb_substr($strWord,0,1,"UTF-8")=="e"){
  87. $strWord='i'.mb_substr($strWord,1,NULL,"UTF-8");
  88. for($i=$len-1;$i>3;$i--){
  89. $str1=mb_substr($strWord,0,$i,"UTF-8");
  90. $str2=mb_substr($strWord,$i,NULL,"UTF-8");
  91. //echo "$str1 + $str2 = ";
  92. if(isExsit($str1)){
  93. //echo "match";
  94. $left2=mb_substr($str2,0,2,"UTF-8");
  95. if(mb_strpos($doubleword,$left2,0,"UTF-8")!==FALSE){
  96. $str2=mb_substr($str2,1,NULL,"UTF-8");
  97. }
  98. return array($str1,$str2);
  99. }
  100. else{
  101. $str1=$str1."a";
  102. if(isExsit($str1)){
  103. //echo "match";
  104. $left2=mb_substr($str2,0,2,"UTF-8");
  105. if(mb_strpos($doubleword,$left2,0,"UTF-8")!==FALSE){
  106. $str2=mb_substr($str2,1,NULL,"UTF-8");
  107. }
  108. return array($str1,$str2);
  109. }
  110. }
  111. }
  112. }
  113. }
  114. return(FALSE);
  115. }
  116. switch($op){
  117. case "pre"://预查询
  118. echo "<wordlist>";
  119. $query = "SELECT word,count(*) as co from dict where \"eword\" like ? OR \"word\" like ? group by word order by length limit 0,100";
  120. $Fetch = PDO_FetchAll($query,array($word.'%',$word.'%'));
  121. $iFetch=count($Fetch);
  122. if($iFetch>0){
  123. for($i=0;$i<$iFetch;$i++){
  124. $outXml = "<word>";
  125. $word=$Fetch[$i]["word"];
  126. $outXml = $outXml."<pali>$word</pali>";
  127. $outXml = $outXml."<count>".$Fetch[$i]["co"]."</count>";
  128. $outXml = $outXml."</word>";
  129. echo $outXml;
  130. }
  131. }
  132. echo "</wordlist>";
  133. break;
  134. case "search":
  135. //直接查询
  136. $query = "SELECT dict.dict_id,dict.mean,info.shortname from dict LEFT JOIN info ON dict.dict_id = info.id where \"word\" = ? limit 0,30";
  137. $Fetch = PDO_FetchAll($query,array($word));
  138. $iFetch=count($Fetch);
  139. $count_return+=$iFetch;
  140. if($iFetch>0){
  141. for($i=0;$i<$iFetch;$i++){
  142. $mean=$Fetch[$i]["mean"];
  143. $dictid=$Fetch[$i]["dict_id"];
  144. $dict_list[$dictid]=$Fetch[$i]["shortname"];
  145. $outXml = "<div class='dict_word'>";
  146. $outXml = $outXml."<a name='ref_dict_$dictid'></a>";
  147. $outXml = $outXml."<div class='dict'>".$Fetch[$i]["shortname"]."</div>";
  148. $outXml = $outXml."<div class='mean'>".$mean."</div>";
  149. $outXml = $outXml."</div>";
  150. echo $outXml;
  151. }
  152. }
  153. //去除尾查
  154. $newWord=array();
  155. for ($row = 0; $row < count($case); $row++) {
  156. $len=mb_strlen($case[$row][1],"UTF-8");
  157. $end=mb_substr($word, 0-$len,NULL,"UTF-8");
  158. if($end==$case[$row][1]){
  159. $base=mb_substr($word, 0,mb_strlen($word,"UTF-8")-$len,"UTF-8").$case[$row][0];
  160. if($base!=$word){
  161. if(isset($newWord[$base])){
  162. $newWord[$base] .= "<br />".$case[$row][2];
  163. }
  164. else{
  165. $newWord[$base] = $case[$row][2];
  166. }
  167. }
  168. }
  169. }
  170. if(count($newWord)>0){
  171. foreach($newWord as $x=>$x_value) {
  172. $query = "SELECT dict.dict_id,dict.mean,info.shortname from dict LEFT JOIN info ON dict.dict_id = info.id where \"word\" = ? limit 0,30";
  173. $Fetch = PDO_FetchAll($query,array($x));
  174. $iFetch=count($Fetch);
  175. $count_return+=$iFetch;
  176. if($iFetch>0){
  177. echo $x . ":<br />$x_value<br>";
  178. for($i=0;$i<$iFetch;$i++){
  179. $mean=$Fetch[$i]["mean"];
  180. $dictid=$Fetch[$i]["dict_id"];
  181. $dict_list[$dictid]=$Fetch[$i]["shortname"];
  182. $outXml = "<div class='dict_word'>";
  183. $outXml = $outXml."<a name='ref_dict_$dictid'></a>";
  184. $outXml = $outXml."<div class='dict'>".$Fetch[$i]["shortname"]."</div>";
  185. $outXml = $outXml."<div class='mean'>".$mean."</div>";
  186. $outXml = $outXml."</div>";
  187. echo $outXml;
  188. }
  189. }
  190. }
  191. }
  192. //去除尾查结束
  193. //模糊查
  194. //模糊查结束
  195. //查连读词
  196. if($count_return<2){
  197. echo "Junction:<br />";
  198. $newWord=array();
  199. for ($row = 0; $row < count($un); $row++) {
  200. $len=mb_strlen($un[$row][1],"UTF-8");
  201. $end=mb_substr($word, 0-$len,NULL,"UTF-8");
  202. if($end==$un[$row][1]){
  203. $base=mb_substr($word, 0,mb_strlen($word,"UTF-8")-$len,"UTF-8").$un[$row][0];
  204. $arr_un=explode("+",$base);
  205. foreach ($arr_un as $oneword)
  206. {
  207. echo "<a onclick='dict_pre_word_click(\"$oneword\")'>$oneword</a> + ";
  208. }
  209. echo "<br />";
  210. }
  211. }
  212. }
  213. //查内容
  214. if($count_return<2){
  215. $word1=$org_word;
  216. $wordInMean="%$org_word%";
  217. echo "include $org_word:<br />";
  218. $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 ? limit 0,30";
  219. $Fetch = PDO_FetchAll($query,array($wordInMean));
  220. $iFetch=count($Fetch);
  221. $count_return+=$iFetch;
  222. if($iFetch>0){
  223. for($i=0;$i<$iFetch;$i++){
  224. $mean=$Fetch[$i]["mean"];
  225. $pos=mb_stripos($mean,$word,0,"UTF-8");
  226. if($pos){
  227. if($pos>20){
  228. $start=$pos-20;
  229. }
  230. else{
  231. $start=0;
  232. }
  233. $newmean=mb_substr($mean,$start,100,"UTF-8");
  234. }
  235. else{
  236. $newmean=$mean;
  237. }
  238. $pos=mb_stripos($newmean,$word1,0,"UTF-8");
  239. $head=mb_substr($newmean,0,$pos,"UTF-8");
  240. $mid=mb_substr($newmean,$pos,mb_strlen($word1,"UTF-8"),"UTF-8");
  241. $end=mb_substr($newmean,$pos+mb_strlen($word1,"UTF-8"),NULL,"UTF-8");
  242. $heigh_light_mean="$head<hl>$mid</hl>$end";
  243. $outXml = "<div class='dict_word'>";
  244. $outXml = $outXml."<div class='word'>".$Fetch[$i]["word"]."</div>";
  245. $outXml = $outXml."<div class='dict'>".$Fetch[$i]["shortname"]."</div>";
  246. $outXml = $outXml."<div class='mean'>".$heigh_light_mean."</div>";
  247. $outXml = $outXml."</div>";
  248. echo $outXml;
  249. }
  250. }
  251. }
  252. //拆复合词
  253. $splitWord=$word;
  254. $part=array();
  255. if($count_return<2){
  256. echo "Try to split comp:<br>";
  257. while(($split=mySplit($splitWord))!==FALSE){
  258. array_push($part,$split[0]);
  259. $splitWord=$split[1];
  260. }
  261. if(count($part)>0){
  262. array_push($part,$splitWord);
  263. $newPart=ltrim(array_reduce($part,"myfunction"),"+");
  264. echo $newPart;
  265. }
  266. }
  267. echo "<div id='dictlist'>";
  268. foreach($dict_list as $x=>$x_value) {
  269. echo "<a href='#ref_dict_$x'>$x_value</a>";
  270. }
  271. echo "</div>";
  272. break;
  273. }
  274. ?>