File size: 2,857 Bytes
4ec3e55
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import openai
import pdfplumber
import logging

# Configure logging
logging.basicConfig(
    filename='contract_missing_clausses.log',  # You can adjust the log file name here
    filemode='a',
    format='[%(asctime)s] [%(levelname)s] [%(filename)s] [%(lineno)s:%(funcName)s()] %(message)s',
    datefmt='%Y-%b-%d %H:%M:%S'
)
LOGGER = logging.getLogger(__name__)

log_level_env = 'INFO'  # You can adjust the log level here
log_level_dict = {
    'DEBUG': logging.DEBUG,
    'INFO': logging.INFO,
    'WARNING': logging.WARNING,
    'ERROR': logging.ERROR,
    'CRITICAL': logging.CRITICAL
}
if log_level_env in log_level_dict:
    log_level = log_level_dict[log_level_env]
else:
    log_level = log_level_dict['INFO']
LOGGER.setLevel(log_level)

class ContractMissingClauses:

  """
  Class for identifying missing clauses, sub-clauses, and terms in a contract.
  """

  def __init__(self,open_api_key):

      """
      Initialize the ContractMissingClauses class and set up the OpenAI API client.
      """

      # Initialize the OpenAI API client
      openai.api_key = open_api_key

  def get_missing_clauses(self, contract: str):

      """
      Generate and print missing clauses, sub-clauses, and terms in the given contract.

      Args:
          contract (str): The text of the contract.
      """
      try:
          LOGGER.info("Analyzing contract and extracting missing clauses...")
          # Generate text using the OpenAI GPT-3 model
          response = openai.Completion.create(
              engine="text-davinci-003",  # You can specify different engines
              prompt="identify missing clauses,sub-clauses and terms from given contrct ***{contract}*** return only missing (clauses,sub-clauses and terms) seperately.",
              temperature=0,
              max_tokens=500,  # The maximum number of tokens (words) in the generated text
          )

          # Print the generated text
          return response.choices[0].text

      except Exception as e:
            # If an error occurs during the key-value extraction process, log the error
            LOGGER.error(f"Error occurred while extracting missing clauses: {str(e)}")

      
  def iterate_each_page(self,pdf_file):

    """
    Iterate through each page of a PDF contract, extract text, and call get_missing_clauses for each page.
    """

    try:

      LOGGER.info("Analyzing contract and extracting pdf page...")

      # Initialize pdfplumber
      pdf = pdfplumber.open(pdf_file.name)

      # Iterate through each page and extract text
      for page in pdf.pages:
          contract = page.extract_text()
          self.get_missing_clauses(contract)

    except Exception as e:
            # If an error occurs during the key-value extraction process, log the error
            LOGGER.error(f"Error occurred while extracting pdf page: {str(e)}")