Dùng Python chuyển đổi PDF sang Markdown

Nội dung

    PDF là các bài báo nghiên cứu dày đặc hoặc các tài liệu chứa đầy bảng, hình ảnh và siêu dữ liệu. Đối với bất kỳ ai trong thế giới AI — đặc biệt là những người tinh chỉnh các mô hình ngôn ngữ lớn (LLM) hoặc xây dựng các hệ thống truy xuất kiến ​​thức như RAG (Retrieval-Augmented Generation) — việc trích xuất dữ liệu phù hợp là rất quan trọng.

    Dữ liệu đầu vào cho đường ống RAG Retrieval Augmented Generation có thể có nhiều loại, nhưng đầu vào phổ biến nhất là PDF. Không giống như HTML, JSON hoặc Markdown có cấu trúc, PDF là tài liệu không có cấu trúc . Vì vậy, ngay cả trước khi chúng ta phân đoạn dữ liệu từ các tài liệu PDF, chúng ta cần phân tích cú pháp như trong hình trên.

    Dùng Python chuyển đổi PDF sang Markdown

    Chúng ta thấy Chunking, một phần của bước thu thập dữ liệu. Thu thập dữ liệu không hoàn tất nếu không có chunking, nhúng và lưu trữ trong Vector DB.

    Phân tích cú pháp PDF

    Phân tích PDF là trích xuất và diễn giải thông tin từ các tệp PDF (Định dạng tài liệu di động). Nó bao gồm việc phân tích cấu trúc và nội dung của tệp PDF để trích xuất thông tin có ý nghĩa, chẳng hạn như văn bản, hình ảnh, bảng và siêu dữ liệu.

    Mục đích của việc phân tích cú pháp PDF có thể là nhiều mục đích như tìm kiếm văn bản và chuyển đổi PDF thành tài liệu có cấu trúc như HTML, Markdown, v.v. Tuy nhiên, mục đích của chúng tôi ở đây chủ yếu là trích xuất thông tin có giá trị để đào tạo LLM hoặc cho RAG. Vì vậy, chúng tôi sẽ trích xuất văn bản, bảng, hình ảnh, đồ họa và siêu dữ liệu.

    Những thách thức với việc phân tích PDF

    Trong khi các tài liệu HTML là các biểu diễn phân cấp với các thẻ được xác định rõ ràng như <img> hoặc <title>, cấu trúc bên trong của các tài liệu PDF được tối ưu hóa để duy trì tính nhất quán về mặt hình ảnh. Nói cách khác, PDF bao gồm một loạt các hướng dẫn để hiển thị các ký hiệu. Điều này tạo ra một cấp độ thách thức hoàn toàn mới khi xử lý các tài liệu PDF.

    Thách thức đầu tiên là xác định bố cục của trang. Thách thức thứ hai là trích xuất các loại dữ liệu khác nhau như bảng, hình ảnh hoặc văn bản từ pdf.

    Định dạng PDF so với HTML

    Với thách thức khi xử lý tài liệu PDF so với tài liệu có cấu trúc như JSON hoặc HTML, một câu hỏi tự nhiên có thể nảy sinh là tại sao chúng ta cần PDF. Một số ưu điểm được nêu bật trong bảng bên dưới và được giải thích thêm ở bên dưới:

    Dùng Python chuyển đổi PDF sang Markdown

    Nói ngắn gọn, PDF an toàn và dễ truy cập bằng mọi thiết bị và hệ điều hành. Chúng dễ nén thành kích thước thuận tiện. Chúng dễ quét và do đó, lý tưởng để in. Không giống như HTML mất định dạng trên các trình duyệt hoặc hệ điều hành, PDF giữ nguyên định dạng của chúng.

    PDF được sử dụng để bảo toàn định dạng và do đó được sử dụng khi cần tuân theo các bố cục cứng nhắc (nghĩ đến các biểu mẫu). Chúng chủ yếu được sử dụng khi nội dung cần được sử dụng thay vì chỉnh sửa. Ví dụ bao gồm tài liệu đọc khóa học, báo cáo công ty, v.v. có thể dễ dàng in và phân phối. Vì vậy, việc phân tích PDF trở thành một bước tất yếu để chuẩn bị dữ liệu cung cấp cho các đường ống LLM và RAG.

    Phương pháp phân tích PDF

    Có ba loại phương pháp phân tích cú pháp PDF rộng dựa trên cách tiếp cận của chúng tôi đối với cách chúng tôi xử lý PDF. Chúng là,

    Phương pháp dựa trên quy tắc

    Phân tích cú pháp dựa trên quy tắc cũng được gọi là dựa trên mẫu. Nó tuân theo các quy tắc được xác định trước để trích xuất thông tin dựa trên các mẫu hoặc vị trí.

    Một ví dụ hay về việc phân tích cú pháp dựa trên quy tắc là phân tích biểu mẫu. Ví dụ, một tổ chức có thể sử dụng mẫu chuẩn để đăng ký nhân viên mới. Phân tích cú pháp dựa trên quy tắc sẽ hiệu quả trong trường hợp sử dụng này. Một ví dụ hay khác có thể là trích xuất dữ liệu từ hóa đơn và cập nhật chi phí vào cơ sở dữ liệu nội bộ.

    Phương pháp dựa trên đường ống

    Các phương pháp dựa trên đường ống chia nhỏ tác vụ phân tích cú pháp pdf thành một loạt các bước hoặc tác vụ. Ví dụ, bước đầu tiên có thể là sửa độ mờ hoặc hướng của trang. Bước thứ hai có thể thực hiện phân tích bố cục của cả phân tích cấu trúc trực quan và ngữ nghĩa, xác định vị trí của hình ảnh, bảng và văn bản. Ví dụ, trang có thể là văn bản hai cột thay vì một cột. Bước thứ ba sau đó có thể trích xuất bảng, văn bản và hình ảnh từ bố cục đã xác định. Bước cuối cùng có thể là tích hợp kết quả đã xác định để khôi phục trang thành định dạng HTML hoặc Markdown.

    Dùng Python chuyển đổi PDF sang Markdown

    Phương pháp dựa trên học tập

    Chúng dựa trên các mô hình học máy hoặc học sâu. Giống như bất kỳ phương pháp học nào khác, chúng cần một số dữ liệu để đào tạo và phát triển mô hình. Chúng có thể được chia thành ba loại, cụ thể là dựa trên học sâu và dựa trên mô hình nhỏ.

    Dùng Python chuyển đổi PDF sang Markdown

    Một số phương pháp tiếp cận nổi tiếng được thể hiện trong hình trên. Chúng bao gồm Mạng nơ-ron tích chập (CNN), các mô hình Nhận dạng ký tự quang học như Tesseract từ Google, Table Transformer từ Microsft và các thuật toán Phát hiện và phân đoạn như Mask R-CNN để phát hiện bố cục. Hoặc có thể sử dụng một mô hình phân loại tài liệu đơn giản để phân loại loại tài liệu sau đó có thể được xử lý thêm bằng một đường ống.

    Phương pháp kết hợp.

    Đúng như tên gọi, phương pháp này kết hợp các phương pháp dựa trên quy tắc và phương pháp học tập để tận dụng tối đa cả hai phương pháp.

    Sự đánh đổi cần cân nhắc
    Khi lựa chọn phương pháp xây dựng quy trình phân tích cú pháp PDF, một số cân nhắc chính bao gồm độ phức tạp của tài liệu, sức mạnh tính toán mà chúng ta có và yêu cầu về độ trễ của hệ thống.

    Dùng PyTorch chuyển đổi PDF sang Markdown

    Tôi đã sử dụng nhiều công cụ trực tuyến để chuyển đổi tài liệu PDF sang định dạng Markdown, nhưng không có công cụ nào có thể so sánh vớiMarker.

    Cùng với chuyển đổi Markdown cơ bản, nó định dạng bảng, chuyển đổi hầu hết các phương trình sang latex, trích xuất và lưu trữ hình ảnh.

    Theokho lưu trữ GitHubcủa Marker , bạn cần cài đặt:

    Dùng Python chuyển đổi PDF sang Markdown

    Để cài đặt PyTorch, hãy truy cậptrang web chính thức của PyTorch và bạn sẽ thấy hình ảnh tương tự như bên trên:

    Bạn có thể điều chỉnh các tùy chọn đó để xem tùy chọn nào phù hợp nhất với hệ thống của bạn. Khi đã có lệnh, Windows 11 hãy mở PowerShell hoặc Command Prompt và dán lệnh của bạn vào đó.

    Đây là lệnh tôi đã sử dụng để cài đặt PyTorch:

    pip3 install torch torchvision torchaudio –index-url https://download.pytorch.org/whl/cu118

    Sẽ mất một thời gian để tải xuống và cài đặt vì tệp chính có dung lượng lên tới 2,7 GB. Sau vài phút, PyTorch sẽ được cài đặt. Bây giờ, các điều kiện tiên quyết đã xong. Tiếp theo, bạn có thể tiếp tục và chuyển sang phần Marker thực tế. Bạn có thể sao chép dự án Marker trên hệ thống cục bộ của mình bằng lệnh sau: git clone https://github.com/VikParuchuri/marker.git

    Chúng tôi đã sao chép kho lưu trữ nhưng vẫn không thể chuyển đổi tệp PDF sang định dạng Markdown vì chúng tôi chưa cài đặt Marker. Bên ngoài kho lưu trữ GitHub Marker mới được sao chép, hãy tạo một môi trường mới để chuyển đổi tệp PDF sang Markdown.

    python -m venv myenv

    Thao tác này sẽ kích hoạt môi trường mới được tạo.

    myenv\Scripts\activate

    cài đặtmarker-pdfbằng trình quản lý góipip.

    pip install marker-pdf

    Bây giờ chúng ta đã sẵn sàng để chuyển đổi tài liệu PDF sang tệp Markdown! Để chuyển đổi PDF sang Markdown, chúng ta cần hai thứ:

    Đường dẫn đầu vào của PDF
    Đường dẫn đầu ra
    Bởi vì lệnh chuyển đổi có nội dung tương tự như sau:

    mark_single “input_path” “output_path” – batch_multiplier 2 – max_pages 12

    Do đó, bên trong thư mục dự án GitHub đã sao chép, tôi sẽ tạo hai thư mục: pdf: Thư mục đầu vào của tôi, đầu ra: Thư mục đầu ra của tôi

    marker_single “D:/projects/marker-pdf/marker/pdfs/Get_Started_With_Smallpdf.pdf” “D:/projects/marker-pdf/marker/output” – batch_multiplier 2 – max_pages 12

    Sau khi lệnh được thực thi, Marker sẽ bắt đầu chuyển đổi và lưu Markdown vào thư mục đầu ra. Điều tuyệt vời về Marker là nó trích xuất tất cả hình ảnh liên quan đến PDF và lưu trữ cùng với tệp .md (Markdown) chính.

    Nguồn: https://medium.com/@sumsourabh14/this-is-how-i-convert-pdf-to-markdown-379ddb6e4405

    Sử dụng PyMuPDF4LLM

    Một công cụ nhanh chóng trở thành lựa chọn hàng đầu của tôi cho mọi thứ liên quan đến PDF. Để bắt đầu, hãy đảm bảo cài đặt PyMuPDF4LLM và các gói cần thiết khác để llama_index tương thích với quy trình làm việc LLM.

    Nhưng các tính năng chính của PyMuPDF4LLM có thể được tóm tắt như sau:

    • Trích xuất văn bản: Trích xuất nội dung theo định dạng Markdown.
      Phân đoạn: Hỗ trợ thêm siêu dữ liệu, bảng và danh sách hình ảnh vào nội dung được trích xuất.
    • Trích xuất hình ảnh: Cung cấp các tùy chọn để xác định kích thước, độ phân giải và định dạng hình ảnh.
    • Nhúng hình ảnh: Hình ảnh được nhúng trực tiếp vào đầu ra Markdown.
    • Trích xuất từ: Cho phép trích xuất chính xác các từ trong PDF.
      Trích xuất Markdown cơ bản

    Bước đầu tiên bao gồm việc chuyển đổi tệp PDF sang định dạng Markdown. Phương pháp này đơn giản hóa việc làm việc với văn bản, đặc biệt là trong các thiết lập LLM và RAG, bằng cách giúp định dạng và xử lý trước nội dung dễ dàng hơn.

    Đầu tiên hãy cài đặt PyMuPDF4LLM bằng pip:
    pip install pymupdf4llm
    Trường hợp sử dụng 1: Trích xuất Markdown cơ bản
    Cái này thì đơn giản: bạn có một tệp PDF và chỉ muốn nội dung ở định dạng sạch, thân thiện với Markdown. PyMuPDF4LLM có thể trích xuất văn bản, hoàn chỉnh với tiêu đề, danh sách và các định dạng khác, giúp bạn dễ dàng làm việc.

    import pymupdf4llm

    # Trích xuất nội dung PDF dưới dạng Markdown
    md_text = pymupdf4llm.to_markdown( “input.pdf” )
    print (md_text[: 500 ]) # In 500 ký tự đầu tiên

    Giải thích : tôi đã sử dụng PyMuPDF4LLM để trích xuất nội dung của một bài nghiên cứu thành định dạng Markdown. Tại sao lại là Markdown? Định dạng này lý tưởng để tinh chỉnh các mô hình vì nó giữ nguyên cấu trúc và định dạng, điều này có thể rất quan trọng để tạo ra các phản hồi mạch lạc từ LLM.

    Xem các phương pháp có sẵn

    Sau khi tải thư viện, bạn nên kiểm tra tất cả các phương thức có sẵn pymupdf4llmđể hiểu rõ khả năng của thư viện.

    dir(pymupdf4llm)

    Lưu Markdown vào một tệp

    Việc lưu trữ Markdown đã trích xuất trong một tệp có thể hữu ích cho việc phân tích sau này hoặc tích hợp vào các quy trình công việc khác.

    import pathlib

    pathlib.Path(“resume.md”).write_text(md_text)

    Giải thích : Ở đây, chúng ta sử dụng pathlibđể lưu md_textnội dung vào một resume.mdtệp. Tệp Markdown này có thể truy cập để xử lý hoặc chia sẻ thêm.

    import pymupdf4llm
    import pathlib

    md_text = pymupdf4llm.to_markdown( “bengio03a.pdf” )
    pathlib.Path( “output.md” ).write_bytes(md_text.encode())
    in ( “Markdown đã lưu vào output.md” )

    Lưu trữ dữ liệu đã trích xuất của bạn trong Markdown cho phép cộng tác hoặc xem xét dễ dàng, đặc biệt là khi chuẩn bị dữ liệu để tinh chỉnh LLM. Tính linh hoạt trong việc lưu trữ làm cho nó hoàn hảo để xây dựng các tập dữ liệu theo từng bước.

    Trích xuất các trang cụ thể

    Nếu bạn chỉ cần nội dung từ các trang cụ thể, PyMuPDF4LLM cho phép trích xuất có chọn lọc bằng cách chỉ định số trang.

    import pymupdf4llm

    # Chỉ trích xuất trang 10 và 11
    md_text = pymupdf4llm.to_markdown( “bengio03a.pdf” , pages=[ 10 , 11 ])
    print (md_text[: 500 ]) # In 500 ký tự đầu tiên
    Tính năng này đặc biệt hữu ích khi xử lý các tài liệu lớn. Ví dụ, việc trích xuất các chương hoặc phần cụ thể giúp dễ dàng đào tạo LLM chỉ về thông tin có liên quan nhất.

    Tích hợp với LlamaIndex

    PyMuPDF4LLM cũng hỗ trợ trích xuất dữ liệu tương thích với LlamaIndex, giúp nó phù hợp với các dự án yêu cầu lập chỉ mục tài liệu để xử lý dựa trên LLM

    !pip install llama_index

    llama_reader = pymupdf4llm.LlamaMarkdownReader()
    dir(llama_reader)

    llama_docs = llama_reader.load_data(“/content/Dhanush_kumar_Resume.pdf”)
    print(f”Số lượng tài liệu LlamaIndex : {len(llama_docs)}”)
    print(f”Nội dung của tài liệu đầu tiên :{llama_docs[0].text[:100]}”)

    Giải thích :

    Sau khi cài đặt llama_index, chúng ta sử dụng LlamaMarkdownReaderPyMuPDF4LLM.
    Phương pháp này load_datachuyển đổi PDF sang định dạng tương thích trực tiếp với LlamaIndex, một công cụ thường được sử dụng để xây dựng đường ống dữ liệu LLM.
    llama_docslưu trữ dữ liệu đã xử lý, trong đó mỗi tài liệu có thể được kiểm tra về chất lượng và khả năng tương thích.

    Trích xuất hình ảnh

    PDF thường chứa hình ảnh cùng với văn bản. Sử dụng PyMuPDF4LLM, chúng ta có thể trích xuất những hình ảnh này và lưu chúng ở định dạng và vị trí đã chỉ định.

    md_text_images = pymupdf4llm.to_markdown(
    “/content/Dhanush_kumar_Resume.pdf”,
    page_chunks=True,
    write_images=True,
    image_path=”/content/images”,
    image_format=”png”
    )

    Giải thích :

    write_images=True: Cho phép trích xuất hình ảnh từ PDF.
    image_pathvà image_formatchỉ định nơi lưu hình ảnh và định dạng nào ( pngtrong trường hợp này).
    Mã này chụp ảnh cùng với dữ liệu văn bản, hữu ích cho các tài liệu đa phương tiện.

    Phân chia dữ liệu với siêu dữ liệu

    Đối với các tệp PDF lớn hơn hoặc các tài liệu phức tạp, việc chia nhỏ nội dung có thể giúp xử lý hiệu quả hơn. Ngoài ra, PyMuPDF4LLM cho phép xử lý siêu dữ liệu với từng phần.

    md_text_chunks = pymupdf4llm.to_markdown (
    “/content/Dhanush_kumar_Resume.pdf” ,
    page_chunks = True
    )
    md_text_chunks [ 0 ] Giải thích : Bằng cách thiết lập page_chunks=True, tài liệu được chia thành các phần, với mỗi phần được xử lý riêng biệt. Điều này đặc biệt hữu ích trong bối cảnh RAG, nơi nội dung được phân đoạn cải thiện hiệu suất truy xuất.

    Trích xuất cấp độ từ với siêu dữ liệu Metadata

    Trong một số trường hợp sử dụng, việc trích xuất văn bản ở cấp độ từ là điều cần thiết, đặc biệt là khi cần phân tích chi tiết, chẳng hạn như phân tích tình cảm hoặc nhận dạng thực thể.

    md_text_words = pymupdf4llm.to_markdown(
    “/content/Dhanush_kumar_Resume.pdf”,
    page_chunks=True,
    write_images=True,
    image_path=”images”,
    image_format=”png”,
    extract_words=True
    )
    md_text_words[0][“words”][:100]

    Giải thích :

    extract_words=True chỉ rõ rằng văn bản phải được trích xuất ở cấp độ từ, thêm siêu dữ liệu như vị trí từ và vị trí trang.
    Điều này cho phép kiểm soát nội dung chi tiết hơn và hỗ trợ quy trình phân tích văn bản nâng cao.

    Trích xuất bảng

    Nếu tệp PDF của bạn chứa bảng, bạn cũng có thể trích xuất các bảng này, giúp đơn giản hóa việc truy xuất dữ liệu trong các tài liệu có nhiều bảng như báo cáo hoặc bài nghiên cứu.

    md_text_tables = pymupdf4llm.to_markdown(
    “/content/Dhanush_kumar_Resume.pdf”,
    page_chunks=True,
    write_images=True,
    image_path=”images”,
    image_format=”png”,dpi = 200,
    )

    Giải thích : PyMuPDF4LLM trích xuất các bảng bằng cách chuyển đổi chúng sang các định dạng tương thích với Markdown. Điều này có giá trị trong các bối cảnh mà dữ liệu có cấu trúc là cần thiết, chẳng hạn như trong khoa học dữ liệu hoặc tạo báo cáo.
    PyMuPDF4LLM là một công cụ mạnh mẽ để trích xuất nội dung từ PDF ở nhiều định dạng khác nhau, cho phép xử lý tài liệu nhanh chóng và hiệu quả cho môi trường LLM và RAG. Từ trích xuất văn bản và hình ảnh đến phân tích cấp độ từ và chuyển đổi bảng, PyMuPDF4LLM cung cấp một bộ công cụ linh hoạt phù hợp với nhiều ứng dụng AI và khoa học dữ liệu. Hướng dẫn này cung cấp cái nhìn toàn diện về các khả năng của PyMuPDF4LLM, thiết lập nền tảng để tạo các đường ống dữ liệu có cấu trúc tốt và sẵn sàng sử dụng.

    https://medium.com/@danushidk507/using-pymupdf4llm-a-practical-guide-for-pdf-extraction-in-llm-rag-environments-63649915abbf

    https://python.plainenglish.io/why-pymupdf4llm-is-the-best-tool-for-extracting-data-from-pdfs-even-if-you-didnt-know-you-needed-7bff75313691

    Ollama-OCR hiện đã có sẵn dưới dạng gói Python

    Bản cập nhật này giúp tích hợpOllama-OCRvào các ứng dụng, quy trình làm việc hoặc tập lệnh tự động hóa hiện có của bạn dễ dàng hơn bao giờ hết. Chỉ với một vài dòng mã, giờ đây bạn có thể tận dụng các khả năng OCR tiên tiến trực tiếp trong Python.

    Các tính năng chính:

    1. Nhiều mô hình tầm nhìn

    Chọn mẫu phù hợp với nhu cầu của bạn:

    • LLaVA 7B: Nhẹ và nhanh để trích xuất văn bản theo thời gian thực.
    • Llama 3.2 Vision: Độ chính xác cao cho các bố cục phức tạp và văn bản chi tiết.
    • Hoặc bất kỳ mô hình tầm nhìn nào khác có sẵn trên Ollama

    2. Định dạng đầu ra linh hoạt

    Ollama-OCR hỗ trợ nhiều định dạng đầu ra khác nhau để phù hợp với nhiều trường hợp sử dụng khác nhau:

    • Markdown: Giữ nguyên định dạng có cấu trúc như tiêu đề, danh sách và dấu đầu dòng.
    • Văn bản thuần túy: Trích xuất văn bản sạch, chưa định dạng.
    • JSON: Đầu ra có cấu trúc, dễ đọc bằng máy để tích hợp dễ dàng.
    • Định dạng có cấu trúc: Trích xuất và sắp xếp các bảng và nội dung theo thứ bậc.
    • Cặp khóa-giá trị: Thích hợp cho việc trích xuất biểu mẫu, biên lai hoặc dữ liệu có nhãn.

    3. Ngoại tuyến và Riêng tư

    Dữ liệu của bạn vẫn được lưu trữ cục bộ. Ollama-OCR xử lý hình ảnh ngoại tuyến, đảm bảo thông tin nhạy cảm của bạn được bảo mật.

    Để bắt đầu sử dụng Ollama-OCR, bạn chỉ cần cài đặt gói bằng pip:

    pip install ollama-ocr

    Đảm bảo máy chủ Ollama đang hoạt động và các mô hình cần thiết đã được cài đặt để tối đa hóa trải nghiệm OCR của bạn.

    ollama pull llama3.2-vision:11b

    Cách sử dụng đơn giản và nâng cao

    Sau đây là một ví dụ nhanh để bạn bắt đầu:

    from ollama_ocr import OCRProcessor

    # Initialize OCR processor
    ocr = OCRProcessor(model_name=’llama3.2-vision:11b’) # You can use any vision model available on Ollama

    # Process an image
    result = ocr.process_image(
    image_path=”path/to/your/image.png”,
    format_type=”markdown” # Options: markdown, text, json, structured, key_value
    )
    print(result)

    # Hóa đơn #1024

    ## Thanh toán cho:

    – Really Great Company

    ## Thanh toán cho:

    – Avery Davis
    123 Anywhere St., Any City
    123 456 7890

    ## Thông tin tài khoản ngân hàng:

    – Ngân hàng: Really Great Bank
    – Tên tài khoản: John Smith
    – BSB: 000 000
    – Số tài khoản: 0000 0000

    ## Chi tiết hóa đơn:

    ### Mô tả:
    – Kế hoạch nội dung: $200,00
    – Viết bản sao: $100,00
    – Thiết kế trang web : $250,00
    – Phát triển trang web: $500,00
    – SEO: $200,00

    ### Tổng cộng tạm thời: $1.250,00 (giảm giá 30%)
    – Tổng cộng: $875,00

    ## Điều khoản thanh toán:

    – Thanh toán phải được thực hiện trong vòng 14 ngày làm việc kể từ ngày xuất hóa đơn.
    – Vui lòng gửi tiền chuyển khoản đến hello@reallygreatsite.com.

    # Cảm ơn bạn đã hợp tác kinh doanh.

    Các trường hợp sử dụng

    Xử lý hóa đơn : Tự động trích xuất các thông tin chi tiết như tên nhà cung cấp, số tiền và ngày thành các cặp khóa-giá trị cho phần mềm kế toán.
    Trích xuất bảng : Trích xuất dữ liệu có cấu trúc từ các bảng trong tài liệu được quét thành định dạng JSON hoặc CSV.
    Hệ thống quản lý nội dung : Tích hợp OCR để lập chỉ mục các tệp hình ảnh nhằm dễ dàng tìm kiếm và truy xuất.
    Phân tích biểu mẫu : Trích xuất các trường từ biểu mẫu được quét thành dữ liệu có nhãn cho các hệ thống phụ trợ.
    Bài báo nghiên cứu : Trích xuất văn bản từ sơ đồ, biểu đồ và bảng trong các bài báo học thuật có hình ảnh để phân tích thêm.

    5 trường hợp sử dụng tích hợp hàng đầu cho Ollama-OCR

    1.Hệ thống quản lý tài liệu
    Nâng cao các công cụ như SharePoint hoặc Google Drive bằng cách trích xuất và lập chỉ mục văn bản có thể tìm kiếm từ các tài liệu được quét.
    2.Phần mềm kế toán
    Tự động trích xuất dữ liệu từ hóa đơn và biên lai để điền vào các trường trong các nền tảng như QuickBooks hoặc Xero.
    3.Nền tảng thương mại điện tử
    Trích xuất thông tin chi tiết sản phẩm từ danh mục dựa trên hình ảnh để tự động tạo danh sách cho Shopify hoặc WooCommerce.
    4.Ứng dụng chăm sóc sức khỏe
    Số hóa hồ sơ bệnh án và đơn thuốc để tích hợp vào hệ thống Hồ sơ bệnh án điện tử (EMR).
    5.Chatbot hỗ trợ AI
    Cho phép chatbot diễn giải và phản hồi một cách thông minh đối với văn bản được trích xuất từ ​​hình ảnh do người dùng tải lên.

    Mở khóa những khả năng mới với Ollama-OCR

    Với tính linh hoạt, dễ sử dụng và khả năng mạnh mẽ, Ollama-OCR là giải pháp tối ưu của bạn để tích hợp OCR vào bất kỳ quy trình làm việc nào. Cho dù bạn đang quản lý tài liệu, tự động hóa quy trình hay xây dựng các ứng dụng sáng tạo, gói Python này cho phép bạn trích xuất và sử dụng văn bản theo cách chưa từng có.

    nguồn: https://medium.com/@mauryaanoop3/ollama-ocr-now-available-as-a-python-package-ff5e4240eb26

    Docling đơn giản hóa quá trình xử lý tài liệu

    https://github.com/DS4SD/docling?tab=readme-ov-file

    Một số tính năng mới như Hiểu và chuyển đổi PDF, MS Word, MS Powerpoint, HTML và một số định dạng hình ảnh. Tạo ra một biểu diễn tài liệu mới, phổ quát có thể bao hàm hệ thống phân cấp tài liệu. Đi kèm với API và CLI mới

    Để sử dụng Docling, chỉ cần cài đặt doclingtừ trình quản lý gói của bạn, ví dụ pip: pip install docling
    Hoạt động trên môi trường macOS, Linux và Windows. Cả kiến ​​trúc x86_64 và arm64.

    Để chuyển đổi từng tài liệu, hãy sử dụng convert(), ví dụ:

    from docling.document_converter import DocumentConverter

    source = “https://arxiv.org/pdf/2408.09869” # document per local path or URL
    converter = DocumentConverter()
    result = converter.convert(source)
    print(result.document.export_to_markdown()) # output: “## Docling Technical Report[…]”

    tham khảo tính năng thêm https://ds4sd.github.io/docling/usage/

    Cú pháp dòng lệnh của Docling v2 để hỗ trợ nhiều định dạng. Ví dụ được hiển thị bên dưới.

    # Convert a single file to Markdown (default)
    docling myfile.pdf

    # Convert a single file to Markdown and JSON, without OCR
    docling myfile.pdf –to json –to md –no-ocr

    # Convert PDF files in input directory to Markdown (default)
    docling ./input/dir –from pdf

    # Convert PDF and Word files in input directory to Markdown and JSON
    docling ./input/dir –from pdf –from docx –to md –to json –output ./scratch

    # Convert all supported files in input directory to Markdown, but abort on first error
    docling ./input/dir –output ./scratch –abort-on-error

    Công cụ tìm kiếm tạo sinh cho các tệp cục bộ

    https://github.com/imanoop7/Generative-Search-Engine-For-Local-Files

    https://pub.towardsai.net/building-your-own-generative-search-engine-for-local-files-using-open-source-models-b09af871751c

    https://pub.towardsai.net/building-your-own-generative-search-engine-for-local-files-using-open-source-models-part-2-4e869f62a9ee

    Local GenAI Search là hệ thống tìm kiếm tài liệu và trả lời câu hỏi được hỗ trợ bởi AI cho phép người dùng khám phá và trích xuất thông tin từ các tài liệu cục bộ của họ bằng các truy vấn ngôn ngữ tự nhiên. Ứng dụng này kết hợp khả năng tìm kiếm ngữ nghĩa với AI tạo ra để cung cấp các câu trả lời chính xác và có nhận thức về ngữ cảnh dựa trên nội dung của các tệp cục bộ của bạn.

    Sao chép kho lưu trữ này:

    git clone https://github.com/imanoop7/Generative-Search-Engine-For-Local-Files
    cd Generative-Search-Engine-For-Local-Files
    Cài đặt các gói cần thiết:

    pip install -r requirements.txt
    Đảm bảo bạn đã cài đặt Ollama và có sẵn mô hình ‘tinyllama’.

    Cách sử dụng
    Chạy ứng dụng Streamlit:

    streamlit run local_genai_search.py
    Mở trình duyệt web của bạn và điều hướng đến URL cục bộ được cung cấp (thường là http://localhost:8501).

    Nhập đường dẫn đến thư mục tài liệu của bạn vào trường nhập văn bản.

    Nhấp vào nút “Lập chỉ mục tài liệu” để xử lý và lập chỉ mục các tệp của bạn (bước này chỉ cần thực hiện một lần hoặc khi bạn thêm tài liệu mới).

    Sau khi lập chỉ mục xong, bạn có thể bắt đầu đặt câu hỏi về tài liệu của mình trong phần “Đặt câu hỏi”.

    AI sẽ cung cấp câu trả lời dựa trên nội dung tài liệu được lập chỉ mục của bạn, cùng với các tài liệu tham khảo nguồn.

    Nó hoạt động như thế nào
    Lập chỉ mục tài liệu : Hệ thống đọc và phân đoạn tài liệu của bạn, sau đó tạo nhúng bằng mô hình chuyển đổi câu. Các nhúng này được lưu trữ trong chỉ mục FAISS để tìm kiếm tương đồng hiệu quả.

    Tìm kiếm ngữ nghĩa : Khi bạn đặt câu hỏi, hệ thống sẽ chuyển đổi câu hỏi đó thành nội dung nhúng và tìm các đoạn tài liệu giống nhau nhất trong chỉ mục FAISS.

    Tạo câu trả lời : Các đoạn tài liệu có liên quan được sử dụng làm bối cảnh cho mô hình AI Ollama, giúp tạo ra câu trả lời toàn diện cho câu hỏi của bạn.

    Trình bày kết quả : Câu trả lời được hiển thị cùng với các tham chiếu đến tài liệu nguồn, có thể mở rộng để xem toàn bộ bối cảnh hoặc tải xuống để xem lại thêm.

    1 hệ thống Tạo dữ liệu tăng cường truy xuất (RAG)

    Các tác nhân hỗ trợ AI đang cách mạng hóa cách chúng ta truy xuất và xử lý thông tin. Bằng cách kết hợp DeepSeek R1 , một mô hình lý luận mạnh mẽ, với SmolAgents , một khuôn khổ tác nhân nhẹ từ Hugging Face, chúng ta có thể xây dựng các trợ lý AI hiệu quả và thông minh có khả năng suy luận logic và truy xuất tài liệu.

    • Tải và xử lý tệp PDF để truy xuất văn bản liền mạch.
    • Lưu trữ thông tin trong cơ sở dữ liệu vector để tìm kiếm nhanh chóng và chính xác.
    • Sử dụng DeepSeek R1 để suy luận nâng cao nhằm đưa ra câu trả lời có cấu trúc tốt.
    • Tận dụng SmolAgents để tạo ra trợ lý AI nhẹ và nhạy.

    Sự kết hợp này đảm bảo phản hồi do AI điều khiển hiệu quả về mặt chi phí, chính xác và có thể mở rộng , lý tưởng cho nghiên cứu, hỗ trợ khách hàng và truy xuất kiến ​​thức tự động.

    Việc triển khai này tích hợp DeepSeek R1 vào một tác nhân AI có khả năng Retrieval-Augmented Generation (RAG) . Nó bao gồm:

    • Tải và xử lý tệp PDF → Chuyển đổi tài liệu thành các đoạn văn bản có thể tìm kiếm được.
    • Tạo kho lưu trữ vector → Lưu trữ các nhúng để truy xuất hiệu quả.
    • Thế hệ tăng cường truy xuất (RAG) với bộ suy luận → Trả lời các truy vấn của người dùng bằng cách truy xuất các tài liệu có liên quan và suy luận về chúng.
    • Tác nhân AI chính → Chỉ đạo cuộc trò chuyện và thực hiện các phản hồi dựa trên lý luận.

    Bước 1: Tải và xử lý PDF

    from langchain_community.document_loaders import DirectoryLoader, PyPDFLoader
    from langchain.text_splitter import RecursiveCharacterTextSplitter
    from langchain_huggingface import HuggingFaceEmbeddings
    from langchain_community.vectorstores import Chroma
    import os
    import shutil

    def load_and_process_pdfs(data_dir: str):
    “””
    Load PDFs from a directory and split them into manageable chunks.

    Args:
    data_dir (str): The directory containing PDF files.

    Returns:
    list: A list of document chunks.
    “””
    loader = DirectoryLoader(
    data_dir,
    glob=“**/*.pdf”,
    loader_cls=PyPDFLoader
    )
    documents = loader.load()

    text_splitter = RecursiveCharacterTextSplitter(
    chunk_size=1000,
    chunk_overlap=200,
    length_function=len,
    )
    chunks = text_splitter.split_documents(documents)
    return chunks

    def create_vector_store(chunks, persist_directory: str):
    “””
    Create and persist a Chroma vector store from document chunks.

    Args:
    chunks (list): The list of document chunks.
    persist_directory (str): Directory to persist the vector store.

    Returns:
    Chroma: The initialized Chroma vector store.
    “””
    if os.path.exists(persist_directory):
    print(f”Clearing existing vector store at {persist_directory})
    shutil.rmtree(persist_directory)

    embeddings = HuggingFaceEmbeddings(
    model_name=“sentence-transformers/all-mpnet-base-v2”,
    model_kwargs={‘device’: ‘cpu’}
    )

    print(“Creating new vector store…”)
    vectordb = Chroma.from_documents(
    documents=chunks,
    embedding=embeddings,
    persist_directory=persist_directory
    )
    return vectordb

    def main():
    data_dir = “data”
    db_dir = “chroma_db”

    print(“Loading and processing PDFs…”)
    chunks = load_and_process_pdfs(data_dir)
    print(f”Created {len(chunks)} chunks from PDFs”)

    print(“Creating vector store…”)
    vectordb = create_vector_store(chunks, db_dir)
    print(f”Vector store created and persisted at {db_dir})

    if __name__ == “__main__”:
    main()

    Tải và xử lý PDF: Tải tất cả các tệp PDF từ một thư mục được chỉ định. Chia chúng thành các phần nhỏ hơn (mỗi phần 1000 ký tự) với 200 ký tự chồng lên nhau để ghi nhớ ngữ cảnh tốt hơn.

    Tạo một cửa hàng Vector: Xóa mọi bộ nhớ vector hiện có. Sử dụng nhúng HuggingFace để chuyển đổi văn bản thành biểu diễn vector. Lưu trữ các nhúng này trong cơ sở dữ liệu vectơ Chroma.

    Bước 2: Triển khai tác nhân lý luận

    from smolagents import OpenAIServerModel, CodeAgent, ToolCallingAgent, HfApiModel, tool, GradioUI
    from langchain_chroma import Chroma
    import os

    reasoning_model_id = “deepseek-r1:7b”

    def get_model(model_id):
    “””
    Initialize an AI model based on the specified model ID.

    Args:
    model_id (str): The ID of the AI model to use.

    Returns:
    OpenAIServerModel: The initialized AI model.
    “””
    return OpenAIServerModel(
    model_id=model_id,
    api_base=“http://localhost:11434/v1”,
    api_key=“ollama”
    )

    # Create the reasoner for better RAG
    reasoning_model = get_model(reasoning_model_id)
    reasoner = CodeAgent(tools=[], model=reasoning_model, add_base_tools=False, max_steps=2)

    # Initialize vector store and embeddings
    embeddings = HuggingFaceEmbeddings(
    model_name=“sentence-transformers/all-mpnet-base-v2”,
    )
    db_dir = “chroma_db”
    vectordb = Chroma(persist_directory=db_dir, embedding_function=embeddings)

    Khởi tạo DeepSeek R1 như một mô hình lý luận. Đối CodeAgenttượng xử lý dữ liệu đầu vào và có thể thực hiện suy luận logic và tạo mã. Kho lưu trữ vector (Chroma) được khởi tạo để lưu trữ các tài liệu đã truy xuất một cách hiệu quả.

    Bước 3: Triển khai Retrieval-Augmented Generation (RAG)

    @tool
    def rag_with_reasoner(user_query: str) -> str:
    “”
    This is a RAG tool that takes in a user query and searches for relevant content from the vector database.
    The result of the search is given to a reasoning LLM to generate a response.

    Args:
    user_query: The user’s question to query the vector database with.

    Returns:
    str: A concise and specific answer to the user’s question.
    “”
    # Search for relevant documents
    docs = vectordb.similarity_search(user_query, k=3)

    # Combine document contents
    context = “\n\n”.join(doc.page_content for doc in docs)

    # Create prompt with context
    prompt = f“”“Based on the following context, answer the user’s question concisely and specifically.
    If the information is insufficient, suggest a better query for further RAG retrieval.

    Context:
    {context}

    Question: {user_query}

    Answer:”“”

    # Get response from reasoning model
    response = reasoner.run(prompt, reset=False)
    return response

    Tiếp nhận truy vấn của người dùng và lấy các tài liệu có liên quan nhất từ ​​kho lưu trữ vector . Gửi ngữ cảnh đã truy xuất tới DeepSeek R1 để lý giải . Nếu thông tin thu thập được không đủ , mô hình sẽ đề xuất truy vấn tốt hơn .

    Bước 4: Triển khai tác nhân AI chính

    # Create the primary agent to direct the conversation
    tool_model = get_model(“llama3.2”)
    primary_agent = ToolCallingAgent(tools=[rag_with_reasoner], model=tool_model, add_base_tools=False, max_steps=3)

    def main():
    “””
    Launch the AI agent with a web interface using Gradio.
    “””

    GradioUI(primary_agent).launch()

    if __name__ == “__main__”:
    main()

    Tác nhân chính ( ToolCallingAgent) đóng vai trò là người quản lý cuộc hội thoại .
    Sử dụng Llama 3.2 làm trình tạo phản hồi chính , trong khi DeepSeek R1 xử lý lý luận .
    Chạy Gradio UI để cung cấp giao diện thân thiện với người dùng.

    Bằng cách tích hợp DeepSeek R1 với SmolAgents , chúng tôi đã xây dựng một trợ lý AI mạnh mẽ nhưng nhẹ có khả năng truy xuất, phân tích và lý luận thông tin một cách hiệu quả . Hệ thống này kết hợp lý luận nâng cao với tìm kiếm tài liệu nhanh , khiến nó trở nên lý tưởng cho nhiều ứng dụng khác nhau như nghiên cứu, hỗ trợ khách hàng tự động và quản lý kiến ​​thức.

    https://medium.com/@mauryaanoop3/building-intelligent-ai-agents-with-deepseek-r1-and-smolagents-e0de20566bf0

    Để lại một bình luận

    Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *