upgrade_pali_toc.php 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. <?php
  2. #升级段落完成度数据库
  3. require_once '../path.php';
  4. $dns = "sqlite:"._FILE_DB_PALI_TOC_;
  5. $dbh_toc = new PDO($dns, "", "",array(PDO::ATTR_PERSISTENT=>true));
  6. $dbh_toc->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
  7. $dns = "sqlite:"._FILE_DB_SENTENCE_;
  8. $dbh_sent = new PDO($dns, "", "",array(PDO::ATTR_PERSISTENT=>true));
  9. $dbh_sent->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
  10. $dns = "sqlite:"._FILE_DB_PALI_SENTENCE_;
  11. $dbh_pali_sent = new PDO($dns, "", "",array(PDO::ATTR_PERSISTENT=>true));
  12. $dbh_pali_sent->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
  13. $dns = "sqlite:"._FILE_DB_PALITEXT_;
  14. $dbh_pali_text = new PDO($dns, "", "",array(PDO::ATTR_PERSISTENT=>true));
  15. $dbh_pali_text->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
  16. $valid_book = array();
  17. #第一步 查询有多少书有译文
  18. $query = "SELECT book from sentence where strlen>0 and begin<>'' and language<>'' and book <1000 group by book";
  19. $stmt = $dbh_sent->prepare($query);
  20. $stmt->execute();
  21. $valid_book = $stmt->fetchAll(PDO::FETCH_ASSOC);
  22. echo "book:".count($valid_book)."<br>\n";
  23. #第一步 查询语言
  24. $query = "SELECT language from sentence where strlen>0 and begin<>'' and language<>'' and book <1000 group by language";
  25. $stmt = $dbh_sent->prepare($query);
  26. $stmt->execute();
  27. $result_lang = $stmt->fetchAll(PDO::FETCH_ASSOC);
  28. echo "lang:".count($result_lang)."<br>\n";
  29. $query = "DELETE FROM progress WHERE 1";
  30. $sth_toc = $dbh_toc->prepare($query);
  31. $sth_toc->execute();
  32. $query = "DELETE FROM progress_chapter WHERE 1";
  33. $sth_toc = $dbh_toc->prepare($query);
  34. $sth_toc->execute();
  35. /* 开始一个事务,关闭自动提交 */
  36. $dbh_toc->beginTransaction();
  37. $query = "INSERT INTO progress (book, para , lang , all_strlen , public_strlen) VALUES (?, ?, ? , ? ,? )";
  38. $sth_toc = $dbh_toc->prepare($query);
  39. foreach ($result_lang as $lang) {
  40. # 第二步 生成para progress 1,2,15,zh-tw
  41. #查询该语言有多少段
  42. $query = "select book,paragraph from sentence where strlen>0 and language= ? and book<1000 group by book,paragraph";
  43. $stmt = $dbh_sent->prepare($query);
  44. $stmt->execute(array($lang["language"]));
  45. $result_para = $stmt->fetchAll(PDO::FETCH_ASSOC);
  46. foreach ($result_para as $para) {
  47. # 查询每个段落的等效巴利语字符数
  48. $query = "select begin from sentence where strlen>0 and language= ? and book = ? and paragraph = ? and begin<>'' group by begin,end";
  49. $stmt = $dbh_sent->prepare($query);
  50. $stmt->execute(array($lang["language"],$para["book"],$para["paragraph"]));
  51. $result_sent = $stmt->fetchAll(PDO::FETCH_ASSOC);
  52. if(count($result_sent)>0){
  53. echo "book:{$para["book"]} para: {$para["paragraph"]}\n";
  54. #查询这些句子的总共等效巴利语字符数
  55. $place_holders = implode(',', array_fill(0, count($result_sent), '?'));
  56. $query = "select sum(length) as strlen from pali_sent where book = ? and paragraph = ? and begin in ($place_holders)";
  57. $sth = $dbh_pali_sent->prepare($query);
  58. $param = array();
  59. $param[] = $para["book"];
  60. $param[] = $para["paragraph"];
  61. foreach ($result_sent as $sent) {
  62. # code...
  63. $param[] = (int)$sent["begin"];
  64. }
  65. $sth->execute($param);
  66. $result_strlen = $sth->fetch(PDO::FETCH_ASSOC);
  67. if($result_strlen){
  68. $para_strlen = $result_strlen["strlen"];
  69. }
  70. else{
  71. $para_strlen = 0;
  72. }
  73. $sth_toc->execute(array($para["book"],$para["paragraph"],$lang["language"],$para_strlen,0));
  74. }
  75. }
  76. }
  77. $dbh_toc->commit();
  78. if (!$sth_toc || ($sth_toc && $sth_toc->errorCode() != 0)) {
  79. /* 识别错误且回滚更改 */
  80. $sth_toc->rollBack();
  81. $error = $dbh_toc->errorInfo();
  82. echo "error:".$error[2]."\n";
  83. }
  84. #第三步生成 段落完成度库
  85. /* 开始一个事务,关闭自动提交 */
  86. $dbh_toc->beginTransaction();
  87. $query = "INSERT INTO progress_chapter (book, para , lang , all_trans,public) VALUES (?, ?, ? , ? ,? )";
  88. $sth_toc = $dbh_toc->prepare($query);
  89. foreach ($valid_book as $key => $book) {
  90. echo "doing chapter in book ".$book["book"] ."\n";
  91. # code...
  92. $query = "SELECT paragraph , chapter_len from pali_text where level < 8 and book = ?";
  93. $stmt = $dbh_pali_text->prepare($query);
  94. $stmt->execute(array($book["book"]));
  95. $result_chapter = $stmt->fetchAll(PDO::FETCH_ASSOC);
  96. foreach ($result_chapter as $key => $chapter) {
  97. # 查询巴利字符数
  98. $query = "SELECT sum(strlen) as pali_strlen from pali_sent_index where book = ? and para between ? and ? ";
  99. $stmt = $dbh_pali_sent->prepare($query);
  100. $stmt->execute(array($book["book"],$chapter["paragraph"],(int)$chapter["paragraph"]+(int)$chapter["chapter_len"]-1));
  101. $result_chapter_strlen = $stmt->fetch(PDO::FETCH_ASSOC);
  102. if($result_chapter_strlen){
  103. $pali_strlen = (int)$result_chapter_strlen["pali_strlen"];
  104. # 译文等效字符数
  105. foreach ($result_lang as $lang) {
  106. $query = "SELECT sum(all_strlen) as all_strlen from progress where book = ? and (para between ? and ? )and lang = ?";
  107. $stmt = $dbh_toc->prepare($query);
  108. $stmt->execute(array($book["book"],$chapter["paragraph"],(int)$chapter["paragraph"]+(int)$chapter["chapter_len"]-1,$lang["language"]));
  109. $result_chapter_trans_strlen = $stmt->fetch(PDO::FETCH_ASSOC);
  110. if($result_chapter_trans_strlen){
  111. $tran_strlen = (int)$result_chapter_trans_strlen["all_strlen"];
  112. if($tran_strlen>0){
  113. $progress = $tran_strlen/$pali_strlen;
  114. $sth_toc->execute(array($book["book"],$chapter["paragraph"],$lang["language"],$progress,0));
  115. //echo "{$book["book"]},{$chapter["paragraph"]},{$lang["language"]},{$progress}\n";
  116. }
  117. }
  118. #插入段落数据
  119. }
  120. }
  121. }
  122. }
  123. $dbh_toc->commit();
  124. if (!$sth_toc || ($sth_toc && $sth_toc->errorCode() != 0)) {
  125. /* 识别错误且回滚更改 */
  126. $sth_toc->rollBack();
  127. $error = $dbh_toc->errorInfo();
  128. echo "error:".$error[2]."\n";
  129. }
  130. ?>