Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
probml
GitHub Repository: probml/pyprobml
Path: blob/master/internal/book1/figure_no_notebook_mapping.py
1192 views
1
"""
2
command usage:
3
python3 internal/book1/figure_no_notebook_mapping.py -lof internal/book1.lof -csv internal/book1/figures_nb_mapping_book1.csv
4
"""
5
import argparse
6
from probml_utils.url_utils import (
7
dict_to_csv,
8
extract_scripts_name_from_caption,
9
)
10
from TexSoup import TexSoup
11
12
parser = argparse.ArgumentParser(description="create figure url mapping")
13
parser.add_argument("-lof", "--lof", type=str, help="", default="internal/book2.lof")
14
parser.add_argument("-csv", "--csv", type=str, help="", default="internal/figures_url_mapping_book2.csv")
15
args = parser.parse_args()
16
17
BOOK_NO = int(args.lof.split("/")[-1].split(".")[0][-1]) # from internal/book1.lof to 1
18
NOTEBOOKS_MD_URL = "https://probml.github.io/notebooks#"
19
20
def fig_no_nb_mapping(lof_file_path, csv_name, make_url = False):
21
f"""
22
create mapping of fig_no to url by parsing lof_file and save mapping in {csv_name}
23
"""
24
with open(lof_file_path) as fp:
25
LoF_File_Contents = fp.read()
26
soup = TexSoup(LoF_File_Contents)
27
28
# create mapping of fig_no to list of script_name
29
30
url_mapping = {}
31
for caption in soup.find_all("numberline"):
32
fig_no = str(caption.contents[0])
33
extracted_scripts = extract_scripts_name_from_caption(str(caption))
34
nb = None
35
if len(extracted_scripts) == 1:
36
nb = extracted_scripts[0]
37
38
elif len(extracted_scripts) > 1: # use dummy notebooks
39
chap, fig = fig_no.split(".")
40
nb = f"fig_{chap}_{fig}.ipynb"
41
42
if nb:
43
if make_url:
44
url_mapping[fig_no] = NOTEBOOKS_MD_URL + nb
45
else:
46
url_mapping[fig_no] = nb
47
48
49
if csv_name:
50
dict_to_csv(url_mapping, csv_name)
51
print(f"Mapping of {len(url_mapping)} urls is saved in {csv_name}")
52
return url_mapping
53
54
55
print(f"Parsing started from {args.lof}...........")
56
57
if args.csv:
58
figure_mapping = fig_no_nb_mapping(args.lof, args.csv)
59
figure_mapping = fig_no_nb_mapping(args.lof, args.csv.replace(".csv","")+"_urls.csv", make_url=True)
60
61
else:
62
figure_mapping = fig_no_nb_mapping(args.lof, "")
63
figure_mapping = fig_no_nb_mapping(args.lof, args.csv.replace("csv","")+"_urls.csv", make_url=True)
64
65
66