"""Generate the filled TETFund-IBR Application (URAAS) as a .docx file.""" from docx import Document from docx.shared import Pt, Inches, RGBColor from docx.enum.text import WD_ALIGN_PARAGRAPH from docx.enum.table import WD_TABLE_ALIGNMENT from docx.oxml.ns import qn from docx.oxml import OxmlElement OUT_PATH = r"c:\Users\hp\Downloads\crawler-unilag-apa\docs\IBR_Application_Form_2026_Filled.docx" doc = Document() # Base style style = doc.styles['Normal'] style.font.name = 'Calibri' style.font.size = Pt(11) def shade_cell(cell, color="D9E2F3"): tc_pr = cell._tc.get_or_add_tcPr() shd = OxmlElement('w:shd') shd.set(qn('w:val'), 'clear') shd.set(qn('w:color'), 'auto') shd.set(qn('w:fill'), color) tc_pr.append(shd) def add_heading(text, level=1): h = doc.add_heading(text, level=level) return h def add_boxed_text(text, bold_lead=None): table = doc.add_table(rows=1, cols=1) table.style = 'Table Grid' cell = table.rows[0].cells[0] cell.text = "" p = cell.paragraphs[0] if bold_lead: run = p.add_run(bold_lead) run.bold = True run2 = p.add_run(text) doc.add_paragraph("") return table def add_numbered_section(number, title, content, box=True): p = doc.add_paragraph() run = p.add_run(f"{number}. {title}") run.bold = True run.font.size = Pt(12) if box: add_boxed_text(content) else: doc.add_paragraph(content) # ---------- Header ---------- title_p = doc.add_paragraph() title_p.alignment = WD_ALIGN_PARAGRAPH.CENTER for line in [ "RESEARCH MANAGEMENT OFFICE", "OFFICE OF THE DEPUTY VICE CHANCELLOR (ACADEMICS & RESEARCH)", "TETFUND-IBR RESEARCH PROPOSAL APPLICATION TEMPLATE", "FEBRUARY, 2026", ]: r = title_p.add_run(line + "\n") r.bold = True h = doc.add_heading("TETFUND-IBR APPLICATION TEMPLATE", level=0) h.alignment = WD_ALIGN_PARAGRAPH.CENTER # 1. Principal Researcher p = doc.add_paragraph() p.add_run("1. Principal Researcher (Details) ").bold = True p.add_run("Dr. Titilayo Adedokun") # 2. Research Team doc.add_paragraph() p = doc.add_paragraph() p.add_run("2. Research Team (Name/Rank/Highest Qualification/Area of specialization)").bold = True team = [ ["SN", "Name", "Rank", "Highest Qualification", "Area of Specialisation", "Telephone", "Email"], ["1", "Dr Titilayo Adedokun", "Senior Librarian", "Ph.D", "Library Science", "08060236246", "tadedokun@unilag.edu.ng"], ["2", "Olatokunbo Okiki", "Professor", "Ph.D.", "Library Science", "08028381337", "cokiki@unilag.edu.ng"], ["3", "Luqman Adams", "Professor", "Ph.D.", "University Ranking Data Provider", "08089953221", "ladams@unilag.edu.ng"], ["4", "Olufemi Agunbiade", "", "B.Sc.", "Data Analytics", "08066400594", "sagunbiade@unilag.edu.ng"], ["5", "Giyath Lawal", "Student", "Undergraduate", "Software Engineer", "08062679191", "giyathlawal@gmail.com"], ] t = doc.add_table(rows=len(team), cols=7) t.style = 'Table Grid' for i, row in enumerate(team): for j, val in enumerate(row): cell = t.rows[i].cells[j] cell.text = val if i == 0: shade_cell(cell) for run in cell.paragraphs[0].runs: run.bold = True doc.add_paragraph("") # 3-9 straightforward boxed sections add_numbered_section(3, "Title of Research Proposal [Not more than 20 words]", "Preservation of Indigenous Knowledge, Cultural Heritage and Innovations: The University " "Repository Archival & Analytics System (URAAS)") add_numbered_section(4, "Estimated Duration for the Research", "9 months") add_numbered_section(5, "Amount Requested", "₦ 4,889,529.5 (Four million, eight hundred eighty-nine thousand, five hundred twenty-nine " "point five)") exec_summary = ( "This proposal outlines the development of the University Repository Archival & Analytics " "System (URAAS), an innovative, enterprise-level digital asset management system designed to " "preserve, curate, and analyse Indigenous Knowledge (IK), cultural heritage, and African " "innovations within Nigerian universities, particularly the University of Lagos. The project is " "submitted under the TETFund National Research Fund (NRF) 2026, within the thematic area of ICT " "in Education and Library & Information Science.\n\n" "Indigenous knowledge represents a critical intellectual and cultural resource embedded in local " "traditions, oral histories, and community practices across Africa. However, this knowledge is " "increasingly endangered due to globalization, urban migration, loss of custodians (elders), and " "the predominance of oral transmission systems that lack formal documentation. Existing archival " "practices are fragmented, externally controlled, and often fail to account for issues of " "cultural sensitivity, intellectual property rights, and community ownership. Furthermore, " "traditional and even many digital repositories are not adequately structured to capture the " "complexity, contextual richness, and non-linear nature of indigenous knowledge systems.\n\n" "To address these challenges, this project aims to design and implement URAAS—a " "self-archiving, analytics-driven digital repository that integrates automated web crawling, " "natural language processing (NLP), metadata enrichment, and advanced analytics. The system will " "centralize scattered institutional research outputs and indigenous knowledge assets while " "ensuring cultural compliance, data sovereignty, and long-term preservation. Unlike conventional " "repositories, URAAS introduces a culturally responsive framework that incorporates multilingual " "capabilities (e.g., Yoruba, Igbo, Hausa), community participation, and restricted access " "protocols where necessary.\n\n" "The specific objectives include: (1) developing an automated repository system to aggregate and " "preserve institutional and indigenous knowledge assets; (2) safeguarding scholarly outputs " "against data loss through robust digital preservation infrastructure; (3) enabling large-scale " "metadata processing and analytics for strategic decision-making; and (4) generating data-driven " "insights to inform institutional policies and research priorities.\n\n" "Methodologically, the project will adopt a modular, microservices-based architecture combining " "tools such as Django REST Framework, Elasticsearch, PostgreSQL, React.js, and Apache Superset. " "The system will employ automated crawling technologies (Scrapy and Playwright) to harvest data " "from institutional and external academic platforms, followed by NLP-based metadata enrichment " "and duplicate detection. Validation processes will ensure technical integrity and cultural " "compliance, while preservation strategies will include distributed storage across multiple " "locations to guarantee long-term sustainability (minimum of 25 years).\n\n" "The expected outcomes include: (i) a standardized Indigenous Knowledge Taxonomy and Metadata " "Framework; (ii) a fully functional URAAS platform adaptable across Nigerian universities; (iii) " "a repository populated with at least 5,000 indexed records; (iv) validated protocols for " "cultural and intellectual property protection; (v) a sustainable digital preservation policy; " "and (vi) analytics-driven reports to support institutional planning and national cultural " "heritage strategies.\n\n" "URAAS is highly innovative in three major ways: it is specifically designed for African " "contexts and epistemologies; it integrates crawling, curation, and analytics into a unified " "system; and it is built entirely on open-source technologies, ensuring scalability and " "cost-effectiveness without reliance on proprietary platforms. This positions URAAS as a " "transformative solution for strengthening research visibility, preserving cultural identity, " "and advancing data-driven governance in Nigerian higher education." ) add_numbered_section(6, "Executive Summary [Maximum of 600 words]", exec_summary) introduction = ( "Indigenous knowledge (IK) is deeply rooted in the cultural and environmental contexts of " "indigenous people. It covers indigenous peoples and local communities' long-standing " "traditions, and intimate knowledge of local ecosystems, biodiversity, and social systems " "developed over time (Berkes, 2009), including agriculture and healthcare (Whyte, 2017; Jessen " "et al., 2022). This knowledge is often deeply embedded within cultural traditions, rituals, and " "social structures in the form of textiles, paintings, writings, music, dance, and oral tradition " "(Battiste, 2002). African innovations are often passed over without recognition as homegrown " "solutions towards African sustainable development.\n\n" "The trend of globalization, urbanization, and the erosion of traditional lifestyles has " "significantly threatened the continuity of indigenous knowledge and cultural identity " "preservation. The demise of knowledgeable elders in communities, lack of documentation or " "inadequate archiving, transmittance in oral form, as well as marginalization of indigenous " "communities, are factors contributing to the rapid disappearance and vulnerability to permanent " "loss (UNESCO, 2017).\n\n" "Digital technologies such as Digital Asset Management Systems (DAMS) provide structured " "solutions for preserving and disseminating information through storing, organizing, retrieving, " "and sharing digital content, including text, audio, video, and images (Gilliland, 2014). A " "self-archiving digital asset management system simplifies documenting and preserving knowledge " "while strengthening ownership, control, and accessibility, unlike traditional archiving " "processes that are heavily reliant on manual input, leaving vast amounts of institutional " "knowledge scattered, unindexed, and underutilized.\n\n" "The goal of this study is to develop a self-archiving digital asset management system, " "configured for analytics, that is tailored to curate indigenous knowledge, cultural heritage, " "and innovations for sustainable impact." ) add_numbered_section(7, "Introduction [Maximum of 500 words]", introduction) problem = ( "Indigenous knowledge is at risk due to several interrelated challenges. Unfortunately, the " "trend is a decline in cultural continuity as traditional oral methods of knowledge transmission " "are increasingly disrupted by modernization, as younger generations migrate to urban areas " "(Ngulube, 2002).\n\n" "Similarly, existing documentation is often fragmented, externally driven, and lacks community " "involvement, which raises concerns about intellectual property rights, cultural sensitivity, " "and data ownership. Indigenous communities frequently have limited control over how knowledge " "is recorded, stored, and shared (Smith, 2012).\n\n" "The commonly adopted manual archiving approach exposes African communities and universities to " "the risk of data loss, particularly because conventional digital repositories are not designed " "to accommodate the unique characteristics of indigenous knowledge — oral traditions, " "contextual meanings, and cultural restrictions (Christen, 2012) — thereby weakening " "strategic research investments.\n\n" "These challenges underscore the need for a customised self-archiving digital system that " "ensures sustainable preservation while respecting cultural values and ownership rights." ) add_numbered_section(8, "Statement of the Problem / Justification [Maximum of 500 words]", problem) objectives = ( "The aim of this study is to design and develop a self-archiving-analytics digital asset " "management system for curating, preserving and evaluating the impact of indigenous knowledge, " "cultural heritage and the economic value of African innovations.\n\n" "The specific objectives are to:\n" "1. Develop and deploy URAAS as an enterprise-level, automated web crawler to centralize " "scattered institutional research assets.\n" "2. Safeguard institutional scholarly output against data loss through robust digital " "preservation architectures.\n" "3. Enable large-scale processing of discovery logs and metadata to reveal actionable patterns " "for university administrators and library leadership.\n" "4. Undertake analytics to review trends and produce data-guided reports for decision-making and " "impact assessment.\n\n" "Research Questions\n" "1. How does the deployment of an automated repository archival system (URAAS) improve the " "speed and comprehensiveness of digital preservation compared to traditional manual workflows?\n" "2. In what ways can automated metadata extraction and multi-linear containers reduce data " "fragmentation and enhance the visibility of Nigerian Indigenous knowledge and cultural " "scholarly output?\n" "3. Can curation and archival facilitate preservation of our Indigenous knowledge and cultural " "scholarly output for posterity?\n" "4. How can issues of cultural sensitivity, intellectual property, and data sovereignty be " "incorporated into digital preservation systems?" ) add_numbered_section(9, "Objectives of the Study [Maximum of 300 words]", objectives) lit_review = ( "The transformation of academic libraries relies heavily on integrating advanced analytical " "tools with professional judgment (Davenport & Harris, 2007). Modern approaches leverage " "predictive analytics and scenario simulation to foster proactive strategy and rapid iteration, " "replacing reactive planning (Davenport & Harris, 2007; Witten et al., 2011). Automated systems " "now utilize natural language processing for metadata enrichment, significantly improving " "digital discovery (Bird et al., 2009; Grishman, 1997). Furthermore, clustering user needs and " "subject trends allows institutions to deliver highly targeted academic services, moving away " "from reactive storage to active research intelligence (Borgman, 2015; Smith, 2012).\n\n" "Automated metadata extraction, particularly through natural language processing (NLP) and " "machine learning, has been identified as a critical tool for reducing data fragmentation and " "improving the discoverability of Indigenous knowledge systems. In contexts such as Nigeria, " "where cultural and scholarly outputs are often dispersed across oral traditions, local " "repositories, and under-digitized archives, automated systems can standardize descriptive " "metadata, enrich indexing, and enable interoperability across platforms. When combined with " "multi-linear container models — digital frameworks that allow layered, non-sequential " "organization of text, audio, and visual materials — these technologies can better " "represent the complexity and contextual richness of Indigenous knowledge. Such approaches not " "only improve access but also ensure that diverse epistemologies are preserved in forms that " "reflect their original structure and meaning, rather than being constrained by linear Western " "archival standards (Davenport & Harris, 2007; Witten et al., 2011).\n\n" "Curation and archival practices play an equally vital role in safeguarding Indigenous Nigerian " "knowledge for future generations. Strategic digital curation — encompassing selection, " "contextualization, and preservation — ensures that cultural materials remain accessible, " "authentic, and usable over time. Archival frameworks that incorporate community participation " "and culturally responsive methodologies are especially important, as they help maintain the " "integrity and ownership of Indigenous knowledge. Furthermore, sustainable digital preservation " "techniques, including the use of open standards and long-term storage infrastructures, enhance " "resilience against data loss and technological obsolescence. Together, these practices " "transform archives from passive repositories into active agents of cultural continuity and " "scholarly engagement (Bird et al., 2009; Grishman, 1997; Smith, 2012).\n\n" "Theoretical Framework\n\n" "This research is anchored in the Data-Driven Decision Making (DDDM) Framework and the concept " "of Intelligence-Driven Leadership. The framework posits that shifting from fragmented, " "anecdotal data collection to centralized, evidence-based systems will directly improve " "organizational strategic outputs, policy formulation, and global institutional rankings.\n\n" "The Knowledge Management Theory provides a framework for capturing, storing, and sharing " "knowledge effectively (Nonaka & Takeuchi, 1995). It emphasizes the transformation of tacit " "knowledge into explicit forms, which is particularly relevant for indigenous knowledge " "systems.\n\n" "The Digital Heritage Theory focuses on the preservation of cultural artifacts using digital " "technologies, emphasizing authenticity, accessibility, and sustainability (UNESCO, 2017)." ) add_numbered_section(10, "Literature Review [Maximum of 1000 words]", lit_review) methodology = ( "Framework Development: Conceptual and Technical Architecture\n\n" "To establish a modular, microservices-based architecture consisting of: (i) a Django REST " "Framework backend for repository management and API exposure; (ii) an Elasticsearch 8.x " "cluster for full-text indexing and discovery; (iii) a React.js progressive web application " "frontend supporting multilingual and low-bandwidth access; (iv) a Celery-based task queue for " "asynchronous crawling and processing jobs; and (v) a PostgreSQL relational database for " "metadata persistence.\n\n" "Identification, Classification and Coding of Indigenous Knowledge, Cultural Heritage and " "Innovations\n\n" "Mapping and classification of assets on UNILAG faculty outputs related to IK, cultural " "studies, oral traditions and related disciplines; coding with the MARC 21 and Dublin Core " "metadata standards, extended with IK-specific fields including oral-source attribution, " "cultural context descriptor, community ownership flag and preservation urgency rating. This " "phase will produce the URAAS Taxonomy and Metadata Standard (UTMS) document.\n\n" "Crawling and Curating: System Deployment and Content Ingestion\n\n" "The URAAS crawler engine will be implemented in Python 3.11 using Scrapy 2.x for structured " "web extraction and Playwright for JavaScript-rendered pages. It will be configured with " "faculty-specific crawl rules targeting internal UNILAG web environments, departmental " "repositories, faculty profile pages and linked external academic profiles (Google Scholar, " "ResearchGate, ORCID, Academia.edu). Residential proxy rotation (via enterprise proxy services) " "will be employed to ensure reliable, rate-compliant access to external sources.\n\n" "Upon ingestion, all content passes through an automated NLP enrichment pipeline, Dublin Core " "metadata generation, and duplicate detection via MinHash locality-sensitive hashing. This " "phase will deliver a populated URAAS repository containing a minimum of 5,000 indexed records " "within the project timeline.\n\n" "Validation: Integrity, Authenticity and Cultural Compliance Auditing\n\n" "Validation operates at two levels: technical and cultural. At the technical level, automated " "audit scripts will verify: (i) file integrity via SHA-256 checksums comparing ingested content " "against source; (ii) metadata completeness scoring, flagging records below a minimum " "completeness threshold of 85%; (iii) format conformance checks against PRONOM file format " "registry standards; and (iv) security scanning for malicious content and personal data " "exposure using ClamAV and custom PII-detection models.\n\n" "Preservation: Long-Term Digital Archiving Architecture\n\n" "Preservation copies of all archived materials will be maintained in three geographically " "distributed storage locations: primary on-site NVMe storage at UNILAG; a secondary cloud " "backup on AWS S3-compatible object storage in an African data centre; and a tertiary backup " "using BagIt-formatted archival packages deposited to a national repository partner.\n\n" "Analytics for Impact: Evidence-Based Insights and Reporting\n\n" "A custom analytics dashboard, built with Apache Superset on top of the Elasticsearch and " "PostgreSQL data stores, will provide real-time and historical visualisations of: (i) " "repository growth trends by knowledge category, format and faculty; (ii) discovery and access " "patterns, including most-searched subjects, download frequency and user geographic " "distribution; (iii) research gap analysis, identifying IK domains and cultural heritage " "categories under-represented in the institutional scholarly record; (iv) citation and impact " "tracking for archived scholarly outputs; and (v) community contribution metrics, tracking " "self-archiving activity and community engagement levels." ) add_numbered_section(11, "Methodology (should include description of the study area, Data collection and data analysis) [Maximum of 1000 words]", methodology) expected_results = ( "The expected outcomes of this study are directly mapped to the six specific objectives and the " "six methodology phases:\n\n" "Outcome 1: A validated URAAS Indigenous Knowledge Taxonomy (IKT) and Metadata Standard (UTMS) " "— a reusable, openly published classification framework covering at least six primary IK " "categories, applicable to other Nigerian universities and institutional repositories.\n\n" "Outcome 2: A fully functional, deployable URAAS platform as a modular, culturally sensitive " "digital asset management system with self-archiving portal, role-based access controls, " "multilingual interface and a documented API, deployable by any Nigerian university repository " "administrator.\n\n" "Outcome 3: A populated institutional repository containing a minimum of 5,000 indexed records " "that include faculty scholarly outputs, community-sourced indigenous knowledge assets (audio, " "video, text and image), enriched with NLP-generated metadata in compliance with the UTMS.\n\n" "Outcome 4: A Validation and Audit Report certifying the integrity, cultural compliance and IP " "sovereignty of archived content, accompanied by a replicable Community Validation Protocol and " "Cultural Arbitration Workflow transferable to future archival projects.\n\n" "Outcome 5: A long-term URAAS Digital Preservation Policy and a three-site preservation " "infrastructure to demonstrate format migration workflows, integrity audit cycles and a signed " "MoU securing post-grant institutional maintenance, ensuring the survival of archived assets " "for a minimum of 25 years.\n\n" "Outcome 6: Quarterly Data-Guided Reports and a final Impact Assessment Report delivering " "evidence-based insights on indigenous knowledge gaps, research trends and institutional " "performance indicators which will inform UNILAG's strategic planning, library policy and " "national cultural heritage investment decisions.\n\n" "INNOVATION\n\n" "URAAS represents a substantive paradigm shift in indigenous knowledge preservation. Its " "innovation is threefold:\n" "• Indigenous Enterprise-Grade Design for African Institutions: Unlike existing tools such " "as Mukurtu CMS (designed for Pacific Indigenous communities) or standard DSpace configurations " "(designed for Western linear archival norms), URAAS is built for multilingual support (Yoruba, " "Igbo and Hausa), culturally restricted access tiers, and community self-archiving workflows " "that return knowledge ownership to originating communities.\n" "• Integrated Crawling-Curation-Analytics Pipeline: A repository combining automated web " "crawling, NLP metadata enrichment, community self-archiving and advanced analytics in a single " "deployable platform.\n" "• Zero-Markup Infrastructural Scaling: URAAS is built on open-source components (Scrapy, " "Elasticsearch, Django, PostgreSQL, Apache Superset), eliminating commercial licensing costs so " "that a Nigerian university with basic cloud infrastructure can adopt and sustain URAAS without " "ongoing vendor dependency — a critical sustainability advantage over commercial DAMS " "solutions." ) add_numbered_section(12, "Expected Results [Maximum of 400 words]", expected_results) # ---------- 13. Work Plan / Timeline (GANTT) ---------- p = doc.add_paragraph() run = p.add_run("13. Work Plan/ Timeline (Provide activity in the form of a GANTT Chart) [Maximum of 400 words]") run.bold = True run.font.size = Pt(12) gantt_intro = doc.add_paragraph( "The 9-month project is organized into seven overlapping work packages aligned to the six " "methodology phases plus dissemination. Shaded cells indicate the active month(s) for each " "activity." ) activities = [ "1. Framework Development (Architecture design, environment setup)", "2. Identification, Classification & Coding of IK (UTMS Taxonomy)", "3. Crawler Development & Configuration (Scrapy/Playwright)", "4. Crawling & Curating: Content Ingestion (target: 5,000 records)", "5. NLP Metadata Enrichment & Duplicate Detection", "6. Validation: Technical & Cultural Compliance Auditing", "7. Preservation: Three-Site Archival Infrastructure Setup", "8. Analytics Dashboard Development (Apache Superset)", "9. Community Engagement & Local Advocacy (Faculty mapping/travels)", "10. Quarterly Data-Guided Reports", "11. Dissemination (Publications, Final Impact Assessment Report)", ] # months active per activity (1-indexed, 9 months) schedule = { 0: [1, 2], 1: [1, 2, 3], 2: [2, 3], 3: [3, 4, 5, 6], 4: [4, 5, 6], 5: [5, 6, 7], 6: [6, 7, 8], 7: [6, 7, 8, 9], 8: [2, 5, 8], 9: [3, 6, 9], 10: [8, 9], } n_months = 9 gt = doc.add_table(rows=len(activities) + 1, cols=1 + n_months) gt.style = 'Table Grid' gt.alignment = WD_TABLE_ALIGNMENT.CENTER hdr = gt.rows[0].cells hdr[0].text = "Activity" for m in range(1, n_months + 1): hdr[m].text = f"M{m}" for c in hdr: shade_cell(c, "D9E2F3") for r in c.paragraphs[0].runs: r.bold = True for i, act in enumerate(activities): row = gt.rows[i + 1].cells row[0].text = act active_months = schedule[i] for m in range(1, n_months + 1): cell = row[m] if m in active_months: cell.text = "X" shade_cell(cell, "F4B084") cell.paragraphs[0].alignment = WD_ALIGN_PARAGRAPH.CENTER else: cell.text = "" # widen activity column for i, row in enumerate(gt.rows): row.cells[0].width = Inches(2.6) for m in range(1, n_months + 1): row.cells[m].width = Inches(0.45) doc.add_paragraph("") # ---------- 14. Budget ---------- p = doc.add_paragraph() run = p.add_run("14. Budget") run.bold = True run.font.size = Pt(12) doc.add_paragraph("BUDGET TEMPLATE").runs[0].bold = True budget_rows = [ ["SN", "ITEM DESCRIPTION", "QUANTITY", "RATE (₦)", "AMOUNT (₦)"], ["1", "Personnel Cost", "", "", ""], ["a", "Principal Investigator", "1", "182,597.92", "182,597.92"], ["b", "Other research members", "4", "106,515.46", "426,061.82"], ["", "Total (≤ 12.5% of Total Budget)", "", "", "608,659.74"], ["2", "Equipment (Detailed specification)", "", "", ""], ["a", "Equipment (<25%) (9-Month Cloud Compute Instances & NVMe Storage)", "", "1,350,500.00", "1,350,500.00"], ["", "Total", "", "", "1,350,500.00"], ["3", "Consumables and Supplies", "", "", ""], ["a", "Supplies and Consumables (Dev environments, administrative supplies)", "2", "250,000.00", "250,000.00"], ["b", "Stationaries", "1", "150,000.00", "150,000.00"], ["", "Total", "", "", "400,000.00"], ["4", "Data Collection and Analysis", "", "", ""], ["a", "Data Collection and Analysis (Enterprise Proxies, API Quotas, Elasticsearch)", "", "1,515,600.00", "1,515,600.00"], ["", "Total", "", "", "1,515,600.00"], ["5", "Travels", "", "", ""], ["a", "Local travels (To the selected universities)", "", "", "247,422.26"], ["", "Total (≤ 5% of Total Budget)", "", "", "247,422.26"], ["6", "Dissemination", "", "", ""], ["a", "Publications (local and international)", "", "150,000.00", "250,000.00"], ["b", "Travels: Local advocacy/mapping across UNILAG faculties", "2", "300,000.00", "285,000.00"], ["", "Total", "", "", "530,000.00"], ["7", "Miscellaneous", "", "", ""], ["a", "Logistics", "", "237,347.50", "237,347.50"], ["", "Total", "", "", "237,347.50"], ["", "GRAND TOTAL", "", "", "4,889,529.50"], ] bt = doc.add_table(rows=len(budget_rows), cols=5) bt.style = 'Table Grid' for i, row in enumerate(budget_rows): for j, val in enumerate(row): cell = bt.rows[i].cells[j] cell.text = val if i == 0: shade_cell(cell, "D9E2F3") for r in cell.paragraphs[0].runs: r.bold = True if "Total" in row[1] or row[1] == "GRAND TOTAL": shade_cell(cell, "FCE4D6") for r in cell.paragraphs[0].runs: r.bold = True doc.add_paragraph("") # ---------- 15. References ---------- p = doc.add_paragraph() run = p.add_run("15. References [Maximum of 25 References, preferably in APA 6 format]") run.bold = True run.font.size = Pt(12) references = [ "Battiste, M. (2002). Indigenous knowledge and pedagogy in First Nations education: A literature review with recommendations. Indian and Northern Affairs Canada.", "Berkes, F. (2009). Sacred ecology (2nd ed.). Routledge.", "Bird, S., Klein, E., & Loper, E. (2009). Natural language processing with Python: Analyzing text with the natural language toolkit. O'Reilly Media.", "Borgman, C. L. (2015). Big data, little data, no data: Scholarship in the networked world. MIT Press.", "Christen, K. (2012). Does information really want to be free? Indigenous knowledge systems and the question of openness. International Journal of Communication, 6, 2870–2893.", "Davenport, T. H., & Harris, J. G. (2007). Competing on analytics: The new science of winning. Harvard Business School Press.", "Gilliland, A. J. (2014). Conceptualizing 21st-century archives. Society of American Archivists.", "Grishman, R. (1997). Information extraction: Techniques and challenges. In M. T. Pazienza (Ed.), Information extraction: A multidisciplinary approach to an emerging information technology (pp. 10–27). Springer.", "Jessen, T. D., Ban, N. C., Claxton, N. X., & Darimont, C. T. (2022). Contributions of Indigenous Knowledge to ecological and evolutionary understanding. Frontiers in Ecology and the Environment, 20(2), 93–101.", "Ngulube, P. (2002). Preservation and access to public records and archives in South Africa [Unpublished doctoral dissertation]. University of Natal.", "Nonaka, I., & Takeuchi, H. (1995). The knowledge-creating company: How Japanese companies create the dynamics of innovation. Oxford University Press.", "Smith, L. T. (2012). Decolonizing methodologies: Research and indigenous peoples (2nd ed.). Zed Books.", "UNESCO. (2017). Local and indigenous knowledge systems (LINKS) programme. United Nations Educational, Scientific and Cultural Organization.", "Whyte, K. (2017). Indigenous climate change studies: Indigenizing futures, decolonizing the Anthropocene. English Language Notes, 55(1–2), 153–162.", "Witten, I. H., Frank, E., & Hall, M. A. (2011). Data mining: Practical machine learning tools and techniques (3rd ed.). Morgan Kaufmann.", ] for i, ref in enumerate(references, start=1): ref_p = doc.add_paragraph(ref) ref_p.paragraph_format.left_indent = Inches(0.5) ref_p.paragraph_format.first_line_indent = Inches(-0.5) doc.add_paragraph("") note = doc.add_paragraph() note_run = note.add_run( "Note: References correspond to in-text citations used throughout this proposal. Please " "verify publisher details/page numbers against your source copies before final submission." ) note_run.italic = True note_run.font.size = Pt(9) doc.add_paragraph("") doc.add_paragraph("") sig_table = doc.add_table(rows=2, cols=2) sig_table.autofit = True labels = [ ["_______________________________", "_______________________________"], ["Signature of Principal Researcher", "Signature of Director, RMO"], ] for i, row in enumerate(labels): for j, val in enumerate(row): sig_table.rows[i].cells[j].text = val doc.add_paragraph("") sig_table2 = doc.add_table(rows=2, cols=2) labels2 = [ ["_______________________________", "_______________________________"], ["Signature of Head of Department of PR", "Signature of Vice-Chancellor"], ] for i, row in enumerate(labels2): for j, val in enumerate(row): sig_table2.rows[i].cells[j].text = val doc.save(OUT_PATH) print("Saved:", OUT_PATH)