markdown_parser.go 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. package import_service
  2. import (
  3. "os"
  4. "strings"
  5. )
  6. // MarkdownParser Markdown 解析器
  7. type MarkdownParser struct{}
  8. // NewMarkdownParser 创建 Markdown 解析器
  9. func NewMarkdownParser() *MarkdownParser {
  10. return &MarkdownParser{}
  11. }
  12. // Supports 检查是否支持该文件
  13. func (p *MarkdownParser) Supports(filePath string) bool {
  14. return strings.HasSuffix(strings.ToLower(filePath), ".md") ||
  15. strings.HasSuffix(strings.ToLower(filePath), ".markdown")
  16. }
  17. // Parse 解析 Markdown 文件
  18. func (p *MarkdownParser) Parse(filePath string) (*ParsedDocument, error) {
  19. content, err := os.ReadFile(filePath)
  20. if err != nil {
  21. return nil, err
  22. }
  23. // 提取标题(第一行作为标题)
  24. lines := strings.Split(string(content), "\n")
  25. title := ""
  26. body := string(content)
  27. for _, line := range lines {
  28. line = strings.TrimSpace(line)
  29. if line != "" {
  30. // 移除 Markdown 标题标记
  31. title = strings.TrimPrefix(line, "#")
  32. title = strings.TrimPrefix(title, "##")
  33. title = strings.TrimPrefix(title, "###")
  34. title = strings.TrimSpace(title)
  35. break
  36. }
  37. }
  38. if title == "" {
  39. title = filePath
  40. }
  41. return &ParsedDocument{
  42. Title: title,
  43. Content: body,
  44. Metadata: make(map[string]interface{}),
  45. }, nil
  46. }