類義語アウトプット【Python】

提供: MeryWiki
移動先: 案内検索

概要[編集]

類義語の検索結果をアウトプットバーに表示します
検索は日本語WordNetを使用します、少し大きめのファイルです
またPythonも使用しており導入までがちょっと大変です

準備[編集]

日本語WordNetの準備[編集]

日本語WordNetは国立研究開発法人情報通信研究機構(NICT)が開発している日本語の概念辞書です。商用フリー、申込み不要で利用できます
当マクロでは類義語辞書、国語辞書、英和辞書としての機能を実現するため、日本語WordNetを使用しています

『日本語WordNet』
http://compling.hss.ntu.edu.sg/wnja/

上記サイトのダウンロードページから
『Japanese Wordnet and English WordNet in an sqlite3 database』
こちらのファイルをダウンロードして下さい

ダウンロードしたファイルを解凍すると『wnjpn.db』というファイルが作成されます。これがデータベースという事のようです
この『wnjpn.db』をMacrosフォルダに配置して下さい

Python環境の準備[編集]

『知っておくと便利なテキストエディタ「Mery」の10個の小技』
https://www.haijin-boys.com/software/mery/mery-tips

こちらの記事で『マクロをPythonで記述する』という内容が紹介されています
1.Python のインストール
2.Python for Windows (pywin32) Extensions のインストール
3.Python を ActiveScript のエンジンとして登録する
4.Mery のマクロで Python が使えるか試してみる

以上の手順を完了させて下さい
(当マクロの場合は、1だけで良いかもしれませんがテストしていません)

ダウンロード[編集]

ファイル:類義語出力.zip

こちらのZipファイルには『類義語.js』と『synonym.py』が含まれています
これらをMacrosフォルダに配置して下さい
『類義語.js』が当マクロの本体になりますのでマクロのカスタマイズから『類義語.js』を追加して下さい

使い方[編集]

例えば『執筆』を選択して当マクロを実行すると以下のように表示します

◇【執筆】の類義語を出力します[類義語辞典モード]
類義語:公刊,著作,版行,発刊,書き著す,出版,刊行,発行,物する,印行,著わす,著す,書く,著述
類義語:書きおろす,書きつづる,筆記,書き下ろす,書き下す,認める,揮毫,記す,書きあらわす,書表わす,したためる,書き表わす,書下ろす,書する,染筆,書き綴る,綴る,書表す,呵する,書く,表記
類義語:書きおろす,書きつづる,筆記,書き下ろす,書き下す,認める,記す,書き送る,書きあらわす,書表わす,したためる,書き表わす,書下ろす,書する,物する,書き綴る,著わす,綴る,書表す,著す,呵する,書く,著述,書きおくる,表記
類義語:起稿,書きおろす,書きつづる,著作,書き下ろす,書き下す,記す,書きあらわす,書表わす,起案,書き表わす,案文,書下ろす,詠む,書綴る,書する,物する,書き綴る,著わす,綴る,書表す,著す,書く,著述,起草

本来は類義語の結果表示には英単語も含んでいますが、独断と偏見により削除して表示しています

『猫』の直前にキャレットを置いて当マクロを実行すると以下のように表示します

◇【猫】の類義語を出力します[類義語辞典モード]
類義語:ねんねこ,にゃんにゃん,キャット,ネコ

付近の単語(この場合は猫)を選択します

起動直後に何も選択していないような状態、またはアウトラインやアウトプットバーにフォーカスがある場合に当マクロをツールバーなどから実行した場合、『synonym』が選択されたものとして以下のように表示します

◇【synonym】の類義語を出力します[類義語辞典モード]
類義語:類義語,同義語,類語,同意語,シノニム

『日本語WordNet』に存在しない単語を選択した場合、以下のように表示します

※【〇〇】は、Wordnetに存在しない単語です

残念ながら、存在しない単語はたくさんあるようです

設定[編集]

類義語.jsの設定[編集]

//------------------------------------------------------------------------------
// 設定
var exepath = "Pythonw";	// Pythonのパスを通してインストールしている場合
var src = "synonym.py";		// synonym.pyをMacrosフォルダに配置
//var src = "D:\\python\\synonym.py";	// synonym.pyのフルパス例
var key = "ctrl";	// "ctrl" "shift" "alt"
OutputBar.Clear();	// 実行ごとにアウトプットバーをクリアする
//------------------------------------------------------------------------------

各種パスを設定できるようにしていますが、Macrosフォルダに配置していればファイル名のみで大丈夫なようです
実行ごとにアウトプットバーをクリアしたくない場合は、該当行をコメントアウトして下さい
『Pythonw』のお尻に"w"がくっついていますが、これは書き間違いではなく黒い画面がちらつかないためのおまじないです

synonym.pyの設定[編集]

#-------------------------------------------------------------------------------
# 設定
conn = sqlite3.connect("wnjpn.db")	# wnjpn.dbファイル名のみ
#conn = sqlite3.connect("D:\\python\\wnjpn.db")	# wnjpn.dbのフルパス例
#-------------------------------------------------------------------------------

『wnjpn.db』のパスを設定できます

注意点[編集]

当マクロは外部の『wnjpn.db』にアクセスします、またPythonにスクリプトを実行させますので環境によっては動作が重いかもしれません、申し訳ありません
『wnjpn.db』は200メガバイト程度のサイズがあります
『猫』は検索できても『ねこ』は検索できなかったりと使いにくいと感じる場面はあるかと思います、予めご了承下さい

発展[編集]

pizzさん作成の『GetKeyState.exe』を導入すれば、国語辞典・英和辞典としても当マクロを利用することができるようになります

GetKeyState.exe(キー状態取得実行ファイル)

『GetKeyState.exe』はMacrosフォルダに配置して下さい

例えば当マクロのショートカットキーに「Alt+T」「Ctrl+T」を割り当て、『コマンド』という単語を選択し、「Alt+T」を実行すると以下のように表示します

◇【コマンド】の類義語を出力します[類義語辞典モード]
類義語:レインジャー,レーンジャー,レンジャー
類義語:言いつけ,命令すること,指示,命令,指図
類義語:ステイトメント,インストラクション,ステートメント,命令

類義語辞典モードで動作します。同様にして「Ctrl+T」を実行すると、

◇【コマンド】の意味を出力します[国語英和辞典モード]
意味:敵地に奇襲をかける訓練を積んだ水陸両用の軍事部隊
意味:奇襲のための突撃専用部隊として訓練を受けた部隊の隊員
意味:何かをする正式の指示か命令
意味:コンピュータプログラムの一部分として書かれたコードの一行

このように国語辞典として動作します
選択範囲の単語が英単語なら英和辞典として動作します

デフォルトでは「Ctrl」キーを状態取得の対象としていますが、「いや、類義語モードをCtrlで使いたいんだ」という場合もあるかと思います。設定のkeyのところで「Shift」キーや「Alt」キーに変更することが可能です

所感[編集]

ポンとショートカットキーを押した時、アウトプットバーに類義語が表示されれば嬉しいなと思いました。JscriptもPythonも初心者、SQLなんて触ったこともない私ですので「類義語 無料」などで検索して具体的なコードが公開されているのを見つけた時、飛びついてしまったわけです
Jscriptのみで作成すればもっとすっきりしていたと思います。どうせPythonを使うならスクレイピングした方がより詳細だったかもしれません
当初はPythonスクリプトをMeryマクロとして動作させようとしてましたがデバッグがやりにくくて早々に投げ出してしまいました。Pythonに標準出力させて、それをまるっと受け取って加工してアウトプットバーに表示ってかなり面妖ですよね
どこかのサイトが類義語のAPIを提供してくれてないかな、それを使ってどなたか類義語マクロを作ってくれないかなと思っています

更新履歴[編集]

・2019/03/26 表示の際に改行がちょっと多かったので修正しました。また設定のコメント欄が間違っていたので修正しました
・2019/03/25 英単語は小文字でしか検索できないようだったのでコマンド引数としてPythonに渡す前に.toLowerCase()するように修正しました
・2019/03/24 初版

スポンサーリンク