“index = VectorstoreIndexCreator().from_loaders(loaders) 索引”。 PDF 文件结尾

问题描述 投票:0回答:2

我在我的 M1 mac 上成功回答了多个 PDF 中的问题。但某些 pdf 存在一些问题。

我正在使用 Langchain 运行 anaconda。 PDF 的大小从 100K 到 3meg 不等。 Juypiter记事本运行时出现错误是:“index = VectorstoreIndexCreator().from_loaders(loaders)index”

阻止某些文件加载的错误是: “忽略(部分)ToUnicode 映射,因为 PDF 数据不符合格式。这可能会导致输出中出现 (cid) 值。开始和结束字节的长度不同。”

另一个错误也没关系: “未安装 detectorron2。无法使用 hi_res 分区策略。回退到使用快速策略进行分区。”

  1. 是否有 python 或 (M1MAC) Unix 命令来修复 pdf 中的 unicode 结尾?
  2. 有没有办法获得有关哪个 pdf 导致错误的报告?

谢谢

完整代码如下。

-
#!pip install langchain
#!pip install unstructured
#!pip install openai
#!pip install chromadb
#!pip install Cython
#!pip install tiktoken

-
#load required packages
from langchain.document_loaders import UnstructuredPDFLoader
from langchain.indexes import VectorstoreIndexCreator

-
# set the openai key
import os
os.environ["OPENAI_API_KEY"] = ""

#your files
pdf_folder_path = "/Users/.../Documents/.../testpdfs"

#set the pdf folder path change this!!!
## pdf_folder_path = f'{root_dir}/data/'
## os.listdir(pdf_folder_path)

# loacation of the pdf file/files
#location of the pdf file/files.
loaders = [UnstructuredPDFLoader(os.path.join(pdf_folder_path, fn)) for fn in os.listdir(pdf_folder_path)]


#vector stores
#ImportError: Following dependencies are missing: pdfminer. Please install them using `pip install unstructured[local-inference]`.
#Chroma as vectorstore to index and search embeddings
#There are three main steps going on after the documents are loaded:
##Splitting documents into chunks
##Creating embeddings for each document
##Storing documents and embeddings in a vectorstore

index = VectorstoreIndexCreator().from_loaders(loaders)
index

#questions
%%time
#query
index.query_with_sources('Tell me about xyz')

我对Python知之甚少,我知道有些人觉得它很容易,有些人则不然。 我预计会出现一个错误来显示哪个 pdf 是错误的。

python pdf anaconda python-unicode langchain
2个回答
0
投票

第一次回答问题,但我在构建东西时也遇到了同样的情况。在本例中,我创建了一个函数,该函数将使用与

UnstructuredPDFLoader
使用的相同基本源来处理 PDF。

from PyPDF2 import PdfReader
try:
   pdf_reader = PdfReader(f)
            for page_num in range(len(pdf_reader.pages)):
                page = pdf_reader.pages[page_num]


except Exception as e:
    print(f"Error processing file {pdf}: {str(e)} -- file Excluded from analysis")

您可以使用此位作为函数并循环遍历文件,以便找到有问题的文件。可能会创建一个列表并保存它们(或者只保存那些正在工作的)。


-1
投票

确保文件夹中的所有文件都是 pdf。

试试这个:

loaders = [UnstructuredPDFLoader(os.path.join(pdf_folder_path, fn)) for fn in os.listdir(pdf_folder_path) if fn.endswith('.pdf')]

这将避免加载操作系统创建的隐藏文件。

© www.soinside.com 2019 - 2024. All rights reserved.