PaliNissayaReferenceService.php 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. <?php
  2. namespace App\Services\AIAssistant;
  3. use App\Models\Sentence;
  4. /**
  5. * 提取指定段落的 nissaya(巴利原文逐词缅文释义),作为翻译 / 审校 / 评估的参考资料。
  6. *
  7. * nissaya 是缅甸传统的逐词释义:每个巴利词后给出其语法解析与缅文释义
  8. * (格式形如「巴利词= 缅文释义。」),是判断词义、修饰关系、指代关系与
  9. * 句子结构的权威依据。该模块只负责按段落取数,可复用于任意工作流步骤。
  10. */
  11. class PaliNissayaReferenceService
  12. {
  13. /**
  14. * 按句子提取段落的 nissaya 原文,返回 ['id' => ..., 'content' => ...]。
  15. * id 与巴利原文 / 译文一致(book-para-word_start-word_end),便于按句对应。
  16. * 无 nissaya 数据时返回空数组。
  17. *
  18. * @return array<int, array{id: string, content: string}>
  19. */
  20. public function forParagraph(int $book, int $para): array
  21. {
  22. $sentences = Sentence::nissaya()
  23. ->language('my') // 缅文 nissaya
  24. ->where('book_id', $book)
  25. ->where('paragraph', $para)
  26. ->orderBy('word_start')
  27. ->get();
  28. $result = [];
  29. foreach ($sentences as $sentence) {
  30. if (empty($sentence->content)) {
  31. continue;
  32. }
  33. $id = "{$sentence->book_id}-{$sentence->paragraph}-{$sentence->word_start}-{$sentence->word_end}";
  34. $result[] = ['id' => $id, 'content' => $sentence->content];
  35. }
  36. return $result;
  37. }
  38. }