Dannyar608 commited on
Commit
5dcce4a
·
verified ·
1 Parent(s): 3dda5c4

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +41 -12
app.py CHANGED
@@ -8,35 +8,44 @@ from collections import defaultdict
8
 
9
  # ========== TRANSCRIPT PARSING FUNCTIONS ==========
10
  def extract_courses_with_grade_levels(text):
 
11
  grade_level_pattern = r"(Grade|Year)\s*[:]?\s*(\d+|Freshman|Sophomore|Junior|Senior)"
12
  grade_match = re.search(grade_level_pattern, text, re.IGNORECASE)
13
  current_grade_level = grade_match.group(2) if grade_match else "Unknown"
14
 
 
15
  course_pattern = r"""
16
  (?:^|\n)
17
- (?: (Grade|Year)\s*[:]?\s*(\d+|Freshman|Sophomore|Junior|Senior)\s*[\n-]* )?
18
  (
19
- (?:[A-Z]{2,}\s?\d{3})
20
  |
21
- [A-Z][a-z]+(?:\s[A-Z][a-z]+)*
22
  )
23
  \s*
24
- (?: [:\-]?\s* ([A-F][+-]?|\d{2,3}%)? )?
 
 
25
  """
26
 
27
  courses_by_grade = defaultdict(list)
28
  current_grade = current_grade_level
29
 
30
  for match in re.finditer(course_pattern, text, re.VERBOSE | re.MULTILINE):
31
- grade_context, grade_level, course, grade = match.groups()
32
 
33
  if grade_context:
34
  current_grade = grade_level
35
 
36
  if course:
37
- course_info = {"course": course.strip()}
 
 
 
38
  if grade:
39
  course_info["grade"] = grade.strip()
 
 
40
  courses_by_grade[current_grade].append(course_info)
41
 
42
  return dict(courses_by_grade)
@@ -94,8 +103,6 @@ def parse_transcript(file):
94
  else:
95
  output_text += "No GPA information found\n"
96
 
97
- output_text += "\n(Courses not shown here)"
98
-
99
  return output_text, {
100
  "gpa": gpa_data,
101
  "grade_level": grade_level,
@@ -123,15 +130,37 @@ def parse_transcript(file):
123
  courses = df[col].tolist()
124
  break
125
 
126
- output_text = f"Grade Level: {grade_level}\nGPA: {gpa}\n\nCourses:\n"
127
- output_text += "\n".join(f"- {course}" for course in courses)
128
-
129
- return output_text, {
130
  "gpa": {"unweighted": gpa, "weighted": "N/A"},
131
  "grade_level": grade_level,
132
  "courses": courses
133
  }
134
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
135
  # ========== LEARNING STYLE QUIZ ==========
136
  learning_style_questions = [
137
  "When you study for a test, you prefer to:",
 
8
 
9
  # ========== TRANSCRIPT PARSING FUNCTIONS ==========
10
  def extract_courses_with_grade_levels(text):
11
+ # First extract the current grade level
12
  grade_level_pattern = r"(Grade|Year)\s*[:]?\s*(\d+|Freshman|Sophomore|Junior|Senior)"
13
  grade_match = re.search(grade_level_pattern, text, re.IGNORECASE)
14
  current_grade_level = grade_match.group(2) if grade_match else "Unknown"
15
 
16
+ # Improved course pattern to better match course codes and names
17
  course_pattern = r"""
18
  (?:^|\n)
19
+ (?: (Grade|Year)\s*[:]?\s*(\d+|Freshman|Sophomore|Junior|Senior)\s*[\n-]* )? # Optional grade level context
20
  (
21
+ (?:[A-Z]{2,}\s?\d{3}[A-Z]?\b) # Course codes like MATH101 or CS 201A
22
  |
23
+ (?:[A-Z][a-z]+(?:\s+[A-Z][a-z]+)+) # Course names like "Calculus I" or "World History"
24
  )
25
  \s*
26
+ (?: [:\-]?\s* ([A-F][+-]?|\d{2,3}%)? )? # Optional grade
27
+ \s*
28
+ (?: [:\-]?\s* (\d\.\d{1,2})? )? # Optional credit hours
29
  """
30
 
31
  courses_by_grade = defaultdict(list)
32
  current_grade = current_grade_level
33
 
34
  for match in re.finditer(course_pattern, text, re.VERBOSE | re.MULTILINE):
35
+ grade_context, grade_level, course, grade, credits = match.groups()
36
 
37
  if grade_context:
38
  current_grade = grade_level
39
 
40
  if course:
41
+ course_info = {
42
+ "course": course.strip(),
43
+ "grade_level": current_grade
44
+ }
45
  if grade:
46
  course_info["grade"] = grade.strip()
47
+ if credits:
48
+ course_info["credits"] = credits.strip()
49
  courses_by_grade[current_grade].append(course_info)
50
 
51
  return dict(courses_by_grade)
 
103
  else:
104
  output_text += "No GPA information found\n"
105
 
 
 
106
  return output_text, {
107
  "gpa": gpa_data,
108
  "grade_level": grade_level,
 
130
  courses = df[col].tolist()
131
  break
132
 
133
+ return f"Grade Level: {grade_level}\nGPA: {gpa}", {
 
 
 
134
  "gpa": {"unweighted": gpa, "weighted": "N/A"},
135
  "grade_level": grade_level,
136
  "courses": courses
137
  }
138
 
139
+ # ... [keep all other functions the same until transcript_display] ...
140
+
141
+ def transcript_display(transcript_dict):
142
+ if not transcript_dict:
143
+ return "No transcript uploaded."
144
+
145
+ if isinstance(transcript_dict, dict) and "courses" in transcript_dict:
146
+ if isinstance(transcript_dict["courses"], dict):
147
+ display = "### Course History\n\n"
148
+ for grade_level, courses in transcript_dict["courses"].items():
149
+ display += f"**Grade {grade_level}**\n"
150
+ for course in courses:
151
+ display += f"- {course.get('course', 'N/A')}"
152
+ if 'grade' in course:
153
+ display += f" (Grade: {course['grade']})"
154
+ if 'credits' in course:
155
+ display += f" | Credits: {course['credits']}"
156
+ display += "\n"
157
+ display += "\n"
158
+ return display
159
+ elif isinstance(transcript_dict["courses"], list):
160
+ return "### Courses\n" + "\n".join([f"- {course}" for course in transcript_dict["courses"]])
161
+
162
+ return "No course information available in the expected format."
163
+
164
  # ========== LEARNING STYLE QUIZ ==========
165
  learning_style_questions = [
166
  "When you study for a test, you prefer to:",