ベイズ推定を計算するオープンソースのプログラム「Bayes」をCocoaフレームワーク化した「BayesKit」を呼び出してベイズ推定の計算を行うAppleScriptです。
–> Download BayesKit.framework (To ~/Library/Frameworks)
macOS 10.14以外はスクリプトエディタ/Script Debugger上で実行可能で、10.14のみScript Debugger上での実行を必要とします(この仕様、いい加減かったるいので戻してほしい)。
スパムメール選別用途御用達のベイズ推定の演算を行なってみました。プログラムに添付されていたサンプルは英語の文章を処理するようにできていましたが、予想どおり日本語の文章をそのまま与えると単語切り分けが行えずに計算がうまく行きません。
そこで、掲載サンプルScriptのように単語ごとに手動で半角スペースを入れてみました。
本来であれば、形態素解析辞書を使って単語ごとに切り分け、さらに単語の活用形をどうにかする必要があるはずですが、そこまで神経質にならずに簡易日本語パーサーで単語に分解し、助詞などを削除しデータとして与えることでそこそこの実用性は確保できるのではないかと思われます(これだと固有名詞がバラバラになる可能性は否定できませんが)。
NSLinguisticTagger+macOS 10.14で日本語文章の形態素解析+品詞解析は行えることを期待したいですが、未確認です。ただ、できた場合でも固有名詞への配慮がどの程度あるかは不明です。
AppleScript名:Bayes推定による文章仕分け(Classifier).scptd |
— – Created by: Takaaki Naganoya – Created on: 2018/11/12 — – Copyright © 2018 Piyomaru Software, All Rights Reserved — use AppleScript version "2.5" — El Capitan(10.11) or later use framework "Foundation" use framework "BayesKit" –https://github.com/kevincobain2000/Bayes use scripting additions property Bayes : a reference to current application’s Bayes property FeaturesVector : a reference to current application’s FeaturesVector property NSMutableArray : a reference to current application’s NSMutableArray –set positiveStr to "word word good good" –set negativeStr to "thiss word bad bad" set positiveStr to "良い 良い 良い 良い 。" set negativeStr to "悪 悪 悪 悪 悪 。" set classifierObj to Bayes’s alloc()’s init() set featuresVec to FeaturesVector’s alloc()’s init() set featuresArray to NSMutableArray’s arrayWithArray:{"tokens"} featuresVec’s appendFeatures:positiveStr forFeatures:featuresArray classifierObj’s train:(featuresVec’s features) forlabel:"positive" featuresVec’s appendFeatures:negativeStr forFeatures:featuresArray classifierObj’s train:(featuresVec’s features) forlabel:"negative" –set toGuess to "word" set toGuess to "良い 。" featuresVec’s appendFeatures:toGuess forFeatures:featuresArray classifierObj’s guessNaiveBayes:(featuresVec’s features) set vRes to (classifierObj’s probabilities) as record –> {positive:0.6400000453, negative:0.32000002265}–English Sample Words OK –> {positive:1.0, negative:0.0}–Japanese Sample Words OK |
More from my site
(Visited 64 times, 1 visits today)