2
0

pali.syn.php 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. <?php
  2. /*
  3. * 该脚本用于生成 pali.syn, 调用时请给 PHP 分配足够的内存,如:
  4. * php -d memory_limit=1024M pali.syn.php
  5. *
  6. */
  7. // 存放 pali.syn 文件内的所有数据,
  8. // 存到内存里是要最后排序用
  9. $pali_syn_array = array();
  10. // 查找 dicttext/system 目录下的所有词形转换文件
  11. foreach (glob("../../dicttext/system/sys_*regular*.csv") as $filename) {
  12. echo "Handling file: $filename \n";
  13. $row = 1;
  14. if (($handle = fopen($filename, "r")) !== FALSE) {
  15. while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
  16. // echo "\n==== line $row ====\n";
  17. $row++;
  18. // 如果单词的原形存在,并且单词本身和原形不相同
  19. if (!empty($data[4]) && strcmp($data[1], $data[4]) !== 0) {
  20. // echo 'COLLECTING:' . $data[1] . ' -> ' . $data[4] . "\n";
  21. // 使用 key => value 方式
  22. // 将会移除一个单词对应多个原型的场景,选取最长的结果作为原形
  23. // 如:
  24. // abahumānaṃ -> abahumāna (sys_regular1.csv)
  25. // abahumānaṃ -> abahumata (sys_regular2.csv)
  26. // 这个方法合适不合适,还有待商议,暂且这样
  27. if (
  28. // 暂无数据
  29. empty($pali_syn_array[$data[1]])
  30. || // 或者
  31. // 数据较短
  32. strcmp($pali_syn_array[$data[1]], $data[4]) < 0
  33. ) {
  34. $pali_syn_array[$data[1]] = $data[4];
  35. }
  36. } else {
  37. // echo 'SKIPPING:' . $data[1] . ' -> ' . $data[4] . "\n";
  38. }
  39. }
  40. fclose($handle);
  41. }
  42. }
  43. echo "Sorting contents ... \n";
  44. // sort($pali_syn_array);
  45. // $pali_syn_array = array_unique($pali_syn_array);
  46. echo "Writing into pali.syn ... \n";
  47. // 写入当前目录:pali.syn
  48. $filename = 'pali.syn';
  49. // c 模式,直接覆盖当前文件
  50. if (!$handle = fopen($filename, 'c')) {
  51. echo "Cannot open file ($filename)";
  52. exit;
  53. }
  54. // 写入 UTF8 文件头
  55. $content = "\xEF\xBB\xBF";
  56. if (fwrite($handle, $content) === FALSE) {
  57. echo "Cannot write to file ($filename) with ($content)";
  58. exit;
  59. }
  60. // 逐行写入内容
  61. foreach ($pali_syn_array as $k => $v) {
  62. $content = $k . ' ' . $v . PHP_EOL;
  63. // echo $content;
  64. if (fwrite($handle, $content) === FALSE) {
  65. echo "Cannot write to file ($filename) with ($content)";
  66. exit;
  67. }
  68. }
  69. fclose($handle);
  70. echo "Done. Amitābha \n";
  71. ?>