Urban Planning Lecture Notes Pdf May 2026

def identify_sections(self) -> Dict[str, str]: """Identify and extract major sections from lecture notes""" lines = self.full_text.split('\n') current_section = "Introduction" sections = current_section: [] # Common urban planning section headers section_patterns = [ r'(?i)^(?:chapter|section|part)\s+\d+[:.\s]+(.+)$', r'(?i)^(\d+\.\d+)\s+(.+)$', r'(?i)^([A-Z][A-Z\s]5,)$', # ALL CAPS headers r'(?i)^(introduction|background|methodology|analysis|conclusion|references)$', r'(?i)^(zoning|transportation|land use|environmental|housing|infrastructure|sustainability)', r'(?i)^(smart growth|new urbanism|urban design|public participation|economic development)' ] for line in lines: line = line.strip() if not line: continue section_found = False for pattern in section_patterns: if re.match(pattern, line): current_section = line[:50] # Limit section name length sections[current_section] = [] section_found = True break if not section_found and current_section: sections[current_section].append(line) # Convert lists to strings self.sections = k: ' '.join(v) for k, v in sections.items() if v return self.sections

def _extract_principles(self) -> List[str]: """Extract core urban planning principles""" principle_patterns = [ r'(?i)principle[s]? of (.+?)[\.\n]', r'(?i)core (?:concept|principle)[s]?: (.+?)[\.\n]', r'(?i)([^.]*?(?:should|must|requires|essential|crucial|important)[^.]*?\.)' ] principles = [] for pattern in principle_patterns: matches = re.findall(pattern, self.full_text) principles.extend(matches[:5]) return principles[:10]

import PyPDF2 import re from typing import List, Dict, Tuple import json from collections import Counter import nltk from nltk.corpus import stopwords from nltk.tokenize import sent_tokenize, word_tokenize from sklearn.feature_extraction.text import TfidfVectorizer from sklearn.metrics.pairwise import cosine_similarity import pandas as pd import spacy Download required NLTK data nltk.download('punkt') nltk.download('stopwords') nltk.download('averaged_perceptron_tagger') Load spaCy model (run: python -m spacy download en_core_web_sm) nlp = spacy.load('en_core_web_sm') urban planning lecture notes pdf

def create_summary(self) -> Dict: """Create a structured summary of the lecture notes""" summary = 'total_pages': len(self.pages_text), 'total_words': len(self.full_text.split()), 'key_topics': [c['term'] for c in self.key_concepts[:15]], 'case_studies_count': len(self.case_studies), 'main_sections': list(self.sections.keys())[:10], 'core_principles': self._extract_principles(), 'recommended_focus_areas': self._identify_focus_areas() return summary

def generate_study_questions(self) -> List[Dict]: """Generate study questions based on key concepts and sections""" questions = [] # Generate questions from key concepts for concept in self.key_concepts[:10]: questions.append( 'type': 'concept', 'question': f"What are the key principles and applications of concept['term'] in urban planning?", 'related_concept': concept['term'], 'hint': f"Review section discussing concept['term'] (mentioned concept['frequency'] times)" ) # Generate questions from sections for section_name, section_text in list(self.sections.items())[:5]: if len(section_text) > 100: questions.append( 'type': 'section', 'question': f"Summarize the main arguments presented in 'section_name' regarding urban planning approaches.", 'related_section': section_name, 'hint': "Focus on the key definitions and examples provided" ) # Add comparative questions if len(self.case_studies) >= 2: questions.append( 'type': 'comparative', 'question': f"Compare and contrast the urban planning approaches in 'self.case_studies[0]['title']' vs 'self.case_studies[1]['title']'.", 'hint': "Consider differences in context, implementation, and outcomes" ) return questions 📖") break elif command == 'concepts': self

def _show_case_studies(self): print("\n📋 CASE STUDIES:") for i, case in enumerate(self.analyzer.case_studies[:5], 1): print(f"\ni. case['title']") print(f" case['description'][:200]...")

def _identify_focus_areas(self) -> List[str]: """Identify areas that need more attention based on complexity markers""" complexity_markers = [ 'important', 'crucial', 'essential', 'note that', 'remember', 'key point', 'significant', 'critical', 'fundamental' ] focus_areas = [] sentences = sent_tokenize(self.full_text) for sentence in sentences: for marker in complexity_markers: if marker in sentence.lower(): focus_areas.append(sentence[:100]) break return list(set(focus_areas))[:8] def identify_sections(self) -&gt

def interactive_session(self): """Run interactive study session""" print("\n" + "="*60) print("📚 URBAN PLANNING STUDY ASSISTANT") print("="*60) print("\nCommands:") print(" 'concepts' - Show key concepts") print(" 'questions' - Generate study questions") print(" 'cases' - Show case studies") print(" 'summary' - Show lecture summary") print(" 'search [term]' - Search for specific topics") print(" 'quiz' - Take a quick quiz") print(" 'export' - Export analysis to JSON") print(" 'quit' - Exit") while True: command = input("\n📝 Enter command: ").strip().lower() if command == 'quit': print("Happy studying! 📖") break elif command == 'concepts': self._show_concepts() elif command == 'questions': self._show_questions() elif command == 'cases': self._show_case_studies() elif command == 'summary': self._show_summary() elif command.startswith('search'): term = command[7:].strip() if term: self._search(term) else: print("Please provide a search term (e.g., 'search zoning')") elif command == 'quiz': self._take_quiz() elif command == 'export': self.analyzer.export_to_json('urban_planning_analysis.json') else: print("Unknown command. Try 'concepts', 'questions', 'cases', 'summary', 'search [term]', 'quiz', or 'quit'")