File size: 3,587 Bytes
4033851
e94296c
4033851
 
 
 
e94296c
3ccf4af
e94296c
4033851
e94296c
 
 
 
 
 
 
b6aaa58
e94296c
 
 
 
 
 
4033851
 
 
e94296c
4033851
 
 
 
 
 
 
37345d1
4033851
 
37345d1
4033851
 
37345d1
4033851
 
 
 
 
 
 
 
 
 
 
 
37345d1
4033851
 
 
 
 
 
 
 
37345d1
 
4033851
 
 
37345d1
4033851
 
 
 
 
 
 
 
 
 
 
 
37345d1
 
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
import os
import streamlit as st
import spacy
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics.pairwise import cosine_similarity

# Load legal data - Cases
cases_directory = 'Object_casedocs'
cases_texts = []

for file_name in os.listdir(cases_directory):
    file_path = os.path.join(cases_directory, file_name)
    with open(file_path, 'r') as file:
        content = file.read()
        cases_texts.append(content)

# Load legal data - Statutes
statutes_directory = 'Object_statutes'
statutes_texts = {}
for file_name in os.listdir(statutes_directory):
    file_path = os.path.join(statutes_directory, file_name)
    with open(file_path, 'r') as file:
        statute_content = file.read()
        statutes_texts[file_name] = statute_content

# Preprocess and vectorize text for cases
nlp = spacy.load("en_core_web_sm")
processed_cases_texts = [" ".join([token.lemma_ for token in nlp(text) if not token.is_stop]) for text in cases_texts]
vectorizer_cases = TfidfVectorizer()
tfidf_matrix_cases = vectorizer_cases.fit_transform(processed_cases_texts)

# Preprocess and vectorize text for statutes
processed_statutes_texts = [" ".join([token.lemma_ for token in nlp(text) if not token.is_stop]) for text in statutes_texts.values()]
vectorizer_statutes = TfidfVectorizer()
tfidf_matrix_statutes = vectorizer_statutes.fit_transform(processed_statutes_texts)

# User interaction loop
while True:
    user_query = st.text_input("Ask a legal-related question (type 'exit' to quit): ")

    if user_query.lower() == 'exit':
        st.write("Exiting the program. Goodbye!")
        break

    # Vectorize user query
    query_vector_cases = vectorizer_cases.transform([user_query])
    query_vector_statutes = vectorizer_statutes.transform([user_query])

    # Compute cosine similarity between the query and each case
    query_similarities_cases = cosine_similarity(query_vector_cases, tfidf_matrix_cases).flatten()

    # Compute cosine similarity between the query and each statute
    query_similarities_statutes = cosine_similarity(query_vector_statutes, tfidf_matrix_statutes).flatten()

    # Retrieve the most relevant case and statute
    top_case_idx = query_similarities_cases.argmax()
    top_statute_idx = query_similarities_statutes.argmax()

    relevant_case = cases_texts[top_case_idx]
    relevant_statute_name = list(statutes_texts.keys())[top_statute_idx]
    relevant_statute_content = statutes_texts[relevant_statute_name]

    # Summarize the relevant case
    doc = nlp(relevant_case)
    statutes = [ent.text for ent in doc.ents if ent.label_ == "LAW"]
    doc_sentences = list(doc.sents)
    case_summary = "\n".join([sent.text for sent in doc_sentences])  # Include the entire case content as a summary

    # Generate Statute Explanation
    statute_explanation = f"Statute: {relevant_statute_name}\n{relevant_statute_content}"

    # Generate Legal Document
    document = f"Legal Document - User Query: {user_query}\n\n"
    document += f"Case Summary:\n{case_summary}\n\n"
    document += "Statute Explanation:\n"
    document += f"{statute_explanation}\n"
    document += "\nGuidance for the User:\n"
    document += "To defend your friend in court, focus on presenting evidence that supports their actions were in self-defense.\n"
    document += "Emphasize any mitigating circumstances and demonstrate their lack of intent to harm.\n"
    document += "Consult with a qualified legal professional to build a strong defense strategy."

    # Display the legal document to the user
    st.text_area("Legal Document", document)