Automated .docx report validation for CS800 seminar courses
Checks document structure, section word counts, and Personal Review content coverage with a rich terminal UI.
- Header validation — verifies that
Student Name,Seminar Title,Speaker, andSeminar Datefields are present and filled in - Word count enforcement — checks the Seminar Summary (50-100 words) and Personal Review (300-400 words) against configurable limits
- Content coverage analysis — uses keyword-based heuristics to confirm the Personal Review discusses:
- Strong and/or weak aspects of the research
- Strong and/or weak aspects of the presentation
- How the research could be applied and/or expanded
- Personal comments and opinions (reported as a warning, not a failure)
- Rich CLI output — color-coded table with PASS / WARN / FAIL status per report
- Plain-text report file — writes
validation_results.txtfor commit-to-repo tracking or CI pipelines - Zero config — drop
.docxfiles into./Reportsand run
- Python 3.12+
- uv (recommended) or pip
# Clone the repository
git clone https://github.com/<your-username>/cs800-validator.git
cd cs800-validator
# Install dependencies
uv sync
# Place your .docx seminar reports in the Reports/ directory, then run
uv run main.pyEach .docx file should follow this template:
Student Name: <name>
Seminar Title: <title>
Speaker: <speaker name>
Seminar Date: <date>
Seminar Summary
<50–100 word paragraph summarizing the seminar>
Personal Review
<300–400 word review that addresses:>
- Strong and/or weak aspects of the research
- Strong and/or weak aspects of the presentation
- How the research could be applied and/or expanded
- Other personal comments
The validator detects sections by heading style (Word heading) or by exact heading text match, so either approach works.
| Check | Requirement | Severity |
|---|---|---|
| Header fields present | Student Name, Seminar Title, Speaker, Seminar Date |
Error |
| Seminar Summary word count | 50 – 100 words | Error |
| Personal Review word count | 300 – 400 words | Error |
| Research strengths/weaknesses | Keywords detected in review | Warning |
| Presentation strengths/weaknesses | Keywords detected in review | Warning |
| Application/expansion of research | Keywords detected in review | Warning |
| Personal comments/opinions | Keywords detected in review | Warning |
Reports with only warnings are considered passing (shown in yellow). Reports with errors are flagged as failures (shown in red).
The validator produces two outputs:
- Rich terminal table — an at-a-glance view of all reports with color-coded status and inline issue descriptions
validation_results.txt— a plain-text log suitable for version control, CI artifacts, or sharing with students
Word count limits and the reports directory are defined as constants at the top of main.py and can be adjusted:
REPORTS_DIR = Path("Reports")
SUMMARY_MIN = 50
SUMMARY_MAX = 100
REVIEW_MIN = 300
REVIEW_MAX = 400- python-docx — reads
.docxparagraph text and styles - Rich — terminal formatting with tables, panels, and color
- uv — fast Python package manager
This project is licensed under the MIT License.