gpt4 book ai didi

python - 将 PDF 文件转换为 Base64 以索引到 Elasticsearch

转载 作者:行者123 更新时间:2023-11-28 16:31:39 30 4
gpt4 key购买 nike

我需要将 PDF 索引到 Elasticsearch。为此,我需要将文件转换为 base64。我将使用 Attachment Mapping .

我使用以下 Python 代码将文件转换为 Base64 编码的字符串:

from elasticsearch import Elasticsearch
import base64
import constants

def index_pdf(pdf_filename):
encoded = ""
with open(pdf_filename) as f:
data = f.readlines()
for line in data:
encoded += base64.b64encode(f.readline())
return encoded

if __name__ == "__main__":
encoded_pdf = index_pdf("Test.pdf")
INDEX_DSL = {
"pdf_id": "1",
"text": encoded_pdf
}
constants.ES_CLIENT.index(
index=constants.INDEX_NAME,
doc_type=constants.TYPE_NAME,
body=INDEX_DSL,
id="1"
)

索引的创建以及文档索引工作正常。唯一的问题是我认为该文件没有以正确的方式编码。我尝试使用在线工具对该文件进行编码,我得到了一种完全不同的编码,与我使用 Python 获得的编码相比,它更大。

这是 PDF文件。

我尝试按照插件文档中的建议查询文本数据。

GET index_pdf/pdf/_search
{
"query": {
"match": {
"text": "piece text"
}
}
}

我给出了零命中。我该怎么办?

最佳答案

编码片段不正确,它以“文本”模式打开 pdf 文件。

根据文件大小,您可以只以二进制模式打开文件并使用 encode string method示例:

def pdf_encode(pdf_filename):
return open(pdf_filename,"rb").read().encode("base64");

或者如果文件很大,你可能不得不将编码分成 block ,没有考虑是否有模块可以这样做,但它可以像下面的示例代码一样简单:

 def chunk_24_read(pdf_filename) :
with open(pdf_filename,"rb") as f:
byte = f.read(3)
while(byte) :
yield byte
byte = f.read(3)


def pdf_encode(pdf_filename):
encoded = ""
length = 0
for data in chunk_24_read(pdf_filename):
for char in base64.b64encode(data) :
if(length and length % 76 == 0):
encoded += "\n"
length = 0

encoded += char
length += 1
return encoded

关于python - 将 PDF 文件转换为 Base64 以索引到 Elasticsearch,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31304212/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com