dict_find_one.php 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348
  1. <?php
  2. require_once "../path.php";
  3. require_once "../public/_pdo.php";
  4. require_once "../public/function.php";
  5. require_once '../ucenter/setting_function.php';
  6. if(isset($_GET["book"])){
  7. $in_book=$_GET["book"];
  8. }
  9. if(isset($_GET["paragraph"])){
  10. $in_para=$_GET["paragraph"];
  11. }
  12. if(isset($_GET["sn"])){
  13. $in_sn=$_GET["sn"];
  14. }
  15. if(isset($_GET["type"])){
  16. $type=$_GET["type"];
  17. }
  18. else{
  19. $type="wbw";
  20. }
  21. if(isset($_GET["dict_name"])){
  22. $dict_name=$_GET["dict_name"];
  23. }
  24. else{
  25. $dict_name="";
  26. }
  27. if($type=="part"){
  28. $lookup_loop=3;
  29. }
  30. else{
  31. $lookup_loop=3;
  32. }
  33. if(isset($_GET["deep"])){
  34. $lookup_loop=$_GET["deep"];
  35. }
  36. else{
  37. $lookup_loop=3;
  38. }
  39. $in_word=$_GET["word"];
  40. if(isset($_GET["debug"])){
  41. $debug=true;;
  42. }
  43. else{
  44. $debug=false;
  45. }
  46. if(mb_strlen($in_word)==0){
  47. exit;
  48. }
  49. function microtime_float()
  50. {
  51. list($usec, $sec) = explode(" ", microtime());
  52. return ((float)$usec + (float)$sec);
  53. }
  54. $time_start = microtime_float();
  55. $user_setting = get_setting();
  56. //open database
  57. global $PDO;
  58. $word_list=str_getcsv($in_word);
  59. $dict_word_spell=array();
  60. $output=array();
  61. $db_file_list=array();
  62. //用户词典
  63. if($dict_name==""){
  64. array_push($db_file_list , _FILE_DB_WBW_);
  65. array_push($db_file_list , _DIR_DICT_SYSTEM_."/sys_regular.db");
  66. array_push($db_file_list , _DIR_DICT_SYSTEM_."/sys_irregular.db");
  67. array_push($db_file_list , _DIR_DICT_SYSTEM_."/union.db");
  68. array_push($db_file_list , _DIR_DICT_SYSTEM_."/comp.db");
  69. array_push($db_file_list , _DIR_DICT_3RD_."/pm.db");
  70. array_push($db_file_list , _DIR_DICT_3RD_."/bhmf.db");
  71. array_push($db_file_list , _DIR_DICT_3RD_."/shuihan.db");
  72. array_push($db_file_list , _DIR_DICT_3RD_."/concise.db");
  73. array_push($db_file_list , _DIR_DICT_3RD_."/uhan_en.db");
  74. }
  75. else{
  76. $dict_list=str_getcsv($dict_name,',');
  77. foreach($dict_list as $dict){
  78. array_push($db_file_list , $dict);
  79. }
  80. }
  81. $_dict_db = array();
  82. foreach($db_file_list as $db_file){
  83. try {
  84. $dbh = new PDO("sqlite:".$db_file, "", "");
  85. $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
  86. $_dict_db[] = array("file"=>$db_file,"dbh"=>$dbh);
  87. } catch (PDOException $e) {
  88. if($debug){
  89. print "Error!: " . $e->getMessage() . "<br/>";
  90. }
  91. }
  92. }
  93. for($i=0;$i<$lookup_loop;$i++)
  94. {
  95. $parent_list=array();
  96. $strQueryWord="(";//单词查询字串
  97. foreach($word_list as $word){
  98. $word=str_replace("'","’",$word);
  99. $strQueryWord.="'{$word}',";
  100. }
  101. $strQueryWord=mb_substr($strQueryWord, 0,mb_strlen($strQueryWord,"UTF-8")-1,"UTF-8");
  102. $strQueryWord.=")";
  103. if($debug){
  104. echo "<h2>第".($i+1)."轮查询:".count($word_list)."</h2>";
  105. }
  106. foreach($_dict_db as $db_file){
  107. if($debug){
  108. echo "dict connect:{$db_file["file"]}<br>";
  109. }
  110. //PDO_Connect("sqlite:".$db_file);
  111. if($i==0){
  112. $query = "select * from dict where \"pali\" in $strQueryWord ORDER BY rowid DESC";
  113. }
  114. else{
  115. $query = "select * from dict where \"pali\" in $strQueryWord AND ( type <> '.n.' AND type <> '.ti.' AND type <> '.adj.' AND type <> '.pron.' AND type <> '.v.' ) ORDER BY rowid DESC";
  116. }
  117. if($debug){
  118. echo $query."<br>";
  119. }
  120. if($db_file["dbh"]){
  121. try {
  122. $stmt = $db_file["dbh"]->query($query);
  123. if($stmt ){
  124. $Fetch = $stmt->fetchAll(PDO::FETCH_ASSOC);
  125. }
  126. else{
  127. $Fetch = array();
  128. if($debug){
  129. echo "无效的查询句柄";
  130. }
  131. }
  132. }catch (PDOException $e) {
  133. if($debug){
  134. print "Error!: " . $e->getMessage() . "<br/>";
  135. }
  136. $Fetch = array();
  137. }
  138. }
  139. else{
  140. $Fetch = array();
  141. if($debug){
  142. echo "无效的数据库句柄";
  143. }
  144. }
  145. //$Fetch = PDO_FetchAll($query);
  146. $iFetch=count($Fetch);
  147. if($debug){
  148. echo "count:$iFetch<br>";
  149. }
  150. if($iFetch>0){
  151. foreach($Fetch as $one){
  152. $id = $one["id"];
  153. if(isset($one["guid"])){
  154. $guid = $one["guid"];
  155. }
  156. else{
  157. $guid = "";
  158. }
  159. if(isset($one["lang"])){
  160. $language = $one["lang"];
  161. }
  162. else if(isset($one["language"])){
  163. $language = $one["language"];
  164. }
  165. else{
  166. $language = "en";
  167. }
  168. $pali = $one["pali"];
  169. $dict_word_spell["{$pali}"]=1;
  170. $type = $one["type"];
  171. $gramma = $one["gramma"];
  172. $parent = $one["parent"];
  173. //$mean = $one["mean"];
  174. if(inLangSetting($language,$user_setting["dict.lang"])){
  175. $mean = $one["mean"];
  176. }
  177. else{
  178. $mean = "";
  179. }
  180. $note = $one["note"];
  181. if(isset($one["factors"])){
  182. $parts = $one["factors"];
  183. }
  184. else if(isset($one["parts"])){
  185. $parts = $one["parts"];
  186. }
  187. else{
  188. $parts = "";
  189. }
  190. if(isset($one["factormean"])){
  191. $partmean = $one["factormean"];
  192. }
  193. else if(isset($one["partmean"])){
  194. $partmean = $one["partmean"];
  195. }
  196. else{
  197. $partmean = "";
  198. }
  199. if(inLangSetting($language,$user_setting["dict.lang"])==false){
  200. $partmean = "";
  201. }
  202. $status = $one["status"];
  203. if(isset($one["confidence"])){
  204. $confidence = $one["confidence"];
  205. }
  206. else{
  207. $confidence = 100;
  208. }
  209. if(isset($one["dict_name"])){
  210. $dict_name = $one["dict_name"];
  211. }
  212. else{
  213. $dict_name = "";
  214. }
  215. array_push($output,array(
  216. "id"=>$id,
  217. "guid"=>$guid,
  218. "pali"=>$pali,
  219. "type"=>$type,
  220. "gramma"=>$gramma,
  221. "parent"=>$parent,
  222. "mean"=>$mean,
  223. "note"=>$note,
  224. "parts"=>$parts,
  225. "partmean"=>$partmean,
  226. "status"=>$status,
  227. "confidence"=>$confidence,
  228. "dict_name"=>$dict_name,
  229. "language"=>$language
  230. ));
  231. //将语基插入下次查询的列表
  232. if(!empty($parent)){
  233. if($pali != $parent){
  234. $parent_list[$parent]=1;
  235. }
  236. }
  237. //将拆分插入下次查询的列表
  238. if($type!=".part."){
  239. if(!empty($parts)){
  240. $wordparts=str_getcsv($parts,'+');
  241. foreach($wordparts as $x){
  242. if(!empty($x)){
  243. if($x != $pali){
  244. $parent_list[$x]=1;
  245. }
  246. }
  247. }
  248. }
  249. }
  250. }
  251. }
  252. }
  253. /*
  254. if($i==0){
  255. //自动查找单词词干
  256. $word_base=getPaliWordBase($in_word);
  257. foreach($word_base as $x=>$infolist){
  258. foreach($infolist as $gramma){
  259. array_push($output,
  260. array("pali"=>$in_word,
  261. "parent"=>$x,
  262. "type"=>$gramma["type"],
  263. "gramma"=>$gramma["gramma"],
  264. "parts"=>$gramma["parts"],
  265. "partmean"=>"",
  266. "mean"=>"",
  267. "language"=>"en",
  268. "dict_name"=>"auto",
  269. "status"=>128
  270. ));
  271. $part_list=str_getcsv($gramma["parts"],"+");
  272. foreach($part_list as $part){
  273. $parent_list[$part]=1;
  274. }
  275. }
  276. }
  277. }
  278. */
  279. if($debug){
  280. echo "parent:".count($parent_list)."<br>";
  281. print_r($parent_list)."<br>";
  282. }
  283. if(count($parent_list)==0){
  284. break;
  285. }
  286. else{
  287. $word_list=array();
  288. foreach($parent_list as $x=>$value){
  289. array_push($word_list,$x);
  290. }
  291. }
  292. }
  293. //删除无效数据
  294. $newOutput = array();
  295. foreach($output as $value){
  296. if($value["dict_name"]=="auto"){
  297. if(isset($dict_word_spell["{$value["parent"]}"])){
  298. array_push($newOutput,$value);
  299. }
  300. }
  301. else
  302. {
  303. array_push($newOutput,$value);
  304. }
  305. }
  306. if($debug){
  307. echo "<textarea width=\"100%\" >";
  308. }
  309. echo json_encode($newOutput, JSON_UNESCAPED_UNICODE);
  310. if($debug){
  311. echo "</textarea>";
  312. }
  313. if($debug){
  314. echo "生成:".count($output)."<br>";
  315. echo "有效:".count($newOutput)."<br>";
  316. foreach($newOutput as $result){
  317. echo "{$result["pali"]}-{$result["parent"]}-{$result["mean"]}<br>";
  318. }
  319. $queryTime=(microtime_float()-$time_start)*1000;
  320. echo "<div >搜索时间:$queryTime 毫秒</div>";
  321. }
  322. ?>