dict_find3.php 7.9 KB

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