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

タグ: 10.13savvy

2つの1D List同士の消し込み

Posted on 2月 7, 2018 by Takaaki Naganoya
AppleScript名:2つの1D List同士の消し込み
— Created 2017-10-29 by Takaaki Naganoya
— 2017 Piyomaru Software
use AppleScript version "2.4"
use scripting additions
use framework "Foundation"

set list1 to {5, 1, 2, 3, 1, 6, 2, 7, 8, 2, 6, 5, 4}
set list2 to {6, 7, 8}
set result1 to my removeItemsInList:list2 fromList:list1
–>  {​​​​​5, ​​​​​3, ​​​​​1, ​​​​​4, ​​​​​2​​​}

set result2 to removeItems for list2 from list1
–>  {5, 3, 1, 4, 2}

set result3 to removeItemsFrom(list1, list2) of me
–>  {5, 3, 1, 4, 2}

–Objective-Cライクなパラメータ記述
on removeItemsInList:list2 fromList:list1
  set set2 to current application’s NSSet’s setWithArray:list2
  
set set1 to current application’s NSMutableSet’s setWithArray:list1
  
set1’s minusSet:set2
  
return (set1’s allObjects()) as list
end removeItemsInList:fromList:

–無意味区による装飾
on removeItems for list2 from list1
  return my removeItemsInList:list2 fromList:list1
end removeItems

–Pure AS風のパラメータ記述
on removeItemsFrom(list1, list2)
  return my removeItemsInList:list2 fromList:list1
end removeItemsFrom

★Click Here to Open This Script 

Posted in list | Tagged 10.11savvy 10.12savvy 10.13savvy | Leave a comment

指定要素のみを削除(predicateでfilter) v3

Posted on 2月 7, 2018 by Takaaki Naganoya
AppleScript名:指定要素のみを削除(predicateでfilter) v3
— Created 2017-11-03 by Takaaki Naganoya
— Modified 2017-11-05 by Shane Stanley
use AppleScript version "2.4"
use scripting additions
use framework "Foundation"
use framework "AppKit"

property NSPredicate : a reference to current application’s NSPredicate
property NSArray : a reference to current application’s NSArray

set aList to {"Apple", "Lemon", "Aple", "Lum", "Apple"}
set aTarg to "Apple" –string
set rList to removeElementsFrom1DArray(aList, aTarg) of me
–>  {"Lemon", "Aple", "Lum"}

set bList to {1, 2, 3, 1, 5}
set bTarg to 1 –number
set rList to removeElementsFrom1DArray(bList, bTarg) of me
–>  {​​​​​2, ​​​​​3, ​​​​​5​​​}

set cList to {1, 2, 3, 1, 5}
set cTarg to {1, 2, 3} –list of number
set rList to removeElementsFrom1DArray(cList, cTarg) of me
–>  {​​​​​5​​​}

set dList to {"Apple", "Lemon", "Aple", "Lum", "Apple"}
set dTarg to {"Apple", "Lemon"} –list of string
set rList to removeElementsFrom1DArray(dList, dTarg) of me
–>  {​​​​​"Aple", ​​​​​"Lum"​​​}

on removeElementsFrom1DArray(aList as list, aTarg as {number, string, list})
  set anArray to NSArray’s arrayWithArray:aList
  
  
set aClass to class of aTarg
  
if aClass = list then
    set thePred to NSPredicate’s predicateWithFormat_("NOT SELF IN %@", aTarg)
  else
    set thePred to NSPredicate’s predicateWithFormat_("SELF != %@", aTarg)
  end if
  
  
set bList to (anArray’s filteredArrayUsingPredicate:thePred) as list
  
  
return bList
end removeElementsFrom1DArray

★Click Here to Open This Script 

Posted in list | Tagged 10.11savvy 10.12savvy 10.13savvy | Leave a comment

1D List中のアイテムが指定リストに入っていたら抽出

Posted on 2月 7, 2018 by Takaaki Naganoya
AppleScript名:1D List中のアイテムが指定リストに入っていたら抽出
— Created 2017-11-03 by Takaaki Naganoya
— 2017 Piyomaru Software
use AppleScript version "2.4"
use scripting additions
use framework "Foundation"

property NSPredicate : a reference to current application’s NSPredicate
property NSArray : a reference to current application’s NSArray

set aList to {"Apple", "Lemon", "Apple", "Water Melon"}
set aTarg to {"Apple", "Lemon"} –データの表記ゆらぎ対策に使える?

set anArray to NSArray’s arrayWithArray:aList
set aPred to NSPredicate’s predicateWithFormat_("SELF IN %@", aTarg)
set bRes to (anArray’s filteredArrayUsingPredicate:aPred) as list
–>  {​​​​​"Apple", ​​​​​"Lemon", ​​​​​"Apple"​​​}

★Click Here to Open This Script 

Posted in list | Tagged 10.11savvy 10.12savvy 10.13savvy | Leave a comment

1D Listから条件抽出(正規表現2)

Posted on 2月 7, 2018 by Takaaki Naganoya
AppleScript名:1D Listから条件抽出(正規表現2)
— Created 2017-11-03 by Takaaki Naganoya
— 2017 Piyomaru Software
use AppleScript version "2.4"
use scripting additions
use framework "Foundation"
–http://piyocast.com/as/archives/4949

property NSPredicate : a reference to current application’s NSPredicate
property NSArray : a reference to current application’s NSArray

set aList to {"123456789X", "9876x", "987654321x", "1234567890", "12345X", "1234567890X", "999999999X", "1111111111", "222222222X"}

set anArray to NSArray’s arrayWithArray:aList

set aPred to NSPredicate’s predicateWithFormat:"SELF MATCHES ’\\\\d{10}|\\\\d{9}[Xx]’"
set bRes to (anArray’s filteredArrayUsingPredicate:aPred) as list
–>  {"123456789X", "987654321x", "1234567890", "999999999X", "1111111111", "222222222X"}

★Click Here to Open This Script 

Posted in list | Tagged 10.11savvy 10.12savvy 10.13savvy | Leave a comment

1D Listから条件抽出(正規表現1)

Posted on 2月 7, 2018 by Takaaki Naganoya
AppleScript名:1D Listから条件抽出(正規表現1)
— Created 2017-11-03 by Takaaki Naganoya
— 2017 Piyomaru Software
use AppleScript version "2.4"
use scripting additions
use framework "Foundation"
–http://piyocast.com/as/archives/4949

property NSPredicate : a reference to current application’s NSPredicate
property NSArray : a reference to current application’s NSArray

set aList to {"TATACCATGGGCCATCATCATCATCATCATCATCATCATCATCACAG", "CGGGATCCCTATCAAGGCACCTCTTCG", "CATGCCATGGATACCAACGAGTCCGAAC", "CAT", "CATCATCATGTCT", "DOG"}

set anArray to NSArray’s arrayWithArray:aList

set aPred to NSPredicate’s predicateWithFormat:"SELF MATCHES ’.*(CAT){3,}(?!CA).*’"
set bRes to (anArray’s filteredArrayUsingPredicate:aPred) as list
–>  {​​​​​"CATCATCATGTCT"​​​}

★Click Here to Open This Script 

Posted in list | Tagged 10.11savvy 10.12savvy 10.13savvy | Leave a comment

2D Listから条件抽出(パラメータ外部指定)

Posted on 2月 7, 2018 by Takaaki Naganoya
AppleScript名:2D Listから条件抽出(パラメータ外部指定)
— Created 2017-11-03 by Takaaki Naganoya
— 2017 Piyomaru Software
use AppleScript version "2.4"
use scripting additions
use framework "Foundation"

property NSPredicate : a reference to current application’s NSPredicate
property NSArray : a reference to current application’s NSArray

set aList to {{"Apple", 2}, {"Lemon", 3}, {"Apple", 4}, {"Water Melon", 2}}
set aTarg to {"Apple", 2}

set anArray to NSArray’s arrayWithArray:aList

set aPred to NSPredicate’s predicateWithFormat_("SELF[0] = %@ && SELF[1] >= %@", item 1 of aTarg, item 2 of aTarg)
set bRes to (anArray’s filteredArrayUsingPredicate:aPred) as list
–>  {​​​​​{​​​​​​​"Apple", ​​​​​​​2​​​​​}, ​​​​​{​​​​​​​"Apple", ​​​​​​​4​​​​​}​​​}

★Click Here to Open This Script 

Posted in list | Tagged 10.11savvy 10.12savvy 10.13savvy | Leave a comment

2D List中の特定アイテムが指定リストに入っていたら抽出

Posted on 2月 7, 2018 by Takaaki Naganoya

2D List(2次元配列)からの条件抽出です。

Predicates文で対象を指定できるので、表記は手軽だし簡潔に記述できるのですが、実行速度がいまひとつです。

AppleScriptの処理系はGUIアプリケーションとのプロセス間通信を行わないかぎりは、処理系が(いまとなっては)コンパクトなため相当に高速に処理してくれるので(大規模データの扱いに難はありますが)、AppleScriptの単純ループ処理で抽出したほうがCocoa呼び出しよりも高速というケースが多々あります。

数万件規模のデータになるとCocoaの機能を用いるべきですが、ごくごく小規模なデータを扱う(1万件以下)場合であれば、AppleScriptの単純ループ処理のほうが高速です。

Cocoaの呼び出し処理は初回に時間がかかって、繰り返し呼び出すことでキャッシュされてスピードが向上する傾向がありますが、このような小規模なデータが対象だとPlaneなAppleScriptの処理のほうが5倍以上高速という結果が出ます。

画像の空白検出のような大規模データの処理だとCocoaの機能を呼び出したほうが高速なので、そのあたりは使い分け・見極めがきわめて重要といえます。

AppleScript名:2D List中の特定アイテムが指定リストに入っていたら抽出
— Created 2017-11-03 by Takaaki Naganoya
— 2017 Piyomaru Software
use AppleScript version "2.4"
use scripting additions
use framework "Foundation"

property NSPredicate : a reference to current application’s NSPredicate
property NSArray : a reference to current application’s NSArray

set aList to {{"Apple", 2}, {"Lemon", 3}, {"Apple", 4}, {"Water Melon", 2}}
set aTarg to {"Apple", "Lemon"} –データの表記ゆらぎ対策に使える?

set anArray to NSArray’s arrayWithArray:aList
set aPred to NSPredicate’s predicateWithFormat_("SELF[0] IN %@", aTarg)
set bRes to (anArray’s filteredArrayUsingPredicate:aPred) as list
–>  {​​​​​{​​​​​​​"Apple", ​​​​​​​2​​​​​}, ​​​​​{​​​​​​​"Lemon", ​​​​​​​3​​​​​}, ​​​​​{​​​​​​​"Apple", ​​​​​​​4​​​​​}​​​}

★Click Here to Open This Script 

Posted in list | Tagged 10.11savvy 10.12savvy 10.13savvy | Leave a comment

矩形座標同士の衝突判定 v3

Posted on 2月 7, 2018 by Takaaki Naganoya
AppleScript名:矩形座標同士の衝突判定 v3
— Created 2017-03-06 by Takaaki Naganoya
— 2017 Piyomaru Software
use AppleScript version "2.4"
use scripting additions
use framework "Foundation"

set a1Rect to {origin:{x:10, y:10}, |size|:{width:100, height:100}}
set b1Rect to {origin:{x:30, y:30}, |size|:{width:100, height:100}}
set a1Res to detectRectanglesCollision(a1Rect, b1Rect) of me
–>  true

set a4Rect to {origin:{x:0, y:20}, |size|:{width:100, height:10}}
set b4Rect to {origin:{x:1000, y:10000}, |size|:{width:50, height:100}}
set a2Res to detectRectanglesCollision(a4Rect, b4Rect) of me
–>  false

set a3Rect to {origin:{x:30, y:30}, |size|:{width:50, height:50}}
set b3Rect to {origin:{x:10, y:10}, |size|:{width:100, height:100}}
set a3Res to detectRectanglesCollision(a3Rect, b3Rect) of me
–> true

set a4Rect to {origin:{x:0, y:20}, |size|:{width:100, height:10}}
set b4Rect to {origin:{x:10, y:10}, |size|:{width:50, height:100}}
set a4Res to detectRectanglesCollision(a4Rect, b4Rect) of me
–> true

–NSRect同士の衝突判定
on detectRectanglesCollision(aRect, bRect)
  set a1Res to current application’s NSIntersectionRect(aRect, bRect)
  
return not (a1Res = {origin:{x:0.0, y:0.0}, |size|:{width:0.0, height:0.0}})
end detectRectanglesCollision

★Click Here to Open This Script 

Posted in list | Tagged 10.11savvy 10.12savvy 10.13savvy | Leave a comment

矩形座標同士の合計

Posted on 2月 7, 2018 by Takaaki Naganoya
AppleScript名:矩形座標同士の合計
— Created 2017-03-06 by Takaaki Naganoya
— 2017 Piyomaru Software
use AppleScript version "2.4"
use scripting additions
use framework "Foundation"

set a1Rect to {origin:{x:10, y:10}, |size|:{width:40, height:40}}
set b1Rect to {origin:{x:30, y:30}, |size|:{width:40, height:40}}
set a1Res to current application’s NSUnionRect(a1Rect, b1Rect)
–>  {​​​​​origin:{​​​​​​​x:10.0, ​​​​​​​y:10.0​​​​​}, ​​​​​size:{​​​​​​​width:60.0, ​​​​​​​height:60.0​​​​​}​​​}

★Click Here to Open This Script 

Posted in list | Tagged 10.11savvy 10.12savvy 10.13savvy | Leave a comment

指定矩形内に含まれるデータをリストで返す v3

Posted on 2月 7, 2018 by Takaaki Naganoya
AppleScript名:指定矩形内に含まれるデータをリストで返す v3
— Created 2017-06-22 by Takaaki Naganoya
— 2017 Piyomaru Software
use AppleScript version "2.4"
use scripting additions
use framework "Foundation"

set aList to {{507, 162}, {338, 166}, {389, 166}, {448, 166}, {286, 110}, {504, 109}, {558, 108}, {341, 113}, {394, 115}, {447, 112}, {234, 107}, {611, 110}, {286, 58}, {501, 63}, {556, 58}, {337, 59}, {391, 60}, {448, 63}, {611, 58}}

set rangeList to {{500, 100}, {550, 180}} –{{x1,y1}, {x2,y2}}
set resList to withinRange(rangeList, aList) of me
–>  {​​​​​{​​​​​​​507, ​​​​​​​162​​​​​}, ​​​​​{​​​​​​​504, ​​​​​​​109​​​​​}​​​}

on withinRange(rangeList as list, targetList as list)
  set aRect to makeNSRect(rangeList) of me
  
  
set includedList to {}
  
repeat with i in targetList
    copy i to {x, y}
    
set aPoint to current application’s NSMakePoint(x, y)
    
set aRes to (current application’s NSPointInRect(aPoint, aRect)) as boolean
    
    
if aRes = true then
      set the end of includedList to contents of i
    end if
  end repeat
  
  
return includedList
end withinRange

on makeNSRect(aList as list)
  try
    copy aList to {{x1, y1}, {x2, y2}}
    
set xWidth to (x2 – x1)
    
set yHeight to (y2 – y1)
    
set a1Rect to {origin:{x:x1, y:y1}, |size|:{width:xWidth, height:yHeight}}
    
return a1Rect
  on error
    return missing value
  end try
end makeNSRect

★Click Here to Open This Script 

Posted in list | Tagged 10.11savvy 10.12savvy 10.13savvy | Leave a comment

NSRectからの各種情報取得

Posted on 2月 7, 2018 by Takaaki Naganoya
AppleScript名:NSRectからの各種情報取得
use AppleScript version "2.4"
use scripting additions
use framework "Foundation"

set aRect to current application’s NSMakeRect(0, 0, 100, 80)
–> {origin:{x:0.0, y:0.0}, |size|:{width:100.0, height:80.0}}

set aWidth to current application’s NSWidth(aRect)
–> 100.0

set aHeight to current application’s NSHeight(aRect)
–> 80.0

set aMinX to current application’s NSMinX(aRect)
–> 0.0

set aMaxX to current application’s NSMaxX(aRect)
–> 100.0

set aMidX to current application’s NSMidX(aRect)
–> 50.0

set aMinY to current application’s NSMinY(aRect)
–> 0.0

set aMaxY to current application’s NSMaxY(aRect)
–> 80.0

set aMidY to current application’s NSMidY(aRect)
–> 40.0

★Click Here to Open This Script 

macOS 10.13以降は(何の説明もなく)NSMakeRectの返り値が変わっているので、注意が必要です。

use AppleScript version "2.4"
use scripting additions
use framework "Foundation"

set aRect to current application’s NSMakeRect(0, 0, 100, 80)
–> {origin:{x:0.0, y:0.0}, |size|:{width:100.0, height:80.0}}
–> {{0.0, 0.0}, {100.0, 80.0}}–macOS 10.13 or later

★Click Here to Open This Script 

Posted in list | Tagged 10.11savvy 10.12savvy 10.13savvy | Leave a comment

配列の要素数を取得する

Posted on 2月 7, 2018 by Takaaki Naganoya

Cocoaの配列の要素数を取得するAppleScriptです。

AppleScriptの配列であるリスト型変数については、length ofやcount ofで要素数を求められますが、

set aList to {1, 3, 5, 7, 9}
length of aList
--> 5

count of aList
--> 5

Cocoaの配列であるNSArrayやNSMutableArrayについてはこのように求めます。

AppleScriptのリスト型変数には、GUIアプリケーションのオブジェクトやAppleScriptのScriptオブジェクトを格納することが可能ですが、Cocoaの配列であるNSArrayやNSMutableArrayにこれらを代入することはできません。

AppleScript名:配列の要素数を取得する
— Created 2015-09-02 by Takaaki Naganoya
— 2015 Piyomaru Software
use AppleScript version "2.4"
use scripting additions
use framework "Foundation"

set anArray to current application’s NSArray’s arrayWithObjects_(1, 2, 3)
–>  (NSArray) {​​​​​1, ​​​​​2, ​​​​​3​​​}

–要素数を取得する
set aSize to anArray’s |count|()
–>  3

★Click Here to Open This Script 

Posted in list | Tagged 10.11savvy 10.12savvy 10.13savvy | Leave a comment

n次元のリストのすべてのアイテム数をカウント

Posted on 2月 7, 2018 by Takaaki Naganoya

n次元のリスト(配列)のすべてのアイテム数をカウントするAppleScriptです。

2次元でも3次元でも4次元でも、いかなる多次元配列のリストをも1次元配列に変換できるサブルーチン「FlattenList」はいまだに代替できるものが見当たらないほど万能で、この「要素数をカウントする」用途にも使ってみました。

AppleScript名:n次元のリストのすべてのアイテム数をカウント
— Created 2017-10-30 by Takaaki Naganoya
— 2017 Piyomaru Software
use AppleScript version "2.4"
use scripting additions
use framework "Foundation"

set aList to {{1, 2, 3}, {4, 5, 6}, {7, 8, 9, {1, 2, 3}}}
set aRes to FlattenList(aList) of me
set aLen to length of aRes

on FlattenList(aList)
  set oldDelims to AppleScript’s text item delimiters
  
set AppleScript’s text item delimiters to {"????"}
  
set aString to aList as text
  
set aList to text items of aString
  
set AppleScript’s text item delimiters to oldDelims
  
return aList
end FlattenList

★Click Here to Open This Script 

Posted in list | Tagged 10.11savvy 10.12savvy 10.13savvy | Leave a comment

リスト項目のシャッフル(ASOC)

Posted on 2月 7, 2018 by Takaaki Naganoya

–> ArrayRandomize.framework

AppleScript名:リスト項目のシャッフル(ASOC)
— Created 2016-12-06 by Takaaki Naganoya
— 2016 Piyomaru Software
use AppleScript version "2.4"
use scripting additions
use framework "Foundation"
use framework "ArrayRandomize" –https://github.com/masakihirokawa/objc-classes-dc-randomize
–http://piyocast.com/as/archives/4351

–配列をシャッフルして取得
set anArray to current application’s NSMutableArray’s alloc()’s initWithArray:{1, 2, 3, 4, 5}
set bArray to (current application’s DCRandomize’s shuffleArray:anArray) as list
–>  {​​​​​5, ​​​​​3, ​​​​​1, ​​​​​2, ​​​​​4​​​}

–1〜10の数値をシャッフルして配列取得
set cArray to (current application’s DCRandomize’s shuffle:1 max:10) as list
–>  {​​​​​9, ​​​​​4, ​​​​​6, ​​​​​5, ​​​​​3, ​​​​​2, ​​​​​7, ​​​​​8, ​​​​​1, ​​​​​10​​​}

–5〜10の範囲の乱数を取得
set dArray to (current application’s DCRandomize’s range:5 max:10) as integer
–>  7

–5〜10の範囲で 9以外の乱数を取得
set eArray to (current application’s DCRandomize’s exact:5 max:10 exceptId:9)
–>  9

★Click Here to Open This Script 

Posted in list | Tagged 10.11savvy 10.12savvy 10.13savvy | Leave a comment

GameplayKitを使ったリストのシャッフル

Posted on 2月 7, 2018 by Takaaki Naganoya
AppleScript名:GameplayKitを使ったリストのシャッフル
— Created 2016-12-08 by Shane Stanley
use AppleScript version "2.5"
use framework "Foundation"
use framework "GameplayKit"
use scripting additions

set anArray to current application’s NSArray’s arrayWithArray:{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
set newArray to anArray’s shuffledArray() as list — requires macOS 10.12

★Click Here to Open This Script 

Posted in list | Tagged 10.11savvy 10.12savvy 10.13savvy | 1 Comment

和集合(union)v2

Posted on 2月 7, 2018 by Takaaki Naganoya
AppleScript名:和集合(union)v2
— Created 2017-02-24 by Takaaki Naganoya
— Created 2017-03-01 by Shane Stanley
use AppleScript version "2.4"
use scripting additions
use framework "Foundation"
–http://piyocast.com/as/archives/4491

set aSet to current application’s NSMutableSet’s setWithArray:{1, 2, 3, 4}
set bSet to current application’s NSMutableSet’s setWithArray:{3, 5, 6, 7}

aSet’s unionSet:bSet –和集合
aSet’s allObjects() as list
–>  {​​​​​5, ​​​​​1, ​​​​​6, ​​​​​2, ​​​​​7, ​​​​​3, ​​​​​4​​​}

★Click Here to Open This Script 

Posted in list | Tagged 10.11savvy 10.12savvy 10.13savvy | Leave a comment

補集合(set difference)v2

Posted on 2月 7, 2018 by Takaaki Naganoya
AppleScript名:補集合(set difference)v2
— Created 2017-02-24 by Takaaki Naganoya
— Created 2017-03-01 by Shane Stanley
use AppleScript version "2.4"
use scripting additions
use framework "Foundation"
–http://piyocast.com/as/archives/4491

set aSet to current application’s NSMutableSet’s setWithArray:{1, 2, 3, 4}
set bSet to current application’s NSMutableSet’s setWithArray:{3, 5, 6, 7}

aSet’s minusSet:bSet –補集合
aSet’s allObjects() as list
–>  {​​​​​2, ​​​​​1, ​​​​​4​​​}

★Click Here to Open This Script 

Posted in list | Tagged 10.11savvy 10.12savvy 10.13savvy | Leave a comment

積集合(product)v2

Posted on 2月 7, 2018 by Takaaki Naganoya
AppleScript名:積集合(product)v2
— Created 2017-02-24 by Takaaki Naganoya
— Created 2017-03-01 by Shane Stanley
use AppleScript version "2.4"
use scripting additions
use framework "Foundation"
–http://piyocast.com/as/archives/4491

set aSet to current application’s NSMutableSet’s setWithArray:{1, 2, 3, 4}
set bSet to current application’s NSMutableSet’s setWithArray:{3, 5, 6, 7}

aSet’s intersectSet:bSet –積集合
aSet’s allObjects() as list
–>  {​​​​​3​​​}

★Click Here to Open This Script 

Posted in list | Tagged 10.11savvy 10.12savvy 10.13savvy | Leave a comment

文字を集合(CountedSet)に変換して文字列同士の近似度を計算する(単語単位で評価) v4

Posted on 2月 7, 2018 by Takaaki Naganoya
AppleScript名:文字を集合(CountedSet)に変換して文字列同士の近似度を計算する(単語単位で評価) v4
— Created 2017-03-18 by Takaaki Naganoya
— 2017 Piyomaru Software
use AppleScript version "2.4"
use scripting additions
use framework "Foundation"

set aStr to "This is a pinnapple."
set bStr to "This is an apple."
set cStr to "Piyomaru San Dayo."

set aRes to stringDifferenceWithAppearance(aStr, bStr, "A & B") of me
–>  {​​​​​intersect:2, ​​​​​minus:2, ​​​​​dataLabel:"A & B"​​​}

set bRes to stringDifferenceWithAppearance(bStr, cStr, "B & C") of me
–>  {​​​​​intersect:0, ​​​​​minus:4, ​​​​​dataLabel:"B & C"​​​}

set cRes to stringDifferenceWithAppearance(cStr, aStr, "C & A") of me
–>  {​​​​​intersect:0, ​​​​​minus:3, ​​​​​dataLabel:"C & A"​​​}

–結果をソートする
set allRes to current application’s NSArray’s arrayWithArray:{aRes, bRes, cRes}
set aSortDesc to current application’s NSSortDescriptor’s alloc()’s initWithKey:"intersect" ascending:false
set bSortDesc to current application’s NSSortDescriptor’s alloc()’s initWithKey:"minus" ascending:true
set aSortedArray to allRes’s sortedArrayUsingDescriptors:{aSortDesc, bSortDesc}

–もっとも似ている傾向を持つデータの組み合わせ
set aMostApproximative to aSortedArray’s firstObject() as record
–>  {​​​​​minus:2, ​​​​​dataLabel:"A & B", ​​​​​intersect:2​​​}

–文字列同士の近似傾向を、相違点と重複箇所の2つの方向から計算する
on stringDifferenceWithAppearance(aStr, bStr, aLabel)
  set aMinus to getApproximationBetweenStrings(aStr, bStr) of me
  
set aIntersect to getApproximationBetweenStringsIntersect(aStr, bStr) of me
  
return {intersect:aIntersect, minus:aMinus, dataLabel:aLabel}
end stringDifferenceWithAppearance

–与えられた文字列同士の相違点を計算する(結果がより小さい値のデータ同士が似ている)
on getApproximationBetweenStrings(aStr, bStr)
  set aList to current application’s NSMutableArray’s arrayWithArray:(words of aStr)
  
set bList to current application’s NSMutableArray’s arrayWithArray:(words of bStr)
  
  
set aIndex to current application’s NSCountedSet’s alloc()’s initWithArray:aList
  
set bIndex to current application’s NSCountedSet’s alloc()’s initWithArray:bList
  
  
aIndex’s minusSet:bIndex
  
set aRes to aIndex’s allObjects()’s |count|()
  
  
bIndex’s minusSet:aIndex
  
set bRes to bIndex’s allObjects()’s |count|()
  
  
if aRes ≥ bRes then
    return bRes
  else
    return aRes
  end if
end getApproximationBetweenStrings

–与えられた文字列同士の重複箇所を計算する(結果がより大きい値のデータ同士が似ている)
on getApproximationBetweenStringsIntersect(aStr, bStr)
  set aList to current application’s NSMutableArray’s arrayWithArray:(words of aStr)
  
set bList to current application’s NSMutableArray’s arrayWithArray:(words of bStr)
  
  
set aIndex to current application’s NSCountedSet’s alloc()’s initWithArray:aList
  
set bIndex to current application’s NSCountedSet’s alloc()’s initWithArray:bList
  
  
aIndex’s intersectSet:bIndex
  
set aRes to aIndex’s allObjects()’s |count|()
  
return aRes
end getApproximationBetweenStringsIntersect

★Click Here to Open This Script 

Posted in list | Tagged 10.11savvy 10.12savvy 10.13savvy | Leave a comment

文字を集合(CountedSet)に変換して文字列同士の近似度を計算する v3

Posted on 2月 7, 2018 by Takaaki Naganoya
AppleScript名:文字を集合(CountedSet)に変換して文字列同士の近似度を計算する v3
— Created 2017-03-18 by Takaaki Naganoya
— 2017 Piyomaru Software
use AppleScript version "2.4"
use scripting additions
use framework "Foundation"

set aStr to "This is a pinnapple."
set bStr to "This is an apple."
set cStr to "Piyomaru San Dayo."

set aRes to stringDifferenceWithAppearance(aStr, bStr, "A & B") of me
–>  {​​​​​intersect:11, ​​​​​minus:3​​​}

set bRes to stringDifferenceWithAppearance(bStr, cStr, "B & C") of me
–>  {​​​​​intersect:5, ​​​​​minus:8​​​}

set cRes to stringDifferenceWithAppearance(cStr, aStr, "C & A") of me
–>  {​​​​​intersect:5, ​​​​​minus:9​​​}

–結果をソートする
set allRes to current application’s NSArray’s arrayWithArray:{aRes, bRes, cRes}
set aSortDesc to current application’s NSSortDescriptor’s alloc()’s initWithKey:"intersect" ascending:false
set bSortDesc to current application’s NSSortDescriptor’s alloc()’s initWithKey:"minus" ascending:true
set aSortedArray to allRes’s sortedArrayUsingDescriptors:{aSortDesc, bSortDesc}

–もっとも似ている傾向を持つデータの組み合わせ
set aMostApproximative to aSortedArray’s firstObject() as record
–>  {​​​​​minus:3, ​​​​​dataLabel:"A & B", ​​​​​intersect:11​​​}

–文字列同士の近似傾向を、相違点と重複箇所の2つの方向から計算する
on stringDifferenceWithAppearance(aStr, bStr, aLabel)
  set aMinus to getApproximationBetweenStrings(aStr, bStr) of me
  
set aIntersect to getApproximationBetweenStringsIntersect(aStr, bStr) of me
  
return {intersect:aIntersect, minus:aMinus, dataLabel:aLabel}
end stringDifferenceWithAppearance

–与えられた文字列同士の相違点を計算する(結果がより小さい値のデータ同士が似ている)
on getApproximationBetweenStrings(aStr, bStr)
  set aList to current application’s NSMutableArray’s arrayWithArray:(characters of aStr)
  
set bList to current application’s NSMutableArray’s arrayWithArray:(characters of bStr)
  
  
set aIndex to current application’s NSCountedSet’s alloc()’s initWithArray:aList
  
set bIndex to current application’s NSCountedSet’s alloc()’s initWithArray:bList
  
  
aIndex’s minusSet:bIndex
  
set aRes to aIndex’s allObjects()’s |count|()
  
  
bIndex’s minusSet:aIndex
  
set bRes to bIndex’s allObjects()’s |count|()
  
  
if aRes ≥ bRes then
    return bRes
  else
    return aRes
  end if
end getApproximationBetweenStrings

–与えられた文字列同士の重複箇所を計算する(結果がより大きい値のデータ同士が似ている)
on getApproximationBetweenStringsIntersect(aStr, bStr)
  set aList to current application’s NSMutableArray’s arrayWithArray:(characters of aStr)
  
set bList to current application’s NSMutableArray’s arrayWithArray:(characters of bStr)
  
  
set aIndex to current application’s NSCountedSet’s alloc()’s initWithArray:aList
  
set bIndex to current application’s NSCountedSet’s alloc()’s initWithArray:bList
  
  
aIndex’s intersectSet:bIndex
  
set aRes to aIndex’s allObjects()’s |count|()
  
return aRes
end getApproximationBetweenStringsIntersect

★Click Here to Open This Script 

Posted in list | Tagged 10.11savvy 10.12savvy 10.13savvy | Leave a comment

Post navigation

  • Older posts
  • Newer posts

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

Google Search

Popular posts

  • 開発機としてM2 Mac miniが来たのでガチレビュー
  • macOS 15, Sequoia
  • 指定のWordファイルをPDFに書き出す
  • Pages本執筆中に、2つの書類モード切り替えに気がついた
  • Numbersで選択範囲のセルの前後の空白を削除
  • メキシカンハットの描画
  • Pixelmator Pro v3.6.4でAppleScriptからの操作時の挙動に違和感が
  • AdobeがInDesign v19.4からPOSIX pathを採用
  • AppleScriptによる並列処理
  • Safariで「プロファイル」機能を使うとAppleScriptの処理に影響
  • Cocoa Scripting Course 続刊計画
  • macOS 14.xでScript Menuの実行速度が大幅に下がるバグ
  • AppleScript入門③AppleScriptを使った「自動化」とは?
  • Keynote/Pagesで選択中の表カラムの幅を均等割
  • macOS 15でも変化したText to Speech環境
  • デフォルトインストールされたフォント名を取得するAppleScript
  • macOS 15 リモートApple Eventsにバグ?
  • AppleScript入門① AppleScriptってなんだろう?
  • macOS 14で変更になったOSバージョン取得APIの返り値
  • Keynoteで2階層のスライドのタイトルをまとめてテキスト化

Tags

10.11savvy (1101) 10.12savvy (1242) 10.13savvy (1391) 10.14savvy (587) 10.15savvy (438) 11.0savvy (283) 12.0savvy (212) 13.0savvy (194) 14.0savvy (147) 15.0savvy (132) CotEditor (66) Finder (51) iTunes (19) Keynote (117) 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 (55) 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
  • Noification
  • Notarization
  • Number
  • Object control
  • OCR
  • OSA
  • parallel processing
  • PDF
  • Peripheral
  • 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
  • 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年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