Files
query-orchestration/internal/document/text/documentText.go
T

61 lines
1.2 KiB
Go
Raw Normal View History

package documenttext
import (
"context"
"fmt"
"io"
2025-04-25 17:02:50 +00:00
"log/slog"
"strings"
documenttypes "queryorchestration/internal/document/types"
)
func (s *Service) GetDocumentText(ctx context.Context, doc documenttypes.File) (io.Reader, error) {
pagesNum, err := doc.GetPageCount(ctx)
if err != nil {
return nil, err
}
2025-04-25 17:02:50 +00:00
group := s.cfg.GetThreadPool().NewGroup()
textPages := make([]string, pagesNum)
for i := range pagesNum {
2025-04-25 17:02:50 +00:00
index := i
group.SubmitErr(func() error {
slog.Debug("extracting page text", "index", index)
text, err := s.getPageText(ctx, doc, index)
if err != nil {
slog.Error("error extracting page text", "index", index, "error", err)
return err
}
textPages[index] = text
return nil
})
}
err = group.Wait()
if err != nil {
return nil, err
}
text, err := s.mergeDocument(textPages)
if err != nil {
return nil, err
}
return text, nil
}
func (s *Service) mergeDocument(pages []string) (io.Reader, error) {
var builder strings.Builder
for i, page := range pages {
builder.WriteString(fmt.Sprintf("Start of Page No. = %d\n\n", i+1))
builder.WriteString(page)
builder.WriteString("\n\n")
}
return strings.NewReader(builder.String()), nil
}