RepoTrending
Về bảng xếp hạng
GitHubWeb / Ứng dụngRust

firecrawl/anydoc

Chuyển đổi Word, PowerPoint, Excel, OpenDocument, RTF, EPUB, CSV và PDF để xóa Markdown. Được tích hợp trong Rust, với các liên kết Node.js và Python.

18k sao1.1k fork

README

bất kỳ tài liệu nào

Crates.io npm PyPI License: MIT skills.sh

Thư viện Rust nhanh giúp chuyển đổi tài liệu (Word, PowerPoint, Excel, OpenDocument, RTF, EPUB, CSV và PDF) thành GitHub-Flavored Markdown sạch. Bao gồm các ràng buộc cho Node.js, Python, và trình duyệt (WebAssembly).

Được xây dựng bởi Pháo hoa để biến bất kỳ tài liệu văn phòng nào thành Markdown sẵn sàng cho LLM trong một phần nghìn giây một chữ số, với một đầu ra nhất quán cho dù sử dụng định dạng nào. Nó hỗ trợ Phân tích cú pháp Firecrawl, vì vậy nếu bạn không muốn tự mình chạy nó thì API được lưu trữ sẽ cung cấp cho bạn chuyển đổi tương tự cộng với các mô hình OCR của chúng tôi dành cho các trang được quét mà Anydoc không thể tự đọc được.

Hãy thử nó trong trình duyệt của bạn: trang demo chạy thư viện dưới dạng WebAssugging, do đó các tệp được chuyển đổi cục bộ và không bao giờ rời khỏi máy của bạn.

Bắt đầu nhanh

Kỹ năng đại lý

Anydoc được cung cấp dưới dạng Kỹ năng đặc vụ, để nhân viên hỗ trợ của bạn có thể đọc bất kỳ tài liệu nào mà nhân viên đó truy cập:

npx skills add firecrawl/anydoc

các kỹ năng hướng dẫn tác nhân chuyển đổi tài liệu bằng Anydoc CLI. Hoạt động với Claude Code, Codex, Cursor, Mã mở, và bất kỳ thứ gì khác đại lý tương thích.

CLI

npx @firecrawl/anydoc report.docx               # Markdown to stdout
npx @firecrawl/anydoc slides.pptx -o slides.md  # or to a file
npx @firecrawl/anydoc - --format csv < data.csv # read stdin

npx tải xuống tệp nhị phân dựng sẵn cho nền tảng của bạn trong lần chạy đầu tiên. Để vĩnh viễn anydoc lệnh, cài đặt trên toàn cầu với npm install -g @firecrawl/anydoc. Chạy anydoc --help cho tất cả các lựa chọn.

Node.js

npm install @firecrawl/anydoc
import { toDocument, toMarkdown, toMarkdownBytes } from '@firecrawl/anydoc';

// From a file path:
const markdown = await toMarkdown('report.docx');

// From bytes, with the format detected from the content:
const fromBytes = await toMarkdownBytes(bytes);

// Or name it, which signature-less formats (CSV) need:
const fromCsv = await toMarkdownBytes(bytes, 'csv');

// Or stop at the document model, which also carries embedded assets:
const document = await toDocument(bytes);

Tham chiếu đầy đủ API: nút/README.md

Python

pip install firecrawl-anydoc
import anydoc

# From a file path:
markdown = anydoc.to_markdown("report.docx")

# From bytes, with the format detected from the content:
markdown = anydoc.to_markdown_bytes(data)

# Or name it, which signature-less formats (CSV) need:
markdown = anydoc.to_markdown_bytes(data, "csv")

# Or stop at the document model, which also carries embedded assets:
document = anydoc.to_document(data)

Tham chiếu đầy đủ API: Python/README.md

Trình duyệt (WebAssembly)

npm install @firecrawl/anydoc-wasm
import init, { toMarkdownBytes, toDocument } from '@firecrawl/anydoc-wasm';

await init();

// From bytes, with the format detected from the content:
const markdown = toMarkdownBytes(bytes);

// Or name it, which signature-less formats (CSV) need:
const fromCsv = toMarkdownBytes(bytes, 'csv');

// Or stop at the document model, which also carries embedded assets:
const document = toDocument(bytes);

Tham chiếu đầy đủ API: wasm/README.md

Rust

cargo add anydoc
// From a file path:
let markdown = anydoc::to_markdown("report.docx")?;

// From bytes, with the format detected from the content:
let markdown = anydoc::to_markdown_bytes(&bytes, None)?;

// Or name it, which signature-less formats (CSV) need:
let markdown = anydoc::to_markdown_bytes(&bytes, anydoc::Format::Csv)?;

// Or stop at the document model, which also carries embedded assets:
let document = anydoc::to_document(&bytes, None)?;

Tính năng

  • Một đầu ra cho mọi định dạng. Mỗi định dạng phân tích cú pháp thành một mô hình tài liệu được chia sẻ và hiển thị thông qua một bộ nối tiếp Markdown duy nhất, do đó, các lối thoát, bảng, neo tiêu đề và chú thích cuối trang hoạt động giống hệt nhau cho dù đầu vào là .doc từ năm 2003 hoặc một .pptx từ hôm qua.
  • Cấu trúc tài liệu đầy đủ. Tiêu đề có dấu neo, in đậm/nghiêng/gạch ngang, mã nội tuyến và khối mã, liên kết và tham chiếu chéo nội bộ, danh sách dấu đầu dòng/đánh số/lồng nhau/nhiệm vụ với cách đánh số riêng của nguồn, bảng có các ô và hàng tiêu đề được hợp nhất, dấu ngoặc kép, chú thích cuối trang và chú thích cuối cùng cũng như ghi chú của người thuyết trình.
  • Các phương trình như LaTeX. Các phương trình Word và PowerPoint (OMML), OpenDocument và EPUB (MathML) cũng như RTF chuyển đổi sang dạng toán theo định dạng GitHub: $...$ nội tuyến và $$ khối.
  • Tài sản nhúng. Hình ảnh và đối tượng được nhúng hiển thị dưới dạng văn bản thay thế trong Markdown và các byte thô vẫn có sẵn trên mô hình tài liệu, được gắn thẻ với loại phương tiện của chúng. Hình ảnh có URL bên ngoài trở thành hình ảnh Markdown thông thường.
  • Phát hiện định dạng dựa trên nội dung. Định dạng được đọc từ chính các byte (tiêu đề PDF, nhóm mở RTF, tên luồng OLE, mimetype gói ZIP), do đó các tệp bị gắn nhãn sai vẫn chuyển đổi chính xác.
  • Nhanh. thuần túy Rust, không có mô hình ML, không có dịch vụ bên ngoài. Thời gian chuyển đổi trung bình là dưới 5 mili giây cho mỗi tài liệu.
  • Những ràng buộc không thể tránh khỏi. Chuyển đổi Node.js chạy trên nhóm luồng libuv và không bao giờ chặn vòng lặp sự kiện; Python giải phóng GIL để các luồng khác tiếp tục chạy. Các loại TypeScript và cuống Python được gửi cùng với các gói.
  • Hỗ trợ PDF được tích hợp sẵn. Các tệp PDF dựa trên văn bản chuyển đổi cục bộ thông qua thanh tra pdf, không cần dịch vụ OCR.
  • Đại lý đã sẵn sàng. Vận chuyển như một Kỹ năng đặc vụ: một npx skills add firecrawl/anydoc và bất kỳ đại lý nào cũng có thể đọc tài liệu văn phòng.

Các định dạng được hỗ trợ

định dạng Tiện ích mở rộng
từ .doc, .docx, .docm
PowerPoint .ppt, .pps, .pot, .pptx, .pptm, .ppsx, .ppsm
Excel .xls, .xlsx, .xlsm, .xlsb
Tài liệu mở .odt, .ods, .odp
Định dạng văn bản có định dạng .rtf
EPUB .epub
CSV .csv
PDF .pdf

Điểm chuẩn

Anydoc được đo dựa trên sáu bộ chuyển đổi khác trên 100 tài liệu trong thế giới thực trải rộng trên mười bốn định dạng. Điểm chạy từ 0 đến 100, càng cao càng tốt; tốc độ là thời gian trung bình để chuyển đổi một tài liệu.

công cụ định dạng mili giây trung bình tài liệu đánh giá ghi điểm sự đầy đủ cấu trúc định dạng sự sạch sẽ
bất kỳ tài liệu nào 14/14 4.4 94 81 87 79 78 81
thư viện 12/14 1129.5 87 40 59 42 40 24
không có cấu trúc 8/14 572.9 58 63 76 59 51 63
giảm giá 6/14 134.8 33 65 78 66 60 52
pandoc 5/14 102.1 34 56 74 57 56 38
ghi chép 4/14 513.6 21 57 60 60 57 51
voi ma mút 1/14 52.5 8 70 84 71 75 51

Mỗi định dạng, thích cho thích:

định dạng bất kỳ tài liệu nào thư viện không có cấu trúc giảm giá pandoc ghi chép voi ma mút
bác sĩ 87 57 67 - - - -
tài liệu 84 48 - - - - -
docx 88 56 53 71 68 71 70
epub 77 - 72 72 52 - -
odp 86 23 - - - - -
ôi 82 38 - - - - -
số lẻ 80 51 68 - 60 - -
ppt 80 26 - - - - -
pptx 74 24 - 66 - 52 -
rtf 88 53 46 - 45 - -
xls 80 38 66 62 - - -
xlsm 76 32 - - - - -
xlsx 72 30 66 55 - 47 -

Chất lượng được chấm điểm như thế nào: một thẩm phán LLM (Claude Sonnet 5) so sánh kết quả đầu ra của hai công cụ một cách mù quáng với sự thật cơ bản: sáu trang đầu tiên của tài liệu, được LibreOffice hiển thị thành hình ảnh. Mỗi đầu ra được chấm điểm dựa trên tính đầy đủ, cấu trúc, định dạng và độ sạch sẽ. Mỗi cặp được đánh giá hai lần với kết quả đầu ra được hoán đổi để loại bỏ sai lệch vị trí, tổng cộng có 482 phán quyết. Mỗi công cụ score tính trung bình điểm số trên mỗi định dạng của nó so với các định dạng mà nó hỗ trợ, do đó, một kho văn bản nặng về một định dạng không thể làm sai lệch nó. Điều đó cũng có nghĩa là mỗi hàng tính trung bình một tập hợp định dạng khác nhau (69 của voi ma mút chỉ là docx, trong khi 81 của Anydoc bao gồm cả 14 định dạng), vì vậy bảng theo định dạng là sự so sánh công bằng.

Tốc độ là một chuyển đổi ấm cho mỗi tài liệu trên Ryzen 9 9950X3D (Windows 11, 64 GB DDR5-6400). thư viện Anydoc và Python được tính thời gian với quá trình loại trừ xuất hiện; các công cụ CLI bao gồm nó vì đó là cách chúng được sử dụng. Dây nịt sống ở bench/; kho văn bản không thể phân phối lại được và không có trong kho lưu trữ.

Phù hợp nhất: các quy trình nhận được nhiều loại tài liệu văn phòng hỗn hợp và cần một đầu ra Markdown có cấu trúc, nhất quán. Trong so sánh này, Anydoc là công cụ duy nhất bao gồm tất cả 14 định dạng, đạt điểm cao nhất trên mọi định dạng được đánh giá và chuyển đổi tài liệu nhanh hơn nhiều so với công cụ nhanh nhất tiếp theo.

Phát hiện định dạng

Định dạng được đọc từ nội dung tệp, sử dụng điểm đánh dấu chỉ định thông số kỹ thuật của nó: tiêu đề PDF, nhóm mở RTF, tên luồng OLE, mimetype gói ZIP và loại nội dung. CSV không có điểm đánh dấu như vậy nên phần mở rộng hoặc định dạng rõ ràng sẽ đặt tên cho nó.

Format::from_bytes(&bytes); // Some(Format::Docx), or None when nothing matches
Format::from_extension("pptm"); // Some(Format::Pptx)
Format::from_path(Path::new("report.odt")); // Some(Format::Odt)

Ba chức năng tương tự tồn tại trong Node (formatFromBytes, ...) và Python (anydoc.format_from_bytes, ...).

Lỗi

Một chuyển đổi trở lại Err chỉ khi không có Markdown có ý nghĩa nào có thể thoát ra khỏi tệp. ConvertError kể tên những gì đã xảy ra:

match anydoc::to_markdown(path) {
    Ok(markdown) => Some(markdown),
    // No document comes out of these, so record the file and take the next one.
    Err(error @ (ConvertError::Encrypted | ConvertError::Unsupported(_))) => {
        unconverted.push((path, error));
        None
    }
    Err(error) => return Err(error),
}
Biến thể Ý nghĩa
Unsupported Định dạng không xác định hoặc định dạng không thể chuyển đổi được (PDF chỉ có hình ảnh)
Malformed Về mặt cấu trúc không thể sử dụng được: không thể trích xuất được nội dung có ý nghĩa
Encrypted Được mã hóa hoặc bảo vệ bằng mật khẩu
ResourceLimit Vượt qua giới hạn an toàn cố định (giải nén, lồng, số nút)
MissingPart Thiếu một phần cần thiết cho bất kỳ đầu ra có ý nghĩa nào
Io Không thể đọc được tập tin, từ to_markdown chỉ

Node và wasm xuất bản tên biến thể trên error.code; Python tăng một anydoc.ConvertError lớp con cho mỗi biến thể, hoặc OSError khi không thể đọc được tập tin.

Nó hoạt động như thế nào

document bytes
  │
  ├─► format detection      → content markers, not the extension
  │
  ├─► format parser          → one per format (doc, docx, ppt, pptx, xls,
  │                            xlsx, odt/ods/odp, rtf, epub, csv)
  │         │
  │         └─► Document     → shared model: blocks, inlines, tables,
  │                            footnotes, assets
  │               │
  │               └─► GFM serializer → Markdown
  │
  └─► PDF → pdf-inspector    → Markdown directly

Bởi vì mọi định dạng đều thông qua cùng một mô hình tài liệu và bộ tuần tự hóa nên các lỗi đầu ra sẽ được khắc phục một lần. Bản sửa lỗi thoát bảng cho docx tự động là bản sửa lỗi thoát bảng cho rtf, odt và mọi thứ khác.

Phát triển

cargo test
cd node && npm install && npm run build && npm test
cd python && pip install maturin && maturin develop && python -m unittest discover -s tests
wasm-pack build wasm --release --target web --scope firecrawl && node --test wasm/test.mjs  # see wasm/README.md

Một kho nội dung cố định đã cam kết dưới tests/fixtures/ đã được kiểm tra ảnh chụp nhanh, tests/robustness.rs kiểm tra đột biến mọi vật cố định, và fuzz/ mang các mục tiêu lông tơ hàng hóa trên mỗi định dạng. Điểm chuẩn về tốc độ và chất lượng tồn tại trong bench/.

Các bản phát hành được gắn thẻ v<version>, nơi xuất bản thùng, gói npm và bánh xe PyPI từ .github/workflows/release.yml. Phiên bản tồn tại ở ba nơi, được kết hợp với nhau để phát hành:

Giấy phép

MIT

Dự án cùng danh mục

freeCodeCamp/freeCodeCamp

chương trình giảng dạy và cơ sở mã nguồn mở của freeCodeCamp.org. Học toán, lập trình và khoa học máy tính miễn phí.

455k46k7 giờ trước
GitHubWeb / Ứng dụngTypeScript

awesome-selfhosted/awesome-selfhosted

Danh sách các dịch vụ mạng và ứng dụng web của Phần mềm miễn phí có thể được lưu trữ trên máy chủ của riêng bạn

315k15k2 ngày trước
GitHubWeb / Ứng dụng

clash-verge-rev/clash-verge-rev

Máy khách GUI hiện đại dựa trên Tauri, được thiết kế để chạy trong Windows, macOS và Linux để mang lại trải nghiệm proxy phù hợp

140k10k6 giờ trước
GitHubWeb / Ứng dụngTypeScript

rust-lang/rust

Trao quyền cho mọi người để xây dựng phần mềm đáng tin cậy và hiệu quả.

116k15k56 phút trước
GitHubWeb / Ứng dụngRust

2dust/v2rayN

Ứng dụng khách GUI cho Windows, Linux và macOS, hỗ trợ Xray, sing-box và các ứng dụng khác

115k16k4 giờ trước
GitHubWeb / Ứng dụngC#

tauri-apps/tauri

Xây dựng các ứng dụng di động và máy tính để bàn nhỏ hơn, nhanh hơn và an toàn hơn với giao diện người dùng web.

111k3.9k3 giờ trước
GitHubWeb / Ứng dụngRust