import my_1_reader import my_1_writer import my_1_openai import os import openai import pdf2image from pdf2image import convert_from_path from PIL import Image import csv import numpy as np import os import pdfminer from pdf2image import convert_from_path import csv import numpy as np import os # Assuming your my_1_openai's vectorize functions work as described def vectorize_data(data): # Replace this with your actual logic to vectorize text data return np.random.rand(100).tolist() # Example vector def vectorize_image(data): # Replace this with your actual logic to vectorize image data return np.random.rand(100).tolist() # Example vector def vectorize_this_pdf_with_metadata(pdf_path, output_path, metadata_filename="DS_U3/U3_Metadaten.csv"): tensor_description = { "my_id": 89, # Example ID, ideally this should be dynamically generated "og_name": pdf_path, "metadata": {}, "vec_content_text": [], "vec_content_img": [] } # Read metadata from CSV and match by 'og_name' (pdf_path) # 'latin1', 'ISO-8859-1', or 'cp1252' with open(metadata_filename, mode='r', encoding='utf-8') as csvfile: csv_reader = csv.DictReader(csvfile) for row in csv_reader: if row["Name"] == os.path.basename(pdf_path): # Assuming 'Name' is a column in your CSV tensor_description['metadata'] = row break # get text content text = my_1_reader.extract_text_from_pdf(pdf_path) # Vectorize extracted text if text: tensor_description['vec_content_text'].append(vectorize_data(data=text)) # Convert PDF pages to images using pdf2image images = convert_from_path(pdf_path) for img in images: # Assume vectorize_image expects a PIL image; pdf2image.convert_from_path already returns PIL images img_vector = vectorize_image(data=img) tensor_description['vec_content_img'].append(img_vector) # Here, instead of saving the tensor, we'll simply print it as an example print(tensor_description) return tensor_description def vectorize_this_pdf_with_metadata_old(pdf_path, output_path, metadata_filename="DS_U3/U3_Metadaten.csv"): # get PDF content, split into chunks tensor_description = { #sample "my_id": 89, #nummerate how often the func has been called "og_name": pdf_path, "metadata": {"a": 1, "b": 2, "c": 3}, # get from metadata_filename, get the full row, with the same filename in column A "vec_content_text": [[0.03874, 0.03947, -0.0875], [-0.03234, 0.03437, -0.011234]], # vectorize all chunks of all the text in the PDF # call my_1_openai.vectorize_data(data="string") this function returns the vector from Ada002 as a list "vec_content_img": [[0.01234, 0.09875, -0.0542], [-0.02456, 0.03537, -0.016634]] # for the images make every pdf into an img using pdf2image # call my_1_openai.vecotrize_image(data=PIL_OBJ) this funciton should return the vector, of the image, comparable to text. write this funciton as well. } tensor = [] # make tensor from tensor_Description return tensor def vectorize_pdfs(pdf_dict): """ Vectorize a pdf using openai API Parameters: - dataset: dictionary containing PDF files. Returns: - dictionary containing vectors """ vec_dataset = {} for key in pdf_dict.keys(): try: vector = my_1_openai.vectorize_data(pdf_dict[key]) except openai.error.InvalidRequestError as err: print(err) vector = [0, 0, 0] vec_dataset[key] = str(vector) return vec_dataset def vectorize_csv(csv_table, safe=False): folder_name = "" if safe: folder_name = f"{csv_table}_vectorised/" if not os.path.exists(folder_name): os.makedirs(folder_name) nb = 1 vec_dataset = [] for data_item in csv_table: vector = my_1_openai.vectorize_data(data_item) if safe: with open(f"{folder_name}{csv_table}_vec.txt", "w") as f: f.write(str(vector) + "\n") print("csv_line"+str(nb)) nb += 1 vec_dataset.append(str(vector)) return vec_dataset def create_df(ds): # my_df = {"name": [], "metadata": [], "body_text": []} my_df, my_new_df = {}, {} my_df["name"] = [filename for filename in os.listdir(ds) if filename.endswith('.pdf')] my_df["metadata"] = my_1_reader.read_csv_lines_as_strings(ds + "_metadata.csv")[1:11] my_df["text"] = list(my_1_reader.read_pdfs_from_folder(ds).values()) for e in my_df: my_new_df[f"{e}_vec"] = [my_1_openai.vectorize_data(item) for item in my_df[e]] for e in my_new_df: my_df[str(e)] = my_new_df[e] for e in my_df: print(f"{e} {my_df[e][2]}") def create_vec_dataset(folder): my_pdfs = my_1_reader.read_pdfs_from_folder(f"{folder}/PDF") vectorize_then_safe_data(f"{folder}/vectors//names.json", my_pdfs.keys()) vectorize_then_safe_data(f"{folder}/vectors//texts.json", my_pdfs.values()) # function to vectorize data=[]. then safes as json. def vectorize_then_safe_data(file_name, data): my_vec_words = [] for entry in data: my_vec_words.append(my_1_openai.vectorize_data(entry)) my_dict = dict(zip(data, my_vec_words)) my_1_writer.safe_my_dict_as_json(file_name, my_dict) print("vectorised data saved") def main(): # Example call to the function pdf_path = 'DS_U3/Dokumente/E - Elektroanlagen/ISB-020-U3-W-E-01-B07005-001-040.pdf' output_path = 'DS_U3/Dokumente_vec' metadata_filename = 'DS_U3/U3_Metadaten.csv' vectorize_this_pdf_with_metadata(pdf_path, output_path, metadata_filename) if __name__ == "__main__": print("this file contains embedding functions") vec1 = vectorize_data("this is the test string") vec2 = vectorize_data("this is the test string") if vec1 == vec2: print("same")