documentParser

package module
v0.6.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 13, 2025 License: MIT Imports: 10 Imported by: 0

README

Multiple File Parser

複数のドキュメント形式(PDF、DOCX、PPTX、テキストファイルなど)からテキストを抽出するGoライブラリです。

特徴

  • 🚀 複数フォーマット対応: PDF、DOCX、PPTX、Excel、およびテキストファイルをサポート
  • 📦 柔軟なパース方法: ファイルパス、バイト配列、io.ReaderAtの3つの方法でパース可能
  • 🔌 拡張可能: ファクトリーパターンを採用し、カスタムパーサーの追加が容易
  • 🎯 シンプルなAPI: 統一されたインターフェースで簡単に使用可能

サポートするフォーマット

形式 拡張子 説明
PDF .pdf PDFドキュメント
Word .docx Microsoft Word文書
PowerPoint .pptx, .ppt Microsoft PowerPointプレゼンテーション
Excel .xlsx, .xls Microsoft Excelスプレッドシート
テキスト .txt, .md, .json, .xml, など プレーンテキストおよび各種ソースコードファイル

インストール

go get github.com/obutora/multiple_file_parser

使い方

基本的な使用例
package main

import (
    "fmt"
    "log"
    
    service "github.com/obutora/multiple_file_parser"
)

func main() {
    // ファクトリーを作成
    factory := service.NewDocumentParserFactory()
    
    // 拡張子に基づいてパーサーを取得
    parser, err := factory.GetParser(".pdf")
    if err != nil {
        log.Fatal(err)
    }
    
    // ファイルをパース
    content, err := parser.ParseFromFile("document.pdf")
    if err != nil {
        log.Fatal(err)
    }
    
    fmt.Println(content)
}
3つのパース方法
1. ファイルパスからパース
parser, _ := factory.GetParser(".pdf")
content, err := parser.ParseFromFile("document.pdf")
2. バイト配列からパース
data := []byte("テキストの内容")
parser, _ := factory.GetParser(".txt")
content, err := parser.ParseFromBytes(data)
3. io.ReaderAtからパース
file, _ := os.Open("document.pdf")
defer file.Close()

stat, _ := file.Stat()
parser, _ := factory.GetParser(".pdf")
content, err := parser.ParseFromReader(file, stat.Size())
シート/ページごとのパース(Excel等)

Excelファイルのように複数のシートを持つドキュメントの場合、シートごとに内容を分けて取得することができます。

factory := service.NewDocumentParserFactory()

// シート名をキー、内容を値とするマップを取得
sheets, err := factory.ParseFromFileWithPages("spreadsheet.xlsx")
if err != nil {
    log.Fatal(err)
}

for name, content := range sheets {
    fmt.Printf("--- Sheet: %s ---\n%s\n", name, content)
}

この機能は以下のメソッドで利用可能です:

  • ParseFromFileWithPages(filePath string)
  • ParseFromBytesWithPages(ext string, data []byte)
  • ParseFromReaderWithPages(ext string, reader io.ReaderAt, size int64)

※ 対応していないファイル形式の場合は、全体を一つのコンテンツとしてマップ(キー: "Content")に入れて返します。

サポートされている拡張子の確認
factory := service.NewDocumentParserFactory()
extensions := factory.SupportedExtensions()

for _, ext := range extensions {
    fmt.Println(ext)
}
カスタムパーサーの追加

独自のパーサーを作成して登録することができます:

// カスタムパーサーを実装
type CustomParser struct {
    service.BaseParser
}

func (p *CustomParser) SupportedExtensions() []string {
    return []string{".custom"}
}

func (p *CustomParser) ParseFromReader(reader io.ReaderAt, size int64) (string, error) {
    // パース処理を実装
    return "parsed content", nil
}

// ファクトリーに登録
factory := service.NewDocumentParserFactory()
factory.RegisterParser(&CustomParser{})

API リファレンス

DocumentParser インターフェース

すべてのパーサーは以下のインターフェースを実装します:

type DocumentParser interface {
    ParseFromReader(reader io.ReaderAt, size int64) (string, error)
    ParseFromBytes(data []byte) (string, error)
    ParseFromFile(filePath string) (string, error)
    SupportedExtensions() []string
}
DocumentParserFactory

パーサーの管理と取得を行うファクトリークラス:

  • NewDocumentParserFactory(): 新しいファクトリーインスタンスを作成
  • GetParser(extension string): 拡張子に対応するパーサーを取得
  • RegisterParser(parser DocumentParser): カスタムパーサーを登録
  • SupportedExtensions(): サポートされている全拡張子を取得

サンプルコード

詳細なサンプルコードは examples/example.go を参照してください。

実行方法:

cd examples
go run example.go

テキストファイルでサポートされる拡張子

TextParserは以下の拡張子をサポートしています:

  • ドキュメント: .txt, .md, .markdown
  • プログラミング言語: .go, .py, .js, .ts, .java, .c, .cpp, など
  • 設定ファイル: .json, .xml, .yaml, .yml, .toml, .ini
  • スクリプト: .sh, .bash, .zsh, .ps1
  • Web: .html, .css, .scss, .vue, .svelte

完全なリストは text.go を参照してください。

依存関係

  • github.com/ledongthuc/pdf: PDFパース用
  • github.com/xuri/excelize/v2: Excelパース用

ライセンス

このプロジェクトはMIT Licenseの下で公開されています。

貢献

プルリクエストを歓迎します。大きな変更の場合は、まずissueを開いて変更内容を議論してください。

開発者

GitHub: @obutora

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func ParseDocxToString

func ParseDocxToString(docxFilePath string) string

ParseDocxToString は後方互換性のための既存メソッド

func ParsePdfToString

func ParsePdfToString(pdfFilePath string) string

ParsePdfToString は後方互換性のための既存メソッド

func ParsePptxToString

func ParsePptxToString(pptxFilePath string) string

ParsePptxToString は後方互換性のための既存メソッド

func ParseTextToString

func ParseTextToString(textFilePath string) (string, error)

ParseTextToString は後方互換性のための既存メソッド

Types

type BaseParser

type BaseParser struct{}

BaseParser は共通処理を提供する基底構造体

func (*BaseParser) ParseFromBytes

func (p *BaseParser) ParseFromBytes(data []byte) (string, error)

ParseFromBytes のデフォルト実装(ReaderAtを使う実装にフォールバック)

func (*BaseParser) ParseFromFile

func (p *BaseParser) ParseFromFile(filePath string) (string, error)

ParseFromFile のデフォルト実装

func (*BaseParser) ParseFromReader

func (p *BaseParser) ParseFromReader(reader io.ReaderAt, size int64) (string, error)

ParseFromReader は各パーサーで実装が必要

type DOCXParser

type DOCXParser struct {
	BaseParser
}

DOCXParser はWordファイルのパーサー

func (*DOCXParser) ParseFromReader

func (p *DOCXParser) ParseFromReader(reader io.ReaderAt, size int64) (string, error)

ParseFromReader はio.ReaderAtからDOCXをパース

func (*DOCXParser) SupportedExtensions

func (p *DOCXParser) SupportedExtensions() []string

SupportedExtensions はサポートする拡張子を返す

type DocumentParser

type DocumentParser interface {
	// ParseFromReader はio.ReaderAtからドキュメントをパース
	ParseFromReader(reader io.ReaderAt, size int64) (string, error)

	// ParseFromBytes はバイト配列からドキュメントをパース
	ParseFromBytes(data []byte) (string, error)

	// ParseFromFile はファイルパスからドキュメントをパース(後方互換性)
	ParseFromFile(filePath string) (string, error)

	// SupportedExtensions はサポートする拡張子を返す
	SupportedExtensions() []string
}

DocumentParser はドキュメントをパースするインターフェース

type DocumentParserFactory

type DocumentParserFactory struct {
	// contains filtered or unexported fields
}

DocumentParserFactory はファイル拡張子に基づいてパーサーを返す

func NewDocumentParserFactory

func NewDocumentParserFactory() *DocumentParserFactory

NewDocumentParserFactory はファクトリーを初期化

func (*DocumentParserFactory) GetParser

func (f *DocumentParserFactory) GetParser(extension string) (DocumentParser, error)

GetParser は拡張子に対応するパーサーを返す

func (*DocumentParserFactory) ParseFromBytes added in v0.3.0

func (f *DocumentParserFactory) ParseFromBytes(ext string, data []byte) (string, error)

ParseFromBytes はバイト配列からドキュメントをパースする

func (*DocumentParserFactory) ParseFromBytesWithPages added in v0.6.0

func (f *DocumentParserFactory) ParseFromBytesWithPages(ext string, data []byte) (map[string]string, error)

ParseFromBytesWithPages はバイト配列からドキュメントをパースし、可能な場合はページ/シートごとに分割して返す

func (*DocumentParserFactory) ParseFromFile added in v0.3.0

func (f *DocumentParserFactory) ParseFromFile(filePath string) (string, error)

ParseFromFile はファイルパスからドキュメントをパースする ファイルの拡張子を自動的に検出し、適切なパーサーを使用する

func (*DocumentParserFactory) ParseFromFileWithPages added in v0.6.0

func (f *DocumentParserFactory) ParseFromFileWithPages(filePath string) (map[string]string, error)

ParseFromFileWithPages はファイルパスからドキュメントをパースし、可能な場合はページ/シートごとに分割して返す

func (*DocumentParserFactory) ParseFromReader added in v0.3.0

func (f *DocumentParserFactory) ParseFromReader(ext string, reader io.ReaderAt, size int64) (string, error)

ParseFromReader はio.ReaderAtからドキュメントをパースする

func (*DocumentParserFactory) ParseFromReaderWithPages added in v0.6.0

func (f *DocumentParserFactory) ParseFromReaderWithPages(ext string, reader io.ReaderAt, size int64) (map[string]string, error)

ParseFromReaderWithPages はio.ReaderAtからドキュメントをパースし、可能な場合はページ/シートごとに分割して返す

func (*DocumentParserFactory) RegisterParser

func (f *DocumentParserFactory) RegisterParser(parser DocumentParser)

RegisterParser はカスタムパーサーを登録

func (*DocumentParserFactory) SupportedExtensions

func (f *DocumentParserFactory) SupportedExtensions() []string

SupportedExtensions はファクトリでサポートされる全ての拡張子を返す

type DocxParagraph

type DocxParagraph struct {
	Runs []DocxRun `xml:"r"`
}

type DocxRun

type DocxRun struct {
	Text DocxText `xml:"t"`
}

type DocxTable added in v0.5.0

type DocxTable struct {
	Rows []DocxTableRow `xml:"tr"`
}

テーブル構造体

type DocxTableCell added in v0.5.0

type DocxTableCell struct {
	Paragraphs []DocxParagraph `xml:"p"`
}

type DocxTableRow added in v0.5.0

type DocxTableRow struct {
	Cells []DocxTableCell `xml:"tc"`
}

type DocxText

type DocxText struct {
	Content string `xml:",chardata"`
}

WordのXML構造を表現する構造体

type ExcelParser added in v0.4.0

type ExcelParser struct {
	BaseParser
}

func (*ExcelParser) ParseFromBytes added in v0.4.0

func (p *ExcelParser) ParseFromBytes(data []byte) (string, error)

func (*ExcelParser) ParseFromFile added in v0.4.0

func (p *ExcelParser) ParseFromFile(filePath string) (string, error)

func (*ExcelParser) ParseFromReader added in v0.4.0

func (p *ExcelParser) ParseFromReader(reader io.ReaderAt, size int64) (string, error)

func (*ExcelParser) ParseWithPages added in v0.6.0

func (p *ExcelParser) ParseWithPages(reader io.ReaderAt, size int64) (map[string]string, error)

ParseWithPages はシートごとに内容を分けてマップ形式で返す

func (*ExcelParser) SupportedExtensions added in v0.4.0

func (p *ExcelParser) SupportedExtensions() []string

type PDFParser

type PDFParser struct {
	BaseParser
}

PDFParser はPDFファイルのパーサー

func (*PDFParser) ParseFromBytes

func (p *PDFParser) ParseFromBytes(data []byte) (string, error)

ParseFromBytes はバイト配列からPDFをパース

func (*PDFParser) ParseFromFile

func (p *PDFParser) ParseFromFile(filePath string) (string, error)

ParseFromFile はファイルパスからPDFをパース

func (*PDFParser) ParseFromReader

func (p *PDFParser) ParseFromReader(reader io.ReaderAt, size int64) (string, error)

ParseFromReader はio.ReaderAtからPDFをパース

func (*PDFParser) SupportedExtensions

func (p *PDFParser) SupportedExtensions() []string

SupportedExtensions はサポートする拡張子を返す

type PPTXParser

type PPTXParser struct {
	BaseParser
}

PPTXParser はPowerPointファイルのパーサー

func (*PPTXParser) ParseFromBytes

func (p *PPTXParser) ParseFromBytes(data []byte) (string, error)

ParseFromBytes はバイト配列からPPTXをパース

func (*PPTXParser) ParseFromFile

func (p *PPTXParser) ParseFromFile(filePath string) (string, error)

ParseFromFile はファイルパスからPPTXをパース

func (*PPTXParser) ParseFromReader

func (p *PPTXParser) ParseFromReader(reader io.ReaderAt, size int64) (string, error)

ParseFromReader はio.ReaderAtからPPTXをパース

func (*PPTXParser) SupportedExtensions

func (p *PPTXParser) SupportedExtensions() []string

SupportedExtensions はサポートする拡張子を返す

type PageSeparatedParser added in v0.6.0

type PageSeparatedParser interface {
	DocumentParser
	// ParseWithPages はio.ReaderAtからドキュメントをパースし、ページ/シートごとのマップを返す
	ParseWithPages(reader io.ReaderAt, size int64) (map[string]string, error)
}

PageSeparatedParser はページやシートごとに分割してパースするインターフェース

type Paragraph

type Paragraph struct {
	Runs []TextRun `xml:"r"`
}

type Shape

type Shape struct {
	TextBody TextBody `xml:"txBody"`
}

type Slide

type Slide struct {
	SlideData SlideData `xml:"cSld"`
}

type SlideData

type SlideData struct {
	Shapes []Shape `xml:"spTree>sp"`
}

type TextBody

type TextBody struct {
	Paragraphs []Paragraph `xml:"p"`
}

type TextParser

type TextParser struct {
	BaseParser
}

TextParser はプレーンテキストファイルのパーサー

func (*TextParser) ParseFromBytes

func (p *TextParser) ParseFromBytes(data []byte) (string, error)

ParseFromBytes はバイト配列をそのまま文字列として返す

func (*TextParser) ParseFromReader

func (p *TextParser) ParseFromReader(reader io.ReaderAt, size int64) (string, error)

ParseFromReader はio.ReaderAtからテキストを読み込んでそのまま返す

func (*TextParser) SupportedExtensions

func (p *TextParser) SupportedExtensions() []string

SupportedExtensions はサポートする拡張子を返す

type TextRun

type TextRun struct {
	Text string `xml:"t"`
}

PowerPointのXML構造を表現する構造体

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL