File size: 4,193 Bytes
d0b964d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
from os import write
from langchain.llms import OpenAI
from pypdf import PdfReader
from langchain.llms.openai import OpenAI
import pandas as pd
import re
import streamlit as st
from langchain.prompts import PromptTemplate

#Extract Information from PDF file
def get_pdf_text(pdf_doc):
    text = ""
    pdf_reader = PdfReader(pdf_doc)
    for page in pdf_reader.pages:
        text += page.extract_text()
    return text



#Function to extract data from text
def extracted_data(pages_data):

    template = """ 
        Remove any $ symbols.
        Extract  the following values  in a JSON format : Invoice,Date, Description, Quantity, 
        Unit Price , Amount, Total, Email and Phone Number  from this data: {pages}.
        
        """
    prompt_template = PromptTemplate(input_variables=["pages"], template=template)
    llm = OpenAI(temperature=.7)
    full_response=llm(prompt_template.format(pages=pages_data))
    
    #print("Full Response")
    #print(full_response)
    
    return full_response


# iterate over files in
# that user uploaded PDF files, one by one
def create_docs(user_pdf_list):
    
    
    df = pd.DataFrame({'Invoice': pd.Series(dtype='str'),
                       'Description': pd.Series(dtype='str'),
		               'Date': pd.Series(dtype='str'),
                       'Quantity': pd.Series(dtype='str'),
                       'Unit Price': pd.Series(dtype='str'),
                       'Amount': pd.Series(dtype='int'),
                       'Total': pd.Series(dtype='str'),
                       'Email': pd.Series(dtype='str'),
                       'Phone Number': pd.Series(dtype='str')
                        
                    })
    
    for filename in user_pdf_list:
        
        print("filename")
        print(filename)
        raw_data=get_pdf_text(filename)
        #st.write("RAWDATA:..."+raw_data)
        #print("extracted raw data")
        #print(raw_data)
        
        llm_extracted_data=extracted_data(raw_data)
        #st.write("LLMDATA..."+llm_extracted_data)
        # Write code to append the extracted data to the dataframe
       # df = df.append(llm_extracted_data, ignore_index=True)
        #print("DF start")
       # print(df)
        
        print("llm extracted data")
        #Adding items to our list - Adding data & its metadata
        print(llm_extracted_data)
        pattern = r'{(.+)}'
        match = re.search(pattern, llm_extracted_data, re.DOTALL)

        if match:
            extracted_text = match.group(1)
             # Escape quotes in the extracted text
            #extracted_text = extracted_text.replace('"', '\\"').replace("'", "\\'")
            # Converting the extracted text to a dictionary
            # Remove line continuation characters
            #extracted_text = extracted_text.replace('\\', '')
            #print("********************Extracted Text***************")
            #print(extracted_text)
            
            #print("********************Data Dict***************")
            data_dict = eval('{' + extracted_text + '}')
            #print(data_dict)
            #Convert data_dict to a dataframe
           # df = pd.DataFrame.from_dict(data_dict, orient='index').T
            #print("********************Data Dict End***************")
           
        else:
            print("No match found.")
            data_dict = {}
            
        #print("********************DF Final start***************")       
        df = pd.concat([df, pd.DataFrame([data_dict])], ignore_index=True)
        #print(df)
        #print("********************DF Final End***************")
    #df = pd.concat([df, pd.DataFrame.from_dict(data_dict)])
    #df= pd.concat([df, pd.DataFrame(data_dict, index=[0])], ignore_index=True)
    #df = pd.concat([df, pd.DataFrame.from_dict(data_dict, orient='columns', index=[0])])
    #df = pd.concat([df, pd.DataFrame({k: [v] for k, v in data_dict.items()})])
       
    
        # Create a DataFrame from the dictionary
        # If the dictionary values are not lists, convert them to lists
        
        #df=df.append(save_to_dataframe(llm_extracted_data), ignore_index=True)

    df.head()
    return df