Front matter post-processor for static site generators.
Prelims eases updating YAML front matter of the static site generator contents (e.g., Hugo, Jekyll, Hexo).
You can extract keywords based on TF-IDF weighting, generate a list of recommended posts by content-based filtering, and even apply arbitrary custom functions to update front matters on-the-fly.
Below is an original front matter for "User-Centricity Matters: My Reading List from RecSys 2021" at takuti.me:
---
categories: [Recommender Systems]
date: 2021-10-05
lang: en
title: 'User-Centricity Matters: My Reading List from RecSys 2021'
---
Once a Python script is executed against all the posts, new metadata recommendations
and keywords
are dynamically generated and inserted as:
---
categories: [Recommender Systems]
date: 2021-10-05
keywords: [recsys, bias, papers, wordcloud, echo, user, recommendations, metrics,
recommender, users]
lang: en
recommendations: [/note/recsys-2021-echo-chambers-and-filter-bubbles/, /note/recsys-wordcloud/,
/note/ethical-challenges-in-recommender-systems/]
title: 'User-Centricity Matters: My Reading List from RecSys 2021'
---
$ pip install prelims
Assume your posts are under /path/to/posts
where a static site generator uses as a document root:
posts
├── article-aaa.md
├── ...
└── article-zzz.md
Here, the following script reads all .md
and .html
files in the folder, builds recommendations, and update each post's front matter:
from prelims import StaticSitePostsHandler
from prelims.processor import Recommender
handler = StaticSitePostsHandler('/path/to/posts')
handler.register_processor(
Recommender(permalink_base='/post')
)
handler.execute()
For instance, a front matter of article-aaa.md
may eventually become:
---
date: 2022-01-01
title: Awesome Blog Post
recommendations: [/post/article-zzz/, /post/article-abc/, /post/article-xyz/]
keywords: [happy, beer, coffee, park, ...]
---
You can run the script as a pre-commit hook and automate the process e.g., with lint-staged:
$ npm install -D lint-staged
{
...
"lint-staged": {
"posts/*.{md,html}": [
"python ./scripts/prelims.py",
"git add -u posts/"
]
},
...
}