ずっと前に漢検クイズを作ったことがあってですね、また作りたいなー(今度は一級漢字とかで)と思って、漢字一覧.csv的なものがどこかの省庁とかから発行されてないかなー...と思ったんですね。
なかったです。いや、あったんですけどPDFしかなかったです。(それも凄く読み取りづらそうな...)
という感じで色々調べていると、String.fromCodePoint()
なる関数がJavaScriptにあるらしいぞ、と。
あれ?漢字と言えども文字コードには割り当てられてるはずだから、もうそこから一覧取れないのか?常用外はどうか分からんが...
という訳でできたコードがこちらです。
(そこそこ重い!実行は自己責任で...)
main.js
import * as fs from 'fs'
let code = 0
// let file_number = 0
try {
let strings = []
let dir_name = "0-1000"
while (true) {
if (code % 1000 === 0) {
if (code > 0) {
dir_name = `${code - 999}-${code}`
}
if (!fs.existsSync(`out/${dir_name}`)) {
fs.mkdirSync(`out/${dir_name}`)
}
}
const string = String.fromCodePoint(code)
strings.push(string)
code++
if (code % 100 === 0) {
const outtxt = strings.join('\n')
fs.writeFileSync(`out/${dir_name}/${code - 99}-${code}.txt`, outtxt)
strings = []
}
}
} catch (e) {
console.error(e)
} finally {
console.log('end!')
}
実行してみると、こんな有様になりました。
えーっと...11134000...
さすが、すごい数の文字が収容されているようです...
地道に漢字が出力されたファイルを探すこと5分...いました!見知った「一」です!
戯言
はい、すべて、戯言です。
Wikiからとってくるのが一番早いです。そうしてください。
以下Chatgptベースのスクレイピングコード
import axios from 'axios'
import { load } from 'cheerio'
import { createObjectCsvWriter as createCsvWriter } from 'csv-writer'
// Wikipediaの常用漢字のページURL
const url = "https://ja.wikipedia.org/wiki/常用漢字一覧"
// CSVライターの設定
const csvWriter = createCsvWriter({
path: 'kanji_reading.csv',
header: [
{ id: 'kanji', title: 'Kanji' },
{ id: 'reading', title: 'Reading' }
],
encoding: 'utf-8'
})
// Webページを取得して処理
try {
const response = await axios.get(url)
const $ = load(response.data)
const kanjiData = []
// 各テーブルからデータを抽出
$('table').each((index, table) => {
$(table).find('tr').each((i, row) => {
const cols = $(row).find('td')
if (cols.length >= 2) {
const kanji = $(cols[1]).text().trim()
const reading = $(cols[8]).text().trim()
kanjiData.push({ kanji, reading })
}
})
})
// CSVに書き込む
await csvWriter.writeRecords(kanjiData)
console.log('常用漢字とその読みがkanji_reading.csvに保存されました。')
} catch (error) {
console.error('エラーが発生しました:', error)
}
おしまい!