形態素解析結果のTokenベースの辞書でマッチするtextlintルール。
kuromoji.js形態素解析のTokenを取得し、morpheme-match-textlintを使い辞書とTokenが一致しているかを判定しています。
textlint-rule-prhでは正規表現のマッチができますが、品詞の一致などは見れません。
textlint-rule-morpheme-match
は日本語を単語レベルでの一致でチェックするルールです。
- Tokenビューア: morpheme-match
- 利用しているライブラリ
Install with npm:
npm install @textlint-ja/textlint-rule-morpheme-match
Via .textlintrc
(Recommended)
{
"rules": {
"@textlint-ja/morpheme-match": {
"dictionaryPathList": ["./path/to/dictionary.js"]
}
}
}
dictionaryPathList
:string[]
- 辞書ファイルへのファイルパスの配列
- 例)
/user/file/to/dict.js
,~/download/dict.js
,./path/to/dict.json
などのファイルパス形式に対応しています
辞書ファイルは.js
または.json
形式で記述できます。
1つの辞書ファイルには、複数のルールを含めることが可能です。
tokens
: マッチするTokenのパターンを配列で記述します- それぞれのTokenに記述しているプロパティの一致を見ます
- どのTokenでもいいワイルドカード的なものは
{}
(空のオブジェクト)を置くことで実現できます - Tokenについてはmorpheme-matchを参考にしてください
_capture
というプロパティには、surface_form
をキャプチャをする正規表現の変数を指定できます。- 記憶した変数は
message
で$1
のように指定すると、メッセージを出すときに置換されます - String.prototype.replace() | MDN
message
:tokens
にマッチした場合のエラーメッセージを記述しますexpected
:textlint --fix
で自動的に修正する結果を記述しますtokens
にマッチした箇所がexpected
に置換され、自動修正ができるようになります
module.exports = [
// ルール1
{
// https://azu.github.io/morpheme-match/?text=省略(することが可能)。
message: `"することが可能$1"は冗長な表現です。"することが可能"を省き簡潔な表現にすると文章が明瞭になります。
参考: http://qiita.com/takahi-i/items/a93dc2ff42af6b93f6e0`,
tokens: [
{
"surface_form": "する",
"pos": "動詞",
"pos_detail_1": "自立",
"pos_detail_2": "*",
"pos_detail_3": "*",
"conjugated_type": "サ変・スル",
"conjugated_form": "基本形",
"basic_form": "する",
"reading": "スル",
"pronunciation": "スル"
}, {
"surface_form": "こと",
"pos": "名詞",
"pos_detail_1": "非自立",
"pos_detail_2": "一般",
"pos_detail_3": "*",
"conjugated_type": "*",
"conjugated_form": "*",
"basic_form": "こと",
"reading": "コト",
"pronunciation": "コト"
}, {
"surface_form": "が",
"pos": "助詞",
"pos_detail_1": "格助詞",
"pos_detail_2": "一般",
"pos_detail_3": "*",
"conjugated_type": "*",
"conjugated_form": "*",
"basic_form": "が",
"reading": "ガ",
"pronunciation": "ガ"
}, {
"surface_form": "可能",
"pos": "名詞",
"pos_detail_1": "形容動詞語幹",
"pos_detail_2": "*",
"pos_detail_3": "*",
"conjugated_type": "*",
"conjugated_form": "*",
"basic_form": "可能",
"reading": "カノウ",
"pronunciation": "カノー"
}, {
"pos": "助動詞",
"_capture": "$1"
}
]
},
// ルール2
{
"message": "\"適用\"の誤用である可能性があります。適応 => 適用",
"expected": "を適用",
"tokens": [
{
"surface_form": "を",
"pos": "助詞",
"pos_detail_1": "格助詞",
"pos_detail_2": "一般",
"pos_detail_3": "*",
"conjugated_type": "*",
"conjugated_form": "*",
"basic_form": "を",
"reading": "ヲ",
"pronunciation": "ヲ"
},
{
"surface_form": "適応",
"pos": "名詞",
"pos_detail_1": "サ変接続",
"pos_detail_2": "*",
"pos_detail_3": "*",
"conjugated_type": "*",
"conjugated_form": "*",
"basic_form": "適応",
"reading": "テキオウ",
"pronunciation": "テキオー"
}
]
}
];
See Releases page.
Install devDependencies and Run npm test
:
npm i -d && npm test
Pull requests and stars are always welcome.
For bugs and feature requests, please create an issue.
- Fork it!
- Create your feature branch:
git checkout -b my-new-feature
- Commit your changes:
git commit -am 'Add some feature'
- Push to the branch:
git push origin my-new-feature
- Submit a pull request :D
MIT © azu