校正・推敲プラグイン
Tomarigiで使用される校正・推敲プラグインを作成するためには,saezuriライブラリを利用します.saezuriライブラリには,校正・推敲プラグインとして動作するための「インターフェース(IPlugin)」が定義されています.この定義にしたがって,プロパティやメソッドを作成する必要があります.また,この処理を簡易化するための抽象クラス(IPluginBase
)もライブラリ内に内臓されています.したがって,このインターフェースおよび抽象クラスを継承して,プラグインを作成して下さい.
プラグインクラス作成例
新規プロジェクトで,「クラスライブラリ」として作成します.使用する.NET Framework のバージョンは,3.5以上を選択して下さい.また,参照設定としてsaezuri.dllを指定します(「saezuri(言語解析)」のページに方法有り).
using System; using System.Collections.Generic; using System.Linq; using System.Text; using saezuri.plugin; using saezuri.NLP; namespace plugin_sample { public class plugin_sample : IPluginBase, IPlugin { } }
校正・推敲プラグインのコンストラクタでは,プラグインの属性情報の設定と設定ファイルの読み込みを行います.以下のような記述を行います.
public plugin_sample() { // プラグイン名 this.Name = "第二形態素のチェック(サンプル)"; // プラグインの詳細説明 this.Description = "二番目の形態素をチェックします."; // プラグインの役割 this.Role = ROLETYPE.PROOFREADING; // チェック機能があるか this.EnabledCheck = true; // 設定ダイアログがあるか this.HasSetupDialog = true; // 設定 Setting.DATA = saezuri.CUtility.LoadData<Setting>(string.Format("{0}{1}.xml", IPluginBase.SettingFolder, this.AssemblyName)); // 色設定がない場合のデフォルト if (string.IsNullOrEmpty(Setting.DATA.ColoringStr) == true) { Setting.DATA.ColoringStr = System.Drawing.Color.Red.Name; } Setting.DATA.Coloring = System.Drawing.Color.FromName(Setting.DATA.ColoringStr); }
校正・推敲プラグイン内では,主にCheckメソッドを実装します.Checkメソッドは,引数の違いにより3種あります.どの範囲を対象とした指摘を行うかによって,それぞれ,文書(CDocument)・段落(CParagraph)・文(CSentence)を引数にする3種を使い分けます.すべてのCheckメソッドを実装する必要はありません.必要なCheckメソッドのみ実装します.各Checkメソッドでは,(複数の)指摘結果を返します.CCheckは,指摘内容そのものを表します.したがって,引数に与えられた文書や段落や文のオブジェクトを使って,校正・推敲個所を検出し,その結果をCCheckオブジェクトをとして生成して,そのリストを返す処理を記述する必要があります.
public new List<CCheck> Check(CSentence _SentencesData) { List<CCheck> checkList = new List<CCheck>(); return checkList; } public new List<CCheck> Check(CParagraph _ParagraphData) { List<CCheck> checkList = new List<CCheck>(); return checkList; } public new List<CCheck> Check(CDocument _DocumentData) { List<CCheck> checkList = new List<CCheck>(); return checkList; }
各プラグインには, 設定画面を出すためのShowSetupDialog()メソッドがあり,Tomarigiから呼び出されます.独自に作成した設定画面は,このメソッド内で呼び出す必要があります.なお,設定ファイルは,必ずIPluginBase.SettingFolderで指定されるフォルダ内に,プラグインと同じ名称のxmlファイルとして保存して下さい.以下に,設定ファイル名の指定の仕方と,設定画面を呼び出す例を示します.
public new void ShowSetupDialog() { string setting_filename = string.Format("{0}{1}.xml", IPluginBase.SettingFolder, this.AssemblyName); new frmOption().ShowDialog(setting_filename); }
サンプル
インターフェース:IPlugin
Tomarigiからプラグインとして認識するために必要なインターフェースです.
プロパティ | |
AssemblyName | アセンブリ名 |
Name | プラグインの名称 |
Description | プラグインの詳細説明 |
Enabled | プラグインの有効・無効 |
Help | ※現在未使用 |
Version | プラグインのバージョン |
EnabledCheck | 指摘機能が有効か |
Role | プラグインの役割(校正か推敲か) |
EnabledMistake | ※問題生成に関わる. 現在,使用しないで下さい |
ExerciseTypeList | ※問題生成に関わる. 現在,使用しないで下さい |
HasSetupDialog | 設定ダイアログがあるか |
Tag | 汎用 |
メソッド | |
List<CCheck> Check(CSentence) | 校正・推敲のチェック |
List<CCheck> Check(CParagraph) | 校正・推敲のチェック |
List<CCheck> Check(CDocument) | 校正・推敲のチェック |
Exercise()系 | ※問題生成に関わる. 現在,使用しないで下さい |
void ShowSetupDialog() | 設定ダイアログの呼び出し |
抽象クラス:IPluginBase
IPluginBaseクラスは,IPluginインターフェースを実装した抽象クラスです.IPluginインターフェースと異なる部分のみ,下記に示します.
static | |
PluginFolder | プラグインの格納フォルダ |
SettingFolder | プラグインの設定ファイル格納フォルダ |
指摘クラス:CCheck
CWordクラスは,単語を表します.これは,係り受け解析ツールの結果から,文節ごとに単語情報を切りだして生成されます.ただし,この単語情報は,本ライブラリによって,独自に推定したものです.また,これは,Cabochaを使用した場合のみ,使用することができます.
static | |
PeriodChar | 句点判定文字リスト(default: .。!?) |
ParagraphChar | 段落判定文字列リスト(default: 改行2個,改行+全角空白,改行+半角空白,改行+Tab) |
BracketsChars1 | 括弧対応チェック文字リスト(全角・半角を同列解釈default:(){}「」) |
BracketsChars2 | 括弧対応チェック文字リスト(default:『』【】) |
プロパティ | |
ID | 一意に識別するための番号 ※自動付与されます |
ForeColor | 指摘に使用する色 |
ForeColorHTML | ForeColorをHTML表記 |
Level | 指摘レベル |
Details | 詳細情報 |
DetailsPic | 詳細情報画像 |
Text | 誤りを含む元の文 |
Message | 指摘メッセージ |
CorrectionList | 修正候補 |
Role | 指摘の役割(校正か推敲か) |
PluginAssembly | 指摘の元になったプラグインの アセンブリ名 |
Enabled | ※この項目は,Tomarigiにより管理するための領域ですので,変更しないで下さい. |
TargetRange | (複数の)指摘箇所 RangePositionクラスのデータとして取り扱う.RangePositionは,開始位置と長さおよび終了位置を保持する |
TargetText | 指摘箇所の文字の概要 |
TargetIsALL | 指摘箇所が全文の場合は,trueとする |
メソッド | |
bool IsEqual(CCheck) | 引数の指摘が内容的に 同じものかどうか |
List<CCheck> DivideByRange() | 指定範囲が複数ある場合に,単独の指定範囲ごとに分割する |