Keynote書類内のテキストアイテムのうち、どの程度が英語で書かれているかを計算するAppleScriptです。macOS 10.14以降で動作します。
日本語で書いた本を英語に翻訳しているわけですが、進捗を確認するのに自分でページを見ながら確認する作業が地味に大変です。そこで、この大変な作業をAppleScriptで自動処理することにしました。最終的なチェックは目視で行う必要がありますが、翻訳済みのテキストがどの程度あるかをテキストアイテムの個数ベースで(文章の長さは考慮せず)自動計算します。
AppleScriptでKeynote書類中のテキストアイテム中のテキストをすべて取得し、言語を自動判定して英語化率(≒英訳作業の進捗率)を計算してみました。
▲Script Debugger v8で実行したところ。Dark Modeへの対応が嬉しいが、全体的に動作が重い
日本語と英語以外にいろいろ意図しない言語判定されているテキストアイテムが存在していますが、そんな言語は書いていないのでおおよそ英語ブロックでしょう。
いま英語化率は80%と出ていますが、誤判定もあるはずなので、最後の最後は目視判定が必要と思われます。あとは、日本語フォントが指定されている箇所をクリーニングして、英語フォントに指定し直す作業も必要です。
開発マシンでmacOS 10.14.6+Keynote 10.1の環境で、139ページある「FileMaker Pro Scripting Book」の全テキスト判定に3.9秒ほどかかります。速度面でとくに不満はありませんが、こういう処理をM1 Macで行うとどの程度の速度になるのかには興味があります。
FileMaker選手権に応募した作品が入賞すれば、開発マシンの更新も可能かもしれませんが……勝負は時の運ということで。
▲まだ日本語の文章がまだらに残っているページ。ただ、オリジナルの日本語版をもとに日本語の本のルールでページ順を設定しているので、「本当にこれでいいのか?」(奥付が最終ページにある日本スタイルそのまま、とか)とは思っています
AppleScript名:最前面のKeynote書類のテキストアイテムの英語化率を求める.scptd |
— – Created by: Takaaki Naganoya – Created on: 2021/01/27 — – Copyright © 2021 Piyomaru Software, All Rights Reserved — use AppleScript version "2.7" — High Sierra (10.13) or later use framework "Foundation" use framework "NaturalLanguage" –Mojave (10.14) or later use scripting additions tell application "Keynote" set dCount to count every document if dCount = 0 then display notification "There is no Keynote document" return {} end if end tell set tOut to {} set erOut to {} tell application "Keynote" tell front document set sCount to count every slide repeat with i from 1 to sCount tell slide i set tList to every text item repeat with i in tList set aTmpStr to object text of i if aTmpStr is not equal to "" then set b1Res to guessLanguageCodeOf(aTmpStr) of me set the end of tOut to b1Res (* if b1Res is not equal to "en" then set the end of erOut to aTmpStr else set the end of tOut to b1Res end if *) end if end repeat end tell end repeat end tell end tell set tPercent to calcOneItemsPercent(tOut, "en") of me on guessLanguageCodeOf(theString as string) set aNL to current application’s NLLanguageRecognizer’s alloc()’s init() aNL’s processString:theString set langRes to (aNL’s dominantLanguage()) as string return langRes end guessLanguageCodeOf –true/falseで構成されるlistのうち、指定要素が占める割合を%で計算。小数点以下を四捨五入 on calcOneItemsPercent(aList, targItem) set aLen to length of aList set theCountedSet to current application’s NSCountedSet’s alloc()’s initWithArray:aList set tRes to (theCountedSet’s countForObject:targItem) if tRes < 1 then return 0 set pRes to (tRes / aLen) * 100 return (round pRes rounding as taught in school) end calcOneItemsPercent |
2021年に書いた価値あるAppleScript – AppleScriptの穴 says:
[…] した。日本語のまま 1/28 最前面のKeynote書類のテキストアイテムの英語化率を求める […]