Я использую библиотеку pdf.js во внешнем интерфейсе, которая технически может выделять текст, но я Я столкнулся с двумя проблемами:
- Как соединить ограничивающие рамки с частями после разделения PDF-файла?
- Как Могу ли я справиться с ситуациями, когда ограничивающие рамки перекрываются на страницах?
Мой код предварительной обработки:
import json
import os
from pathlib import Path
from haystack import Pipeline
from haystack.components.converters import PyPDFToDocument
from haystack.components.embedders import SentenceTransformersDocumentEmbedder
from haystack.components.preprocessors import (
DocumentCleaner,
NLTKDocumentSplitter,
)
from haystack.components.writers import DocumentWriter
from haystack.document_stores.types import DuplicatePolicy
from haystack_integrations.components.embedders.fastembed import (
FastembedSparseDocumentEmbedder,
)
from haystack_integrations.document_stores.qdrant import QdrantDocumentStore
from utils.process_dataset import load_pdfs_config
document_store = QdrantDocumentStore(
":memory:",
use_sparse_embeddings=True,
recreate_index=True,
embedding_dim=1024, # based on the embedding model
return_embedding=False,
wait_result_from_api=True,
)
indexing_pipeline = Pipeline()
indexing_pipeline.add_component("converter", PyPDFToDocument())
indexing_pipeline.add_component("cleaner", DocumentCleaner())
indexing_pipeline.add_component(
"splitter",
NLTKDocumentSplitter(
split_by="word",
respect_sentence_boundary=False,
split_length=200,
split_overlap=40,
),
)
indexing_pipeline.add_component(
"sparse_doc_embedder", FastembedSparseDocumentEmbedder(model="some
model")
)
indexing_pipeline.add_component(
"dense_doc_embedder",
SentenceTransformersDocumentEmbedder(
model="some model"
),
)
indexing_pipeline.add_component(
"writer",
DocumentWriter(document_store=document_store, policy=DuplicatePolicy.OVERWRITE),
)
indexing_pipeline.connect("converter", "splitter")
indexing_pipeline.connect("splitter", "sparse_doc_embedder")
indexing_pipeline.connect("sparse_doc_embedder", "dense_doc_embedder")
indexing_pipeline.connect("dense_doc_embedder", "writer")
Подробнее здесь: https://stackoverflow.com/questions/793 ... ight-top-5