0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

漢字一覧が欲しい!

Posted at

ずっと前に漢検クイズを作ったことがあってですね、また作りたいなー(今度は一級漢字とかで)と思って、漢字一覧.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!')
}

実行してみると、こんな有様になりました。

image.png

えーっと...11134000...
さすが、すごい数の文字が収容されているようです...

地道に漢字が出力されたファイルを探すこと5分...いました!見知った「一」です!

image.png














戯言

はい、すべて、戯言です。

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)
}

おしまい!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?