旧称「部首で漢字検索」のバージョンアップ版です。部首ではなく構成部品の文字を指定して漢字を検索するAppleScriptです。
便利な道具ではありますが、あくまでも子供の学習用以外の用途にお使いください。
–> Download kanjiSearchFromPartsV3.zip (AppleScript Bundle with library and JSON files in its bundle)
前バージョンでは常用漢字の範囲を超えるデータが出力されるという問題点があったため、常用漢字の一覧データを作成し、これに合致するものだけを出力するようにしました。
常用漢字との照合処理に時間がかかっており、v2ではAppleScriptのネイティブ機能でループして除外チェックを行なっておりました。これをv3ではCocoaの機能を用いて一括で重複部分の抽出を行うことで、v2の半分の時間で完了できることに。v2で0.6秒程度かかっていたものが、v3では0.3秒を下回る時間で処理できるようになりました(MacBook Pro Core i7 2.66GHz)。
そもそも論でいえば、元のJSONデータから常用漢字+人名漢字を超える文字の情報を削除すればいいだけの話なので、JSONデータから常用漢字+人名漢字を超える文字を削除するプログラムを書いて実行するのがよいのでしょう。
AppleScript名:構成要素を指定して漢字検索 v3.scptd |
— – Created by: Takaaki Naganoya – Created on: 2021/02/21 — – Copyright © 2021 Piyomaru Software, All Rights Reserved — use AppleScript version "2.7" use framework "Foundation" use scripting additions use jkLib : script "jyoyoKanjiLib" –常用漢字一覧を返してくるAppleScriptライブラリ script jsonStr property aJsonDict : missing value –JSONから読み取ったNSDictionary property jKanji : missing value –常用漢字データ(NSArray) end script property NSString : a reference to current application’s NSString property NSCountedSet : a reference to current application’s NSCountedSet property NSJSONSerialization : a reference to current application’s NSJSONSerialization property NSUTF8StringEncoding : a reference to current application’s NSUTF8StringEncoding –図形としての構成要素を指定して漢字検索(部首ではない) –set aRes to searchKanjiFromElementJ("木") of me –きへん? のぎへんや他のものも返ってくるよ –> {"椅", "植", "椎", "検", "頼", "漆", "鉢", …} –set bRes to searchKanjiFromElementJ("氵") of me –さんずい –> {"滴", "漁", "漂", "漆", "漏", "演", "漠",…} set dRes to searchKanjiFromElementJ("⻖") of me –>{"堕", "墜", "阪", "防", "阻", "附", "降"…} –検索に使える部首のキー文字の一覧を返す –set qList to listupQueryKeysForKanji() of me –> {"工", "棘", "左", "位", "婁", "攴", …} on searchKanjiFromElementJ(aQueryStr) if (aJsonDict of jsonStr) = missing value then my init() if (jKanji of jsonStr) = missing value then my initJ() set aRes to (aJsonDict of jsonStr)’s valueForKey:aQueryStr if aRes = missing value then return missing value set cArray to aRes’s arrayByAddingObjectsFromArray:(jKanji of jsonStr) set cRes to returnDuplicatesOnly(cArray) of me return cRes end searchKanjiFromElementJ on searchKanjiFromElement(aQueryStr) if (aJsonDict of jsonStr) = missing value then my init() set aRes to (aJsonDict of jsonStr)’s valueForKey:aQueryStr if aRes = missing value then return missing value return aRes as list end searchKanjiFromElement on listupQueryKeysForKanji() if (aJsonDict of jsonStr) = missing value then my init() set aRes to (aJsonDict of jsonStr)’s allKeys() return aRes as list end listupQueryKeysForKanji on initJ() set (jKanji of jsonStr) to current application’s NSArray’s arrayWithArray:(retJyouyouKanji() of jkLib) end initJ on init() –https://github.com/yagays/kanjivg-radical set aPath to (POSIX path of (path to me)) & "Contents/Resources/element2kanji.json" set jsonString to NSString’s alloc()’s initWithContentsOfFile:(aPath) encoding:(NSUTF8StringEncoding) |error|:(missing value) set jsonData to jsonString’s dataUsingEncoding:(NSUTF8StringEncoding) set (aJsonDict of jsonStr) to NSJSONSerialization’s JSONObjectWithData:jsonData options:0 |error|:(missing value) end init on returnDuplicatesOnly(anArray) set aSet to NSCountedSet’s alloc()’s initWithArray:anArray set bList to (aSet’s allObjects()) as list set dupList to {} repeat with i in bList set aRes to (aSet’s countForObject:i) if aRes > 1 then set the end of dupList to (contents of i) end if end repeat return dupList end returnDuplicatesOnly |
More from my site
(Visited 61 times, 1 visits today)