What do you want now? (Request extensions here)

First mora by frequency

か: 146
こ: 103
し: 83
せ: 78
は: 76
しょ: 73
さ: 70
そ: 60
け: 58
と: 55
た: 52
き: 49
い: 47
ふ: 43
て: 40
しゅ: 38
ぼ: 37
きょ: 36
ほ: 36
ひ: 35
え: 35
よ: 34
す: 32
お: 30
あ: 29
じょ: 29
ゆ: 28
じゅ: 28
が: 27
ちょ: 27
じ: 27
れ: 26
だ: 25
も: 24
ご: 24
りょ: 24
く: 23
ば: 23
ま: 22
げ: 22
ち: 21
ど: 20
な: 20
つ: 19
り: 19
ろ: 19
きゅ: 17
う: 17
や: 16
しゃ: 16
へ: 16
ぞ: 16
め: 15
わ: 15
み: 15
ら: 14
ぎ: 13
ぶ: 13
ね: 12
に: 12
ざ: 11
の: 11
りゅ: 10
ちゅ: 10
む: 9
ぜ: 9
ひょ: 9
び: 8
る: 7
ぎょ: 7
ぐ: 7
べ: 6
びょ: 5
みょ: 4
で: 4
きゃ: 3
ず: 3
にゅ: 3
じゃ: 3
ちゃ: 2
ぬ: 2
ぎゃ: 2
ひゃ: 1
にょ: 1
りゃ: 1
づ: 1
みゃ: 1
ぎゅ: 1

Second mora by frequency

う: 491
ん: 387
い: 245
く: 171
つ: 104
き: 46
ま: 15
た: 14
ろ: 10
か: 10
ち: 10
な: 10
ら: 10
さ: 8
り: 8
る: 8
わ: 8
し: 7
め: 7
み: 6
ば: 6
に: 5
も: 5
こ: 5
と: 5
ど: 5
じ: 4
れ: 4
ぎ: 4
け: 4
が: 4
ね: 4
お: 3
す: 3
び: 3
や: 3
の: 3
そ: 2
せ: 2
え: 2
べ: 2
だ: 2
て: 2
で: 1
ぶ: 1
ぬ: 1
ゆ: 1
は: 1
よ: 1
ぞ: 1
ふ: 1
む: 1
ぼ: 1
ず: 1

Javascript
// Get all Wanikani items
wkof.ItemData.get_items().then(items => {
	// Extract only kanji
	var kanji = items.filter(item => item.object==='kanji');
	// Get the 'readings' arrays from all kanji
	var readings = kanji.map(kanji => kanji.data.readings);
	// Flatten into one array
	var readings = [].concat.apply([], readings);
	// Grab only the answers accepted by Wanikani (currently the same as 'primary')
	var primary = readings.filter(r => r.accepted_answer);
	// Extract the reading itself (throwing out other fields from each object)
	var p = primary.map(r => r.reading);
	// Toss out any kanji with 3 or more mora
	var p12 = p.filter(p => p.match(/^(?:[^ゃぃゅぇょ][ゃぃゅぇょ]?){1,2}$/));
	// Grab all first mora
	var first = p12.map(p => p.match(/^[^ゃぃゅぇょ][ゃぃゅぇょ]?/)[0]);
	// Grab all second mora
	var second = p12.map(p => p.replace(/^[^ゃぃゅぇょ][ゃぃゅぇょ]?/,'')).filter(p => p.length > 0);
	// Count occurrences of each first mora
	var first_freq = {}; first.forEach(p => first_freq[p] = (first_freq[p] || 0) + 1);
	// Count occurrences of each second mora
	var second_freq = {}; second.forEach(p => second_freq[p] = (second_freq[p] || 0) + 1);
	// Output first mora sorted by frequency
	console.log('First mora by frequency:\n'+Object.keys(first_freq).map(m => [m,first_freq[m]]).sort((a,b) => b[1]-a[1]).map(m => m[0]+': '+m[1]).join('\n'));
	// Output second mora sorted by frequency
	console.log('Second mora by frequency:\n'+Object.keys(second_freq).map(m => [m,second_freq[m]]).sort((a,b) => b[1]-a[1]).map(m => m[0]+': '+m[1]).join('\n'));
});
5 Likes