| """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() |
|
|
| |
| 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) |
|
|
|
|
| |
| 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 |
|
|
| |
| p = doc.add_paragraph() |
| p.add_run("1. Principal Researcher (Details) ").bold = True |
| p.add_run("Dr. Titilayo Adedokun") |
|
|
| |
| 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("") |
|
|
| |
| 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) |
|
|
| |
| 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)", |
| ] |
| |
| 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 = "" |
|
|
| |
| 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("") |
|
|
| |
| 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("") |
|
|
| |
| 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) |
|
|