現在作成中のアプリケーションの副産物として生まれた「common elements Lib」AppleScript Libraryです。2つの単語の共通要素を計算して返します。
# v1.1にアップデートしました(ダウンロード先URLはかわらず)。ページ下部のテンプレート部分の余計なリンクを拾わないように改善したため、テンプレート部分のリンクが多い項目に対して大きな効果を発揮します
アーカイブをダウンロードして展開し、~/Library/Script Librariesフォルダに「common elements Lib.scptd」を入れるとAppleScriptから呼び出せるようになります。
macOS 10.10以降で動作するはずですが、開発は10.14上で、動作確認は10.13/10.14/10/15上でのみ行なっています。
この、2つのキーワードの共通要素を求める処理は「マッキー演算」と呼んでおり、男性アイドルグループ「SMAP」と、男性シンガーソングライター「槇原敬之」(マッキー)氏の共通要素を演算で求めることを目的として企画されました。「SMAP」はWikipedia上でも最大級の要素数を持つ項目であり、1,400項目以上のリンク要素を擁しています。
Wikipedia REST APIの仕様ではリンク要素を500項目までしか一度に取得できません。SMAPを処理するためには、複数ページにまたがるリンク取得の処理をこなすことが必要であり、「マッキー演算」は言葉のバカっぽさとは裏腹に、それなりの技術力が要求される、そこそこむずかしい処理なのです。
本ライブラリを用いて、WikipeidaにREST API経由で検索司令を出すわけですが、英語のスペルの単語を受け付けるWikipediaもあれば、日本語やアラビア語Wikipediaなどのようにその言語向けの書き換えを行ったデータで検索するものもあり、割とまちまちであることがわかりました。そのあたりは、sdefに書いておいたサンプルScriptを見ていただくのがよいでしょう。
本ライブラリでは、演算対象とする単語はWikipediaに掲載されているものに限られています。実際に、日本語環境で「スティーブ・ジョブズ」と「ラリー・テスラー」の共通項目を計算すると、
--> {"パロアルト研究所", "Smalltalk", "アメリカ合衆国", "Lisa (コンピュータ)", "アップル・ニュートン", "Macintosh", "アップル (企業)", "Macworld", "スタンフォード大学"}
「スティーブ・ジョブズ」と「ロス・ペロー」の共通項目を計算すると、
--> {"NeXT", "アル・ゴア", "統合典拠ファイル", "実業家", "IBM", "ゼネラルモーターズ", "SNAC", "アメリカ合衆国", "国際標準名称識別子", "孫正義", "ソフトバンク", "国立国会図書館", "フランス国立図書館", "アメリカ議会図書館管理番号", "CiNii", "バーチャル国際典拠ファイル"}
のような結果を返してきます。
冒頭で述べた「SMAP」と「槇原敬之」の共通項目を計算すると、
--> {"スポーツニッポン", "ABO式血液型", "テレビ朝日", "東京都", "社長", "エフエム東京", "ミュージックステーション", "J-POP", "第42回NHK紅白歌合戦", "大阪城ホール", "日本", "We are SMAP!", "ミリオンセラー", "小倉博和", "インターネットアーカイブ", "日本武道館", "ニッポン放送", "リクルートホールディングス", "日刊スポーツ", "第58回NHK紅白歌合戦", "フジテレビジョン", "世界に一つだけの花"}
のようになります。
おおよその主要言語に対応していますが、ロシア語をはじめとするキリル文字の言語を指定すると、なぜか結果が返ってきません。これが、キリル文字のエンコーディングに関する(こちら側の実装がまずい)問題なのか、サーバー側がREST APIをサポートしていないのか(Wikipediaサーバー側の問題)はわかりません。
→ ロシア語のクエリーも処理できることを確認しました
ここでは、だいたいの「いい感じのキーワード」を例として出していますが「George Lucas」と「Steven Spielberg」などの近い単語を指定すると結果が400個以上返ってきます。
→ v1.1における改良により、400個以上のリンクを66個まで減少させました(不要なフッター部分のリンクを拾わないようにした)
膨大な項目から必要な要素を選択するInterfaceをみつくろってテストをしてはいるのですが、iOS上でよさそうに見えてもMac上で動かすといまひとつだったり、なかなか合うものが見つかりません(超多項目選択UI)。
こうした計算結果をもっと減らす方法や、これらの多項目の計算結果からGUI上で項目選択する方法などが自分たちでは見つからなかったので、ライブラリとして公開して広く意見やアイデアを募ろうと考えました。多言語のWikipediaへの問い合わせを行ったり、問題点を洗い出すことも目的の1つです。前述のとおり、ロシア語系のWikipediaに対するアクセスに問題がある点については調査が必要です。
余談ですが、Steve JobsとLarry Teslerの関連項目演算を行おうとしても、Larry Teslerの項目がなかったり、Xerox PARCへのリンクがないために演算結果にこれが含まれない言語のWikipediaがいくつか見られました。コンピュータ史上重要な偉人への敬意をこめ、ぜひ追記していただきたいと考えるものです(という話を日本語で書いても意味がない?)。
AppleScript name:sample.scptd |
— – Created by: Takaaki Naganoya – Created on: 2020/02/28 — – Copyright © 2020 Piyomaru Software, All Rights Reserved — http://www.piyocast.com use comLib : script "common elements Lib" –English set aWord to "Steve Jobs" set bWord to "Larry Tesler" set commonResEN to list up common elements with {aWord, bWord} with language "en" –> {"The New York Times", "Computer History Museum", "Alan Kay", "International Standard Book Number", "California", "Steve Jobs", "Computer mouse", "John Markoff", "Ethernet", "Stanford University", "Counterculture of the 1960s", "Fortune (magazine)", "Tablet computer", "Apple Lisa", "Apple Inc.", "Associated Press", "Graphical user interface", "International Standard Serial Number", "Apple Computer", "Macintosh 128K", "Xerox Alto"} –日本語(Japanese) set aWord to "スティーブ・ジョブズ" –Steve Jobs set bWord to "ラリー・テスラー" –Larry Tesler set commonResJP to list up common elements with {aWord, bWord} with language "jp" –> {"パロアルト研究所", "Smalltalk", "アメリカ合衆国", "Lisa (コンピュータ)", "アップル・ニュートン", "Macintosh", "アップル (企業)", "Macworld", "スタンフォード大学"} –中文(Simplified Chinese) set aWord to "史蒂夫·乔布斯" –Steve Jobs set bWord to "拉里·泰斯勒" –Larry Tesler set commonResZH to list up common elements with {aWord, bWord} with language "zh" –> {"母校", "美國", "帕羅奧多研究中心"} —한국어(Korean) set aWord to "스티브 잡스" –Steve Jobs set bWord to "빌 게이츠" –Bill Gates set commonResKO to list up common elements with {aWord, bWord} with language "ko" —> {"가상 국제 전거 파일", "위키인용집", "게마인자메 노름다타이", "네덜란드 왕립도서관", "국제 표준 도서 번호", "IBM", "SNAC", "CiNii", "개인용 컴퓨터", "BIBSYS", "영어", "국제 표준 명칭 식별자", "오스트레일리아 국립도서관", "LIBRIS", "체코 국립도서관", "미국", "스페인 국립도서관", "뮤직브레인즈", "프랑스 국립도서관", "이스라엘 국립도서관", "일본 국립국회도서관", "미국 의회도서관 제어 번호", "전거 통제", "국립중앙도서관", "WorldCat Identities", "실리콘 밸리의 신화", "프랑스 대학도서관 종합목록", "위키미디어 공용"} –svenska set aWord to "Steve Jobs" set bWord to "Ross Perot" set commonResSV to list up common elements with {aWord, bWord} with language "sv" –> {"USA", "IBM", "Forbes", "Entreprenör", "Libris (bibliotekskatalog)"} –Deutsch set aWord to "Steve Jobs" set bWord to "Larry Tesler" set commonResDE to list up common elements with {aWord, bWord} with language "de" –> {"Objektorientierte Programmierung", "Apple", "Apple Macintosh", "Xerox PARC", "Virtual International Authority File", "The New York Times", "Kalifornien", "Apple Lisa"} –français set aWord to "Steve Jobs" set bWord to "Larry Tesler" set commonResFR to list up common elements with {aWord, bWord} with language "fr" –> {"The New York Times", "Palo Alto Research Center", "Informaticien", "Californie", "Apple", "États-Unis", "Autorité (sciences de l’information)"} –Nederlands set aWord to "Steve Jobs" set bWord to "Larry Tesler" set commonResNL to list up common elements with {aWord, bWord} with language "nl" –> {"Verenigde Staten (hoofdbetekenis)", "Palo Alto Research Center", "Apple Macintosh", "Xerox", "Apple Inc.", "Apple Lisa", "Apple Newton"} –italiano set aWord to "Steve Jobs" set bWord to "Larry Tesler" set commonResIT to list up common elements with {aWord, bWord} with language "it" –>{"Apple", "Stati Uniti d’America", "Xerox Palo Alto Research Center", "Informatico"} –español set aWord to "Steve Jobs" set bWord to "Ross Perot" set commonResES to list up common elements with {aWord, bWord} with language "es" –> {"Emprendedor", "Library of Congress Control Number", "Wikidata", "IBM", "Enciclopedia Británica", "Wikimedia Commons", "Empresario", "CiNii", "National Diet Library", "Estados Unidos", "National Library of the Czech Republic", "Virtual International Authority File", "Bibliothèque nationale de France", "International Standard Name Identifier", "Integrated Authority File", "Système universitaire de documentation", "ISBN"} –polski set aWord to "Steve Jobs" set bWord to "Larry Tesler" set commonResPL to list up common elements with {aWord, bWord} with language "pl" –> {"Apple Inc.", "Virtual International Authority File", "Xerox PARC"} –Tiếng Việt set aWord to "Steve Jobs" set bWord to "Larry Tesler" set commonResVI to list up common elements with {aWord, bWord} with language "vi" –> {"Hoa Kỳ", "Apple Lisa", "California", "Apple Inc."} –Arabic set aWord to "ستيف جوبز" set bWord to "روس بيرو" set commonResAR to list up common elements with {aWord, bWord} with language "ar" –> {"مكتبة البرلمان الوطني", "رقم الضبط في مكتبة الكونغرس", "رائد أعمال", "المكتبة الوطنية لجمهورية التشيك", "ملف استنادي متكامل", "ملف استنادي دولي افتراضي", "المكتبة الوطنية الفرنسية", "سايني", "ديل", "آي بي إم", "لغة إنجليزية", "ضبط استنادي", "حزب سياسي", "مهنة", "مدرسة أم", "واي باك مشين", "الولايات المتحدة", "المحدد المعياري الدولي للأسماء", "دولار أمريكي"} –português set aWord to "Steve Jobs" set bWord to "Larry Tesler" set commonResPT to list up common elements with {aWord, bWord} with language "pt" –> {"Macintosh", "Alan Kay", "Apple Newton", "Povo dos Estados Unidos", "Língua inglesa", "Estados Unidos", "Ciência da computação", "Apple", "Califórnia", "Base Virtual Internacional de Autoridade"} –Català set aWord to "Steve Jobs" set bWord to "Larry Tesler" set commonResCA to list up common elements with {aWord, bWord} with language "ca" –> {"Control d’autoritats", "Virtual International Authority File", "Apple Macintosh", "Apple Inc", "Interfície gràfica d’usuari"} –Bahasa Indonesia set aWord to "Steve Jobs" set bWord to "Larry Tesler" set commonResNO to list up common elements with {aWord, bWord} with language "id" –> {"California", "Biografi", "Amerika Serikat"} –magyar set aWord to "Steve Jobs" set bWord to "Larry Tesler" set commonResHU to list up common elements with {aWord, bWord} with language "hu" –> {"Amerikai Egyesült Államok", "Informatikus", "Wikimédia Commons", "Stanford Egyetem", "Nemzetközi Virtuális Katalógustár"} –euskara set aWord to "Steve Jobs" set bWord to "Larry Tesler" set commonResEU to list up common elements with {aWord, bWord} with language "eu" –> {"Xerox", "Informatikari", "Ingeles", "Apple Inc.", "Ameriketako Estatu Batuak", "Wikidata", "Smalltalk", "Virtual International Authority File", "Stanford Unibertsitatea", "Wikimedia Commons"} –Türkçe set aWord to "Steve Jobs" set bWord to "Larry Tesler" set commonResTR to list up common elements with {aWord, bWord} with language "tr" –> {"The New York Times", "Apple", "Amerika Birleşik Devletleri", "Kaliforniya"} |
AppleScript name:sample2 |
— – Created by: Takaaki Naganoya – Created on: 2020/02/28 — – Copyright © 2020 Piyomaru Software, All Rights Reserved — http://www.piyocast.com use comLib : script "common elements Lib" set sList to supported lang codes –> {"en", "ceb", "sv", "de", "fr", "nl", "ru", "it", "es", "pl", "war", "vi", "jp", "zh", "ar", "pt", "uk", "fa", "ca", "sr", "no", "id", "ko", "fi", "hu", "sh", "cs", "ro", "eu", "tr", "ms", "eo", "hy", "bg", "he", "da", "ce", "zh-min-nan", "sk", "kk", "min", "hr", "et", "lt", "be", "el", "azb", "sl", "gl", "az", "simple", "ur", "nn", "hi", "th", "ka", "uz", "la", "ta", "vo", "arz", "cy", "mk", "tg", "lv", "ast", "mg", "tt", "af", "oc", "bs", "bn", "ky", "sq", "zh-yue", "tl", "new", "te", "be-tarask", "br", "ml", "pms", "nds", "su", "ht", "lb", "jv", "sco", "mr", "sw", "pnb", "ga", "szl", "ba", "is", "my", "fy", "cv", "lmo", "an", "ne", "pa", "yo", "bar", "io", "gu", "wuu", "als", "ku", "scn", "kn", "ckb", "bpy", "ia", "qu", "mn", "bat-smg", "vec", "wa", "si", "or", "cdo", "gd", "yi", "am", "nap", "ilo", "bug", "xmf", "mai", "hsb", "map-bms", "fo", "diq", "mzn", "sd", "li", "eml", "sah", "nv", "os", "sa", "ps", "ace", "mrj", "frr", "zh-classical", "mhr"} –"ru", "uk", "sh", "bg" seems not to work… "ms" or later codes seems not to work (depends on Wikipedia Server spec)…. |
Kamenoko、Mac App Storeで販売開始 – AppleScriptの穴 says:
[…] 「2つのキーワードの共通要素をリストアップする」プログラムはこのKamenokoの部品用に作ったもので、単体ではそれなりに有用な部品ではあるものの、本アプリケーションにどのよう […]