From d32e05d560a178decb6c03ba05de81681d5e391f Mon Sep 17 00:00:00 2001 From: Jin Hai Date: Fri, 12 Jun 2026 23:28:14 +0800 Subject: [PATCH] Go: add more file parser (#15979) ### What problem does this PR solve? Now we can parse 'pptx', 'ppt', 'doc', 'xls', 'xlsx' ``` RAGFlow(api/default)> parse file 'test.pptx'; Parsing PPTX file: test.pptx Document format: pptx ``` ### Type of change - [x] New Feature (non-breaking change which adds functionality) Signed-off-by: Jin Hai --- internal/ingestion/parser/doc_parser.go | 30 +++++++++++++++++++++++- internal/ingestion/parser/ppt_parser.go | 30 +++++++++++++++++++++++- internal/ingestion/parser/pptx_parser.go | 30 +++++++++++++++++++++++- internal/ingestion/parser/xls_parser.go | 30 +++++++++++++++++++++++- internal/ingestion/parser/xlsx_parser.go | 30 +++++++++++++++++++++++- 5 files changed, 145 insertions(+), 5 deletions(-) diff --git a/internal/ingestion/parser/doc_parser.go b/internal/ingestion/parser/doc_parser.go index 75b7c3fc4c..5a8d561b9a 100644 --- a/internal/ingestion/parser/doc_parser.go +++ b/internal/ingestion/parser/doc_parser.go @@ -16,7 +16,11 @@ package parser -import "fmt" +import ( + "fmt" + + officeOxide "github.com/yfedoseev/office_oxide/go" +) type DOCParser struct { } @@ -27,6 +31,30 @@ func NewDOCParser() *DOCParser { func (p *DOCParser) Parse(filename string, data []byte) error { fmt.Printf("Parsing DOC file: %s\n", filename) + doc, err := officeOxide.OpenFromBytes(data, "doc") + if err != nil { + return err + } + defer doc.Close() + + docFormat, err := doc.Format() + if err != nil { + return err + } + + fmt.Println("Document format:", docFormat) + + docContext, err := doc.PlainText() + if err != nil { + return err + } + fmt.Println("Document context:", docContext) + + md, err := doc.ToMarkdown() + if err != nil { + return err + } + fmt.Println("Document Markdown:", md) return nil } diff --git a/internal/ingestion/parser/ppt_parser.go b/internal/ingestion/parser/ppt_parser.go index bb6398c77d..6bed34862a 100644 --- a/internal/ingestion/parser/ppt_parser.go +++ b/internal/ingestion/parser/ppt_parser.go @@ -16,7 +16,11 @@ package parser -import "fmt" +import ( + "fmt" + + officeOxide "github.com/yfedoseev/office_oxide/go" +) type PPTParser struct { } @@ -27,6 +31,30 @@ func NewPPTParser() *PPTParser { func (p *PPTParser) Parse(filename string, data []byte) error { fmt.Printf("Parsing PPT file: %s\n", filename) + doc, err := officeOxide.OpenFromBytes(data, "ppt") + if err != nil { + return err + } + defer doc.Close() + + docFormat, err := doc.Format() + if err != nil { + return err + } + + fmt.Println("Document format:", docFormat) + + docContext, err := doc.PlainText() + if err != nil { + return err + } + fmt.Println("Document context:", docContext) + + md, err := doc.ToMarkdown() + if err != nil { + return err + } + fmt.Println("Document Markdown:", md) return nil } diff --git a/internal/ingestion/parser/pptx_parser.go b/internal/ingestion/parser/pptx_parser.go index eb657d2422..2ae3aa6ede 100644 --- a/internal/ingestion/parser/pptx_parser.go +++ b/internal/ingestion/parser/pptx_parser.go @@ -16,7 +16,11 @@ package parser -import "fmt" +import ( + "fmt" + + officeOxide "github.com/yfedoseev/office_oxide/go" +) type PPTXParser struct { } @@ -27,6 +31,30 @@ func NewPPTXParser() *PPTXParser { func (p *PPTXParser) Parse(filename string, data []byte) error { fmt.Printf("Parsing PPTX file: %s\n", filename) + doc, err := officeOxide.OpenFromBytes(data, "pptx") + if err != nil { + return err + } + defer doc.Close() + + docFormat, err := doc.Format() + if err != nil { + return err + } + + fmt.Println("Document format:", docFormat) + + docContext, err := doc.PlainText() + if err != nil { + return err + } + fmt.Println("Document context:", docContext) + + md, err := doc.ToMarkdown() + if err != nil { + return err + } + fmt.Println("Document Markdown:", md) return nil } diff --git a/internal/ingestion/parser/xls_parser.go b/internal/ingestion/parser/xls_parser.go index 5aa0f402a2..7cf46b9447 100644 --- a/internal/ingestion/parser/xls_parser.go +++ b/internal/ingestion/parser/xls_parser.go @@ -16,7 +16,11 @@ package parser -import "fmt" +import ( + "fmt" + + officeOxide "github.com/yfedoseev/office_oxide/go" +) type XLSParser struct { } @@ -27,6 +31,30 @@ func NewXLSParser() *XLSParser { func (p *XLSParser) Parse(filename string, data []byte) error { fmt.Printf("Parsing XLS file: %s\n", filename) + doc, err := officeOxide.OpenFromBytes(data, "xls") + if err != nil { + return err + } + defer doc.Close() + + docFormat, err := doc.Format() + if err != nil { + return err + } + + fmt.Println("Document format:", docFormat) + + docContext, err := doc.PlainText() + if err != nil { + return err + } + fmt.Println("Document context:", docContext) + + md, err := doc.ToMarkdown() + if err != nil { + return err + } + fmt.Println("Document Markdown:", md) return nil } diff --git a/internal/ingestion/parser/xlsx_parser.go b/internal/ingestion/parser/xlsx_parser.go index 4a8548346e..7d822d42c3 100644 --- a/internal/ingestion/parser/xlsx_parser.go +++ b/internal/ingestion/parser/xlsx_parser.go @@ -16,7 +16,11 @@ package parser -import "fmt" +import ( + "fmt" + + officeOxide "github.com/yfedoseev/office_oxide/go" +) type XLSXParser struct { } @@ -27,6 +31,30 @@ func NewXLSXParser() *XLSXParser { func (p *XLSXParser) Parse(filename string, data []byte) error { fmt.Printf("Parsing XLSX file: %s\n", filename) + doc, err := officeOxide.OpenFromBytes(data, "xlsx") + if err != nil { + return err + } + defer doc.Close() + + docFormat, err := doc.Format() + if err != nil { + return err + } + + fmt.Println("Document format:", docFormat) + + docContext, err := doc.PlainText() + if err != nil { + return err + } + fmt.Println("Document context:", docContext) + + md, err := doc.ToMarkdown() + if err != nil { + return err + } + fmt.Println("Document Markdown:", md) return nil }