HakshaySundar commited on
Commit
caa11cf
1 Parent(s): c378e49

Update text_converter.py

Browse files
Files changed (1) hide show
  1. text_converter.py +50 -9
text_converter.py CHANGED
@@ -22,21 +22,43 @@ def generate_user_prompt(prompt_type, base_text):
22
 
23
  return prompts[prompt_type].format(base_text=base_text)
24
 
 
 
 
 
 
 
 
 
 
25
 
26
- def generate_similar_sentence(input_text, min_reading_level, max_reading_level, min_entailment, system_prompt, max_iter):
 
 
 
 
 
 
 
 
 
 
 
 
 
27
  i = 0
28
  completed = False
29
  user_prompt = ""
30
- curr_reading_level = flesch_reading_ease(input_text)
31
- input_reading_level = flesch_reading_ease(input_text)
32
  curr_text = input_text
33
  response = None
34
  similarity = 0
35
  reading_level = 0
36
- print(f"Current reading level is: {curr_reading_level}")
 
 
37
 
38
- if curr_reading_level > min_reading_level and curr_reading_level < max_reading_level:
39
- return input_text, 1, curr_reading_level, input_reading_level, "Input text was already within the target reading level!"
40
 
41
  else:
42
  while i < max_iter and not completed:
@@ -49,20 +71,39 @@ def generate_similar_sentence(input_text, min_reading_level, max_reading_level,
49
  elif similarity < min_entailment:
50
  print(f"Entailment level is too low: {similarity}")
51
  user_prompt = f"Can you convert this text '{input_text}' to a grade level more similar to this text '{curr_text}'"
 
 
 
 
52
 
53
  response = get_gpt_response(user_prompt, system_prompt)
 
 
 
 
54
  similarity = get_similarity(response, input_text)
55
  reading_level = flesch_reading_ease(response)
56
 
 
57
  if similarity >= min_entailment and min_reading_level <= reading_level <= max_reading_level:
 
58
  completed = True
 
 
 
 
 
59
 
60
  curr_text = response
61
  curr_reading_level = reading_level
62
- print(response)
63
  i += 1
64
 
 
 
 
 
 
65
  if completed:
66
- return response, similarity, reading_level, input_reading_level, "Success! Please see the converted text at your target reading level."
67
  else:
68
- return response, similarity, reading_level, input_reading_level, "Failed. We could not reach the target reading level while maintaining the text meaning."
 
22
 
23
  return prompts[prompt_type].format(base_text=base_text)
24
 
25
+ reading_levels = {
26
+ "5th Grade (90-100)": (90, 100),
27
+ "6th Grade (80-90)": (80, 90),
28
+ "7th Grade (70-80)": (70, 80),
29
+ "8th - 9th Grade (60-70)": (60, 70),
30
+ "10th - 12th Grade (50-60)": (50, 60),
31
+ "College (30-50)": (30, 50),
32
+ "College Graduate + Professionals (0-30)": (0, 30)
33
+ }
34
 
35
+ inverse_reading_levels = {v: k for k, v in reading_levels.items()}
36
+
37
+ def user_input_readability_level(input_text):
38
+ current_score = flesch_reading_ease(input_text)
39
+ print(f'Reading score for user input is: {current_score}')
40
+ current_level = ''
41
+ for (min, max), level in inverse_reading_levels.items():
42
+ if min <= current_score <= max:
43
+ print(f'Reading level for user input is: {level}')
44
+ current_level = level
45
+ break
46
+ return current_score, current_level
47
+
48
+ def generate_similar_sentence(input_text, min_reading_level, max_reading_level, min_entailment, system_prompt, max_iter, curr_reading_level):
49
  i = 0
50
  completed = False
51
  user_prompt = ""
 
 
52
  curr_text = input_text
53
  response = None
54
  similarity = 0
55
  reading_level = 0
56
+ generated_texts = []
57
+ result_index = -1
58
+ closeness = float('inf')
59
 
60
+ if min_reading_level < curr_reading_level < max_reading_level:
61
+ return input_text, 1, curr_reading_level, "Input text was already within the target reading level!"
62
 
63
  else:
64
  while i < max_iter and not completed:
 
71
  elif similarity < min_entailment:
72
  print(f"Entailment level is too low: {similarity}")
73
  user_prompt = f"Can you convert this text '{input_text}' to a grade level more similar to this text '{curr_text}'"
74
+ else:
75
+ print(f"Reading level is within target range: {curr_reading_level}")
76
+ completed = True
77
+ break
78
 
79
  response = get_gpt_response(user_prompt, system_prompt)
80
+
81
+ # First we add the generated text to the list of generated texts.
82
+ generated_texts.append(response)
83
+
84
  similarity = get_similarity(response, input_text)
85
  reading_level = flesch_reading_ease(response)
86
 
87
+ # Determine the closeness of the reading level to the target reading level and store.
88
  if similarity >= min_entailment and min_reading_level <= reading_level <= max_reading_level:
89
+ result_index = i
90
  completed = True
91
+ break
92
+ elif (reading_level < min_reading_level and abs(reading_level - min_reading_level) < closeness) \
93
+ or (reading_level > max_reading_level and abs(reading_level - max_reading_level) < closeness):
94
+ closeness = abs(reading_level - min_reading_level) if reading_level < min_reading_level else abs(reading_level - max_reading_level)
95
+ result_index = i
96
 
97
  curr_text = response
98
  curr_reading_level = reading_level
 
99
  i += 1
100
 
101
+ # Printing all generated texts to console.
102
+ for i, text in enumerate(generated_texts):
103
+ print(f"Generated text {i}: {text}")
104
+
105
+ # Returning the final result.
106
  if completed:
107
+ return generated_texts[result_index], similarity, reading_level, "Success! Please see the converted text at your target reading level."
108
  else:
109
+ return generated_texts[result_index], similarity, reading_level, "Failed. We could not reach the target reading level while maintaining the text meaning."