Emre Sarigöl commited on
Commit
e175ce5
·
1 Parent(s): 2a73cf2

Deploy sync_pilot dashboard - 2026-06-16 14:13

Browse files
sync_pilot/dashboard/data_loader.py CHANGED
@@ -110,11 +110,11 @@ def _resolved_data_root() -> Path:
110
  # "Extension" tab. ``_audit_hf.jsonl`` is the Space-only edit
111
  # history; it must come down on boot so writebacks append rather
112
  # than overwrite prior Space-side edits (same story as median).
113
- "sync_pilot/outputs/gt_expansion/median_adjacent/*.json",
114
- "sync_pilot/gt_expansion/median_adjacent/groundtruth/*.json",
115
- "sync_pilot/gt_expansion/median_adjacent/groundtruth/_audit_hf.jsonl",
116
- "sync_pilot/gt_expansion/median_adjacent/manifest.jsonl",
117
- "sync_pilot/gt_expansion/median_adjacent/_review.json",
118
  ],
119
  )
120
  # The downloaded snapshot mirrors the repo tree, so the project-equivalent
@@ -210,19 +210,34 @@ def _manifest_path() -> Path:
210
  # In local mode ``_resolved_data_root()`` == ``config.DATA_DIR``, so existing
211
  # local read/write behaviour is unchanged.
212
  def _expansion_outputs_dir() -> Path:
213
- return _resolved_data_root() / "outputs" / "gt_expansion" / "median_adjacent"
214
 
215
 
216
  def _expansion_groundtruth_dir() -> Path:
217
- return _resolved_data_root() / "gt_expansion" / "median_adjacent" / "groundtruth"
 
 
 
 
 
218
 
219
 
220
  def _expansion_review_path() -> Path:
221
- return _resolved_data_root() / "gt_expansion" / "median_adjacent" / "_review.json"
 
 
 
 
 
222
 
223
 
224
  def _expansion_manifest_path() -> Path:
225
- return _resolved_data_root() / "gt_expansion" / "median_adjacent" / "manifest.jsonl"
 
 
 
 
 
226
 
227
 
228
  def _taxonomy_path() -> Path:
@@ -367,6 +382,55 @@ def load_expansion_groundtruth() -> dict[str, dict[str, Any]]:
367
  return out
368
 
369
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
370
  @st.cache_data(ttl=600, show_spinner=False)
371
  def load_subtypes_by_family() -> dict[str, list[str]]:
372
  """Parse dim 2 (genre subtype) from ``taxonomy.md`` grouped by parent
@@ -667,8 +731,8 @@ def save_expansion_gt_edit(
667
  tmp.replace(gt_path)
668
 
669
  if in_hf:
670
- rel = f"sync_pilot/gt_expansion/median_adjacent/groundtruth/{track_id}.json"
671
- rel_audit = f"sync_pilot/gt_expansion/median_adjacent/groundtruth/{audit_name}"
672
  _hf_writeback(
673
  [(gt_path, rel), (audit_path, rel_audit)],
674
  commit_message=f"gt-review ext: {track_id}.{field}",
@@ -725,8 +789,8 @@ def save_expansion_description(
725
  tmp.replace(track_path)
726
 
727
  if in_hf:
728
- rel = f"sync_pilot/outputs/gt_expansion/median_adjacent/{track_id}.json"
729
- rel_audit = f"sync_pilot/gt_expansion/median_adjacent/groundtruth/{audit_name}"
730
  _hf_writeback(
731
  [(track_path, rel), (audit_path, rel_audit)],
732
  commit_message=f"gt-review ext desc: {track_id}",
@@ -818,7 +882,7 @@ def save_expansion_review(state: dict[str, dict[str, Any]]) -> None:
818
 
819
  if in_hf:
820
  _hf_writeback(
821
- [(p, "sync_pilot/gt_expansion/median_adjacent/_review.json")],
822
  commit_message="gt-review ext: update _review.json",
823
  )
824
  load_expansion_review.clear()
 
110
  # "Extension" tab. ``_audit_hf.jsonl`` is the Space-only edit
111
  # history; it must come down on boot so writebacks append rather
112
  # than overwrite prior Space-side edits (same story as median).
113
+ "sync_pilot/outputs/gt_expansion/median_adjacent_combined_500/*.json",
114
+ "sync_pilot/gt_expansion/median_adjacent_combined_500/groundtruth/*.json",
115
+ "sync_pilot/gt_expansion/median_adjacent_combined_500/groundtruth/_audit_hf.jsonl",
116
+ "sync_pilot/gt_expansion/median_adjacent_combined_500/manifest.jsonl",
117
+ "sync_pilot/gt_expansion/median_adjacent_combined_500/_review.json",
118
  ],
119
  )
120
  # The downloaded snapshot mirrors the repo tree, so the project-equivalent
 
210
  # In local mode ``_resolved_data_root()`` == ``config.DATA_DIR``, so existing
211
  # local read/write behaviour is unchanged.
212
  def _expansion_outputs_dir() -> Path:
213
+ return _resolved_data_root() / "outputs" / "gt_expansion" / "median_adjacent_combined_500"
214
 
215
 
216
  def _expansion_groundtruth_dir() -> Path:
217
+ return (
218
+ _resolved_data_root()
219
+ / "gt_expansion"
220
+ / "median_adjacent_combined_500"
221
+ / "groundtruth"
222
+ )
223
 
224
 
225
  def _expansion_review_path() -> Path:
226
+ return (
227
+ _resolved_data_root()
228
+ / "gt_expansion"
229
+ / "median_adjacent_combined_500"
230
+ / "_review.json"
231
+ )
232
 
233
 
234
  def _expansion_manifest_path() -> Path:
235
+ return (
236
+ _resolved_data_root()
237
+ / "gt_expansion"
238
+ / "median_adjacent_combined_500"
239
+ / "manifest.jsonl"
240
+ )
241
 
242
 
243
  def _taxonomy_path() -> Path:
 
382
  return out
383
 
384
 
385
+ @st.cache_data(ttl=300, show_spinner=False)
386
+ def load_expansion_triage() -> dict[str, dict[str, Any]]:
387
+ """Load the ``_triage.json`` review-priority ranking for the expansion set.
388
+
389
+ Produced by ``scripts/triage_disagreement.py`` — a per-track priority score
390
+ (model disagreement + uncertainty) used to order the GT-review queue so the
391
+ highest-information tracks surface first. Returns ``{track_id: {priority,
392
+ disagreement, uncertainty, reasons, ...}}``; ``{}`` when the sidecar is
393
+ absent (triage not yet run / not in the snapshot), so the page degrades to
394
+ plain alphabetical order. The ``_triage.json`` sidecar rides the same
395
+ ``outputs/.../*.json`` publish + snapshot globs as the TrackRecords.
396
+ """
397
+ path = _expansion_outputs_dir() / "_triage.json"
398
+ if not path.exists():
399
+ return {}
400
+ try:
401
+ data = json.loads(path.read_text())
402
+ except Exception as e: # noqa: BLE001
403
+ st.warning(f"Could not parse _triage.json: {e}")
404
+ return {}
405
+ out: dict[str, dict[str, Any]] = {}
406
+ for row in data.get("ranked", []):
407
+ tid = row.get("track_id")
408
+ if tid:
409
+ out[tid] = row
410
+ return out
411
+
412
+
413
+ @st.cache_data(ttl=300, show_spinner=False)
414
+ def load_cohorts() -> dict[str, str]:
415
+ """Load the ``gt_ingest/cohorts.json`` track→cohort map.
416
+
417
+ Cohorts: ``catalog`` (Median eval set), ``ext`` (prior expansion), and
418
+ ``ext-median`` (the Spotify-sourced Median playlist tracks, pooled into the
419
+ combined_500 expansion but tagged distinctly for focused annotation). Built
420
+ by ``scripts/build_cohorts.py``. Returns ``{track_id: cohort}``; ``{}`` when
421
+ absent so the GT-review page degrades to its undivided Extension view.
422
+ """
423
+ path = _resolved_data_root() / "gt_ingest" / "cohorts.json"
424
+ if not path.exists():
425
+ return {}
426
+ try:
427
+ data = json.loads(path.read_text())
428
+ except Exception as e: # noqa: BLE001
429
+ st.warning(f"Could not parse cohorts.json: {e}")
430
+ return {}
431
+ return data.get("cohorts", {})
432
+
433
+
434
  @st.cache_data(ttl=600, show_spinner=False)
435
  def load_subtypes_by_family() -> dict[str, list[str]]:
436
  """Parse dim 2 (genre subtype) from ``taxonomy.md`` grouped by parent
 
731
  tmp.replace(gt_path)
732
 
733
  if in_hf:
734
+ rel = f"sync_pilot/gt_expansion/median_adjacent_combined_500/groundtruth/{track_id}.json"
735
+ rel_audit = f"sync_pilot/gt_expansion/median_adjacent_combined_500/groundtruth/{audit_name}"
736
  _hf_writeback(
737
  [(gt_path, rel), (audit_path, rel_audit)],
738
  commit_message=f"gt-review ext: {track_id}.{field}",
 
789
  tmp.replace(track_path)
790
 
791
  if in_hf:
792
+ rel = f"sync_pilot/outputs/gt_expansion/median_adjacent_combined_500/{track_id}.json"
793
+ rel_audit = f"sync_pilot/gt_expansion/median_adjacent_combined_500/groundtruth/{audit_name}"
794
  _hf_writeback(
795
  [(track_path, rel), (audit_path, rel_audit)],
796
  commit_message=f"gt-review ext desc: {track_id}",
 
882
 
883
  if in_hf:
884
  _hf_writeback(
885
+ [(p, "sync_pilot/gt_expansion/median_adjacent_combined_500/_review.json")],
886
  commit_message="gt-review ext: update _review.json",
887
  )
888
  load_expansion_review.clear()
sync_pilot/dashboard/views/gt_review.py CHANGED
@@ -43,10 +43,12 @@ from sync_pilot.dashboard.data_loader import (
43
  _data_source,
44
  _expansion_groundtruth_dir,
45
  _groundtruth_dir,
 
46
  load_expansion_groundtruth,
47
  load_expansion_manifest,
48
  load_expansion_review,
49
  load_expansion_tracks,
 
50
  load_groundtruth,
51
  load_manifest,
52
  load_review,
@@ -379,6 +381,14 @@ def _reviewed_track_ids(
379
  return out
380
 
381
 
 
 
 
 
 
 
 
 
382
  def _build_dataframe(
383
  tracks: list[dict[str, Any]],
384
  gt_by_id: dict[str, dict[str, Any]],
@@ -386,29 +396,40 @@ def _build_dataframe(
386
  reviewed: set[str],
387
  *,
388
  dataset: str,
 
389
  ) -> pd.DataFrame:
390
  """Assemble the slim per-track row list for the overview table.
391
 
392
  Column ordering here drives the visual ordering. The editor panel
393
  handles all per-category details — the table is now strictly an
394
  navigation/triage surface: identity + Genre (GT) for at-a-glance
395
- grouping + Reviewed checkmark.
 
 
 
 
 
 
396
  """
 
397
  rows: list[dict[str, Any]] = []
398
  for tr in tracks:
399
  tid = tr["track_id"]
400
  gt = gt_by_id.get(tid)
401
  meta = tr.get("metadata") or {}
402
  m = manifest.get(tid) or {}
 
403
  rows.append(
404
  {
405
  "dataset": dataset,
406
  "track_id": tid,
 
407
  "title": meta.get("title_tr") or tid,
408
  "artist": (gt or {}).get("artist") or "",
409
  "year": (gt or {}).get("year"),
410
  "youtube": m.get("youtube_url") or meta.get("youtube_url") or "",
411
  "genre_family": (gt or {}).get("genre_family") or "",
 
412
  "reviewed": tid in reviewed,
413
  }
414
  )
@@ -609,6 +630,22 @@ def _column_config() -> dict[str, Any]:
609
  "track_id": st.column_config.TextColumn(
610
  "Track ID", width="small", disabled=True
611
  ),
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
612
  "title": st.column_config.TextColumn(
613
  "Title", width="medium", disabled=True
614
  ),
@@ -1124,6 +1161,18 @@ def render() -> None:
1124
  ext_tracks = load_expansion_tracks()
1125
  ext_gt_by_id = load_expansion_groundtruth()
1126
  ext_manifest = load_expansion_manifest()
 
 
 
 
 
 
 
 
 
 
 
 
1127
  review = load_review()
1128
  ext_review = load_expansion_review()
1129
  taxonomy = load_taxonomy()
@@ -1149,14 +1198,19 @@ def render() -> None:
1149
  n_tracks_reviewed, n_curated_tags = _verification_summary(review)
1150
  n_ext_reviewed, n_ext_curated_tags = _verification_summary(ext_review)
1151
  n_total_tracks = len(tracks)
1152
- n_ext_tracks = len(ext_tracks)
 
1153
  n_categories = len(CATEGORIES)
1154
  coverage_pct = (
1155
  (n_tracks_reviewed / n_total_tracks * 100) if n_total_tracks else 0.0
1156
  )
 
 
 
 
1157
  st.caption(
1158
  f"Catalog: **{n_total_tracks}** tracks, **{n_categories}** categories "
1159
- f"per track. Extension: **{n_ext_tracks}** tracks. "
1160
  f"Reviewed so far: **{n_tracks_reviewed}** catalog tracks "
1161
  f"({coverage_pct:.1f}% catalog coverage; {n_curated_tags} total "
1162
  f"curated INFER tags), plus **{n_ext_reviewed}** extension tracks "
@@ -1166,14 +1220,33 @@ def render() -> None:
1166
  reviewed = _reviewed_track_ids(review, _groundtruth_dir())
1167
  ext_reviewed = _reviewed_track_ids(ext_review, _expansion_groundtruth_dir())
1168
 
1169
- dataset_filter = st.radio(
1170
- "Dataset filter",
1171
- options=["All", "Catalog", "Extension"],
1172
- index=0,
1173
- horizontal=True,
1174
- key="gt_review_dataset_filter",
1175
- label_visibility="collapsed",
1176
- )
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1177
  frames = []
1178
  if dataset_filter in ("All", "Catalog"):
1179
  frames.append(
@@ -1181,10 +1254,27 @@ def render() -> None:
1181
  )
1182
  if dataset_filter in ("All", "Extension"):
1183
  frames.append(
1184
- _build_dataframe(ext_tracks, ext_gt_by_id, ext_manifest, ext_reviewed, dataset="ext")
 
 
 
 
 
 
 
 
 
 
 
 
1185
  )
1186
  frames = [frame for frame in frames if not frame.empty]
1187
  df = pd.concat(frames, ignore_index=True) if frames else pd.DataFrame()
 
 
 
 
 
1188
  column_config = _column_config()
1189
 
1190
  row_height_px = 35
 
43
  _data_source,
44
  _expansion_groundtruth_dir,
45
  _groundtruth_dir,
46
+ load_cohorts,
47
  load_expansion_groundtruth,
48
  load_expansion_manifest,
49
  load_expansion_review,
50
  load_expansion_tracks,
51
+ load_expansion_triage,
52
  load_groundtruth,
53
  load_manifest,
54
  load_review,
 
381
  return out
382
 
383
 
384
+ def _triage_why(entry: dict[str, Any] | None) -> str:
385
+ """Compact one-line 'why this ranks high' from a triage entry's reasons."""
386
+ if not entry:
387
+ return ""
388
+ reasons = entry.get("reasons") or []
389
+ return "; ".join(str(r) for r in reasons[:2])
390
+
391
+
392
  def _build_dataframe(
393
  tracks: list[dict[str, Any]],
394
  gt_by_id: dict[str, dict[str, Any]],
 
396
  reviewed: set[str],
397
  *,
398
  dataset: str,
399
+ triage: dict[str, dict[str, Any]] | None = None,
400
  ) -> pd.DataFrame:
401
  """Assemble the slim per-track row list for the overview table.
402
 
403
  Column ordering here drives the visual ordering. The editor panel
404
  handles all per-category details — the table is now strictly an
405
  navigation/triage surface: identity + Genre (GT) for at-a-glance
406
+ grouping + Reviewed checkmark + review-priority columns.
407
+
408
+ ``triage`` (from ``load_expansion_triage``) supplies the per-track
409
+ disagreement/uncertainty priority that drives the default sort. When a
410
+ track has no triage entry (e.g. the catalog set, which has no
411
+ ``_triage.json``), priority falls back to 0.0 / empty so the columns
412
+ stay present and the concat across datasets keeps a uniform schema.
413
  """
414
+ triage = triage or {}
415
  rows: list[dict[str, Any]] = []
416
  for tr in tracks:
417
  tid = tr["track_id"]
418
  gt = gt_by_id.get(tid)
419
  meta = tr.get("metadata") or {}
420
  m = manifest.get(tid) or {}
421
+ t_entry = triage.get(tid)
422
  rows.append(
423
  {
424
  "dataset": dataset,
425
  "track_id": tid,
426
+ "priority": round(float((t_entry or {}).get("priority") or 0.0), 3),
427
  "title": meta.get("title_tr") or tid,
428
  "artist": (gt or {}).get("artist") or "",
429
  "year": (gt or {}).get("year"),
430
  "youtube": m.get("youtube_url") or meta.get("youtube_url") or "",
431
  "genre_family": (gt or {}).get("genre_family") or "",
432
+ "why": _triage_why(t_entry),
433
  "reviewed": tid in reviewed,
434
  }
435
  )
 
630
  "track_id": st.column_config.TextColumn(
631
  "Track ID", width="small", disabled=True
632
  ),
633
+ "priority": st.column_config.NumberColumn(
634
+ "Priority",
635
+ width="small",
636
+ disabled=True,
637
+ format="%.3f",
638
+ help=(
639
+ "Review priority from scripts/triage_disagreement.py: model "
640
+ "disagreement (audio-vs-lyric mood, classifier-vs-LLM theme) + "
641
+ "uncertainty. Higher = more information gained by reviewing it. "
642
+ "0.000 means no triage data (e.g. catalog set)."
643
+ ),
644
+ ),
645
+ "why": st.column_config.TextColumn(
646
+ "Why", width="large", disabled=True,
647
+ help="Top conflict/uncertainty reasons behind the priority score.",
648
+ ),
649
  "title": st.column_config.TextColumn(
650
  "Title", width="medium", disabled=True
651
  ),
 
1161
  ext_tracks = load_expansion_tracks()
1162
  ext_gt_by_id = load_expansion_groundtruth()
1163
  ext_manifest = load_expansion_manifest()
1164
+ ext_triage = load_expansion_triage()
1165
+ cohorts = load_cohorts()
1166
+ # The combined_500 expansion pool holds two cohorts: the prior expansion
1167
+ # ("ext") and the Spotify-sourced Median playlist tracks ("ext-median").
1168
+ # Split them so each gets its own review tab; ext-median tracks carry the
1169
+ # same prior INFER/predicted tags every other extension track does.
1170
+ ext_median_tracks = [
1171
+ t for t in ext_tracks if cohorts.get(t.get("track_id")) == "ext-median"
1172
+ ]
1173
+ ext_only_tracks = [
1174
+ t for t in ext_tracks if cohorts.get(t.get("track_id")) != "ext-median"
1175
+ ]
1176
  review = load_review()
1177
  ext_review = load_expansion_review()
1178
  taxonomy = load_taxonomy()
 
1198
  n_tracks_reviewed, n_curated_tags = _verification_summary(review)
1199
  n_ext_reviewed, n_ext_curated_tags = _verification_summary(ext_review)
1200
  n_total_tracks = len(tracks)
1201
+ n_ext_tracks = len(ext_only_tracks)
1202
+ n_ext_median_tracks = len(ext_median_tracks)
1203
  n_categories = len(CATEGORIES)
1204
  coverage_pct = (
1205
  (n_tracks_reviewed / n_total_tracks * 100) if n_total_tracks else 0.0
1206
  )
1207
+ _ext_median_caption = (
1208
+ f" Ext-Median: **{n_ext_median_tracks}** tracks."
1209
+ if n_ext_median_tracks else ""
1210
+ )
1211
  st.caption(
1212
  f"Catalog: **{n_total_tracks}** tracks, **{n_categories}** categories "
1213
+ f"per track. Extension: **{n_ext_tracks}** tracks.{_ext_median_caption} "
1214
  f"Reviewed so far: **{n_tracks_reviewed}** catalog tracks "
1215
  f"({coverage_pct:.1f}% catalog coverage; {n_curated_tags} total "
1216
  f"curated INFER tags), plus **{n_ext_reviewed}** extension tracks "
 
1220
  reviewed = _reviewed_track_ids(review, _groundtruth_dir())
1221
  ext_reviewed = _reviewed_track_ids(ext_review, _expansion_groundtruth_dir())
1222
 
1223
+ filt_col, sort_col = st.columns([3, 2])
1224
+ with filt_col:
1225
+ _filter_options = ["All", "Catalog", "Extension"]
1226
+ if ext_median_tracks:
1227
+ _filter_options.append("Ext-Median")
1228
+ dataset_filter = st.radio(
1229
+ "Dataset filter",
1230
+ options=_filter_options,
1231
+ index=0,
1232
+ horizontal=True,
1233
+ key="gt_review_dataset_filter",
1234
+ label_visibility="collapsed",
1235
+ )
1236
+ with sort_col:
1237
+ # Default ON: surface the highest-disagreement tracks first so the
1238
+ # review sprint spends effort where a label is most informative.
1239
+ prioritize = st.toggle(
1240
+ "Sort by review priority (disagreement)",
1241
+ value=bool(ext_triage),
1242
+ key="gt_review_prioritize",
1243
+ help=(
1244
+ "Order the queue by the triage score (audio-vs-lyric mood + "
1245
+ "classifier-vs-LLM theme conflict + uncertainty). Off = "
1246
+ "alphabetical. Requires _triage.json for the extension set."
1247
+ ),
1248
+ disabled=not ext_triage,
1249
+ )
1250
  frames = []
1251
  if dataset_filter in ("All", "Catalog"):
1252
  frames.append(
 
1254
  )
1255
  if dataset_filter in ("All", "Extension"):
1256
  frames.append(
1257
+ _build_dataframe(
1258
+ ext_only_tracks, ext_gt_by_id, ext_manifest, ext_reviewed,
1259
+ dataset="ext", triage=ext_triage,
1260
+ )
1261
+ )
1262
+ if dataset_filter in ("All", "Ext-Median"):
1263
+ # ext-median pools into the same combined_500 GT, so it reuses the
1264
+ # expansion GT/manifest/review stores and save routing (dataset="ext").
1265
+ frames.append(
1266
+ _build_dataframe(
1267
+ ext_median_tracks, ext_gt_by_id, ext_manifest, ext_reviewed,
1268
+ dataset="ext", triage=ext_triage,
1269
+ )
1270
  )
1271
  frames = [frame for frame in frames if not frame.empty]
1272
  df = pd.concat(frames, ignore_index=True) if frames else pd.DataFrame()
1273
+ if prioritize and not df.empty and "priority" in df.columns:
1274
+ # Stable sort: priority desc, then keep alphabetical within ties.
1275
+ df = df.sort_values(
1276
+ by=["priority", "track_id"], ascending=[False, True]
1277
+ ).reset_index(drop=True)
1278
  column_config = _column_config()
1279
 
1280
  row_height_px = 35
sync_pilot/taxonomy/crosswalks.json CHANGED
@@ -2,91 +2,981 @@
2
  "version": "0.1",
3
  "notes": "Canonical taxonomy IDs and aliases for inference labels. This file does not change taxonomy.md; it maps pipeline labels onto the draft taxonomy and sync-search language.",
4
  "terms": [
5
- {"id": "genre.family.arabesk", "category": "genre", "dimension": "genre_family", "taxonomy_label": "arabesk", "display_label": "arabesk", "aliases": ["arabesk"]},
6
- {"id": "genre.family.halk", "category": "genre", "dimension": "genre_family", "taxonomy_label": "halk", "display_label": "halk", "aliases": ["halk"]},
7
- {"id": "genre.subtype.turku", "category": "genre", "dimension": "genre_subtype", "taxonomy_label": "halk.türkü", "display_label": "türkü", "aliases": ["türkü", "turku"]},
8
- {"id": "genre.subtype.uzun_hava", "category": "genre", "dimension": "genre_subtype", "taxonomy_label": "halk.uzun-hava", "display_label": "uzun hava", "aliases": ["uzun hava", "uzun-hava"]},
9
- {"id": "genre.subtype.roman_havasi", "category": "genre", "dimension": "genre_subtype", "taxonomy_label": "halk.oyun-havası.roman-havası", "display_label": "Roman havası", "aliases": ["Roman havası", "roman havası", "roman_havasi"], "requires_context": ["yore=roman or source-verified subtype before prose treats it as definitive"]},
10
- {"id": "genre.family.rock", "category": "genre", "dimension": "genre_family", "taxonomy_label": "rock", "display_label": "rock", "aliases": ["rock"]},
11
- {"id": "genre.subtype.anadolu_rock", "category": "genre", "dimension": "genre_subtype", "taxonomy_label": "rock.anadolu-rock-modern", "display_label": "Anadolu rock", "aliases": ["Anadolu rock", "anadolu rock"]},
12
- {"id": "genre.subtype.anadolu_psych_rock", "category": "genre", "dimension": "genre_subtype", "taxonomy_label": "rock.anadolu-rock-psych-70s", "display_label": "Anadolu psych rock", "aliases": ["Anadolu psych rock", "anadolu psych rock"]},
13
- {"id": "genre.family.sanat", "category": "genre", "dimension": "genre_family", "taxonomy_label": "sanat", "display_label": "sanat müziği", "aliases": ["sanat müziği", "sanat muzigi"]},
14
- {"id": "genre.subtype.fasil", "category": "genre", "dimension": "genre_subtype", "taxonomy_label": "sanat.fasıl", "display_label": "fasıl", "aliases": ["fasıl", "fasil"]},
15
- {"id": "genre.family.fantezi", "category": "genre", "dimension": "genre_family", "taxonomy_label": "fantezi", "display_label": "fantezi", "aliases": ["fantezi"]},
16
- {"id": "genre.family.pop", "category": "genre", "dimension": "genre_family", "taxonomy_label": "pop", "display_label": "pop", "aliases": ["pop ballad", "dance pop"]},
17
- {"id": "genre.subtype.acili_arabesk", "category": "genre", "dimension": "genre_subtype", "taxonomy_label": "arabesk.acılı-arabesk", "display_label": "acılı arabesk", "aliases": ["acılı arabesk", "acılı-arabesk", "acili arabesk"]},
18
- {"id": "genre.subtype.fantezi_arabesk", "category": "genre", "dimension": "genre_subtype", "taxonomy_label": "arabesk.fantezi-arabesk", "display_label": "fantezi-arabesk", "aliases": ["fantezi-arabesk", "fantezi arabesk"], "requires_context": ["Murat decision pending: may move under fantezi family"]},
19
- {"id": "genre.subtype.taverna_arabesk", "category": "genre", "dimension": "genre_subtype", "taxonomy_label": "arabesk.taverna-arabesk", "display_label": "taverna-arabesk", "aliases": ["taverna-arabesk", "taverna arabesk"]},
20
- {"id": "genre.subtype.romantik_arabesk", "category": "genre", "dimension": "genre_subtype", "taxonomy_label": "arabesk.romantik-arabesk", "display_label": "romantik arabesk", "aliases": ["romantik arabesk", "romantik-arabesk"]},
21
- {"id": "genre.subtype.kirik_hava", "category": "genre", "dimension": "genre_subtype", "taxonomy_label": "halk.kırık-hava", "display_label": "kırık hava", "aliases": ["kırık hava", "kirik hava", "kırık-hava"]},
22
- {"id": "genre.subtype.halay", "category": "genre", "dimension": "genre_subtype", "taxonomy_label": "halk.oyun-havası.halay", "display_label": "halay", "aliases": ["halay"]},
23
- {"id": "genre.subtype.zeybek", "category": "genre", "dimension": "genre_subtype", "taxonomy_label": "halk.oyun-havası.zeybek", "display_label": "zeybek", "aliases": ["zeybek"]},
24
- {"id": "genre.subtype.horon", "category": "genre", "dimension": "genre_subtype", "taxonomy_label": "halk.oyun-havası.horon", "display_label": "horon", "aliases": ["horon"]},
25
- {"id": "genre.subtype.agit", "category": "genre", "dimension": "genre_subtype", "taxonomy_label": "halk.ağıt", "display_label": "ağıt", "aliases": ["ağıt", "agit"]},
26
- {"id": "genre.subtype.dini_halk", "category": "genre", "dimension": "genre_subtype", "taxonomy_label": "halk.dini-halk", "display_label": "dini halk", "aliases": ["dini halk", "dini-halk"]},
27
- {"id": "genre.family.ozgun", "category": "genre", "dimension": "genre_family", "taxonomy_label": "özgün", "display_label": "özgün müzik", "aliases": ["özgün müzik", "ozgun muzik", "özgün"]},
28
-
29
- {"id": "mood.aci", "category": "mood", "dimension": "mood", "taxonomy_label": "acı", "display_label": "acı", "aliases": ["acı", "aci"], "sync_search_terms": ["cathartic pain", "emotional intensity", "heartbreak drama"]},
30
- {"id": "mood.huzun", "category": "mood", "dimension": "mood", "taxonomy_label": "hüzün", "display_label": "hüzün", "aliases": ["hüzün", "huzun"], "sync_search_terms": ["melancholy", "wistful sadness", "reflective longing"]},
31
- {"id": "mood.ofke", "category": "mood", "dimension": "mood", "taxonomy_label": "öfke", "display_label": "öfke", "aliases": ["öfke", "ofke"], "sync_search_terms": ["anger", "defiance", "confrontation"]},
32
- {"id": "mood.kabullenme", "category": "mood", "dimension": "mood", "taxonomy_label": "kabullenme", "display_label": "kabullenme", "aliases": ["kabullenme"], "sync_search_terms": ["resignation", "acceptance of fate", "weary resolve"]},
33
- {"id": "mood.ironi", "category": "mood", "dimension": "mood", "taxonomy_label": "ironi", "display_label": "ironi", "aliases": ["ironi"], "sync_search_terms": ["irony", "sardonic", "bittersweet wit"]},
34
- {"id": "mood.umut", "category": "mood", "dimension": "mood", "taxonomy_label": "umut", "display_label": "umut", "aliases": ["umut"], "sync_search_terms": ["hope", "optimism", "uplift"]},
35
- {"id": "mood.ask", "category": "mood", "dimension": "mood", "taxonomy_label": "aşk", "display_label": "aşk", "aliases": ["aşk", "ask"], "sync_search_terms": ["romance", "devotion", "love"]},
36
- {"id": "mood.heyecan", "category": "mood", "dimension": "mood", "taxonomy_label": "heyecan", "display_label": "heyecan", "aliases": ["heyecan"], "sync_search_terms": ["excitement", "momentum", "dance energy"]},
37
- {"id": "mood.gurbet", "category": "mood", "dimension": "mood", "taxonomy_label": "gurbet", "display_label": "gurbet", "aliases": ["gurbet"], "sync_search_terms": ["exile longing", "diaspora", "homesickness"]},
38
- {"id": "mood.nostaljik", "category": "mood", "dimension": "mood", "taxonomy_label": "nostaljik", "display_label": "nostaljik", "aliases": ["nostaljik"], "sync_search_terms": ["nostalgia", "memory", "looking back"]},
39
-
40
- {"id": "instrument.baglama", "category": "instrument", "dimension": "instrumentation", "taxonomy_label": "bağlama", "display_label": "bağlama", "aliases": ["bağlama"]},
41
- {"id": "instrument.ud", "category": "instrument", "dimension": "instrumentation", "taxonomy_label": "ud", "display_label": "ud", "aliases": ["ud"]},
42
- {"id": "instrument.kanun", "category": "instrument", "dimension": "instrumentation", "taxonomy_label": "kanun", "display_label": "kanun", "aliases": ["kanun"]},
43
- {"id": "instrument.ney", "category": "instrument", "dimension": "instrumentation", "taxonomy_label": "ney", "display_label": "ney", "aliases": ["ney"]},
44
- {"id": "instrument.darbuka", "category": "instrument", "dimension": "instrumentation", "taxonomy_label": "darbuka", "display_label": "darbuka", "aliases": ["darbuka"]},
45
- {"id": "instrument.klarnet", "category": "instrument", "dimension": "instrumentation", "taxonomy_label": "klarnet", "display_label": "klarnet", "aliases": ["klarnet"]},
46
- {"id": "instrument.electric_guitar", "category": "instrument", "dimension": "instrumentation", "taxonomy_label": "electric-guitar", "display_label": "electric guitar", "aliases": ["electric_guitar", "electric guitar"]},
47
- {"id": "instrument.string_section", "category": "instrument", "dimension": "instrumentation", "taxonomy_label": "string-section", "display_label": "strings", "aliases": ["strings", "string-section"]},
48
- {"id": "instrument.accordion", "category": "instrument", "dimension": "instrumentation", "taxonomy_label": "accordion", "display_label": "accordion", "aliases": ["accordion", "garmon"]},
49
- {"id": "instrument.piano", "category": "instrument", "dimension": "instrumentation", "taxonomy_label": "piano", "display_label": "piano", "aliases": ["piano"]},
50
- {"id": "instrument.cura", "category": "instrument", "dimension": "instrumentation", "taxonomy_label": "cura-bağlama", "display_label": "cura", "aliases": ["cura"]},
51
- {"id": "instrument.electric_baglama", "category": "instrument", "dimension": "instrumentation", "taxonomy_label": "electric-bağlama", "display_label": "electric bağlama", "aliases": ["electric_baglama", "electric baglama", "electric bağlama"]},
52
- {"id": "instrument.kemence_karadeniz", "category": "instrument", "dimension": "instrumentation", "taxonomy_label": "karadeniz-kemençesi", "display_label": "Karadeniz kemençesi", "aliases": ["kemence_karadeniz", "karadeniz kemençesi"]},
53
- {"id": "instrument.kemence_klasik", "category": "instrument", "dimension": "instrumentation", "taxonomy_label": "klasik-kemençe", "display_label": "klasik kemençe", "aliases": ["kemence_klasik", "klasik kemençe"]},
54
- {"id": "instrument.keman", "category": "instrument", "dimension": "instrumentation", "taxonomy_label": "keman", "display_label": "keman", "aliases": ["keman"]},
55
- {"id": "instrument.mey", "category": "instrument", "dimension": "instrumentation", "taxonomy_label": "mey", "display_label": "mey", "aliases": ["mey"]},
56
- {"id": "instrument.zurna", "category": "instrument", "dimension": "instrumentation", "taxonomy_label": "zurna", "display_label": "zurna", "aliases": ["zurna"]},
57
- {"id": "instrument.kaval", "category": "instrument", "dimension": "instrumentation", "taxonomy_label": "kaval", "display_label": "kaval", "aliases": ["kaval"]},
58
- {"id": "instrument.def", "category": "instrument", "dimension": "instrumentation", "taxonomy_label": "def", "display_label": "def", "aliases": ["def"]},
59
- {"id": "instrument.davul", "category": "instrument", "dimension": "instrumentation", "taxonomy_label": "davul", "display_label": "davul", "aliases": ["davul"]},
60
- {"id": "instrument.kudum", "category": "instrument", "dimension": "instrumentation", "taxonomy_label": "kudüm", "display_label": "kudüm", "aliases": ["kudum", "kudüm"]},
61
- {"id": "instrument.choir", "category": "instrument", "dimension": "instrumentation", "taxonomy_label": "choir", "display_label": "choir", "aliases": ["choir"]},
62
- {"id": "instrument.backing_vocals", "category": "instrument", "dimension": "instrumentation", "taxonomy_label": "backing-vocals", "display_label": "backing vocals", "aliases": ["backing_vocals", "backing vocals"]},
63
-
64
- {"id": "vocal.config.male", "category": "vocal", "dimension": "vocal_configuration", "taxonomy_label": "solo-male", "display_label": "male vocals", "aliases": ["male_vocals", "solo-male"]},
65
- {"id": "vocal.config.female", "category": "vocal", "dimension": "vocal_configuration", "taxonomy_label": "solo-female", "display_label": "female vocals", "aliases": ["female_vocals", "solo-female"]},
66
- {"id": "vocal.config.duet", "category": "vocal", "dimension": "vocal_configuration", "taxonomy_label": "duet-mf", "display_label": "duet", "aliases": ["duet", "duet-mf"]},
67
- {"id": "vocal.config.instrumental", "category": "vocal", "dimension": "vocal_configuration", "taxonomy_label": "instrumental", "display_label": "instrumental", "aliases": ["instrumental"]},
68
- {"id": "vocal.technique.hancere", "category": "vocal", "dimension": "vocal_technique", "taxonomy_label": "hançere", "display_label": "hançere", "aliases": ["hancere", "hançere"]},
69
- {"id": "vocal.technique.gazel", "category": "vocal", "dimension": "vocal_technique", "taxonomy_label": "gazel", "display_label": "gazel", "aliases": ["gazel"]},
70
- {"id": "vocal.technique.duz_okuyus", "category": "vocal", "dimension": "vocal_technique", "taxonomy_label": "düz-okuyuş", "display_label": "düz okuyuş", "aliases": ["duz_okuyus", "düz-okuyuş", "düz okuyuş"]},
71
- {"id": "vocal.technique.taverna", "category": "vocal", "dimension": "vocal_technique", "taxonomy_label": "taverna-style", "display_label": "taverna vocal", "aliases": ["taverna_vocal", "taverna-style"]},
72
- {"id": "vocal.technique.call_response", "category": "vocal", "dimension": "vocal_configuration", "taxonomy_label": "call-and-response", "display_label": "call-and-response", "aliases": ["call-and-response", "call_response"]},
73
- {"id": "vocal.technique.belt", "category": "vocal", "dimension": "vocal_technique", "taxonomy_label": "bağırma", "display_label": "belt", "aliases": ["belt", "bağırma"]}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
74
  ],
75
  "maest_hints": {
76
- "Folk, World, & Country---Folk": ["genre.family.halk"],
77
- "Folk, World, & Country---Laïkó": ["genre.family.fantezi", "genre.family.sanat"],
78
- "Folk, World, & Country---Éntekhno": ["genre.family.ozgun", "genre.family.halk"],
79
- "Folk, World, & Country---Hindustani": ["genre.family.halk"],
80
- "Pop---Vocal": ["genre.family.pop", "genre.family.arabesk"],
81
- "Pop---Ballad": ["genre.family.pop", "genre.family.fantezi"],
82
- "Pop---Schlager": ["genre.family.fantezi", "genre.family.pop"],
83
- "Pop---Chanson": ["genre.family.fantezi", "genre.family.pop"],
84
- "Rock---Pop Rock": ["genre.family.rock"],
85
- "Rock---Folk Rock": ["genre.subtype.anadolu_rock"],
86
- "Rock---Prog Rock": ["genre.subtype.anadolu_psych_rock"],
87
- "Rock---Psychedelic Rock": ["genre.subtype.anadolu_psych_rock"],
88
- "Rock---Hard Rock": ["genre.family.rock"],
89
- "Stage & Screen---Soundtrack": ["genre.family.pop"],
90
- "Latin---MPB": ["genre.family.pop"]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
91
  }
92
- }
 
2
  "version": "0.1",
3
  "notes": "Canonical taxonomy IDs and aliases for inference labels. This file does not change taxonomy.md; it maps pipeline labels onto the draft taxonomy and sync-search language.",
4
  "terms": [
5
+ {
6
+ "id": "genre.family.arabesk",
7
+ "category": "genre",
8
+ "dimension": "genre_family",
9
+ "taxonomy_label": "arabesk",
10
+ "display_label": "arabesk",
11
+ "aliases": [
12
+ "arabesk"
13
+ ]
14
+ },
15
+ {
16
+ "id": "genre.family.halk",
17
+ "category": "genre",
18
+ "dimension": "genre_family",
19
+ "taxonomy_label": "halk",
20
+ "display_label": "halk",
21
+ "aliases": [
22
+ "halk"
23
+ ]
24
+ },
25
+ {
26
+ "id": "genre.subtype.turku",
27
+ "category": "genre",
28
+ "dimension": "genre_subtype",
29
+ "taxonomy_label": "halk.türkü",
30
+ "display_label": "türkü",
31
+ "aliases": [
32
+ "türkü",
33
+ "turku"
34
+ ]
35
+ },
36
+ {
37
+ "id": "genre.subtype.uzun_hava",
38
+ "category": "genre",
39
+ "dimension": "genre_subtype",
40
+ "taxonomy_label": "halk.uzun-hava",
41
+ "display_label": "uzun hava",
42
+ "aliases": [
43
+ "uzun hava",
44
+ "uzun-hava"
45
+ ]
46
+ },
47
+ {
48
+ "id": "genre.subtype.roman_havasi",
49
+ "category": "genre",
50
+ "dimension": "genre_subtype",
51
+ "taxonomy_label": "halk.oyun-havası.roman-havası",
52
+ "display_label": "Roman havası",
53
+ "aliases": [
54
+ "Roman havası",
55
+ "roman havası",
56
+ "roman_havasi"
57
+ ],
58
+ "requires_context": [
59
+ "yore=roman or source-verified subtype before prose treats it as definitive"
60
+ ]
61
+ },
62
+ {
63
+ "id": "genre.family.rock",
64
+ "category": "genre",
65
+ "dimension": "genre_family",
66
+ "taxonomy_label": "rock",
67
+ "display_label": "rock",
68
+ "aliases": [
69
+ "rock"
70
+ ]
71
+ },
72
+ {
73
+ "id": "genre.subtype.anadolu_rock",
74
+ "category": "genre",
75
+ "dimension": "genre_subtype",
76
+ "taxonomy_label": "rock.anadolu-rock-modern",
77
+ "display_label": "Anadolu rock",
78
+ "aliases": [
79
+ "Anadolu rock",
80
+ "anadolu rock"
81
+ ]
82
+ },
83
+ {
84
+ "id": "genre.subtype.anadolu_psych_rock",
85
+ "category": "genre",
86
+ "dimension": "genre_subtype",
87
+ "taxonomy_label": "rock.anadolu-rock-psych-70s",
88
+ "display_label": "Anadolu psych rock",
89
+ "aliases": [
90
+ "Anadolu psych rock",
91
+ "anadolu psych rock"
92
+ ]
93
+ },
94
+ {
95
+ "id": "genre.family.sanat",
96
+ "category": "genre",
97
+ "dimension": "genre_family",
98
+ "taxonomy_label": "sanat",
99
+ "display_label": "sanat müziği",
100
+ "aliases": [
101
+ "sanat müziği",
102
+ "sanat muzigi"
103
+ ]
104
+ },
105
+ {
106
+ "id": "genre.subtype.fasil",
107
+ "category": "genre",
108
+ "dimension": "genre_subtype",
109
+ "taxonomy_label": "sanat.fasıl",
110
+ "display_label": "fasıl",
111
+ "aliases": [
112
+ "fasıl",
113
+ "fasil"
114
+ ]
115
+ },
116
+ {
117
+ "id": "genre.family.fantezi",
118
+ "category": "genre",
119
+ "dimension": "genre_family",
120
+ "taxonomy_label": "fantezi",
121
+ "display_label": "fantezi",
122
+ "aliases": [
123
+ "fantezi"
124
+ ]
125
+ },
126
+ {
127
+ "id": "genre.family.pop",
128
+ "category": "genre",
129
+ "dimension": "genre_family",
130
+ "taxonomy_label": "pop",
131
+ "display_label": "pop",
132
+ "aliases": [
133
+ "pop ballad",
134
+ "dance pop"
135
+ ]
136
+ },
137
+ {
138
+ "id": "genre.subtype.acili_arabesk",
139
+ "category": "genre",
140
+ "dimension": "genre_subtype",
141
+ "taxonomy_label": "arabesk.acılı-arabesk",
142
+ "display_label": "acılı arabesk",
143
+ "aliases": [
144
+ "acılı arabesk",
145
+ "acılı-arabesk",
146
+ "acili arabesk"
147
+ ]
148
+ },
149
+ {
150
+ "id": "genre.subtype.fantezi_arabesk",
151
+ "category": "genre",
152
+ "dimension": "genre_subtype",
153
+ "taxonomy_label": "arabesk.fantezi-arabesk",
154
+ "display_label": "fantezi-arabesk",
155
+ "aliases": [
156
+ "fantezi-arabesk",
157
+ "fantezi arabesk"
158
+ ],
159
+ "requires_context": [
160
+ "Murat decision pending: may move under fantezi family"
161
+ ]
162
+ },
163
+ {
164
+ "id": "genre.subtype.taverna_arabesk",
165
+ "category": "genre",
166
+ "dimension": "genre_subtype",
167
+ "taxonomy_label": "arabesk.taverna-arabesk",
168
+ "display_label": "taverna-arabesk",
169
+ "aliases": [
170
+ "taverna-arabesk",
171
+ "taverna arabesk"
172
+ ]
173
+ },
174
+ {
175
+ "id": "genre.subtype.romantik_arabesk",
176
+ "category": "genre",
177
+ "dimension": "genre_subtype",
178
+ "taxonomy_label": "arabesk.romantik-arabesk",
179
+ "display_label": "romantik arabesk",
180
+ "aliases": [
181
+ "romantik arabesk",
182
+ "romantik-arabesk"
183
+ ]
184
+ },
185
+ {
186
+ "id": "genre.subtype.kirik_hava",
187
+ "category": "genre",
188
+ "dimension": "genre_subtype",
189
+ "taxonomy_label": "halk.kırık-hava",
190
+ "display_label": "kırık hava",
191
+ "aliases": [
192
+ "kırık hava",
193
+ "kirik hava",
194
+ "kırık-hava"
195
+ ]
196
+ },
197
+ {
198
+ "id": "genre.subtype.halay",
199
+ "category": "genre",
200
+ "dimension": "genre_subtype",
201
+ "taxonomy_label": "halk.oyun-havası.halay",
202
+ "display_label": "halay",
203
+ "aliases": [
204
+ "halay"
205
+ ]
206
+ },
207
+ {
208
+ "id": "genre.subtype.zeybek",
209
+ "category": "genre",
210
+ "dimension": "genre_subtype",
211
+ "taxonomy_label": "halk.oyun-havası.zeybek",
212
+ "display_label": "zeybek",
213
+ "aliases": [
214
+ "zeybek"
215
+ ]
216
+ },
217
+ {
218
+ "id": "genre.subtype.horon",
219
+ "category": "genre",
220
+ "dimension": "genre_subtype",
221
+ "taxonomy_label": "halk.oyun-havası.horon",
222
+ "display_label": "horon",
223
+ "aliases": [
224
+ "horon"
225
+ ]
226
+ },
227
+ {
228
+ "id": "genre.subtype.agit",
229
+ "category": "genre",
230
+ "dimension": "genre_subtype",
231
+ "taxonomy_label": "halk.ağıt",
232
+ "display_label": "ağıt",
233
+ "aliases": [
234
+ "ağıt",
235
+ "agit"
236
+ ]
237
+ },
238
+ {
239
+ "id": "genre.subtype.dini_halk",
240
+ "category": "genre",
241
+ "dimension": "genre_subtype",
242
+ "taxonomy_label": "halk.dini-halk",
243
+ "display_label": "dini halk",
244
+ "aliases": [
245
+ "dini halk",
246
+ "dini-halk"
247
+ ]
248
+ },
249
+ {
250
+ "id": "genre.family.ozgun",
251
+ "category": "genre",
252
+ "dimension": "genre_family",
253
+ "taxonomy_label": "özgün",
254
+ "display_label": "özgün müzik",
255
+ "aliases": [
256
+ "özgün müzik",
257
+ "ozgun muzik",
258
+ "özgün"
259
+ ]
260
+ },
261
+ {
262
+ "id": "mood.aci",
263
+ "category": "mood",
264
+ "dimension": "mood",
265
+ "taxonomy_label": "acı",
266
+ "display_label": "acı",
267
+ "aliases": [
268
+ "acı",
269
+ "aci"
270
+ ],
271
+ "sync_search_terms": [
272
+ "cathartic pain",
273
+ "emotional intensity",
274
+ "heartbreak drama"
275
+ ]
276
+ },
277
+ {
278
+ "id": "mood.huzun",
279
+ "category": "mood",
280
+ "dimension": "mood",
281
+ "taxonomy_label": "hüzün",
282
+ "display_label": "hüzün",
283
+ "aliases": [
284
+ "hüzün",
285
+ "huzun"
286
+ ],
287
+ "sync_search_terms": [
288
+ "melancholy",
289
+ "wistful sadness",
290
+ "reflective longing"
291
+ ]
292
+ },
293
+ {
294
+ "id": "mood.ofke",
295
+ "category": "mood",
296
+ "dimension": "mood",
297
+ "taxonomy_label": "öfke",
298
+ "display_label": "öfke",
299
+ "aliases": [
300
+ "öfke",
301
+ "ofke"
302
+ ],
303
+ "sync_search_terms": [
304
+ "anger",
305
+ "defiance",
306
+ "confrontation"
307
+ ]
308
+ },
309
+ {
310
+ "id": "mood.kabullenme",
311
+ "category": "mood",
312
+ "dimension": "mood",
313
+ "taxonomy_label": "kabullenme",
314
+ "display_label": "kabullenme",
315
+ "aliases": [
316
+ "kabullenme"
317
+ ],
318
+ "sync_search_terms": [
319
+ "resignation",
320
+ "acceptance of fate",
321
+ "weary resolve"
322
+ ]
323
+ },
324
+ {
325
+ "id": "mood.ironi",
326
+ "category": "mood",
327
+ "dimension": "mood",
328
+ "taxonomy_label": "ironi",
329
+ "display_label": "ironi",
330
+ "aliases": [
331
+ "ironi"
332
+ ],
333
+ "sync_search_terms": [
334
+ "irony",
335
+ "sardonic",
336
+ "bittersweet wit"
337
+ ]
338
+ },
339
+ {
340
+ "id": "mood.umut",
341
+ "category": "mood",
342
+ "dimension": "mood",
343
+ "taxonomy_label": "umut",
344
+ "display_label": "umut",
345
+ "aliases": [
346
+ "umut"
347
+ ],
348
+ "sync_search_terms": [
349
+ "hope",
350
+ "optimism",
351
+ "uplift"
352
+ ]
353
+ },
354
+ {
355
+ "id": "mood.ask",
356
+ "category": "mood",
357
+ "dimension": "mood",
358
+ "taxonomy_label": "aşk",
359
+ "display_label": "aşk",
360
+ "aliases": [
361
+ "aşk",
362
+ "ask"
363
+ ],
364
+ "sync_search_terms": [
365
+ "romance",
366
+ "devotion",
367
+ "love"
368
+ ]
369
+ },
370
+ {
371
+ "id": "mood.heyecan",
372
+ "category": "mood",
373
+ "dimension": "mood",
374
+ "taxonomy_label": "heyecan",
375
+ "display_label": "heyecan",
376
+ "aliases": [
377
+ "heyecan"
378
+ ],
379
+ "sync_search_terms": [
380
+ "excitement",
381
+ "momentum",
382
+ "dance energy"
383
+ ]
384
+ },
385
+ {
386
+ "id": "mood.gurbet",
387
+ "category": "mood",
388
+ "dimension": "mood",
389
+ "taxonomy_label": "gurbet",
390
+ "display_label": "gurbet",
391
+ "aliases": [
392
+ "gurbet"
393
+ ],
394
+ "sync_search_terms": [
395
+ "exile longing",
396
+ "diaspora",
397
+ "homesickness"
398
+ ]
399
+ },
400
+ {
401
+ "id": "mood.nostaljik",
402
+ "category": "mood",
403
+ "dimension": "mood",
404
+ "taxonomy_label": "nostaljik",
405
+ "display_label": "nostaljik",
406
+ "aliases": [
407
+ "nostaljik"
408
+ ],
409
+ "sync_search_terms": [
410
+ "nostalgia",
411
+ "memory",
412
+ "looking back"
413
+ ]
414
+ },
415
+ {
416
+ "id": "instrument.baglama",
417
+ "category": "instrument",
418
+ "dimension": "instrumentation",
419
+ "taxonomy_label": "bağlama",
420
+ "display_label": "bağlama",
421
+ "aliases": [
422
+ "bağlama"
423
+ ]
424
+ },
425
+ {
426
+ "id": "instrument.ud",
427
+ "category": "instrument",
428
+ "dimension": "instrumentation",
429
+ "taxonomy_label": "ud",
430
+ "display_label": "ud",
431
+ "aliases": [
432
+ "ud"
433
+ ]
434
+ },
435
+ {
436
+ "id": "instrument.kanun",
437
+ "category": "instrument",
438
+ "dimension": "instrumentation",
439
+ "taxonomy_label": "kanun",
440
+ "display_label": "kanun",
441
+ "aliases": [
442
+ "kanun"
443
+ ]
444
+ },
445
+ {
446
+ "id": "instrument.ney",
447
+ "category": "instrument",
448
+ "dimension": "instrumentation",
449
+ "taxonomy_label": "ney",
450
+ "display_label": "ney",
451
+ "aliases": [
452
+ "ney"
453
+ ]
454
+ },
455
+ {
456
+ "id": "instrument.darbuka",
457
+ "category": "instrument",
458
+ "dimension": "instrumentation",
459
+ "taxonomy_label": "darbuka",
460
+ "display_label": "darbuka",
461
+ "aliases": [
462
+ "darbuka"
463
+ ]
464
+ },
465
+ {
466
+ "id": "instrument.klarnet",
467
+ "category": "instrument",
468
+ "dimension": "instrumentation",
469
+ "taxonomy_label": "klarnet",
470
+ "display_label": "klarnet",
471
+ "aliases": [
472
+ "klarnet"
473
+ ]
474
+ },
475
+ {
476
+ "id": "instrument.electric_guitar",
477
+ "category": "instrument",
478
+ "dimension": "instrumentation",
479
+ "taxonomy_label": "electric-guitar",
480
+ "display_label": "electric guitar",
481
+ "aliases": [
482
+ "electric_guitar",
483
+ "electric guitar"
484
+ ]
485
+ },
486
+ {
487
+ "id": "instrument.string_section",
488
+ "category": "instrument",
489
+ "dimension": "instrumentation",
490
+ "taxonomy_label": "string-section",
491
+ "display_label": "strings",
492
+ "aliases": [
493
+ "strings",
494
+ "string-section"
495
+ ]
496
+ },
497
+ {
498
+ "id": "instrument.accordion",
499
+ "category": "instrument",
500
+ "dimension": "instrumentation",
501
+ "taxonomy_label": "accordion",
502
+ "display_label": "accordion",
503
+ "aliases": [
504
+ "accordion",
505
+ "garmon"
506
+ ]
507
+ },
508
+ {
509
+ "id": "instrument.piano",
510
+ "category": "instrument",
511
+ "dimension": "instrumentation",
512
+ "taxonomy_label": "piano",
513
+ "display_label": "piano",
514
+ "aliases": [
515
+ "piano"
516
+ ]
517
+ },
518
+ {
519
+ "id": "instrument.cura",
520
+ "category": "instrument",
521
+ "dimension": "instrumentation",
522
+ "taxonomy_label": "cura-bağlama",
523
+ "display_label": "cura",
524
+ "aliases": [
525
+ "cura"
526
+ ]
527
+ },
528
+ {
529
+ "id": "instrument.electric_baglama",
530
+ "category": "instrument",
531
+ "dimension": "instrumentation",
532
+ "taxonomy_label": "electric-bağlama",
533
+ "display_label": "electric bağlama",
534
+ "aliases": [
535
+ "electric_baglama",
536
+ "electric baglama",
537
+ "electric bağlama"
538
+ ]
539
+ },
540
+ {
541
+ "id": "instrument.kemence_karadeniz",
542
+ "category": "instrument",
543
+ "dimension": "instrumentation",
544
+ "taxonomy_label": "karadeniz-kemençesi",
545
+ "display_label": "Karadeniz kemençesi",
546
+ "aliases": [
547
+ "kemence_karadeniz",
548
+ "karadeniz kemençesi"
549
+ ]
550
+ },
551
+ {
552
+ "id": "instrument.kemence_klasik",
553
+ "category": "instrument",
554
+ "dimension": "instrumentation",
555
+ "taxonomy_label": "klasik-kemençe",
556
+ "display_label": "klasik kemençe",
557
+ "aliases": [
558
+ "kemence_klasik",
559
+ "klasik kemençe"
560
+ ]
561
+ },
562
+ {
563
+ "id": "instrument.keman",
564
+ "category": "instrument",
565
+ "dimension": "instrumentation",
566
+ "taxonomy_label": "keman",
567
+ "display_label": "keman",
568
+ "aliases": [
569
+ "keman"
570
+ ]
571
+ },
572
+ {
573
+ "id": "instrument.mey",
574
+ "category": "instrument",
575
+ "dimension": "instrumentation",
576
+ "taxonomy_label": "mey",
577
+ "display_label": "mey",
578
+ "aliases": [
579
+ "mey"
580
+ ]
581
+ },
582
+ {
583
+ "id": "instrument.zurna",
584
+ "category": "instrument",
585
+ "dimension": "instrumentation",
586
+ "taxonomy_label": "zurna",
587
+ "display_label": "zurna",
588
+ "aliases": [
589
+ "zurna"
590
+ ]
591
+ },
592
+ {
593
+ "id": "instrument.kaval",
594
+ "category": "instrument",
595
+ "dimension": "instrumentation",
596
+ "taxonomy_label": "kaval",
597
+ "display_label": "kaval",
598
+ "aliases": [
599
+ "kaval"
600
+ ]
601
+ },
602
+ {
603
+ "id": "instrument.def",
604
+ "category": "instrument",
605
+ "dimension": "instrumentation",
606
+ "taxonomy_label": "def",
607
+ "display_label": "def",
608
+ "aliases": [
609
+ "def"
610
+ ]
611
+ },
612
+ {
613
+ "id": "instrument.davul",
614
+ "category": "instrument",
615
+ "dimension": "instrumentation",
616
+ "taxonomy_label": "davul",
617
+ "display_label": "davul",
618
+ "aliases": [
619
+ "davul"
620
+ ]
621
+ },
622
+ {
623
+ "id": "instrument.kudum",
624
+ "category": "instrument",
625
+ "dimension": "instrumentation",
626
+ "taxonomy_label": "kudüm",
627
+ "display_label": "kudüm",
628
+ "aliases": [
629
+ "kudum",
630
+ "kudüm"
631
+ ]
632
+ },
633
+ {
634
+ "id": "instrument.choir",
635
+ "category": "instrument",
636
+ "dimension": "instrumentation",
637
+ "taxonomy_label": "choir",
638
+ "display_label": "choir",
639
+ "aliases": [
640
+ "choir"
641
+ ]
642
+ },
643
+ {
644
+ "id": "instrument.backing_vocals",
645
+ "category": "instrument",
646
+ "dimension": "instrumentation",
647
+ "taxonomy_label": "backing-vocals",
648
+ "display_label": "backing vocals",
649
+ "aliases": [
650
+ "backing_vocals",
651
+ "backing vocals"
652
+ ]
653
+ },
654
+ {
655
+ "id": "vocal.config.male",
656
+ "category": "vocal",
657
+ "dimension": "vocal_configuration",
658
+ "taxonomy_label": "solo-male",
659
+ "display_label": "male vocals",
660
+ "aliases": [
661
+ "male_vocals",
662
+ "solo-male"
663
+ ]
664
+ },
665
+ {
666
+ "id": "vocal.config.female",
667
+ "category": "vocal",
668
+ "dimension": "vocal_configuration",
669
+ "taxonomy_label": "solo-female",
670
+ "display_label": "female vocals",
671
+ "aliases": [
672
+ "female_vocals",
673
+ "solo-female"
674
+ ]
675
+ },
676
+ {
677
+ "id": "vocal.config.duet",
678
+ "category": "vocal",
679
+ "dimension": "vocal_configuration",
680
+ "taxonomy_label": "duet-mf",
681
+ "display_label": "duet",
682
+ "aliases": [
683
+ "duet",
684
+ "duet-mf"
685
+ ]
686
+ },
687
+ {
688
+ "id": "vocal.config.instrumental",
689
+ "category": "vocal",
690
+ "dimension": "vocal_configuration",
691
+ "taxonomy_label": "instrumental",
692
+ "display_label": "instrumental",
693
+ "aliases": [
694
+ "instrumental"
695
+ ]
696
+ },
697
+ {
698
+ "id": "vocal.technique.hancere",
699
+ "category": "vocal",
700
+ "dimension": "vocal_technique",
701
+ "taxonomy_label": "hançere",
702
+ "display_label": "hançere",
703
+ "aliases": [
704
+ "hancere",
705
+ "hançere"
706
+ ]
707
+ },
708
+ {
709
+ "id": "vocal.technique.gazel",
710
+ "category": "vocal",
711
+ "dimension": "vocal_technique",
712
+ "taxonomy_label": "gazel",
713
+ "display_label": "gazel",
714
+ "aliases": [
715
+ "gazel"
716
+ ]
717
+ },
718
+ {
719
+ "id": "vocal.technique.duz_okuyus",
720
+ "category": "vocal",
721
+ "dimension": "vocal_technique",
722
+ "taxonomy_label": "düz-okuyuş",
723
+ "display_label": "düz okuyuş",
724
+ "aliases": [
725
+ "duz_okuyus",
726
+ "düz-okuyuş",
727
+ "düz okuyuş"
728
+ ]
729
+ },
730
+ {
731
+ "id": "vocal.technique.taverna",
732
+ "category": "vocal",
733
+ "dimension": "vocal_technique",
734
+ "taxonomy_label": "taverna-style",
735
+ "display_label": "taverna vocal",
736
+ "aliases": [
737
+ "taverna_vocal",
738
+ "taverna-style"
739
+ ]
740
+ },
741
+ {
742
+ "id": "vocal.technique.call_response",
743
+ "category": "vocal",
744
+ "dimension": "vocal_configuration",
745
+ "taxonomy_label": "call-and-response",
746
+ "display_label": "call-and-response",
747
+ "aliases": [
748
+ "call-and-response",
749
+ "call_response"
750
+ ]
751
+ },
752
+ {
753
+ "id": "vocal.technique.belt",
754
+ "category": "vocal",
755
+ "dimension": "vocal_technique",
756
+ "taxonomy_label": "bağırma",
757
+ "display_label": "belt",
758
+ "aliases": [
759
+ "belt",
760
+ "bağırma"
761
+ ]
762
+ },
763
+ {
764
+ "id": "genre.arabesk-arabesk-pop",
765
+ "category": "genre",
766
+ "dimension": "genre_subtype",
767
+ "taxonomy_label": "arabesk.arabesk-pop",
768
+ "display_label": "arabesk.arabesk-pop",
769
+ "aliases": [
770
+ "arabesk.arabesk-pop",
771
+ "arabesk-pop",
772
+ "arabesk pop"
773
+ ]
774
+ },
775
+ {
776
+ "id": "genre.halk-deyis",
777
+ "category": "genre",
778
+ "dimension": "genre_subtype",
779
+ "taxonomy_label": "halk.deyiş",
780
+ "display_label": "halk.deyiş",
781
+ "aliases": [
782
+ "halk.deyiş",
783
+ "deyiş",
784
+ "halk deyiş"
785
+ ]
786
+ },
787
+ {
788
+ "id": "genre.halk-oyun-havasi",
789
+ "category": "genre",
790
+ "dimension": "genre_subtype",
791
+ "taxonomy_label": "halk.oyun-havası",
792
+ "display_label": "halk.oyun-havası",
793
+ "aliases": [
794
+ "halk.oyun-havası",
795
+ "oyun-havası",
796
+ "oyun havası"
797
+ ]
798
+ },
799
+ {
800
+ "id": "genre.pop-70s",
801
+ "category": "genre",
802
+ "dimension": "genre_subtype",
803
+ "taxonomy_label": "pop.70s",
804
+ "display_label": "pop.70s",
805
+ "aliases": [
806
+ "pop.70s",
807
+ "pop 70s",
808
+ "pop-70s"
809
+ ]
810
+ },
811
+ {
812
+ "id": "genre.pop-90s",
813
+ "category": "genre",
814
+ "dimension": "genre_subtype",
815
+ "taxonomy_label": "pop.90s",
816
+ "display_label": "pop.90s",
817
+ "aliases": [
818
+ "pop.90s",
819
+ "pop 90s",
820
+ "pop-90s"
821
+ ]
822
+ },
823
+ {
824
+ "id": "genre.pop-90s-pop",
825
+ "category": "genre",
826
+ "dimension": "genre_subtype",
827
+ "taxonomy_label": "pop.90s-pop",
828
+ "display_label": "pop.90s-pop",
829
+ "aliases": [
830
+ "pop.90s-pop",
831
+ "pop 90s pop"
832
+ ]
833
+ },
834
+ {
835
+ "id": "genre.pop-2000s-pop",
836
+ "category": "genre",
837
+ "dimension": "genre_subtype",
838
+ "taxonomy_label": "pop.2000s-pop",
839
+ "display_label": "pop.2000s-pop",
840
+ "aliases": [
841
+ "pop.2000s-pop",
842
+ "pop 2000s pop",
843
+ "pop.2000s"
844
+ ]
845
+ },
846
+ {
847
+ "id": "genre.pop-rock",
848
+ "category": "genre",
849
+ "dimension": "genre_subtype",
850
+ "taxonomy_label": "pop.rock",
851
+ "display_label": "pop.rock",
852
+ "aliases": [
853
+ "pop.rock",
854
+ "pop-rock",
855
+ "pop rock"
856
+ ]
857
+ },
858
+ {
859
+ "id": "genre.pop-ballad",
860
+ "category": "genre",
861
+ "dimension": "genre_subtype",
862
+ "taxonomy_label": "pop.ballad",
863
+ "display_label": "pop.ballad",
864
+ "aliases": [
865
+ "pop.ballad",
866
+ "pop-ballad",
867
+ "pop ballad"
868
+ ]
869
+ },
870
+ {
871
+ "id": "genre.pop-duygusal",
872
+ "category": "genre",
873
+ "dimension": "genre_subtype",
874
+ "taxonomy_label": "pop.duygusal",
875
+ "display_label": "pop.duygusal",
876
+ "aliases": [
877
+ "pop.duygusal",
878
+ "duygusal",
879
+ "halk-pop"
880
+ ]
881
+ },
882
+ {
883
+ "id": "genre.rock-alternative",
884
+ "category": "genre",
885
+ "dimension": "genre_subtype",
886
+ "taxonomy_label": "rock.alternative",
887
+ "display_label": "rock.alternative",
888
+ "aliases": [
889
+ "rock.alternative",
890
+ "alternative",
891
+ "alternatif"
892
+ ]
893
+ },
894
+ {
895
+ "id": "genre.rock-hard-rock",
896
+ "category": "genre",
897
+ "dimension": "genre_subtype",
898
+ "taxonomy_label": "rock.hard-rock",
899
+ "display_label": "rock.hard-rock",
900
+ "aliases": [
901
+ "rock.hard-rock",
902
+ "hard-rock",
903
+ "hard rock"
904
+ ]
905
+ },
906
+ {
907
+ "id": "genre.sanat-tango",
908
+ "category": "genre",
909
+ "dimension": "genre_subtype",
910
+ "taxonomy_label": "sanat.tango",
911
+ "display_label": "sanat.tango",
912
+ "aliases": [
913
+ "sanat.tango",
914
+ "tango"
915
+ ]
916
+ },
917
+ {
918
+ "id": "genre.ozgun-protest",
919
+ "category": "genre",
920
+ "dimension": "genre_subtype",
921
+ "taxonomy_label": "özgün.protest",
922
+ "display_label": "özgün.protest",
923
+ "aliases": [
924
+ "özgün.protest",
925
+ "protest"
926
+ ]
927
+ }
928
  ],
929
  "maest_hints": {
930
+ "Folk, World, & Country---Folk": [
931
+ "genre.family.halk"
932
+ ],
933
+ "Folk, World, & Country---Laïkó": [
934
+ "genre.family.fantezi",
935
+ "genre.family.sanat"
936
+ ],
937
+ "Folk, World, & Country---Éntekhno": [
938
+ "genre.family.ozgun",
939
+ "genre.family.halk"
940
+ ],
941
+ "Folk, World, & Country---Hindustani": [
942
+ "genre.family.halk"
943
+ ],
944
+ "Pop---Vocal": [
945
+ "genre.family.pop",
946
+ "genre.family.arabesk"
947
+ ],
948
+ "Pop---Ballad": [
949
+ "genre.family.pop",
950
+ "genre.family.fantezi"
951
+ ],
952
+ "Pop---Schlager": [
953
+ "genre.family.fantezi",
954
+ "genre.family.pop"
955
+ ],
956
+ "Pop---Chanson": [
957
+ "genre.family.fantezi",
958
+ "genre.family.pop"
959
+ ],
960
+ "Rock---Pop Rock": [
961
+ "genre.family.rock"
962
+ ],
963
+ "Rock---Folk Rock": [
964
+ "genre.subtype.anadolu_rock"
965
+ ],
966
+ "Rock---Prog Rock": [
967
+ "genre.subtype.anadolu_psych_rock"
968
+ ],
969
+ "Rock---Psychedelic Rock": [
970
+ "genre.subtype.anadolu_psych_rock"
971
+ ],
972
+ "Rock---Hard Rock": [
973
+ "genre.family.rock"
974
+ ],
975
+ "Stage & Screen---Soundtrack": [
976
+ "genre.family.pop"
977
+ ],
978
+ "Latin---MPB": [
979
+ "genre.family.pop"
980
+ ]
981
  }
982
+ }
sync_pilot/taxonomy/crosswalks.json.bak ADDED
@@ -0,0 +1,92 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "version": "0.1",
3
+ "notes": "Canonical taxonomy IDs and aliases for inference labels. This file does not change taxonomy.md; it maps pipeline labels onto the draft taxonomy and sync-search language.",
4
+ "terms": [
5
+ {"id": "genre.family.arabesk", "category": "genre", "dimension": "genre_family", "taxonomy_label": "arabesk", "display_label": "arabesk", "aliases": ["arabesk"]},
6
+ {"id": "genre.family.halk", "category": "genre", "dimension": "genre_family", "taxonomy_label": "halk", "display_label": "halk", "aliases": ["halk"]},
7
+ {"id": "genre.subtype.turku", "category": "genre", "dimension": "genre_subtype", "taxonomy_label": "halk.türkü", "display_label": "türkü", "aliases": ["türkü", "turku"]},
8
+ {"id": "genre.subtype.uzun_hava", "category": "genre", "dimension": "genre_subtype", "taxonomy_label": "halk.uzun-hava", "display_label": "uzun hava", "aliases": ["uzun hava", "uzun-hava"]},
9
+ {"id": "genre.subtype.roman_havasi", "category": "genre", "dimension": "genre_subtype", "taxonomy_label": "halk.oyun-havası.roman-havası", "display_label": "Roman havası", "aliases": ["Roman havası", "roman havası", "roman_havasi"], "requires_context": ["yore=roman or source-verified subtype before prose treats it as definitive"]},
10
+ {"id": "genre.family.rock", "category": "genre", "dimension": "genre_family", "taxonomy_label": "rock", "display_label": "rock", "aliases": ["rock"]},
11
+ {"id": "genre.subtype.anadolu_rock", "category": "genre", "dimension": "genre_subtype", "taxonomy_label": "rock.anadolu-rock-modern", "display_label": "Anadolu rock", "aliases": ["Anadolu rock", "anadolu rock"]},
12
+ {"id": "genre.subtype.anadolu_psych_rock", "category": "genre", "dimension": "genre_subtype", "taxonomy_label": "rock.anadolu-rock-psych-70s", "display_label": "Anadolu psych rock", "aliases": ["Anadolu psych rock", "anadolu psych rock"]},
13
+ {"id": "genre.family.sanat", "category": "genre", "dimension": "genre_family", "taxonomy_label": "sanat", "display_label": "sanat müziği", "aliases": ["sanat müziği", "sanat muzigi"]},
14
+ {"id": "genre.subtype.fasil", "category": "genre", "dimension": "genre_subtype", "taxonomy_label": "sanat.fasıl", "display_label": "fasıl", "aliases": ["fasıl", "fasil"]},
15
+ {"id": "genre.family.fantezi", "category": "genre", "dimension": "genre_family", "taxonomy_label": "fantezi", "display_label": "fantezi", "aliases": ["fantezi"]},
16
+ {"id": "genre.family.pop", "category": "genre", "dimension": "genre_family", "taxonomy_label": "pop", "display_label": "pop", "aliases": ["pop ballad", "dance pop"]},
17
+ {"id": "genre.subtype.acili_arabesk", "category": "genre", "dimension": "genre_subtype", "taxonomy_label": "arabesk.acılı-arabesk", "display_label": "acılı arabesk", "aliases": ["acılı arabesk", "acılı-arabesk", "acili arabesk"]},
18
+ {"id": "genre.subtype.fantezi_arabesk", "category": "genre", "dimension": "genre_subtype", "taxonomy_label": "arabesk.fantezi-arabesk", "display_label": "fantezi-arabesk", "aliases": ["fantezi-arabesk", "fantezi arabesk"], "requires_context": ["Murat decision pending: may move under fantezi family"]},
19
+ {"id": "genre.subtype.taverna_arabesk", "category": "genre", "dimension": "genre_subtype", "taxonomy_label": "arabesk.taverna-arabesk", "display_label": "taverna-arabesk", "aliases": ["taverna-arabesk", "taverna arabesk"]},
20
+ {"id": "genre.subtype.romantik_arabesk", "category": "genre", "dimension": "genre_subtype", "taxonomy_label": "arabesk.romantik-arabesk", "display_label": "romantik arabesk", "aliases": ["romantik arabesk", "romantik-arabesk"]},
21
+ {"id": "genre.subtype.kirik_hava", "category": "genre", "dimension": "genre_subtype", "taxonomy_label": "halk.kırık-hava", "display_label": "kırık hava", "aliases": ["kırık hava", "kirik hava", "kırık-hava"]},
22
+ {"id": "genre.subtype.halay", "category": "genre", "dimension": "genre_subtype", "taxonomy_label": "halk.oyun-havası.halay", "display_label": "halay", "aliases": ["halay"]},
23
+ {"id": "genre.subtype.zeybek", "category": "genre", "dimension": "genre_subtype", "taxonomy_label": "halk.oyun-havası.zeybek", "display_label": "zeybek", "aliases": ["zeybek"]},
24
+ {"id": "genre.subtype.horon", "category": "genre", "dimension": "genre_subtype", "taxonomy_label": "halk.oyun-havası.horon", "display_label": "horon", "aliases": ["horon"]},
25
+ {"id": "genre.subtype.agit", "category": "genre", "dimension": "genre_subtype", "taxonomy_label": "halk.ağıt", "display_label": "ağıt", "aliases": ["ağıt", "agit"]},
26
+ {"id": "genre.subtype.dini_halk", "category": "genre", "dimension": "genre_subtype", "taxonomy_label": "halk.dini-halk", "display_label": "dini halk", "aliases": ["dini halk", "dini-halk"]},
27
+ {"id": "genre.family.ozgun", "category": "genre", "dimension": "genre_family", "taxonomy_label": "özgün", "display_label": "özgün müzik", "aliases": ["özgün müzik", "ozgun muzik", "özgün"]},
28
+
29
+ {"id": "mood.aci", "category": "mood", "dimension": "mood", "taxonomy_label": "acı", "display_label": "acı", "aliases": ["acı", "aci"], "sync_search_terms": ["cathartic pain", "emotional intensity", "heartbreak drama"]},
30
+ {"id": "mood.huzun", "category": "mood", "dimension": "mood", "taxonomy_label": "hüzün", "display_label": "hüzün", "aliases": ["hüzün", "huzun"], "sync_search_terms": ["melancholy", "wistful sadness", "reflective longing"]},
31
+ {"id": "mood.ofke", "category": "mood", "dimension": "mood", "taxonomy_label": "öfke", "display_label": "öfke", "aliases": ["öfke", "ofke"], "sync_search_terms": ["anger", "defiance", "confrontation"]},
32
+ {"id": "mood.kabullenme", "category": "mood", "dimension": "mood", "taxonomy_label": "kabullenme", "display_label": "kabullenme", "aliases": ["kabullenme"], "sync_search_terms": ["resignation", "acceptance of fate", "weary resolve"]},
33
+ {"id": "mood.ironi", "category": "mood", "dimension": "mood", "taxonomy_label": "ironi", "display_label": "ironi", "aliases": ["ironi"], "sync_search_terms": ["irony", "sardonic", "bittersweet wit"]},
34
+ {"id": "mood.umut", "category": "mood", "dimension": "mood", "taxonomy_label": "umut", "display_label": "umut", "aliases": ["umut"], "sync_search_terms": ["hope", "optimism", "uplift"]},
35
+ {"id": "mood.ask", "category": "mood", "dimension": "mood", "taxonomy_label": "aşk", "display_label": "aşk", "aliases": ["aşk", "ask"], "sync_search_terms": ["romance", "devotion", "love"]},
36
+ {"id": "mood.heyecan", "category": "mood", "dimension": "mood", "taxonomy_label": "heyecan", "display_label": "heyecan", "aliases": ["heyecan"], "sync_search_terms": ["excitement", "momentum", "dance energy"]},
37
+ {"id": "mood.gurbet", "category": "mood", "dimension": "mood", "taxonomy_label": "gurbet", "display_label": "gurbet", "aliases": ["gurbet"], "sync_search_terms": ["exile longing", "diaspora", "homesickness"]},
38
+ {"id": "mood.nostaljik", "category": "mood", "dimension": "mood", "taxonomy_label": "nostaljik", "display_label": "nostaljik", "aliases": ["nostaljik"], "sync_search_terms": ["nostalgia", "memory", "looking back"]},
39
+
40
+ {"id": "instrument.baglama", "category": "instrument", "dimension": "instrumentation", "taxonomy_label": "bağlama", "display_label": "bağlama", "aliases": ["bağlama"]},
41
+ {"id": "instrument.ud", "category": "instrument", "dimension": "instrumentation", "taxonomy_label": "ud", "display_label": "ud", "aliases": ["ud"]},
42
+ {"id": "instrument.kanun", "category": "instrument", "dimension": "instrumentation", "taxonomy_label": "kanun", "display_label": "kanun", "aliases": ["kanun"]},
43
+ {"id": "instrument.ney", "category": "instrument", "dimension": "instrumentation", "taxonomy_label": "ney", "display_label": "ney", "aliases": ["ney"]},
44
+ {"id": "instrument.darbuka", "category": "instrument", "dimension": "instrumentation", "taxonomy_label": "darbuka", "display_label": "darbuka", "aliases": ["darbuka"]},
45
+ {"id": "instrument.klarnet", "category": "instrument", "dimension": "instrumentation", "taxonomy_label": "klarnet", "display_label": "klarnet", "aliases": ["klarnet"]},
46
+ {"id": "instrument.electric_guitar", "category": "instrument", "dimension": "instrumentation", "taxonomy_label": "electric-guitar", "display_label": "electric guitar", "aliases": ["electric_guitar", "electric guitar"]},
47
+ {"id": "instrument.string_section", "category": "instrument", "dimension": "instrumentation", "taxonomy_label": "string-section", "display_label": "strings", "aliases": ["strings", "string-section"]},
48
+ {"id": "instrument.accordion", "category": "instrument", "dimension": "instrumentation", "taxonomy_label": "accordion", "display_label": "accordion", "aliases": ["accordion", "garmon"]},
49
+ {"id": "instrument.piano", "category": "instrument", "dimension": "instrumentation", "taxonomy_label": "piano", "display_label": "piano", "aliases": ["piano"]},
50
+ {"id": "instrument.cura", "category": "instrument", "dimension": "instrumentation", "taxonomy_label": "cura-bağlama", "display_label": "cura", "aliases": ["cura"]},
51
+ {"id": "instrument.electric_baglama", "category": "instrument", "dimension": "instrumentation", "taxonomy_label": "electric-bağlama", "display_label": "electric bağlama", "aliases": ["electric_baglama", "electric baglama", "electric bağlama"]},
52
+ {"id": "instrument.kemence_karadeniz", "category": "instrument", "dimension": "instrumentation", "taxonomy_label": "karadeniz-kemençesi", "display_label": "Karadeniz kemençesi", "aliases": ["kemence_karadeniz", "karadeniz kemençesi"]},
53
+ {"id": "instrument.kemence_klasik", "category": "instrument", "dimension": "instrumentation", "taxonomy_label": "klasik-kemençe", "display_label": "klasik kemençe", "aliases": ["kemence_klasik", "klasik kemençe"]},
54
+ {"id": "instrument.keman", "category": "instrument", "dimension": "instrumentation", "taxonomy_label": "keman", "display_label": "keman", "aliases": ["keman"]},
55
+ {"id": "instrument.mey", "category": "instrument", "dimension": "instrumentation", "taxonomy_label": "mey", "display_label": "mey", "aliases": ["mey"]},
56
+ {"id": "instrument.zurna", "category": "instrument", "dimension": "instrumentation", "taxonomy_label": "zurna", "display_label": "zurna", "aliases": ["zurna"]},
57
+ {"id": "instrument.kaval", "category": "instrument", "dimension": "instrumentation", "taxonomy_label": "kaval", "display_label": "kaval", "aliases": ["kaval"]},
58
+ {"id": "instrument.def", "category": "instrument", "dimension": "instrumentation", "taxonomy_label": "def", "display_label": "def", "aliases": ["def"]},
59
+ {"id": "instrument.davul", "category": "instrument", "dimension": "instrumentation", "taxonomy_label": "davul", "display_label": "davul", "aliases": ["davul"]},
60
+ {"id": "instrument.kudum", "category": "instrument", "dimension": "instrumentation", "taxonomy_label": "kudüm", "display_label": "kudüm", "aliases": ["kudum", "kudüm"]},
61
+ {"id": "instrument.choir", "category": "instrument", "dimension": "instrumentation", "taxonomy_label": "choir", "display_label": "choir", "aliases": ["choir"]},
62
+ {"id": "instrument.backing_vocals", "category": "instrument", "dimension": "instrumentation", "taxonomy_label": "backing-vocals", "display_label": "backing vocals", "aliases": ["backing_vocals", "backing vocals"]},
63
+
64
+ {"id": "vocal.config.male", "category": "vocal", "dimension": "vocal_configuration", "taxonomy_label": "solo-male", "display_label": "male vocals", "aliases": ["male_vocals", "solo-male"]},
65
+ {"id": "vocal.config.female", "category": "vocal", "dimension": "vocal_configuration", "taxonomy_label": "solo-female", "display_label": "female vocals", "aliases": ["female_vocals", "solo-female"]},
66
+ {"id": "vocal.config.duet", "category": "vocal", "dimension": "vocal_configuration", "taxonomy_label": "duet-mf", "display_label": "duet", "aliases": ["duet", "duet-mf"]},
67
+ {"id": "vocal.config.instrumental", "category": "vocal", "dimension": "vocal_configuration", "taxonomy_label": "instrumental", "display_label": "instrumental", "aliases": ["instrumental"]},
68
+ {"id": "vocal.technique.hancere", "category": "vocal", "dimension": "vocal_technique", "taxonomy_label": "hançere", "display_label": "hançere", "aliases": ["hancere", "hançere"]},
69
+ {"id": "vocal.technique.gazel", "category": "vocal", "dimension": "vocal_technique", "taxonomy_label": "gazel", "display_label": "gazel", "aliases": ["gazel"]},
70
+ {"id": "vocal.technique.duz_okuyus", "category": "vocal", "dimension": "vocal_technique", "taxonomy_label": "düz-okuyuş", "display_label": "düz okuyuş", "aliases": ["duz_okuyus", "düz-okuyuş", "düz okuyuş"]},
71
+ {"id": "vocal.technique.taverna", "category": "vocal", "dimension": "vocal_technique", "taxonomy_label": "taverna-style", "display_label": "taverna vocal", "aliases": ["taverna_vocal", "taverna-style"]},
72
+ {"id": "vocal.technique.call_response", "category": "vocal", "dimension": "vocal_configuration", "taxonomy_label": "call-and-response", "display_label": "call-and-response", "aliases": ["call-and-response", "call_response"]},
73
+ {"id": "vocal.technique.belt", "category": "vocal", "dimension": "vocal_technique", "taxonomy_label": "bağırma", "display_label": "belt", "aliases": ["belt", "bağırma"]}
74
+ ],
75
+ "maest_hints": {
76
+ "Folk, World, & Country---Folk": ["genre.family.halk"],
77
+ "Folk, World, & Country---Laïkó": ["genre.family.fantezi", "genre.family.sanat"],
78
+ "Folk, World, & Country---Éntekhno": ["genre.family.ozgun", "genre.family.halk"],
79
+ "Folk, World, & Country---Hindustani": ["genre.family.halk"],
80
+ "Pop---Vocal": ["genre.family.pop", "genre.family.arabesk"],
81
+ "Pop---Ballad": ["genre.family.pop", "genre.family.fantezi"],
82
+ "Pop---Schlager": ["genre.family.fantezi", "genre.family.pop"],
83
+ "Pop---Chanson": ["genre.family.fantezi", "genre.family.pop"],
84
+ "Rock---Pop Rock": ["genre.family.rock"],
85
+ "Rock---Folk Rock": ["genre.subtype.anadolu_rock"],
86
+ "Rock---Prog Rock": ["genre.subtype.anadolu_psych_rock"],
87
+ "Rock---Psychedelic Rock": ["genre.subtype.anadolu_psych_rock"],
88
+ "Rock---Hard Rock": ["genre.family.rock"],
89
+ "Stage & Screen---Soundtrack": ["genre.family.pop"],
90
+ "Latin---MPB": ["genre.family.pop"]
91
+ }
92
+ }