File size: 2,818 Bytes
ce64498
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
# app.py

from transformers import pipeline

# Load Zero-Shot Classification Model (for detecting Requirement Type, Domain, Stakeholders, and Defects)
classifier = pipeline("zero-shot-classification", model="facebook/bart-large-mnli")

# Load T5 model for Rewriting (Paraphrasing)
from transformers import T5ForConditionalGeneration, T5Tokenizer

t5_model = T5ForConditionalGeneration.from_pretrained("t5-small")
t5_tokenizer = T5Tokenizer.from_pretrained("t5-small")

# Function to classify requirement type (Functional/Non-Functional)
def classify_requirement_type(requirement):
    candidate_labels = ["Functional", "Non-Functional"]
    result = classifier(requirement, candidate_labels)
    return result['labels'][0]

# Function to identify stakeholders
def identify_stakeholders(requirement):
    candidate_labels = ["End User", "Developer", "System Analyst", "Project Manager"]
    result = classifier(requirement, candidate_labels)
    return result['labels'][0]

# Function to classify domain of the requirement
def classify_domain(requirement):
    candidate_labels = ["Bank", "Healthcare", "Education", "Finance", "Cybersecurity", "E-commerce"]
    result = classifier(requirement, candidate_labels)
    return result['labels'][0]

# Function to detect defects (e.g., Ambiguity, Incompleteness)
def detect_defects(requirement):
    candidate_labels = ["Ambiguity", "Incompleteness", "Security Flaw", "Redundancy", "Performance Issue"]
    result = classifier(requirement, candidate_labels)
    return result['labels'][0]

# Function to rewrite the requirement in a simpler way using T5
def rewrite_requirement(requirement):
    input_text = "paraphrase: " + requirement
    input_ids = t5_tokenizer.encode(input_text, return_tensors="pt", max_length=512, truncation=True)
    
    output_ids = t5_model.generate(input_ids, max_length=150, num_beams=5, early_stopping=True)
    output_text = t5_tokenizer.decode(output_ids[0], skip_special_tokens=True)
    
    return output_text

# Main function to take input requirement and process it
def process_requirement(requirement):
    requirement_type = classify_requirement_type(requirement)
    stakeholder = identify_stakeholders(requirement)
    domain = classify_domain(requirement)
    defects = detect_defects(requirement)
    rewritten_requirement = rewrite_requirement(requirement)
    
    return {
        "Requirement Type": requirement_type,
        "Stakeholder": stakeholder,
        "Domain": domain,
        "Defects": defects,
        "Rewritten Requirement": rewritten_requirement
    }

if __name__ == "__main__":
    # Example usage:
    requirement = input("Enter the software requirement: ")
    result = process_requirement(requirement)
    
    # Print the results
    for key, value in result.items():
        print(f"{key}: {value}")