Menu

Skip to content
AppleScriptの穴
  • Home
  • Products
  • Books
  • Docs
  • Events
  • Forum
  • About This Blog
  • License
  • 仕事依頼

AppleScriptの穴

Useful & Practical AppleScript archive. Click '★Click Here to Open This Script' Link to download each AppleScript

Newt On Project〜Story Archive #8 コマンド、目的語、サブキーを認識

Posted on 10月 4 by Takaaki Naganoya

かなり「えせNewton」あらため「Newt On」の実装研究も進んできました。次の目標は、一般向けのデモが可能で一般ユーザーのウケがとれるレベルです。

ViaVoiceのMacOS X版がどの程度のパフォーマンスなのか、どの程度の新機軸を盛り込んでくるのか(こないのか)、現段階ではまだ未知数ですが、前回問題になったコマンド認識のインタバルは、少々長め(20 秒程度?)にするか、あるいはコマンド認識部の起動を明示的に行うようなことを考えるべきでしょう。

とりあえず、前回の続きをうけてデモ可能なレベルのものを仕上げてみることにします。
 

住所録「Names」の検索

普段使っているファイルメーカーProの住所録を、Newt Onから検索できるように考えてみました。基準となる検索キーワードは、

  河原さんを検索。

です。これで、住所録データベースに対して「河原」という名前で検索できるようになれば大丈夫でしょう。これをMicrosoft Word(以下、Word)で文節ごとに区切ると、

  --> {"河原", "さん", "を", "検索", "。"}

となります。いい感じですね♪

まずは、「検索」が入っているかどうかをチェックし、「検索アクション」であることを認識。次いで、目的語である「河原」を検出するために「さん」の位置(この場合だと2番目)をチェック。「さん」より前にあるワードはすべて検索対象の文字列とします。

あくまでこの基準用キーワードであれば、名前の途中で切れることなく、いっぱつで認識してくれますが、ちょっと長い名前……たとえば「長野谷」を与えて文節区切りをWordにやらせると……

  --> {"長野", "谷", "さん", "を", "検索","。"}

となってしまいます。そこで、「さん」より前にある語はすべて連結して検索対象にしてしまいましょう。

--目的語を検出/連結(人名が複数のwordにparseされるパターンに対応)

set objText to items headPos thru (resNum1 - 1) of bpText

set objText to objText as text --連結

だいたいの方針は固まってきました。コードもすぐに書けてしまいましたが、これだけで済むわけがありません。
データベース上に複数の「河原」さんがいたら困るので、最低限「どこの」河原さんなのかを指定したいところです。

そこで、「○○の」という言葉が「○○を」の前に存在したら(当然、ない場合もあるわけで)、サブキーとして認識させることにしました。

  東京都の河原さんを検索。

これで、データベースから氏名と住所で検索してくれます。実は、「○○の」という部分は、単にそのままうしろに「*」を付けて「東京都*」のようにして住所フィールドに突っ込んで検索しているだけなので、

  東京都渋谷区の河原さんを検索。

とか、

  東京都渋谷区初台の河原さんを検索。

のように、どんどん条件を長めに与えれば、データの絞り込み検索を行えることになります。
 

ある程度の呼称の「ゆらぎ」に対応

住所で検索できるわけですから、その部分をちょっといじくって、「男性の」、「女性の」というサブキーも強引に受け付けるようにしてみました。

if subKey is not equal to "" then

  if subKey is equal to "男性" then set cell "性別" of request 1 to "♂"

  if subKey is equal to "女性" then set cell "性別" of request 1 to "♀"

else

  set cell "会社住所" of request 1 to (subKey & "*")

end if

普通に住所で検索する前に、目的語自体を調べて処理を分岐させています。

  男性の河原さんを検索。

複数の河原さんの中から男性の人だけをピックアップします。これで一段落。

一息入れたあと、さらにコードを見直してみると、この目的語をピックアップする基準ワードが「さん」で固定されているので、

set resNum1 to searchItem(bpText, "さん") of me

処理自体をサブルーチン化して、「さん」の記述部分を変数に置き換え、

set resNum1 to searchItem(bpText, keishouText) of me

引数として基準キーワードを与え、柔軟に呼称(ここでは、目的語をピックアップするための目印)を変えられるよう、バージョンアップしてみました。

set kList to {{"さん", "姓"}, {"ちゃん", "名よみがな"}, {"課長", "姓"},
{"部長", "姓"}, {"社長", "姓"}, {"君", "姓"}, {"くん", "姓"}, {"様", "姓"}}



repeat with aKey in kList

 set gRes to stdDBserch(bpText, item 1 of aKey, item 2 of aKey) of me

 if gRes is not equal to "NG" then exit repeat

end repeat

「さん」、「ちゃん」、「課長」、「部長」、「社長」、「君」、「様」……と、一通り柔軟に対応。また、呼称の違いに応じて……

  河原さんを検索。→「姓」フィールドを検索
  みちおちゃんを検索。→「名よみがな」フィールドを検索

のように、検索対象フィールドを動的に変更できるようにしてみました。動的に変更しつつ、設定してあるキーワードで目的語を検出して検索を行います。条件でヒットしなかったら、次のキーワードを(総当たりで)試すことになります。

しかし、ここで問題発生!!

ヒットした件数を数えるのに、(↑)のような単純なコードを書いてみたところ、「オブジェクトが見つからない」エラーが発生。しかし普通、この程度でエラーが出るわけがありません。

そこで、ものは試しとデベロッパー向けに配布開始されたAppleScript 1.8.2β3を入れてみたところ……なにごともなかったかのように、きちんと動くようになりました。

まだ、完熟途上にあるMacOS X上のAppleScript……デモを行う場合には、こうしたこまかなバージョンの違いが大きく響いてくることを肝に銘じておかなければならないでしょう(汗)。

とりあえず、ダウンロードできるものを用意して
みました。試せる環境のある方は、お試しを(67K)
 
 

ハードルを超えたら次の問題……

これで、もしViaVoiceからの文字入力をMicrosoft Wordに行って、コマンド解釈プログラムをキックすれば、その内容に従ってデータベースの検索を行ってくれます。検索だけでなく、メールの組み立てさえも、すぐに実現できることでしょう。

しかし、ここで問題が2つあります。

1つは、ViaVoiceで入力を行うため……キーボードからの入力にくらべて(聞き取りミスの訂正などで)入力に時間がかかる可能性があるということです。

定期的にWordの文章に問い合わせを行うようなスタイルは合わないことでしょう。最悪の場合には、Wordが単独でクラッシュするかもしれません(MacOS Xになって、何か不具合が起きても該当するアプリケーションが落ちるだけなので……安定性とひきかえに、スクリプト側でつぶさにプロセスの存在チェックを行う必要が出てきて、なかなかたいへんです)。

キーボードからキックしてもよいのですが、まだMacOS 9.xのようにショートカットを強引にメニューに加えるようなプログラムが(あるにはあるものの)安定して利用できるか分からないので、ショートカットでは呼び出せません。

とりあえず考えているのは、グリフィンテクノロジーの「PowerMate」をUSBポートに取り付けて、このドライバでクリック時のアクションにAppleScriptの実行を割り付け、実行をキックさせようというものです。

もうひとつの問題は……こちらのほうが、テーマとしては大きく……データベースで複数のデータがヒットした場合に、その結果表示なり選択肢なりを、コンソールであるMicrosoft Wordにメッセージとして返す必要があるということです。

Microsoft Wordからデータを抜き出す(正確にいえばコピーしてくる)AppleScriptは割と簡単ですが、書き戻すコードは少々考えなくてはなりません。
 
とはいえ、本プロジェクトが始動したとき、誰がこのレベルまで到達することを想像しえたでしょうか? 技術的な検討課題を抱えながらも、第1段階のNewt Onとしてはほぼ評価に値する機能レベルに到達してきました。セッティングさえミスしなければ、デモを行っても十分によい反応が得られることでしょう。

入力された日本語のテキストから、コマンドを検出して……そのアクションを具体的にどのように行うかの装飾語句を検出。データベースの検索を行えるようになりました。

最終的な仕上がりを考えたときには、住所録データベース(Newtonに準じて「Names」と命名)にまだ検索履歴を付けていないので、この履歴処理のあたりも考えてみる必要があることでしょう。

(Visited 1 times, 1 visits today)
Posted in Natural Language Processing Newt On Project | Tagged 10.1savvy | Leave a comment

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

電子書籍(PDF)をオンラインストアで販売中!

Google Search

Popular posts

  • Numbersで選択範囲のセルの前後の空白を削除
  • macOS 26, Tahoe
  • macOS 15でも変化したText to Speech環境
  • KagiのWebブラウザ、Orion
  • Script Debuggerの開発と販売が2025年に終了
  • 【続報】macOS 15.5で特定ファイル名パターンのfileをaliasにcastすると100%クラッシュするバグ
  • macOS 15 リモートApple Eventsにバグ?
  • NSObjectのクラス名を取得 v2.1
  • 2024年に書いた価値あるAppleScript
  • 有害ではなくなっていたSpaces
  • macOS 15:スクリプトエディタのAppleScript用語辞書を確認できない
  • Pixelmator Proがv3.6.8でHDR画像をサポート
  • Xcode上のAppleScriptObjCのプログラムから、Xcodeのログ欄へのメッセージ出力を実行
  • (確認中)AppleScript Dropletのバグっぽい動作が解消?
  • AVSpeechSynthesizerで読み上げテスト
  • AppleScript Dropletのバグっぽい動作が「復活」(macOS 15.5β)
  • 指定フォルダ以下の画像のMD5チェックサムを求めて、重複しているものをピックアップ
  • macOS 26, 15.5でShortcuts.app「AppleScriptを実行」アクションのバグが修正される
  • Numbersで選択中の2列のセルを比較して並べ直して書き戻す v2
  • Script DebuggerがmacOS 15.x上で起動せず→起動

Tags

10.11savvy (1101) 10.12savvy (1242) 10.13savvy (1391) 10.14savvy (587) 10.15savvy (438) 11.0savvy (283) 12.0savvy (212) 13.0savvy (204) 14.0savvy (159) 15.0savvy (151) CotEditor (66) Finder (52) Keynote (119) NSAlert (61) NSArray (51) NSBitmapImageRep (20) NSBundle (20) NSButton (34) NSColor (53) NSDictionary (28) NSFileManager (23) NSFont (21) NSImage (41) NSJSONSerialization (21) NSMutableArray (63) NSMutableDictionary (22) NSPredicate (36) NSRunningApplication (56) NSScreen (30) NSScrollView (22) NSString (119) NSURL (98) NSURLRequest (23) NSUTF8StringEncoding (30) NSView (33) NSWorkspace (20) Numbers (76) Pages (56) Pixelmator Pro (20) Safari (44) Script Editor (27) WKUserContentController (21) WKUserScript (20) WKWebView (23) WKWebViewConfiguration (22)

カテゴリー

  • 2D Bin Packing
  • 3D
  • AirDrop
  • AirPlay
  • Animation
  • AppleScript Application on Xcode
  • Beginner
  • Benchmark
  • beta
  • Bluetooth
  • Books
  • boolean
  • bounds
  • Bug
  • Calendar
  • call by reference
  • check sum
  • Clipboard
  • Cocoa-AppleScript Applet
  • Code Sign
  • Color
  • Custom Class
  • date
  • dialog
  • diff
  • drive
  • Droplet
  • exif
  • file
  • File path
  • filter
  • folder
  • Font
  • Font
  • GAME
  • geolocation
  • GUI
  • GUI Scripting
  • Hex
  • History
  • How To
  • iCloud
  • Icon
  • Image
  • Input Method
  • Internet
  • iOS App
  • JavaScript
  • JSON
  • JXA
  • Keychain
  • Keychain
  • Language
  • Library
  • list
  • Locale
  • Localize
  • Machine Learning
  • Map
  • Markdown
  • Menu
  • Metadata
  • MIDI
  • MIME
  • Natural Language Processing
  • Network
  • news
  • Newt On Project
  • Noification
  • Notarization
  • Number
  • Object control
  • OCR
  • OSA
  • parallel processing
  • PDF
  • Peripheral
  • process
  • PRODUCTS
  • QR Code
  • Raw AppleEvent Code
  • Record
  • rectangle
  • recursive call
  • regexp
  • Release
  • Remote Control
  • Require Control-Command-R to run
  • REST API
  • Review
  • RTF
  • Sandbox
  • Screen Saver
  • Script Libraries
  • Scripting Additions
  • sdef
  • search
  • Security
  • selection
  • shell script
  • Shortcuts Workflow
  • Sort
  • Sound
  • Spellchecker
  • Spotlight
  • SVG
  • System
  • Tag
  • Telephony
  • Text
  • Text to Speech
  • timezone
  • Tools
  • Update
  • URL
  • UTI
  • Web Contents Control
  • WiFi
  • XML
  • XML-RPC
  • イベント(Event)
  • 未分類

アーカイブ

  • 2025年10月
  • 2025年9月
  • 2025年8月
  • 2025年7月
  • 2025年6月
  • 2025年5月
  • 2025年4月
  • 2025年3月
  • 2025年2月
  • 2025年1月
  • 2024年12月
  • 2024年11月
  • 2024年10月
  • 2024年9月
  • 2024年8月
  • 2024年7月
  • 2024年6月
  • 2024年5月
  • 2024年4月
  • 2024年3月
  • 2024年2月
  • 2024年1月
  • 2023年12月
  • 2023年11月
  • 2023年10月
  • 2023年9月
  • 2023年8月
  • 2023年7月
  • 2023年6月
  • 2023年5月
  • 2023年4月
  • 2023年3月
  • 2023年2月
  • 2023年1月
  • 2022年12月
  • 2022年11月
  • 2022年10月
  • 2022年9月
  • 2022年8月
  • 2022年7月
  • 2022年6月
  • 2022年5月
  • 2022年4月
  • 2022年3月
  • 2022年2月
  • 2022年1月
  • 2021年12月
  • 2021年11月
  • 2021年10月
  • 2021年9月
  • 2021年8月
  • 2021年7月
  • 2021年6月
  • 2021年5月
  • 2021年4月
  • 2021年3月
  • 2021年2月
  • 2021年1月
  • 2020年12月
  • 2020年11月
  • 2020年10月
  • 2020年9月
  • 2020年8月
  • 2020年7月
  • 2020年6月
  • 2020年5月
  • 2020年4月
  • 2020年3月
  • 2020年2月
  • 2020年1月
  • 2019年12月
  • 2019年11月
  • 2019年10月
  • 2019年9月
  • 2019年8月
  • 2019年7月
  • 2019年6月
  • 2019年5月
  • 2019年4月
  • 2019年3月
  • 2019年2月
  • 2019年1月
  • 2018年12月
  • 2018年11月
  • 2018年10月
  • 2018年9月
  • 2018年8月
  • 2018年7月
  • 2018年6月
  • 2018年5月
  • 2018年4月
  • 2018年3月
  • 2018年2月

https://piyomarusoft.booth.pm/items/301502

メタ情報

  • ログイン
  • 投稿フィード
  • コメントフィード
  • WordPress.org

Forum Posts

  • 人気のトピック
  • 返信がないトピック

メタ情報

  • ログイン
  • 投稿フィード
  • コメントフィード
  • WordPress.org
Proudly powered by WordPress
Theme: Flint by Star Verte LLC