mirror of
https://github.com/2930134478/AI-CS.git
synced 2026-06-15 00:44:30 +08:00
56 lines
1.2 KiB
Go
56 lines
1.2 KiB
Go
package import_service
|
|
|
|
import (
|
|
"os"
|
|
"strings"
|
|
)
|
|
|
|
// MarkdownParser Markdown 解析器
|
|
type MarkdownParser struct{}
|
|
|
|
// NewMarkdownParser 创建 Markdown 解析器
|
|
func NewMarkdownParser() *MarkdownParser {
|
|
return &MarkdownParser{}
|
|
}
|
|
|
|
// Supports 检查是否支持该文件
|
|
func (p *MarkdownParser) Supports(filePath string) bool {
|
|
return strings.HasSuffix(strings.ToLower(filePath), ".md") ||
|
|
strings.HasSuffix(strings.ToLower(filePath), ".markdown")
|
|
}
|
|
|
|
// Parse 解析 Markdown 文件
|
|
func (p *MarkdownParser) Parse(filePath string) (*ParsedDocument, error) {
|
|
content, err := os.ReadFile(filePath)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
// 提取标题(第一行作为标题)
|
|
lines := strings.Split(string(content), "\n")
|
|
title := ""
|
|
body := string(content)
|
|
|
|
for _, line := range lines {
|
|
line = strings.TrimSpace(line)
|
|
if line != "" {
|
|
// 移除 Markdown 标题标记
|
|
title = strings.TrimPrefix(line, "#")
|
|
title = strings.TrimPrefix(title, "##")
|
|
title = strings.TrimPrefix(title, "###")
|
|
title = strings.TrimSpace(title)
|
|
break
|
|
}
|
|
}
|
|
|
|
if title == "" {
|
|
title = filePath
|
|
}
|
|
|
|
return &ParsedDocument{
|
|
Title: title,
|
|
Content: body,
|
|
Metadata: make(map[string]interface{}),
|
|
}, nil
|
|
}
|