最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

純C#實(shí)現(xiàn)智能PDF目錄提取工具PdfTocExtractor

 更新時(shí)間:2025年08月21日 09:57:19   作者:程序設(shè)計(jì)實(shí)驗(yàn)室  
這篇文章主要為大家詳細(xì)介紹了如何通過(guò)C#實(shí)現(xiàn)智能PDF目錄提取工具PdfTocExtractor,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

前言

最近在做標(biāo)書(shū)的時(shí)候發(fā)現(xiàn),有些文檔文字量很大,想讓大模型完全解讀不太現(xiàn)實(shí),先不說(shuō) context 長(zhǎng)度夠不夠,首先 token 消耗量就爆炸了

于是想到使用取巧的方式,提取 PDF 的目錄來(lái)進(jìn)行分析,于是說(shuō)干就干,用 C# 寫(xiě)了一個(gè)工具來(lái)實(shí)現(xiàn)目錄提取,結(jié)果效果還不錯(cuò)

后續(xù)我又繼續(xù)完善這個(gè)工具,增加了語(yǔ)義識(shí)別等功能

繼續(xù)沿用 C# + AOT + GitHub Actions + dotnet tool + nuget 這套流程的開(kāi)發(fā)

項(xiàng)目地址: https://github.com/star-plan/pdf-toc-extractor

為什么是目錄提取

PDF 轉(zhuǎn) word、markdown 等格式的工具太多了

咱不卷這個(gè)賽道

(說(shuō)是這么說(shuō),我最近也做了一個(gè),不排除后續(xù)把 PDF 轉(zhuǎn)文檔的功能集成到這個(gè)項(xiàng)目里)

咱就專(zhuān)注于這個(gè)小眾的需求,把 PDF 目錄提取這個(gè)功能做好

后續(xù)又增加了語(yǔ)義識(shí)別功能,有些 PDF 并沒(méi)有內(nèi)嵌目錄,這時(shí)候就需要從 PDF 的內(nèi)容中分析提取出目錄。

我一開(kāi)始使用了模式匹配,結(jié)果效果很差,后面換成 NLP 的思路,雖然只是用了最簡(jiǎn)單的語(yǔ)義識(shí)別,但效果的提升非??捎^(guān)!

可見(jiàn)選對(duì)工具還是很重要的

PdfTocExtractor

PdfTocExtractor 是一個(gè)純 C# AOT 實(shí)現(xiàn)的輕量級(jí)PDF目錄提取工具,用于從PDF文件中提取目錄(TOC)并導(dǎo)出為多種格式。支持Markdown、JSON、XML、純文本等格式,完全擺脫命令行依賴(lài),無(wú)需額外的PDF處理工具,適合在 .NET 項(xiàng)目中內(nèi)嵌、分發(fā)或集成自動(dòng)化流程中使用。

通過(guò)PdfTocExtractor,您可以輕松從PDF文檔中提取書(shū)簽和目錄結(jié)構(gòu),生成清晰的導(dǎo)航文檔。v2.0新增的語(yǔ)義分析功能讓您即使在PDF沒(méi)有嵌入書(shū)簽的情況下,也能通過(guò)基于NLP的智能分析自動(dòng)識(shí)別章節(jié)標(biāo)題,完美適用于文檔處理、內(nèi)容分析和自動(dòng)化工作流。

跨平臺(tái)、零依賴(lài)、極速提取,一切盡在 PdfTocExtractor!

功能特點(diǎn)

  • 從PDF文件提取書(shū)簽/目錄信息
  • 語(yǔ)義分析功能:基于NLP的智能章節(jié)標(biāo)題識(shí)別,適用于無(wú)書(shū)簽PDF
  • 支持多種輸出格式:Markdown、JSON、XML、純文本
  • 可配置的導(dǎo)出選項(xiàng)(層級(jí)深度、頁(yè)碼格式等)
  • 可擴(kuò)展的導(dǎo)出器架構(gòu),支持自定義格式
  • 異步操作支持,高性能處理
  • 提供命令行工具和NuGet包
  • 支持AOT編譯,原生性能無(wú)需.NET運(yùn)行時(shí)
  • 跨平臺(tái)支持:Windows、Linux、macOS
  • 多種分析模式:默認(rèn)、嚴(yán)格、寬松模式可選

支持的輸出格式

  • Markdown (md, markdown) - 適合文檔和網(wǎng)頁(yè)顯示,支持層級(jí)結(jié)構(gòu)
  • JSON (json) - 適合程序處理和API集成,包含完整元數(shù)據(jù)
  • XML (xml) - 結(jié)構(gòu)化數(shù)據(jù)交換,標(biāo)準(zhǔn)化格式
  • Text (txt, text) - 純文本格式,簡(jiǎn)潔易讀

使用方法

依然和其他工具一樣

提供了 nuget 庫(kù)和 dotnet tool 命令行工具

可以作為庫(kù)引入使用,也可以在命令行使用

命令行

安裝 CLI 工具

dotnet tool install --global PdfTocExtractor.Cli

命令行使用

# ?? 智能提取(推薦)- 自動(dòng)選擇最佳方法
pdftoc smart document.pdf -o output.md

# ?? 提取PDF書(shū)簽(傳統(tǒng)方法)
pdftoc extract document.pdf -o output.md

# ?? 語(yǔ)義分析(v2.0新功能 - 適用于無(wú)書(shū)簽的PDF)
pdftoc semantic document.pdf -o output.md

# 指定輸出格式
pdftoc smart document.pdf -o output.json -f json

# 設(shè)置最大層級(jí)深度
pdftoc smart document.pdf -o output.xml --max-depth 3

# 自定義標(biāo)題和頁(yè)碼格式
pdftoc smart document.pdf -o output.txt --title "我的文檔目錄" --page-format "第 {0} 頁(yè)"

# 語(yǔ)義分析 - 嚴(yán)格模式(更精確的標(biāo)題識(shí)別)
pdftoc semantic document.pdf -o output.md --mode strict --confidence 0.7

# 語(yǔ)義分析 - 調(diào)試模式(查看分析過(guò)程)
pdftoc semantic document.pdf -o output.md --debug --verbose

# 結(jié)構(gòu)分析 - 寬松模式(識(shí)別更多潛在標(biāo)題)
pdftoc analyze document.pdf -o output.md --relaxed

# 結(jié)構(gòu)分析 - 自定義參數(shù)
pdftoc analyze document.pdf -o output.md --min-font-size 14 --use-bold --debug

# 智能提取 - 帶結(jié)構(gòu)分析配置
pdftoc smart document.pdf -o output.md --analysis-preset strict --debug-analysis

# 顯示詳細(xì)輸出
pdftoc smart document.pdf -o output.md --verbose

# 診斷PDF文件問(wèn)題
pdftoc diagnose document.pdf

作為庫(kù)使用

安裝核心庫(kù)

dotnet add package PdfTocExtractor

代碼示例

using PdfTocExtractor;
using PdfTocExtractor.Exporters;
using PdfTocExtractor.Models;

// 創(chuàng)建提取器實(shí)例
var extractor = new PdfTocExtractor();

// ?? 智能提?。ㄍ扑])- 自動(dòng)選擇最佳方法
var tocItems = await extractor.ExtractTocSmartAsync("document.pdf");

// ?? 傳統(tǒng)方法:提取PDF書(shū)簽
var bookmarkItems = await extractor.ExtractTocAsync("document.pdf");

// ?? 結(jié)構(gòu)分析:適用于無(wú)書(shū)簽的PDF
var structureItems = await extractor.AnalyzeStructureAsync("document.pdf");

// ?? 結(jié)構(gòu)分析:使用自定義配置
var analysisOptions = new StructureAnalysisOptions
{
    MinFontSizeForHeading = 14f,
    UseBoldAsIndicator = true,
    MaxHeadingLevels = 4,
    RequireStandaloneHeadings = true,
    DebugMode = false
};
var customStructureItems = await extractor.AnalyzeStructureAsync("document.pdf", analysisOptions);

// ?? 使用預(yù)設(shè)配置
var strictItems = await extractor.AnalyzeStructureAsync("document.pdf", StructureAnalysisOptions.Strict);
var relaxedItems = await extractor.AnalyzeStructureAsync("document.pdf", StructureAnalysisOptions.Relaxed);

// 導(dǎo)出為Markdown
await extractor.ExportToFileAsync(tocItems, "output.md", "markdown");

// 導(dǎo)出為JSON(帶自定義選項(xiàng))
var exportOptions = new ExportOptions
{
    MaxDepth = 3,
    IncludePageNumbers = true,
    CustomTitle = "文檔目錄"
};
await extractor.ExportToFileAsync(tocItems, "output.json", "json", exportOptions);

// 智能提取并直接導(dǎo)出
await extractor.ExtractSmartAndExportAsync("document.pdf", "output.xml",
    exportOptions: exportOptions,
    structureOptions: StructureAnalysisOptions.Default);

擴(kuò)展性

可以通過(guò)實(shí)現(xiàn) IExporter 接口來(lái)創(chuàng)建自定義導(dǎo)出器:

public class CustomExporter : IExporter
{
    public string FormatName => "Custom";
    public string FileExtension => "custom";

    public string Export(IEnumerable<TocItem> tocItems, ExportOptions? options = null)
    {
        // 實(shí)現(xiàn)自定義導(dǎo)出邏輯
        return "custom format content";
    }

    public async Task ExportToFileAsync(IEnumerable<TocItem> tocItems, string filePath, ExportOptions? options = null)
    {
        var content = Export(tocItems, options);
        await File.WriteAllTextAsync(filePath, content);
    }
}

// 注冊(cè)自定義導(dǎo)出器
extractor.RegisterExporter("custom", new CustomExporter());

技術(shù)實(shí)現(xiàn)

PdfTocExtractor 使用以下技術(shù):

  • .NET 9.0 - 現(xiàn)代化的.NET平臺(tái)
  • iText 9.2.0 - 強(qiáng)大的PDF處理庫(kù)
  • iText7.bouncy-castle-adapter 9.2.0 - 加密PDF支持(必需)
  • Newtonsoft.Json 13.0.3 - JSON序列化
  • System.CommandLine 2.0.0 - 命令行參數(shù)解析
  • AOT編譯支持 - 原生性能,無(wú)需.NET運(yùn)行時(shí)

TODO 計(jì)劃

AI 增強(qiáng)功能

AI 目錄識(shí)別 - 使用機(jī)器學(xué)習(xí)技術(shù)識(shí)別沒(méi)有書(shū)簽/大綱數(shù)據(jù)的PDF文檔目錄結(jié)構(gòu)

  • 集成 OCR 技術(shù)識(shí)別掃描版PDF中的目錄頁(yè)面
  • 基于文本分析和格式識(shí)別的智能目錄提取
  • 支持多語(yǔ)言目錄識(shí)別(中文、英文、日文等)
  • 目錄層級(jí)結(jié)構(gòu)智能推斷
  • 頁(yè)碼與目錄項(xiàng)的自動(dòng)匹配算法

Web 服務(wù)接口

RESTful API 開(kāi)發(fā) - 提供基于 HTTP 的 Web API 服務(wù)

  • PDF 文件上傳接口
  • 目錄提取 API 端點(diǎn)
  • 多格式導(dǎo)出 API(JSON、XML、Markdown等)
  • 批量處理接口
  • 任務(wù)狀態(tài)查詢(xún)接口
  • API 文檔和 Swagger 集成

Web 前端界面

現(xiàn)代化 Web UI - 開(kāi)發(fā)用戶(hù)友好的 Web 前端界面

  • 拖拽式 PDF 文件上傳
  • 實(shí)時(shí)目錄提取進(jìn)度顯示
  • 目錄結(jié)構(gòu)可視化預(yù)覽
  • 多格式導(dǎo)出選項(xiàng)界面
  • 歷史記錄和文件管理
  • 響應(yīng)式設(shè)計(jì),支持移動(dòng)端訪(fǎng)問(wèn)

技術(shù)架構(gòu)優(yōu)化

微服務(wù)架構(gòu) - 將功能模塊化為獨(dú)立的微服務(wù)

  • PDF 處理服務(wù)
  • AI 識(shí)別服務(wù)
  • 文件存儲(chǔ)服務(wù)
  • 用戶(hù)管理服務(wù)
  • 容器化部署支持(Docker)

高級(jí)功能

智能分析 - 提供更多文檔分析功能

  • 文檔結(jié)構(gòu)分析和統(tǒng)計(jì)
  • 目錄質(zhì)量評(píng)估
  • 重復(fù)內(nèi)容檢測(cè)
  • 文檔相似度比較
  • 批量文檔處理和分析報(bào)告

企業(yè)級(jí)功能

安全和權(quán)限 - 企業(yè)級(jí)安全特性

  • 用戶(hù)認(rèn)證和授權(quán)
  • 文件訪(fǎng)問(wèn)權(quán)限控制
  • 審計(jì)日志記錄
  • 數(shù)據(jù)加密存儲(chǔ)
  • API 訪(fǎng)問(wèn)限制和配額管理

小結(jié)

到這里,PdfTocExtractor 的核心能力已經(jīng)完整亮相:不管你的 PDF 有沒(méi)有書(shū)簽,都能一鍵生成結(jié)構(gòu)化目錄;想要命令行批處理還是在代碼里靈活調(diào)用,都不在話(huà)下。

在實(shí)際項(xiàng)目中,這個(gè)工具已經(jīng)幫我節(jié)省了大量手動(dòng)整理目錄的時(shí)間,也避免了 OCR 誤識(shí)別、格式混亂等繁瑣問(wèn)題。尤其是新版的 SmartSemantic 雙引擎,既快又準(zhǔn),真香!

當(dāng)然,項(xiàng)目還遠(yuǎn)遠(yuǎn)沒(méi)有到“終點(diǎn)”。后續(xù)的 AI 目錄識(shí)別、Web API、現(xiàn)代化 UI 乃至企業(yè)權(quán)限體系,都在 Roadmap 上等著逐步落地。如果你也對(duì)這些方向感興趣,歡迎 issue / PR / Star,一起把它打造成最好用的 PDF 目錄工具!

到此這篇關(guān)于純C#實(shí)現(xiàn)智能PDF目錄提取工具PdfTocExtractor的文章就介紹到這了,更多相關(guān)C#提取PDF目錄內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C# ConcurrentDictionary的使用小結(jié)

    C# ConcurrentDictionary的使用小結(jié)

    ConcurrentDictionary是.NET中用于高并發(fā)讀寫(xiě)的線(xiàn)程安全字典,適用于多線(xiàn)程環(huán)境,本文就來(lái)介紹一下C# ConcurrentDictionary的使用小結(jié),感興趣的可以了解一下
    2025-12-12
  • 適用于WebForm Mvc的Pager分頁(yè)組件C#實(shí)現(xiàn)

    適用于WebForm Mvc的Pager分頁(yè)組件C#實(shí)現(xiàn)

    這篇文章主要為大家分享了適用于WebForm Mvc的Pager分頁(yè)組件,由C#實(shí)現(xiàn),感興趣的小伙伴們可以參考一下
    2016-04-04
  • C#中多線(xiàn)程ManualResetEvent 與 AutoResetEvent 區(qū)別

    C#中多線(xiàn)程ManualResetEvent 與 AutoResetEvent 區(qū)別

    這篇文章主要介紹了C#中ManualResetEvent 與 AutoResetEvent 區(qū)別,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • C#程序加密與解密的流程步驟

    C#程序加密與解密的流程步驟

    文章介紹了一種基于CPU和硬盤(pán)編碼的C#程序加密方法,包括生成、驗(yàn)證和保存注冊(cè)碼的過(guò)程,以及如何在用戶(hù)軟件和解密程序中實(shí)現(xiàn)這一功能,文中通過(guò)代碼示例和圖文講解的非常詳細(xì),需要的朋友可以參考下
    2025-03-03
  • vs 中C#項(xiàng)目讀取JSON配置文件的方法

    vs 中C#項(xiàng)目讀取JSON配置文件的方法

    這篇文章主要介紹了vs中 C#項(xiàng)目讀取JSON配置文件的相關(guān)知識(shí),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-04-04
  • C# 實(shí)現(xiàn)微信自定義分享的示例代碼

    C# 實(shí)現(xiàn)微信自定義分享的示例代碼

    這篇文章主要介紹了C# 實(shí)現(xiàn)微信自定義分享的示例代碼,文中通過(guò)代碼示例給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,感興趣的同學(xué)可以自己動(dòng)手嘗試一下
    2024-02-02
  • Qt程序中調(diào)用C#編寫(xiě)的dll(推薦)

    Qt程序中調(diào)用C#編寫(xiě)的dll(推薦)

    這篇文章主要介紹了Qt程序中調(diào)用C#編寫(xiě)的dll,本文圖文并茂給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-04-04
  • c#在程序中定義和使用自定義事件方法總結(jié)

    c#在程序中定義和使用自定義事件方法總結(jié)

    在本篇文章中小編給大家整理了關(guān)于c#在程序中定義和使用自定義事件方法總結(jié)相關(guān)知識(shí)點(diǎn),需要的朋友們學(xué)習(xí)下。
    2019-03-03
  • C#實(shí)現(xiàn)字符串轉(zhuǎn)換成字節(jié)數(shù)組的簡(jiǎn)單實(shí)現(xiàn)方法

    C#實(shí)現(xiàn)字符串轉(zhuǎn)換成字節(jié)數(shù)組的簡(jiǎn)單實(shí)現(xiàn)方法

    這篇文章主要介紹了C#實(shí)現(xiàn)字符串轉(zhuǎn)換成字節(jié)數(shù)組的簡(jiǎn)單實(shí)現(xiàn)方法,僅一行代碼即可搞定,非常簡(jiǎn)單實(shí)用,需要的朋友可以參考下
    2015-05-05
  • C#中dynamic關(guān)鍵字的正確用法(推薦)

    C#中dynamic關(guān)鍵字的正確用法(推薦)

    dynamic的出現(xiàn)讓C#具有了弱語(yǔ)言類(lèi)型的特性。dynamic是FrameWork4.0的新特性。這篇文章主要介紹了C#中dynamic關(guān)鍵字的正確用法(推薦)的相關(guān)資料,需要的朋友可以參考下
    2016-11-11

最新評(píng)論

娱乐| 玉溪市| 菏泽市| 工布江达县| 甘孜| 察雅县| 梁平县| 济宁市| 浑源县| 葵青区| 沙坪坝区| 湖南省| 黄浦区| 贵定县| 容城县| 六盘水市| 河池市| 岳西县| 库尔勒市| 双城市| 桓台县| 西乌| 汶川县| 兰西县| 浏阳市| 罗田县| 濮阳县| 洪洞县| 绥宁县| 娄底市| 荣昌县| 浙江省| 琼中| 武强县| 澄城县| 建阳市| 泾源县| 桂林市| 酒泉市| 吉首市| 资中县|