{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "# given new alignments we will merge them with existing metas.jsonl\n",
    "import os\n",
    "from suno_utils.utils.text import read_jsonl\n",
    "from tqdm import tqdm"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "2054302\n",
      "1799066\n"
     ]
    }
   ],
   "source": [
    "base_dir = \"/home/tony/Work/tony/hoot/tmp\"\n",
    "discogs_filepath = os.path.join(base_dir, \"discogs_hq_alignments_h4_t30_v1.jsonl\")\n",
    "genius_filepath = os.path.join(base_dir, \"genius_hq_alignments_h4_t30_v1.jsonl\")\n",
    "#deezer_filepath = os.path.join(base_dir, \"deezer_hq_alignments_h4_t30_v1.jsonl\")\n",
    "\n",
    "\n",
    "discogs_alignments = read_jsonl(discogs_filepath)\n",
    "print(len(discogs_alignments))\n",
    "genius_alignments = read_jsonl(genius_filepath)\n",
    "print(len(genius_alignments))\n",
    "#deezer_alignments = read_jsonl(deezer_filepath)\n",
    "#print(len(deezer_alignments))\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "# create maps from genius alignments lookup via id\n",
    "genius_alignments_map = {k: {\"alignment\": v, \"cer_score\": cer_score} for k, v, cer_score in genius_alignments}\n",
    "discogs_alignments_map = {k: {\"alignment\": v, \"cer_score\": cer_score} for k, v, cer_score in discogs_alignments}\n",
    "#deezer_alignments_map = {k: {\"alignment\": v, \"cer_score\": cer_score} for k, v, cer_score in deezer_alignments}"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "2090009\n",
      "2916657\n"
     ]
    }
   ],
   "source": [
    "genius_metas = read_jsonl(\"/home/christian/code/christian/metadata/genius_hq_metas.jsonl\")\n",
    "genius_metas_map = {meta[\"id\"]: meta for meta in genius_metas}\n",
    "print(len(genius_metas))\n",
    "# create an id mapping to convert id to original_id\n",
    "original_id_map = {meta[\"original_id\"]: meta[\"id\"] for meta in genius_metas}\n",
    "\n",
    "\n",
    "discogs_metas = read_jsonl(\"/app/suno/tmp/clean_discogs_subset_v0_metas.jsonl\")\n",
    "discogs_metas_map = {meta[\"id\"]: meta for meta in discogs_metas}\n",
    "print(len(discogs_metas))\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "ISO_LANGUAGES = {\n",
    "    'aa': 'Afar', 'ab': 'Abkhazian', 'af': 'Afrikaans', 'ak': 'Akan',\n",
    "    'sq': 'Albanian', 'am': 'Amharic', 'ar': 'Arabic', 'an': 'Aragonese',\n",
    "    'hy': 'Armenian', 'as': 'Assamese', 'av': 'Avaric', 'ae': 'Avestan',\n",
    "    'ay': 'Aymara', 'az': 'Azerbaijani', 'ba': 'Bashkir', 'bm': 'Bambara',\n",
    "    'eu': 'Basque', 'be': 'Belarusian', 'bn': 'Bengali', 'bh': 'Bihari',\n",
    "    'bi': 'Bislama', 'bs': 'Bosnian', 'br': 'Breton', 'bg': 'Bulgarian',\n",
    "    'my': 'Burmese', 'ca': 'Catalan', 'ch': 'Chamorro', 'ce': 'Chechen',\n",
    "    'zh': 'Chinese', 'cu': 'Church Slavic', 'cv': 'Chuvash', 'kw': 'Cornish',\n",
    "    'co': 'Corsican', 'cr': 'Cree', 'cs': 'Czech', 'da': 'Danish',\n",
    "    'dv': 'Divehi', 'nl': 'Dutch', 'dz': 'Dzongkha', 'en': 'English',\n",
    "    'eo': 'Esperanto', 'et': 'Estonian', 'ee': 'Ewe', 'fo': 'Faroese',\n",
    "    'fj': 'Fijian', 'fi': 'Finnish', 'fr': 'French', 'fy': 'Western Frisian',\n",
    "    'ff': 'Fulah', 'ka': 'Georgian', 'de': 'German', 'gd': 'Gaelic',\n",
    "    'ga': 'Irish', 'gl': 'Galician', 'gv': 'Manx', 'el': 'Greek',\n",
    "    'gn': 'Guarani', 'gu': 'Gujarati', 'ht': 'Haitian', 'ha': 'Hausa',\n",
    "    'he': 'Hebrew', 'hz': 'Herero', 'hi': 'Hindi', 'ho': 'Hiri Motu',\n",
    "    'hr': 'Croatian', 'hu': 'Hungarian', 'ig': 'Igbo', 'is': 'Icelandic',\n",
    "    'io': 'Ido', 'ii': 'Sichuan Yi', 'iu': 'Inuktitut', 'ie': 'Interlingue',\n",
    "    'ia': 'Interlingua', 'id': 'Indonesian', 'ik': 'Inupiaq', 'it': 'Italian',\n",
    "    'jv': 'Javanese', 'ja': 'Japanese', 'kl': 'Kalaallisut', 'kn': 'Kannada',\n",
    "    'ks': 'Kashmiri', 'kr': 'Kanuri', 'kk': 'Kazakh', 'km': 'Central Khmer',\n",
    "    'ki': 'Kikuyu', 'rw': 'Kinyarwanda', 'ky': 'Kirghiz', 'kv': 'Komi',\n",
    "    'kg': 'Kongo', 'ko': 'Korean', 'kj': 'Kuanyama', 'ku': 'Kurdish',\n",
    "    'lo': 'Lao', 'la': 'Latin', 'lv': 'Latvian', 'li': 'Limburgan',\n",
    "    'ln': 'Lingala', 'lt': 'Lithuanian', 'lb': 'Luxembourgish',\n",
    "    'lu': 'Luba-Katanga', 'lg': 'Ganda', 'mk': 'Macedonian',\n",
    "    'mh': 'Marshallese', 'ml': 'Malayalam', 'mi': 'Maori', 'mr': 'Marathi',\n",
    "    'ms': 'Malay', 'mg': 'Malagasy', 'mt': 'Maltese', 'mn': 'Mongolian',\n",
    "    'na': 'Nauru', 'nv': 'Navajo', 'nr': 'South Ndebele',\n",
    "    'nd': 'North Ndebele', 'ng': 'Ndonga', 'ne': 'Nepali', 'nn': 'Norwegian',\n",
    "    'nb': 'Norwegian', 'no': 'Norwegian', 'ny': 'Chichewa', 'oc': 'Occitan',\n",
    "    'oj': 'Ojibwa', 'or': 'Oriya', 'om': 'Oromo', 'os': 'Ossetian',\n",
    "    'pa': 'Panjabi', 'fa': 'Persian', 'pi': 'Pali', 'pl': 'Polish',\n",
    "    'pt': 'Portuguese', 'ps': 'Pushto', 'qu': 'Quechua', 'rm': 'Romansh',\n",
    "    'ro': 'Romanian', 'rn': 'Rundi', 'ru': 'Russian', 'sg': 'Sango',\n",
    "    'sa': 'Sanskrit', 'si': 'Sinhala', 'sk': 'Slovak', 'sl': 'Slovenian',\n",
    "    'se': 'Northern Sami', 'sm': 'Samoan', 'sn': 'Shona', 'sd': 'Sindhi',\n",
    "    'so': 'Somali', 'st': 'Southern Sotho', 'es': 'Spanish', 'sc': 'Sardinian',\n",
    "    'sr': 'Serbian', 'ss': 'Swati', 'su': 'Sundanese', 'sw': 'Swahili',\n",
    "    'sv': 'Swedish', 'ty': 'Tahitian', 'ta': 'Tamil', 'tt': 'Tatar',\n",
    "    'te': 'Telugu', 'tg': 'Tajik', 'tl': 'Tagalog', 'th': 'Thai',\n",
    "    'bo': 'Tibetan', 'ti': 'Tigrinya', 'to': 'Tonga', 'tn': 'Tswana',\n",
    "    'ts': 'Tsonga', 'tk': 'Turkmen', 'tr': 'Turkish', 'tw': 'Twi',\n",
    "    'ug': 'Uighur', 'uk': 'Ukrainian', 'ur': 'Urdu', 'uz': 'Uzbek',\n",
    "    've': 'Venda', 'vi': 'Vietnamese', 'vo': 'Volapük', 'cy': 'Welsh',\n",
    "    'wa': 'Walloon', 'wo': 'Wolof', 'xh': 'Xhosa', 'yi': 'Yiddish',\n",
    "    'yo': 'Yoruba', 'za': 'Zhuang', 'zu': 'Zulu'\n",
    "}\n",
    "\n",
    "def get_language_name(code):\n",
    "    return ISO_LANGUAGES.get(code.lower(), 'Unknown')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'alignment': [{'text': '(Ghosty)\\n(Ay Geno these kids say they know you)\\n\\nAyy, big batty girl oh lord (bunda)\\nTell her come flick with the stars\\n',\n",
       "   'start_s': 0,\n",
       "   'end_s': 30},\n",
       "  {'text': \"Tell her come flick with the stars\\nShe wants third leg in the dance\\nSlow down miss and you might have a chance\\nBro made an arm discharge\\nCock back, blast, make everyone run fast\\nLack on the block me and bro just laugh\\nWas talking about which one I'd opt\\nI'm out on a glide and I'm hunting now\\nJumping out tryna run man down\\nRun it up that's someone down\\nBrucking beef no bluffing now\\nIt's T Trap, beat that\\nYou ever seen a gunman frown\\nHop out the ride with a wu-du-du-du-du-du-du\\nYou shouldn't of run that mound\\nHow many times did we do it, do it\\nDon't get chewed like truits, truits\\nThat's a new outfit, ruined, we're screwing\\nPull up on blocks we're doing\\n\",\n",
       "   'start_s': 30,\n",
       "   'end_s': 60},\n",
       "  {'text': \"Pull up on blocks we're doing\\nNuff gyal love arse so I'm doing them up\\nIn the booth smoke weed, make musicc\\nShould've knew this we ain't stupid\\nIf it ain't that it's a video shootin'\\nThe whole of North London knows (ayy)\\nBroadwater Farm where the gunsdem go\\nHave you ever been out hunting bro with a hunting knife we just come and go (ching ching)\\nCome on bro you ain't on that smoke\\nPull up slow let the thunder go\\nBeen loyal to my bros, and everyone knows\\nGotta get to the bag it's just hunger bro\\n\\nInterview room I'm more than silent\\nNo comment that's my answer\\nI see bro fling a leg in dance so violent, never knew he was a dancer\\nHB loud and bars of cookie or runts put you in a rabba\\n\",\n",
       "   'start_s': 60,\n",
       "   'end_s': 90},\n",
       "  {'text': \"HB loud and bars of cookie or runts put you in a rabba\\nAnd bro hoped out way faster circle up and I got there after\\nAnd if he's advanced, he's overpissed\\nThem youngboys doing up bare fuckery\\nNow I'm big dog, I'm the older kid\\nI'm the older man\\nTold my ex get over man\\nHe denied he's owned a gang\\nWhy you talk so much who knows this man\\nFlick of the wrist if I slap this hammer\\nWatch man lean and stagger\\nThe Junebug put nuff blood on his dagger\\nMake M1llionz and I'm screaming Lagga\\nMy west ting just things I'm a rapper\\nShe knows what's good but my East ting's badder\\nNot on nothing the mandem's madder\\nHaha, been in the field like KaKa\\n\",\n",
       "   'start_s': 90,\n",
       "   'end_s': 120},\n",
       "  {'text': \"Haha, been in the field like KaKa\\nBro on seats so Gucci\\nGissele's been boujie\\nHold up, excuse me, told you I'm done with these groupies\\nBro said he'll crew out some movies\\nSit back out when he shoots out the two piece\\nSlim and Coolie always moody, always been picky and choosy\",\n",
       "   'start_s': 120,\n",
       "   'end_s': 150}],\n",
       " 'cer_score': 0.394}"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "discogs_alignments_map[\"---2ayLSzvo\"]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Distribution of CER scores for genius:\n",
      "Number of alignments: 1799066\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "  0%|          | 0/1799066 [00:00<?, ?it/s]"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 1799066/1799066 [00:02<00:00, 752595.67it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "1. en English 0.52\n",
      "2. es Spanish 0.42\n",
      "3. pt Portuguese 0.55\n",
      "4. pl Polish 0.44\n",
      "5. ko Korean 0.61\n",
      "6. it Italian 0.38\n",
      "7. fr French 0.52\n",
      "8. de German 0.49\n",
      "9. zu Zulu 0.87\n",
      "10. ru Russian 0.47\n",
      "11. ja Japanese 0.71\n",
      "12. nl Dutch 0.58\n",
      "13. fa Persian 0.51\n",
      "14. da Danish 0.66\n",
      "15. th Thai 0.8\n",
      "16. tr Turkish 0.65\n",
      "17. cy Welsh 0.96\n",
      "18. sr Serbian 0.53\n",
      "19. vi Vietnamese 0.74\n",
      "20. sv Swedish 0.56\n",
      "21. et Estonian 0.8\n",
      "22. no Norwegian 0.62\n",
      "23. ar Arabic 0.69\n",
      "24. hu Hungarian 0.58\n",
      "25. oc Occitan 0.83\n",
      "26. ca Catalan 0.67\n",
      "27. cs Czech 0.46\n",
      "28. bs Bosnian 0.46\n",
      "29. hr Croatian 0.45\n",
      "30. af Afrikaans 0.69\n",
      "31. fi Finnish 0.47\n",
      "32. tl Tagalog 0.5\n",
      "33. el Greek 0.91\n",
      "34. bi Bislama 0.72\n",
      "35. sk Slovak 0.51\n",
      "36. hi Hindi 0.98\n",
      "37. ceb Unknown 0.66\n",
      "38. id Indonesian 0.59\n",
      "39. ln Lingala 0.88\n",
      "40. ve Venda 0.94\n",
      "41. pa Panjabi 0.99\n",
      "42. iw Unknown 0.57\n",
      "43. bg Bulgarian 0.54\n",
      "44. ka Georgian 0.98\n",
      "45. co Corsican 0.79\n",
      "46. lt Lithuanian 0.72\n",
      "47. mk Macedonian 0.74\n",
      "48. xh Xhosa 0.91\n",
      "49. tlh Unknown 0.82\n",
      "50. sl Slovenian 0.78\n",
      "51. rm Romansh 0.87\n",
      "52. ht Haitian 0.85\n",
      "53. zh Chinese 0.79\n",
      "54. zh-Hant Unknown 0.72\n",
      "55. ro Romanian 0.5\n",
      "56. sq Albanian 0.59\n",
      "57. la Latin 0.97\n",
      "58. gl Galician 0.59\n",
      "59. eu Basque 0.85\n",
      "60. eo Esperanto 0.72\n",
      "61. ia Interlingua 0.58\n",
      "62. war Unknown 0.71\n",
      "63. sa Sanskrit 0.91\n",
      "64. sco Unknown 0.72\n",
      "65. ms Malay 0.6\n",
      "66. romanization Unknown 0.97\n",
      "67. is Icelandic 0.84\n",
      "68. sw Swahili 0.63\n",
      "69. tt Tatar 0.96\n",
      "70. uk Ukrainian 0.63\n",
      "71. tn Tswana 0.96\n",
      "72. az Azerbaijani 0.5\n",
      "73. km Central Khmer 0.95\n",
      "74. be Belarusian 0.69\n",
      "75. my Burmese 0.98\n",
      "76. aa Afar 0.97\n",
      "77. lb Luxembourgish 0.88\n",
      "78. ak Akan 0.92\n",
      "79. yo Yoruba 0.89\n",
      "80. st Southern Sotho 0.91\n",
      "81. mn Mongolian 0.98\n",
      "82. ta Tamil 0.98\n",
      "83. kk Kazakh 0.99\n",
      "84. lv Latvian 0.66\n",
      "85. ga Irish 0.97\n",
      "86. te Telugu 0.99\n",
      "87. mi Maori 0.91\n",
      "88. ts Tsonga 0.92\n",
      "89. lg Ganda 0.76\n",
      "90. su Sundanese 0.94\n",
      "91. haw Unknown 0.85\n",
      "92. rw Kinyarwanda 0.72\n",
      "93. mg Malagasy 0.82\n",
      "94. ne Nepali 0.99\n",
      "95. jw Unknown 0.92\n",
      "96. hy Armenian 0.99\n",
      "97. sn Shona 0.81\n",
      "98. si Sinhala 0.99\n",
      "99. crs Unknown 0.91\n",
      "100. am Amharic 0.93\n",
      "101. so Somali 0.88\n",
      "102. gd Gaelic 0.97\n",
      "103. kha Unknown 0.87\n",
      "104. rn Rundi 0.95\n",
      "105. to Tonga 0.89\n",
      "106. sm Samoan 0.91\n",
      "107. gv Manx 0.67\n",
      "108. mt Maltese 0.89\n",
      "109. uz Uzbek 0.85\n",
      "110. wo Wolof 0.92\n",
      "111. ig Igbo 0.94\n",
      "112. tg Tajik 0.78\n",
      "113. ie Interlingue 0.86\n",
      "114. mfe Unknown 0.89\n",
      "115. ss Swati 0.78\n",
      "116. kn Kannada 0.93\n",
      "117. ku Kurdish 0.9\n",
      "118. bh Bihari 0.99\n",
      "119. ny Chichewa 0.73\n",
      "120. gn Guarani 0.73\n",
      "121. fj Fijian 0.86\n",
      "122. bn Bengali 0.98\n",
      "123. ay Aymara 0.72\n",
      "124. ha Hausa 0.86\n",
      "125. vo Volapük 0.78\n",
      "126. kl Kalaallisut 0.88\n",
      "127. tk Turkmen 0.8\n",
      "128. ug Uighur 0.99\n",
      "129. om Oromo 0.87\n",
      "130. fy Western Frisian 0.75\n",
      "131. qu Quechua 0.76\n",
      "132. br Breton 0.97\n",
      "133. as Assamese 0.97\n",
      "134. syr Unknown 0.99\n",
      "135. fo Faroese 0.82\n",
      "136. ur Urdu 0.98\n",
      "137. nr South Ndebele 0.52\n",
      "138. ml Malayalam 0.92\n",
      "139. yi Yiddish 0.95\n",
      "140. ba Bashkir 0.99\n",
      "141. ky Kirghiz 0.98\n",
      "142. ps Pushto 0.97\n",
      "143. sd Sindhi 0.68\n",
      "144. jp Unknown 0.88\n",
      "145. ik Inupiaq 0.63\n",
      "146. na Nauru 0.78\n",
      "147. iu Inuktitut 0.79\n",
      "148. ks Kashmiri 0.99\n",
      "149. nso Unknown 0.83\n",
      "150. ab Abkhazian 0.72\n",
      "151. hmn Unknown 0.96\n",
      "Distribution of CER scores for discogs:\n",
      "Number of alignments: 2054302\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 2054302/2054302 [00:03<00:00, 588180.93it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "1. en English 0.65\n",
      "2. fr French 0.61\n",
      "3. de German 0.57\n",
      "4. ja Japanese 0.67\n",
      "5. es Spanish 0.54\n",
      "6. ko Korean 0.54\n",
      "7. tr Turkish 0.49\n",
      "8. nl Dutch 0.6\n",
      "9. id Indonesian 0.67\n",
      "10. ru Russian 0.44\n",
      "11. pt Portuguese 0.58\n",
      "12. el Greek 0.96\n",
      "13. ar Arabic 0.71\n",
      "14. zh Chinese 0.78\n",
      "15. lv Latvian 0.74\n",
      "16. tl Tagalog 0.8\n",
      "17. az Azerbaijani 0.56\n",
      "18. fa Persian 0.61\n",
      "19. ro Romanian 0.64\n",
      "20. pl Polish 0.47\n",
      "21. sr Serbian 0.58\n",
      "22. it Italian 0.6\n",
      "23. gd Gaelic 0.97\n",
      "24. af Afrikaans 0.67\n",
      "25. sv Swedish 0.6\n",
      "26. uk Ukrainian 0.64\n",
      "27. pa Panjabi 0.99\n",
      "28. ur Urdu 0.98\n",
      "29. da Danish 0.58\n",
      "30. th Thai 0.9\n",
      "31. lt Lithuanian 0.72\n",
      "32. hr Croatian 0.68\n",
      "33. is Icelandic 0.9\n",
      "34. war Unknown 0.89\n",
      "35. hu Hungarian 0.64\n",
      "36. hi Hindi 0.99\n",
      "37. he Hebrew 0.7\n",
      "38. vi Vietnamese 0.7\n",
      "39. ku Kurdish 0.93\n",
      "40. cs Czech 0.55\n",
      "41. ca Catalan 0.64\n",
      "42. fi Finnish 0.62\n",
      "43. no Norwegian 0.74\n",
      "44. mk Macedonian 0.91\n",
      "45. sl Slovenian 0.73\n",
      "46. ckb Unknown 0.97\n",
      "47. ta Tamil 0.98\n",
      "48. sh Unknown 0.82\n",
      "49. sk Slovak 0.58\n",
      "50. ht Haitian 0.86\n",
      "51. ky Kirghiz 0.99\n",
      "52. sq Albanian 0.72\n",
      "53. jv Javanese 0.84\n",
      "54. sw Swahili 0.95\n",
      "55. kk Kazakh 0.99\n",
      "56. eu Basque 0.81\n",
      "57. br Breton 0.97\n",
      "58. bg Bulgarian 0.67\n",
      "59. ms Malay 0.8\n",
      "60. mn Mongolian 0.99\n",
      "61. uz Uzbek 0.82\n",
      "62. nn Norwegian 0.73\n",
      "63. ka Georgian 0.96\n",
      "64. cy Welsh 0.94\n",
      "65. gl Galician 0.71\n",
      "66. mg Malagasy 0.91\n",
      "67. la Latin 0.97\n",
      "68. qu Quechua 0.91\n",
      "69. mt Maltese 0.93\n",
      "70. ne Nepali 0.99\n",
      "71. als Unknown 0.85\n",
      "72. et Estonian 0.75\n",
      "73. te Telugu 0.98\n",
      "74. be Belarusian 0.89\n",
      "75. ceb Unknown 0.77\n",
      "76. su Sundanese 0.85\n",
      "77. arz Unknown 0.81\n",
      "78. bs Bosnian 0.77\n",
      "79. eo Esperanto 0.95\n",
      "80. oc Occitan 0.88\n",
      "81. nap Unknown 0.88\n",
      "82. ast Unknown 0.79\n",
      "83. yi Yiddish 0.98\n",
      "84. kn Kannada 0.98\n",
      "85. bn Bengali 0.99\n",
      "86. gn Guarani 0.9\n",
      "87. io Ido 0.95\n",
      "88. jbo Unknown 0.98\n",
      "89. mzn Unknown 0.77\n",
      "90. tt Tatar 0.99\n",
      "91. lmo Unknown 0.94\n",
      "92. mwl Unknown 0.79\n",
      "93. ga Irish 0.97\n",
      "94. km Central Khmer 0.99\n",
      "95. as Assamese 0.99\n",
      "96. ug Uighur 0.84\n",
      "97. my Burmese 0.98\n",
      "98. lo Lao 0.96\n",
      "99. nds Unknown 0.77\n",
      "100. tk Turkmen 0.82\n",
      "101. so Somali 0.96\n",
      "102. or Oriya 0.98\n",
      "103. gu Gujarati 0.98\n",
      "104. pnb Unknown 0.98\n",
      "105. ia Interlingua 0.89\n",
      "106. fy Western Frisian 0.8\n",
      "107. hy Armenian 0.99\n",
      "108. nah Unknown 0.77\n",
      "109. krc Unknown 0.97\n",
      "110. am Amharic 0.99\n",
      "111. si Sinhala 0.99\n",
      "112. ba Bashkir 0.99\n",
      "113. yo Yoruba 0.94\n",
      "114. mr Marathi 0.99\n",
      "115. rm Romansh 0.89\n",
      "116. vec Unknown 0.81\n",
      "117. min Unknown 0.74\n",
      "118. wa Walloon 0.89\n",
      "119. lb Luxembourgish 0.93\n",
      "120. scn Unknown 0.94\n",
      "121. ml Malayalam 0.98\n",
      "122. eml Unknown 0.97\n",
      "123. cv Chuvash 0.94\n",
      "124. ilo Unknown 0.88\n",
      "125. kw Cornish 0.93\n",
      "126. gom Unknown 0.78\n",
      "127. co Corsican 0.75\n",
      "128. bh Bihari 0.99\n",
      "129. pms Unknown 0.89\n",
      "130. sco Unknown 0.87\n",
      "131. sd Sindhi 0.81\n",
      "132. tg Tajik 0.99\n",
      "133. cbk Unknown 0.8\n",
      "134. diq Unknown 0.93\n",
      "135. bcl Unknown 0.97\n",
      "136. sa Sanskrit 0.72\n",
      "137. bo Tibetan 0.94\n",
      "138. ce Chechen 0.98\n",
      "139. ps Pushto 0.96\n",
      "140. sc Sardinian 0.84\n",
      "141. vo Volapük 0.69\n",
      "142. lez Unknown 0.94\n",
      "143. hsb Unknown 0.99\n",
      "144. gv Manx 0.77\n",
      "145. hif Unknown 0.6\n",
      "146. kv Komi 0.96\n",
      "147. li Limburgan 0.88\n",
      "148. azb Unknown 0.68\n",
      "149. os Ossetian 0.89\n",
      "150. pam Unknown 0.85\n",
      "151. bar Unknown 0.95\n",
      "152. yue Unknown 0.72\n",
      "153. ie Interlingue 0.64\n",
      "154. bxr Unknown 0.96\n"
     ]
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "import locale\n",
    "import numpy as np\n",
    "\n",
    "for i, dataset in enumerate([\"genius\", \"discogs\"]):\n",
    "    alignments_map = globals()[f\"{dataset}_alignments_map\"]\n",
    "    cer_scores = [v[\"cer_score\"] for v in alignments_map.values()]\n",
    "    print(f\"Distribution of CER scores for {dataset}:\")\n",
    "    print(f\"Number of alignments: {len(cer_scores)}\")\n",
    "\n",
    "    # count the number of alignments by language before and after cutoff\n",
    "    # we can look up the language from the metas\n",
    "    # let's also compute the distribution of CER by language\n",
    "\n",
    "    cer_scores_by_language = {}\n",
    "    count_within_cutoff_by_language = {}\n",
    "    count_total_by_language = {}\n",
    "    for meta_id, alignment in tqdm(alignments_map.items()):\n",
    "        if dataset == \"discogs\":\n",
    "            meta = discogs_metas_map[meta_id]\n",
    "            text_lang = meta[\"lang\"]\n",
    "        else:\n",
    "            meta = genius_metas_map[meta_id]\n",
    "            text_lang = meta[\"lang\"]\n",
    "        score = alignment[\"cer_score\"]\n",
    "        if text_lang not in cer_scores_by_language:\n",
    "            cer_scores_by_language[text_lang] = []\n",
    "        cer_scores_by_language[text_lang].append(score)\n",
    "        if text_lang not in count_total_by_language:\n",
    "            count_total_by_language[text_lang] = 0\n",
    "        count_total_by_language[text_lang] += 1\n",
    "\n",
    "    # compute 90% percentile of cers for each language\n",
    "    cer_percentiles_by_language = {k: np.percentile(v, 90) for k, v in cer_scores_by_language.items()}\n",
    "    \n",
    "    for idx, (lang, cer_percentile) in enumerate(cer_percentiles_by_language.items()):\n",
    "        print(f\"{idx+1}. {lang} {get_language_name(lang)} {cer_percentile:.2}\")\n",
    "\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "1799066\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "'a93101d1-2e60-4c8b-906e-64e21f7f8d08'"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "keys = list(genius_alignments_map.keys())\n",
    "print(len(keys))\n",
    "keys[0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "43482643\n"
     ]
    }
   ],
   "source": [
    "metas_dir = \"/app/suno/data/diffusion_v5/v0\"\n",
    "subset = \"tr\"\n",
    "metas_filepath = os.path.join(metas_dir, f\"metas_{subset}.jsonl\")\n",
    "metas = read_jsonl(metas_filepath)\n",
    "print(len(metas))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 43482643/43482643 [05:28<00:00, 132211.06it/s] "
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "23015232\n",
      "total aligned: 191793.60 hours out of 362355.36 hours\n",
      "discogs_subset: 12537640\n",
      "genius: 10477592\n",
      "pond5: 0\n",
      "imslp: 0\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    }
   ],
   "source": [
    "# iterate and look for matching alignments\n",
    "from collections import Counter\n",
    "\n",
    "new_metas = []\n",
    "count_aligned = 0\n",
    "\n",
    "count_aligned_by_dataset = Counter()\n",
    "\n",
    "for meta in tqdm(metas):\n",
    "    # get the id \n",
    "    new_meta = meta.copy()\n",
    "\n",
    "    dataset = meta[\"dataset\"]\n",
    "\n",
    "    if dataset not in count_aligned_by_dataset:\n",
    "        count_aligned_by_dataset[dataset] = 0\n",
    "\n",
    "    if dataset == \"discogs_subset\":\n",
    "        # check if the id is in the discogs alignments\n",
    "        if meta[\"id\"] in discogs_alignments_map:\n",
    "            # get the alignment\n",
    "            alignments = discogs_alignments_map[meta[\"id\"]][\"alignment\"]\n",
    "\n",
    "            # check the start and end times of the current meta\n",
    "            start_time = float(meta[\"start_s\"])\n",
    "            end_time = float(meta[\"end_s\"])\n",
    "\n",
    "            # get the cer score\n",
    "            cer_score = discogs_alignments_map[meta[\"id\"]][\"cer_score\"]\n",
    "            # check if the cer score is below the cutoff\n",
    "            if cer_score < cer_percentiles_by_language[meta[\"text_lang\"]]:\n",
    "                # iterate over the alignments and find one with the same start and end time\n",
    "                for alignment in alignments:\n",
    "                    if float(alignment[\"start_s\"]) == start_time and float(alignment[\"end_s\"]) == end_time:\n",
    "                        new_meta[\"text_aligned\"] = alignment[\"text\"]\n",
    "                        count_aligned += 1\n",
    "                        count_aligned_by_dataset[dataset] += 1\n",
    "                        break\n",
    "\n",
    "    elif dataset == \"genius\":\n",
    "        # check if the id is in the genius alignments\n",
    "        original_id = meta[\"id\"]\n",
    "        meta_id = original_id_map[original_id]\n",
    "        if meta_id in genius_alignments_map:\n",
    "            # get the alignment\n",
    "            alignments = genius_alignments_map[meta_id][\"alignment\"]\n",
    "            # get the cer score\n",
    "            cer_score = genius_alignments_map[meta_id][\"cer_score\"]\n",
    "            # check if the cer score is below the cutoff\n",
    "            lang = meta.get(\"text_lang\")\n",
    "            if lang in cer_percentiles_by_language:\n",
    "                cutoff = cer_percentiles_by_language[lang]\n",
    "                if cer_score < cutoff:\n",
    "                    start_time = float(meta[\"start_s\"])\n",
    "                    end_time = float(meta[\"end_s\"])\n",
    "\n",
    "                    # iterate over the alignments and find one with the same start and end time\n",
    "                    for alignment in alignments:\n",
    "                        if float(alignment[\"start_s\"]) == start_time and float(alignment[\"end_s\"]) == end_time:\n",
    "                            new_meta[\"text_aligned\"] = alignment[\"text\"]\n",
    "                            count_aligned += 1\n",
    "                            count_aligned_by_dataset[dataset] += 1\n",
    "                            break\n",
    "    else:\n",
    "        pass\n",
    "\n",
    "    new_metas.append(new_meta)\n",
    "\n",
    "\n",
    "print(count_aligned)\n",
    "seconds_aligned = count_aligned * 30\n",
    "hours_aligned = seconds_aligned / 3600\n",
    "total_hours = len(metas) * 30 / 3600\n",
    "print(f\"total aligned: {hours_aligned:0.2f} hours out of {total_hours:0.2f} hours\")\n",
    "for dataset, count in count_aligned_by_dataset.items():\n",
    "    print(f\"{dataset}: {count}\")\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [],
   "source": [
    "# save out the new metas \n",
    "from suno_utils.utils.text import write_jsonl\n",
    "\n",
    "assert len(metas) == len(new_metas)\n",
    "\n",
    "new_metas_filepath = os.path.join(metas_dir, f\"metas_{subset}_aligned_v2.jsonl\")\n",
    "write_jsonl(new_metas, new_metas_filepath)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "dataset: discogs_subset\n",
      "id: b1JNnmF5lYo\n",
      "start_s: 0.0\n",
      "end_s: 30.0\n",
      "original_duration_s: 223.4\n",
      "n_vae_tokens: 750\n",
      "n_semantic_tokens: 750\n",
      "text: This sound don't break, don't make me\n",
      "This sound don't please, don't make me\n",
      "This sound don't break, don't make me\n",
      "This sound don't please, don't make me\n",
      "This sound don't break, don't make me\n",
      "This sound don't please, don't make me\n",
      "\n",
      "Switch on TV, flashback Taylor's talking\n",
      "When you go see me, this is a final warning\n",
      "This sound don't please, don't make me\n",
      "\n",
      "Is it a calling or am I only dreaming?\n",
      "Heats on repeat burns through in the morning\n",
      "This sound don't please, don't make me\n",
      "\n",
      "This is, this is, this is a honeytrap\n",
      "This is, this is, this is a honeytrap\n",
      "\n",
      "Sandman send me (It's only rain)\n",
      "East, west, a new direction (It's only rain, it's only rain)\n",
      "He's on standby (It's only rain)\n",
      "For your own protection (It's only rain, it's only rain)\n",
      "\n",
      "Is it a warning or am I only dreaming?\n",
      "Watch me, see me (It's only rain)\n",
      "Sandman does the talking (It's only rain, it's only rain)\n",
      "\n",
      "This is, this is, this is a honeytrap\n",
      "This is, this is, this is a honeytrap\n",
      "\n",
      "This is your choice\n",
      "It's time, rejoice\n",
      "Line up, clap hands\n",
      "Let's go, here we stand\n",
      "\n",
      "This is your choice (This sound don't break, don't make me)\n",
      "It's time, rejoice (This sound don't please, don't make me)\n",
      "Line up, clap hands (This sound don't break, don't make me)\n",
      "Let's go, here we stand (This sound don't please, don't make me)\n",
      "\n",
      "This is your choice (This is, this is)\n",
      "It's time, rejoice (This is a honeytrap)\n",
      "Line up, clap hands (This is, this is)\n",
      "Let's go, here we stand (This is a honeytrap)\n",
      "\n",
      "This sound don't break, don't make me\n",
      "This sound don't please, don't make me\n",
      "This sound don't break, don't make me\n",
      "This sound don't please, don't make me\n",
      "\n",
      "This is, this is, this is a honeytrap\n",
      "This is, this is, this is a honeytrap\n",
      "This is, this is, this is a honeytrap\n",
      "\n",
      "This sound don't break, don't make me\n",
      "This sound don't please, don't make me\n",
      "This sound don't break, don't make me\n",
      "This sound don't please, don't make me\n",
      "text_lang: en\n",
      "dset_suffix: lyrics\n",
      "tags: ['2010']\n",
      "s3_filepath: s3://suno-data/shared/nfdg/b1JNnmF5lYo/b1JNnmF5lYo/audio.webm\n",
      "text_aligned: This sound don't break, don't make me\n",
      "\n"
     ]
    }
   ],
   "source": [
    "for meta in new_metas:\n",
    "    if \"text_aligned\" in meta and meta[\"dataset\"] == \"discogs_subset\":\n",
    "        if meta[\"text_lang\"] == \"en\":\n",
    "            for key, val in meta.items():\n",
    "                print(f\"{key}: {val}\")\n",
    "            break"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 43482643/43482643 [00:32<00:00, 1343777.03it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Counter({'en': 16311281, 'es': 2760064, 'pt': 1467268, 'fr': 1029189, 'de': 804604, 'ru': 778110, 'ja': 755675, 'it': 600270, 'pl': 578856, 'tr': 470769, 'ko': 422917, 'id': 293557, 'zh': 213810, 'ar': 177886, 'nl': 160801, 'el': 135869, 'sv': 125298, 'fi': 123677, 'th': 114606, 'tl': 110290, 'vi': 104163, 'hi': 95478, 'da': 94244, 'ro': 89821, 'sr': 86607, 'cs': 85830, 'iw': 83896, 'hu': 76803, 'fa': 74166, 'hr': 71410, 'no': 60120, 'uk': 49853, 'pa': 38610, 'he': 38387, 'bn': 38332, 'az': 37220, 'sk': 33485, 'romanization': 32117, 'zh-Hant': 31654, 'ca': 26928, 'af': 25518, 'bg': 23207, 'ms': 21873, 'bs': 21038, 'ta': 18217, 'lv': 17542, 'et': 16499, 'sq': 16268, 'lt': 14900, 'ne': 14732, 'eu': 14486, 'sw': 13032, 'sl': 12818, 'am': 12588, 'is': 11353, 'te': 10879, 'la': 10843, 'mr': 10738, 'ku': 7857, 'jv': 7384, 'si': 6954, 'gl': 6439, 'ml': 6410, 'war': 6376, 'mk': 5958, 'zu': 5492, 'eo': 5472, 'ht': 5084, 'ur': 4937, 'nn': 4842, 'uz': 4588, 'cy': 4576, 'mn': 4311, 'als': 3825, 'ka': 3770, 'ceb': 3708, 'co': 3606, 'hy': 3567, 'su': 3533, 'arz': 3307, 'or': 3205, 'sco': 3179, 'kk': 2929, 'kn': 2922, 'ga': 2730, 'my': 2586, 'xh': 2445, 'be': 2317, 'sa': 2152, 'ln': 2109, 'ckb': 1916, 'sh': 1836, 'km': 1810, 'br': 1600, 'yo': 1566, 'gd': 1564, 'yi': 1517, 'mg': 1445, 'as': 1422, 'sn': 1407, 'rw': 1192, 'oc': 1085, 'tt': 1050, 'jbo': 1023, 'lb': 906, 'ky': 893, 'ia': 887, 'jw': 871, 'mt': 861, 'wo': 820, 'qu': 805, 'st': 753, 'so': 711, 'ak': 687, 'rm': 624, 'pnb': 620, 'mi': 620, 'fo': 613, 'tk': 609, 'mzn': 581, 'nap': 575, 'gu': 569, 'min': 511, 'gn': 504, 'lmo': 501, 'lg': 498, 'bh': 484, 'aa': 471, 'ig': 453, 'tn': 424, 'fy': 421, 'nds': 419, 'wa': 411, 'sm': 406, 'io': 393, 'haw': 374, 'ast': 357, 'ha': 337, 'kw': 326, 've': 321, 'ie': 304, 'ny': 304, 'vec': 303, 'ts': 292, 'ilo': 262, 'kha': 256, 'ba': 239, 'scn': 213, 'om': 206, 'pms': 203, 'to': 203, 'ss': 175, 'diq': 174, 'ce': 164, 'tg': 160, 'kl': 159, 'tlh': 156, 'mfe': 154, 'crs': 154, 'gv': 153, 'ps': 146, 'bi': 143, 'rn': 133, 'vo': 127, 'lo': 107, 'fj': 103, 'gom': 100, 'sd': 97, 'eml': 85, 'ug': 84, 'azb': 77, 'bo': 63, 'sah': 49, 'krc': 46, 'bcl': 45, 'hsb': 42, 'cbk': 41, 'li': 39, 'ik': 38, 'nah': 37, 'kv': 37, 'na': 34, 'nso': 34, 'os': 33, 'pam': 32, 'new': 31, 'hmn': 30, 'ks': 29, 'bxr': 28, 'syr': 28, 'sc': 24, 'cv': 21, 'ay': 21, 'xmf': 18, 'jp': 17, 'ab': 17, 'tyv': 16, 'yue': 16, 'dty': 13, 'bar': 11, 'mwl': 10, 'nr': 10, 'hif': 9, 'myv': 9, 'iu': 9, 'dv': 7, 'lez': 7, 'egy': 7, 'mhr': 3, 'dsb': 3})\n",
      "Counter({'en': 13660026, 'es': 2361762, 'pt': 1189827, 'fr': 895442, 'de': 712521, 'ru': 667872, 'ja': 661266, 'it': 531604, 'pl': 519790, None: 445468, 'tr': 396752, 'ko': 382282, 'id': 253496, 'zh': 186301, 'nl': 139792, 'ar': 139249, 'sv': 108391, 'el': 107696, 'fi': 106866, 'th': 99052, 'tl': 95125, 'ro': 80673, 'da': 78386, 'vi': 77751, 'cs': 77015, 'sr': 74800, 'iw': 71831, 'hu': 65770, 'hr': 63560, 'fa': 59395, 'no': 48736, 'uk': 42070, 'az': 33047, 'he': 31830, 'sk': 29465, 'zh-Hant': 25259, 'ca': 23138, 'af': 22720, 'bg': 20578, 'hi': 19940, 'bs': 19207, 'ms': 18614, 'pa': 15641, 'lv': 15099, 'sq': 14847, 'et': 13166, 'lt': 12632, 'eu': 12148, 'sl': 10525, 'romanization': 10295, 'sw': 10061, 'is': 8317, 'ku': 6512, 'jv': 6299, 'la': 5799, 'gl': 5248, 'mk': 4493, 'war': 4470, 'ht': 4187, 'uz': 3841, 'nn': 3819, 'zu': 3479, 'eo': 3468, 'cy': 3336, 'als': 3301, 'ceb': 2852, 'co': 2846, 'su': 2820, 'ta': 2651, 'sco': 2516, 'bn': 2301, 'arz': 2136, 'ga': 2103, 'be': 1955, 'ne': 1870, 'te': 1746, 'xh': 1556, 'mn': 1525, 'sh': 1520, 'ln': 1477, 'yo': 1288, 'ur': 1219, 'ckb': 1143, 'gd': 1128, 'br': 1104, 'kk': 1083, 'sn': 1034, 'rw': 1006, 'mg': 989, 'oc': 789, 'lb': 719, 'si': 715, 'yi': 699, 'mt': 660, 'qu': 632, 'sa': 589, 'my': 566, 'so': 560, 'jbo': 559, 'ka': 558, 'kn': 552, 'jw': 551, 'rm': 540, 'wo': 538, 'tk': 528, 'hy': 513, 'nap': 507, 'st': 488, 'tt': 456, 'lg': 446, 'min': 427, 'mr': 424, 'ml': 407, 'lmo': 404, 'ak': 391, 'mi': 384, 'fo': 376, 'gn': 363, 'or': 358, 'km': 353, 'ia': 346, 'nds': 335, 'fy': 325, 'io': 304, 'am': 296, 'mzn': 289, 'kw': 266, 'ast': 262, 'tn': 239, 'vec': 238, 'sm': 238, 'ilo': 227, 'ny': 227, 'ig': 224, 'haw': 219, 'aa': 213, 'ts': 208, 'ky': 186, 'ie': 182, 'ha': 181, 'wa': 164, 've': 163, 'om': 161, 'pms': 160, 'scn': 142, 'diq': 126, 'kha': 123, 'ps': 118, 'bi': 113, 'tlh': 111, 'rn': 106, 'ss': 100, 'tg': 97, 'gv': 96, 'bh': 95, 'as': 86, 'mfe': 86, 'to': 86, 'sd': 83, 'crs': 80, 'eml': 75, 'vo': 68, 'ce': 67, 'pnb': 63, 'kl': 59, 'gom': 55, 'fj': 53, 'ug': 39, 'lo': 38, 'bcl': 36, 'cbk': 35, 'gu': 35, 'ba': 32, 'hsb': 28, 'nso': 21, 'nah': 19, 'li': 18, 'sc': 17, 'cv': 15, 'bo': 15, 'yue': 15, 'hmn': 15, 'ay': 15, 'pam': 13, 'azb': 12, 'krc': 10, 'na': 8, 'ik': 8, 'iu': 7, 'nr': 6, 'os': 5, 'ab': 4})\n",
      "English              113833.550 hrs / 135927.342 hrs (83.75%)\n",
      "Spanish              19681.350 hrs / 23000.533 hrs (85.57%)\n",
      "Portuguese           9915.225 hrs / 12227.233 hrs (81.09%)\n",
      "French               7462.017 hrs / 8576.575 hrs (87.00%)\n",
      "German               5937.675 hrs / 6705.033 hrs (88.56%)\n",
      "Russian              5565.600 hrs / 6484.250 hrs (85.83%)\n",
      "Japanese             5510.550 hrs / 6297.292 hrs (87.51%)\n",
      "Italian              4430.033 hrs / 5002.250 hrs (88.56%)\n",
      "Polish               4331.583 hrs / 4823.800 hrs (89.80%)\n",
      "Turkish              3306.267 hrs / 3923.075 hrs (84.28%)\n",
      "Korean               3185.683 hrs / 3524.308 hrs (90.39%)\n",
      "Indonesian           2112.467 hrs / 2446.308 hrs (86.35%)\n",
      "Chinese              1552.508 hrs / 1781.750 hrs (87.13%)\n",
      "Arabic               1160.408 hrs / 1482.383 hrs (78.28%)\n",
      "Dutch                1164.933 hrs / 1340.008 hrs (86.93%)\n",
      "Greek                897.467 hrs / 1132.242 hrs (79.26%)\n",
      "Swedish              903.258 hrs / 1044.150 hrs (86.51%)\n",
      "Finnish              890.550 hrs / 1030.642 hrs (86.41%)\n",
      "Thai                 825.433 hrs / 955.050 hrs (86.43%)\n",
      "Tagalog              792.708 hrs / 919.083 hrs (86.25%)\n",
      "Vietnamese           647.925 hrs / 868.025 hrs (74.64%)\n",
      "Hindi                166.167 hrs / 795.650 hrs (20.88%)\n",
      "Danish               653.217 hrs / 785.367 hrs (83.17%)\n",
      "Romanian             672.275 hrs / 748.508 hrs (89.82%)\n",
      "Serbian              623.333 hrs / 721.725 hrs (86.37%)\n",
      "Czech                641.792 hrs / 715.250 hrs (89.73%)\n",
      "Unknown              598.592 hrs / 699.133 hrs (85.62%)\n",
      "Hungarian            548.083 hrs / 640.025 hrs (85.63%)\n",
      "Persian              494.958 hrs / 618.050 hrs (80.08%)\n",
      "Croatian             529.667 hrs / 595.083 hrs (89.01%)\n",
      "Norwegian            406.133 hrs / 501.000 hrs (81.06%)\n",
      "Ukrainian            350.583 hrs / 415.442 hrs (84.39%)\n",
      "Panjabi              130.342 hrs / 321.750 hrs (40.51%)\n",
      "Hebrew               265.250 hrs / 319.892 hrs (82.92%)\n",
      "Bengali              19.175 hrs / 319.433 hrs (6.00%)\n",
      "Azerbaijani          275.392 hrs / 310.167 hrs (88.79%)\n",
      "Slovak               245.542 hrs / 279.042 hrs (87.99%)\n",
      "Unknown              85.792 hrs / 267.642 hrs (32.05%)\n",
      "Unknown              210.492 hrs / 263.783 hrs (79.80%)\n",
      "Catalan              192.817 hrs / 224.400 hrs (85.93%)\n",
      "Afrikaans            189.333 hrs / 212.650 hrs (89.04%)\n",
      "Bulgarian            171.483 hrs / 193.392 hrs (88.67%)\n",
      "Malay                155.117 hrs / 182.275 hrs (85.10%)\n",
      "Bosnian              160.058 hrs / 175.317 hrs (91.30%)\n",
      "Tamil                22.092 hrs / 151.808 hrs (14.55%)\n",
      "Latvian              125.825 hrs / 146.183 hrs (86.07%)\n",
      "Estonian             109.717 hrs / 137.492 hrs (79.80%)\n",
      "Albanian             123.725 hrs / 135.567 hrs (91.27%)\n",
      "Lithuanian           105.267 hrs / 124.167 hrs (84.78%)\n",
      "Nepali               15.583 hrs / 122.767 hrs (12.69%)\n",
      "Basque               101.233 hrs / 120.717 hrs (83.86%)\n",
      "Swahili              83.842 hrs / 108.600 hrs (77.20%)\n",
      "Slovenian            87.708 hrs / 106.817 hrs (82.11%)\n",
      "Amharic              2.467 hrs / 104.900 hrs (2.35%)\n",
      "Icelandic            69.308 hrs / 94.608 hrs (73.26%)\n",
      "Telugu               14.550 hrs / 90.658 hrs (16.05%)\n",
      "Latin                48.325 hrs / 90.358 hrs (53.48%)\n",
      "Marathi              3.533 hrs / 89.483 hrs (3.95%)\n",
      "Kurdish              54.267 hrs / 65.475 hrs (82.88%)\n",
      "Javanese             52.492 hrs / 61.533 hrs (85.31%)\n",
      "Sinhala              5.958 hrs / 57.950 hrs (10.28%)\n",
      "Galician             43.733 hrs / 53.658 hrs (81.50%)\n",
      "Malayalam            3.392 hrs / 53.417 hrs (6.35%)\n",
      "Unknown              37.250 hrs / 53.133 hrs (70.11%)\n",
      "Macedonian           37.442 hrs / 49.650 hrs (75.41%)\n",
      "Zulu                 28.992 hrs / 45.767 hrs (63.35%)\n",
      "Esperanto            28.900 hrs / 45.600 hrs (63.38%)\n",
      "Haitian              34.892 hrs / 42.367 hrs (82.36%)\n",
      "Urdu                 10.158 hrs / 41.142 hrs (24.69%)\n",
      "Norwegian            31.825 hrs / 40.350 hrs (78.87%)\n",
      "Uzbek                32.008 hrs / 38.233 hrs (83.72%)\n",
      "Welsh                27.800 hrs / 38.133 hrs (72.90%)\n",
      "Mongolian            12.708 hrs / 35.925 hrs (35.37%)\n",
      "Unknown              27.508 hrs / 31.875 hrs (86.30%)\n",
      "Georgian             4.650 hrs / 31.417 hrs (14.80%)\n",
      "Unknown              23.767 hrs / 30.900 hrs (76.91%)\n",
      "Corsican             23.717 hrs / 30.050 hrs (78.92%)\n",
      "Armenian             4.275 hrs / 29.725 hrs (14.38%)\n",
      "Sundanese            23.500 hrs / 29.442 hrs (79.82%)\n",
      "Unknown              17.800 hrs / 27.558 hrs (64.59%)\n",
      "Oriya                2.983 hrs / 26.708 hrs (11.17%)\n",
      "Unknown              20.967 hrs / 26.492 hrs (79.14%)\n",
      "Kazakh               9.025 hrs / 24.408 hrs (36.98%)\n",
      "Kannada              4.600 hrs / 24.350 hrs (18.89%)\n",
      "Irish                17.525 hrs / 22.750 hrs (77.03%)\n",
      "Burmese              4.717 hrs / 21.550 hrs (21.89%)\n",
      "Xhosa                12.967 hrs / 20.375 hrs (63.64%)\n",
      "Belarusian           16.292 hrs / 19.308 hrs (84.38%)\n",
      "Sanskrit             4.908 hrs / 17.933 hrs (27.37%)\n",
      "Lingala              12.308 hrs / 17.575 hrs (70.03%)\n",
      "Unknown              9.525 hrs / 15.967 hrs (59.66%)\n",
      "Unknown              12.667 hrs / 15.300 hrs (82.79%)\n",
      "Central Khmer        2.942 hrs / 15.083 hrs (19.50%)\n",
      "Breton               9.200 hrs / 13.333 hrs (69.00%)\n",
      "Yoruba               10.733 hrs / 13.050 hrs (82.25%)\n",
      "Gaelic               9.400 hrs / 13.033 hrs (72.12%)\n",
      "Yiddish              5.825 hrs / 12.642 hrs (46.08%)\n",
      "Malagasy             8.242 hrs / 12.042 hrs (68.44%)\n",
      "Assamese             0.717 hrs / 11.850 hrs (6.05%)\n",
      "Shona                8.617 hrs / 11.725 hrs (73.49%)\n",
      "Kinyarwanda          8.383 hrs / 9.933 hrs (84.40%)\n",
      "Occitan              6.575 hrs / 9.042 hrs (72.72%)\n",
      "Tatar                3.800 hrs / 8.750 hrs (43.43%)\n",
      "Unknown              4.658 hrs / 8.525 hrs (54.64%)\n",
      "Luxembourgish        5.992 hrs / 7.550 hrs (79.36%)\n",
      "Kirghiz              1.550 hrs / 7.442 hrs (20.83%)\n",
      "Interlingua          2.883 hrs / 7.392 hrs (39.01%)\n",
      "Unknown              4.592 hrs / 7.258 hrs (63.26%)\n",
      "Maltese              5.500 hrs / 7.175 hrs (76.66%)\n",
      "Wolof                4.483 hrs / 6.833 hrs (65.61%)\n",
      "Quechua              5.267 hrs / 6.708 hrs (78.51%)\n",
      "Southern Sotho       4.067 hrs / 6.275 hrs (64.81%)\n",
      "Somali               4.667 hrs / 5.925 hrs (78.76%)\n",
      "Akan                 3.258 hrs / 5.725 hrs (56.91%)\n",
      "Romansh              4.500 hrs / 5.200 hrs (86.54%)\n",
      "Unknown              0.525 hrs / 5.167 hrs (10.16%)\n",
      "Maori                3.200 hrs / 5.167 hrs (61.94%)\n",
      "Faroese              3.133 hrs / 5.108 hrs (61.34%)\n",
      "Turkmen              4.400 hrs / 5.075 hrs (86.70%)\n",
      "Unknown              2.408 hrs / 4.842 hrs (49.74%)\n",
      "Unknown              4.225 hrs / 4.792 hrs (88.17%)\n",
      "Gujarati             0.292 hrs / 4.742 hrs (6.15%)\n",
      "Unknown              3.558 hrs / 4.258 hrs (83.56%)\n",
      "Guarani              3.025 hrs / 4.200 hrs (72.02%)\n",
      "Unknown              3.367 hrs / 4.175 hrs (80.64%)\n",
      "Ganda                3.717 hrs / 4.150 hrs (89.56%)\n",
      "Bihari               0.792 hrs / 4.033 hrs (19.63%)\n",
      "Afar                 1.775 hrs / 3.925 hrs (45.22%)\n",
      "Igbo                 1.867 hrs / 3.775 hrs (49.45%)\n",
      "Tswana               1.992 hrs / 3.533 hrs (56.37%)\n",
      "Western Frisian      2.708 hrs / 3.508 hrs (77.20%)\n",
      "Unknown              2.792 hrs / 3.492 hrs (79.95%)\n",
      "Walloon              1.367 hrs / 3.425 hrs (39.90%)\n",
      "Samoan               1.983 hrs / 3.383 hrs (58.62%)\n",
      "Ido                  2.533 hrs / 3.275 hrs (77.35%)\n",
      "Unknown              1.825 hrs / 3.117 hrs (58.56%)\n",
      "Unknown              2.183 hrs / 2.975 hrs (73.39%)\n",
      "Hausa                1.508 hrs / 2.808 hrs (53.71%)\n",
      "Cornish              2.217 hrs / 2.717 hrs (81.60%)\n",
      "Venda                1.358 hrs / 2.675 hrs (50.78%)\n",
      "Interlingue          1.517 hrs / 2.533 hrs (59.87%)\n",
      "Chichewa             1.892 hrs / 2.533 hrs (74.67%)\n",
      "Unknown              1.983 hrs / 2.525 hrs (78.55%)\n",
      "Tsonga               1.733 hrs / 2.433 hrs (71.23%)\n",
      "Unknown              1.892 hrs / 2.183 hrs (86.64%)\n",
      "Unknown              1.025 hrs / 2.133 hrs (48.05%)\n",
      "Bashkir              0.267 hrs / 1.992 hrs (13.39%)\n",
      "Unknown              1.183 hrs / 1.775 hrs (66.67%)\n",
      "Oromo                1.342 hrs / 1.717 hrs (78.16%)\n",
      "Unknown              1.333 hrs / 1.692 hrs (78.82%)\n",
      "Tonga                0.717 hrs / 1.692 hrs (42.36%)\n",
      "Swati                0.833 hrs / 1.458 hrs (57.14%)\n",
      "Unknown              1.050 hrs / 1.450 hrs (72.41%)\n",
      "Chechen              0.558 hrs / 1.367 hrs (40.85%)\n",
      "Tajik                0.808 hrs / 1.333 hrs (60.62%)\n",
      "Kalaallisut          0.492 hrs / 1.325 hrs (37.11%)\n",
      "Unknown              0.925 hrs / 1.300 hrs (71.15%)\n",
      "Unknown              0.717 hrs / 1.283 hrs (55.84%)\n",
      "Unknown              0.667 hrs / 1.283 hrs (51.95%)\n",
      "Manx                 0.800 hrs / 1.275 hrs (62.75%)\n",
      "Pushto               0.983 hrs / 1.217 hrs (80.82%)\n",
      "Bislama              0.942 hrs / 1.192 hrs (79.02%)\n",
      "Rundi                0.883 hrs / 1.108 hrs (79.70%)\n",
      "Volapük              0.567 hrs / 1.058 hrs (53.54%)\n",
      "Lao                  0.317 hrs / 0.892 hrs (35.51%)\n",
      "Fijian               0.442 hrs / 0.858 hrs (51.46%)\n",
      "Unknown              0.458 hrs / 0.833 hrs (55.00%)\n",
      "Sindhi               0.692 hrs / 0.808 hrs (85.57%)\n",
      "Unknown              0.625 hrs / 0.708 hrs (88.24%)\n",
      "Uighur               0.325 hrs / 0.700 hrs (46.43%)\n",
      "Unknown              0.100 hrs / 0.642 hrs (15.58%)\n",
      "Tibetan              0.125 hrs / 0.525 hrs (23.81%)\n",
      "Unknown              0.000 hrs / 0.408 hrs (0.00%)\n",
      "Unknown              0.083 hrs / 0.383 hrs (21.74%)\n",
      "Unknown              0.300 hrs / 0.375 hrs (80.00%)\n",
      "Unknown              0.233 hrs / 0.350 hrs (66.67%)\n",
      "Unknown              0.292 hrs / 0.342 hrs (85.37%)\n",
      "Limburgan            0.150 hrs / 0.325 hrs (46.15%)\n",
      "Inupiaq              0.067 hrs / 0.317 hrs (21.05%)\n",
      "Unknown              0.158 hrs / 0.308 hrs (51.35%)\n",
      "Komi                 0.000 hrs / 0.308 hrs (0.00%)\n",
      "Nauru                0.067 hrs / 0.283 hrs (23.53%)\n",
      "Unknown              0.175 hrs / 0.283 hrs (61.76%)\n",
      "Ossetian             0.042 hrs / 0.275 hrs (15.15%)\n",
      "Unknown              0.108 hrs / 0.267 hrs (40.62%)\n",
      "Unknown              0.000 hrs / 0.258 hrs (0.00%)\n",
      "Unknown              0.125 hrs / 0.250 hrs (50.00%)\n",
      "Kashmiri             0.000 hrs / 0.242 hrs (0.00%)\n",
      "Unknown              0.000 hrs / 0.233 hrs (0.00%)\n",
      "Unknown              0.000 hrs / 0.233 hrs (0.00%)\n",
      "Sardinian            0.142 hrs / 0.200 hrs (70.83%)\n",
      "Chuvash              0.125 hrs / 0.175 hrs (71.43%)\n",
      "Aymara               0.125 hrs / 0.175 hrs (71.43%)\n",
      "Unknown              0.000 hrs / 0.150 hrs (0.00%)\n",
      "Unknown              0.000 hrs / 0.142 hrs (0.00%)\n",
      "Abkhazian            0.033 hrs / 0.142 hrs (23.53%)\n",
      "Unknown              0.000 hrs / 0.133 hrs (0.00%)\n",
      "Unknown              0.125 hrs / 0.133 hrs (93.75%)\n",
      "Unknown              0.000 hrs / 0.108 hrs (0.00%)\n",
      "Unknown              0.000 hrs / 0.092 hrs (0.00%)\n",
      "Unknown              0.000 hrs / 0.083 hrs (0.00%)\n",
      "South Ndebele        0.050 hrs / 0.083 hrs (60.00%)\n",
      "Unknown              0.000 hrs / 0.075 hrs (0.00%)\n",
      "Unknown              0.000 hrs / 0.075 hrs (0.00%)\n",
      "Inuktitut            0.058 hrs / 0.075 hrs (77.78%)\n",
      "Divehi               0.000 hrs / 0.058 hrs (0.00%)\n",
      "Unknown              0.000 hrs / 0.058 hrs (0.00%)\n",
      "Unknown              0.000 hrs / 0.058 hrs (0.00%)\n",
      "Unknown              0.000 hrs / 0.025 hrs (0.00%)\n",
      "Unknown              0.000 hrs / 0.025 hrs (0.00%)\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    }
   ],
   "source": [
    "# now do some data analysis to check for total number with alignments, \n",
    "# hours of aligned data, and also a breakdown by en and foreign language (non-english) as well as breakdown by all individual langauges\n",
    "from collections import Counter\n",
    "\n",
    "text_langs_count = Counter()\n",
    "text_aligned_langs_count = Counter()\n",
    "\n",
    "# lets get a break down of number of metas with text and text_aligned per language \n",
    "for meta in tqdm(new_metas):\n",
    "    text_lang = meta.get(\"text_lang\")\n",
    "    text = meta.get(\"text\")\n",
    "    text_aligned = meta.get(\"text_aligned\")\n",
    "\n",
    "    if text_lang is not None:\n",
    "        text_langs_count[text_lang] += 1\n",
    "    if text_aligned is not None:\n",
    "        text_aligned_langs_count[text_lang] += 1\n",
    "\n",
    "print(text_langs_count)\n",
    "print(text_aligned_langs_count)\n",
    "\n",
    "# sort languages by number of aligned texts\n",
    "sorted_text_langs = sorted(text_langs_count.keys(), key=lambda x: text_langs_count[x], reverse=True)\n",
    "\n",
    "for text_lang in sorted_text_langs:\n",
    "    text_aligned_count = text_aligned_langs_count[text_lang]\n",
    "    text_count = text_langs_count[text_lang]\n",
    "    percent_aligned = text_aligned_count / text_count   \n",
    "    hour_aligned = text_aligned_count * 30 / 3600\n",
    "    total_hours = text_count * 30 / 3600\n",
    "    print(f\"{get_language_name(text_lang): <20} {hour_aligned:.3f} hrs / {total_hours:.3f} hrs ({percent_aligned:.2%})\")\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "suno_gpt45",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.14"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
