-
Notifications
You must be signed in to change notification settings - Fork 1
/
gen_index_cards_by_initial.rb
51 lines (42 loc) · 1.17 KB
/
gen_index_cards_by_initial.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#! /usr/bin/env ruby
# gen_card_list.rb で生成されたJSON card.json から、
# イニシャル別の作品リストを生成する
#
require "json"
require_relative "util.rb"
INPUT_JSON_FILENAME='./card.json'
def chunk_cards_by_initial
output={}
File.open(INPUT_JSON_FILENAME) do |f|
cards = JSON.load(f)
cards.each do |card|
initial = card.dig("title","canonicalized_initial")
work_id = card.dig("title","work_id")
next if initial.nil? || work_id.nil?
work = {
id: work_id,
title: card.dig("title", "title"),
subtitle: card.dig("title", "subtitle"),
kana_type: card.dig("work", "kana_type"),
author: card.dig("title", "person_name"),
title_kana: canonicalize_to_kana(card.dig("title", "title_kana")),
}
if output.has_key?(initial)
output[initial].push(work)
else
output[initial] = [work]
end
end
end
output
end
result = chunk_cards_by_initial
result.each do |k,v|
v.sort! do |a,b|
a[:id] <=> b[:id]
end.sort! do |a,b|
a[:title_kana] <=> b[:title_kana]
end
end
result = result.sort_by{ |k, v| [k, v.size]}
puts JSON.generate(result.to_h)