Switch to side-by-side view

--- a
+++ b/ViTPose/docs/en/collect.py
@@ -0,0 +1,101 @@
+#!/usr/bin/env python
+# Copyright (c) OpenMMLab. All rights reserved.
+import os
+import re
+from glob import glob
+
+from titlecase import titlecase
+
+os.makedirs('topics', exist_ok=True)
+os.makedirs('papers', exist_ok=True)
+
+# Step 1: get subtopics: a mix of topic and task
+minisections = [
+    x.split('/')[-2:] for x in glob('../../configs/*/*') if '_base_' not in x
+]
+alltopics = sorted(list(set(x[0] for x in minisections)))
+subtopics = []
+for t in alltopics:
+    data = [x[1].split('_') for x in minisections if x[0] == t]
+    valid_ids = []
+    for i in range(len(data[0])):
+        if len(set(x[i] for x in data)) > 1:
+            valid_ids.append(i)
+    if len(valid_ids) > 0:
+        subtopics.extend([
+            f"{titlecase(t)}({','.join([d[i].title() for i in valid_ids])})",
+            t, '_'.join(d)
+        ] for d in data)
+    else:
+        subtopics.append([titlecase(t), t, '_'.join(data[0])])
+
+contents = {}
+for subtopic, topic, task in sorted(subtopics):
+    # Step 2: get all datasets
+    datasets = sorted(
+        list(
+            set(
+                x.split('/')[-2]
+                for x in glob(f'../../configs/{topic}/{task}/*/*/'))))
+    contents[subtopic] = {d: {} for d in datasets}
+    for dataset in datasets:
+        # Step 3: get all settings: algorithm + backbone + trick
+        for file in glob(f'../../configs/{topic}/{task}/*/{dataset}/*.md'):
+            keywords = (file.split('/')[-3],
+                        *file.split('/')[-1].split('_')[:-1])
+            with open(file, 'r') as f:
+                contents[subtopic][dataset][keywords] = f.read()
+
+# Step 4: write files by topic
+for subtopic, datasets in contents.items():
+    lines = [f'# {subtopic}', '']
+    for dataset, keywords in datasets.items():
+        if len(keywords) == 0:
+            continue
+        lines += [
+            '<hr/>', '<br/><br/>', '', f'## {titlecase(dataset)} Dataset', ''
+        ]
+        for keyword, info in keywords.items():
+            keyword_strs = [titlecase(x.replace('_', ' ')) for x in keyword]
+            lines += [
+                '<br/>', '',
+                (f'### {" + ".join(keyword_strs)}'
+                 f' on {titlecase(dataset)}'), '', info, ''
+            ]
+
+    with open(f'topics/{subtopic.lower()}.md', 'w') as f:
+        f.write('\n'.join(lines))
+
+# Step 5: write files by paper
+allfiles = [x.split('/')[-2:] for x in glob('../en/papers/*/*.md')]
+sections = sorted(list(set(x[0] for x in allfiles)))
+for section in sections:
+    lines = [f'# {titlecase(section)}', '']
+    files = [f for s, f in allfiles if s == section]
+    for file in files:
+        with open(f'../en/papers/{section}/{file}', 'r') as f:
+            keyline = [
+                line for line in f.readlines() if line.startswith('<summary')
+            ][0]
+        papername = re.sub(r'\<.*?\>', '', keyline).strip()
+        paperlines = []
+        for subtopic, datasets in contents.items():
+            for dataset, keywords in datasets.items():
+                keywords = {k: v for k, v in keywords.items() if keyline in v}
+                if len(keywords) == 0:
+                    continue
+                for keyword, info in keywords.items():
+                    keyword_strs = [
+                        titlecase(x.replace('_', ' ')) for x in keyword
+                    ]
+                    paperlines += [
+                        '<br/>', '',
+                        (f'### {" + ".join(keyword_strs)}'
+                         f' on {titlecase(dataset)}'), '', info, ''
+                    ]
+        if len(paperlines) > 0:
+            lines += ['<hr/>', '<br/><br/>', '', f'## {papername}', '']
+            lines += paperlines
+
+    with open(f'papers/{section}.md', 'w') as f:
+        f.write('\n'.join(lines))