textlint-rule-no-doubled-joshi v5.0.0
textlint-rule-no-doubled-joshi 
1つの文中に同じ助詞が連続して出てくるのをチェックするtextlintルールです。
文中で同じ助詞が連続すると文章が読みにくくなります。
例) でという助詞が連続している
材料不足で代替素材で製品を作った。
で という助詞が1つの文中に連続して書かれているのをチェックすることができます。
OK:
私は彼が好きだ
オブジェクトを返す関数を公開した
これがiPhone、これがAndroidです。
これがiPhone,これがAndroidです。
言うのは簡単の法則。
NG:
私は彼は好きだ
材料不足で代替素材で製品を作った。
列車事故でバスで振り替え輸送を行った。
法律案は十三日の衆議院本会議で賛成多数で可決され、参議院に送付されます
これは`obj.method`は何をしているかを示します。
これとあれとそれを持ってきて。
Installation
npm install textlint-rule-no-doubled-joshi
Usage
Via .textlintrc
(推奨)
{
"rules": {
"no-doubled-joshi": true
}
}
Via CLI
textlint --rule no-doubled-joshi README.md
Options
.textlintrc
options.
{
"rules": {
"no-doubled-joshi": {
// 助詞のtoken同士の間隔値が1以下ならエラーにする
// 間隔値は1から開始されます
"min_interval" : 1,
// 例外を許可するかどうか
"strict": false,
// 助詞のうち「も」「や」は複数回の出現を許す
"allow": ["も","や"],
// 文の区切り文字となる配列
"separatorCharacters": [
".", // period
".", // (ja) 全角period
"。", // (ja) 句点
"?", // question mark
"!", // exclamation mark
"?", // (ja) 全角 question mark
"!" // (ja) 全角 exclamation mark
],
"commaCharacters": [
"、",
"," // 全角カンマ
]
}
}
}
min_interval
: 助詞の最低間隔値- Default:
1
- 指定した
min_interval
以内にある同じ助詞は連続しているとみなされます - 指定した間隔値以下で同じ助詞が出現した場合エラーが出力されます
- Default:
strict
: 厳しくチェックするかどうか- Default:
false
- 下記参照。例外としているものもエラーとするかどうか
true
にすると誤検知が発生しやすくなります
- Default:
allow
: 複数回の出現を許す助詞- Default:
[]
- 並立の助詞など、複数回出現しても無視する助詞を指定します
- 例)
"も"
を許可したい場合は{ "allow": ["も"] }
- Default:
separatorCharacters
: 文の区切り文字の配列- Default:
[".", ".", "。", "?", "!", "?", "!"]
separatorCharacters
を設定するとデフォルト値は上書きされます。
のみを文の区切り文字にしたい場合は。{ "separatorCharacters" : ["。"] }
のように指定します
- Default:
commaCharacters
: 句点となる文字の配列- Default:
["、", ","]
- 読点として認識する文字の配列を指定します
- 読点は間隔値を+1する効果があります
- Default:
対応方法
修正方法としては、次のようなものがあります。
- 助詞の書き間違いなので、別の助詞に置き換える
- 例)
私は彼は好きだ
→私は彼が好きだ
- 例)
- 複数のことを1つの文で書いている可能性があるため、助詞が連続している文を分割する
- 1文でまとめようとして、無理やり助詞で文を繋いでいる可能性があります
- 文自体を分けることで、同じ助詞が連続していることがなくなります
- 例) https://github.com/asciidwango/js-primer/pull/1598#discussion_r1110939474
- 助詞で無理やり文を繋げている可能性があるので、文の中で順番を入れ替える
- 助詞で文の中身を無理やり繋げようとしていて、使える助詞の選択肢が狭くなっている可能性があります
- 文の流れを箇条書きなどにして整理してみてください
- 例) https://github.com/asciidwango/js-primer/pull/1594#discussion_r1110973573
- 助詞が不要なら削除して、文を簡潔にする
- "実際に" などのように強調的な言葉を削除することで、助詞が不要になる可能性があります
- 技術文書では簡潔な文章を心がけることが多いため、強調的な単語自体を削除することもあります
また、allow
オプションで、特定の助詞が連続して出てくることを許可できます。
文自体を直す余地がない場合は、コメントなどを使ってエラーを無視してください。
判定処理
ある助詞(かつ品詞細分類)が、最低間隔値(距離)以内に連続して書かれている場合をエラーとして検出します
材料不足で代替素材で製品を作った。
この文中の助詞 で
同士の間隔値 は 1
となります。
デフォルトの最低間隔値(min_interval
)は1
となるなるため、このケースはエラーとして判定されます。
これはペンです。これは鉛筆です。
この文は句点(。
)によって2つの文として認識されます。
そのため、それぞれの文中での助詞は
は1度のみの出現となりエラーとはなりません。
句点となる文字列は separatorCharacters
オプションで指定できます。
このルールが助詞として認識するものは、次のサイトで確認できます。
読点での区切り
これがiPhone、これがAndroidです。
読点文字(、
)が助詞の間にある場合、間隔値は+1されます。
そのため、助詞が
の間隔値は2
となりデフォルトではエラーとなりません。
読点文字は commaCharacters
オプションで指定できます。
カッコでの区切り
次の
escapeHTML
関数はタグ関数です(詳細は文字列の章を参照)
括弧((
や)
)が助詞の間にある場合、間隔値は+1されます。
そのため、この例の助詞は
の間隔値は2
となりデフォルトではエラーとなりません。
括弧記号はkuromoji.jsで定義されている記号を元に判定しています。
例外
以下の項目については、曖昧性があるため助詞が連続していてもデフォルトではエラーとして扱いません。
設定が { strict: true }
ならばエラーとするが、デフォルトでは{ strict: false }
となっています。
助詞:連体化 "の"
"の" の重なりは例外として許可します。
- 第8回:読みやすさへの工夫 3(てにおは助詞) - たくみの匠
- 作文入門
- "の" の消し方について
助詞:格助詞 "を"
オブジェクトを返す関数を公開する
"を" の重なりは例外として許可します。
接続助詞:"て"
試していただいて
接続助詞 "て" の重なりは例外として許可します。
並立助詞
登ったり降りたりする
並立助詞(たり
)は連続するのが意図した助詞であるため許可します。
連語(助詞)
連語は一つの助詞の塊として認識します。
OK: 文字列の長さを正確**に**測る**には**ある程度の妥協が必要になります。
NG: 文字列**には**そこ**には***問題がある。
その他の助詞
その他の助詞も例外として扱いたい場合は allow
オプションを利用します。
デフォルトでは次の文はエラーとなる。
太字も強調も同じように無視されます。
オプションで"allow": ["も"]
を指定することで、もを例として扱うことができます。
{
"rules": {
"no-doubled-joshi": {
// 助詞のうち「も」は複数回の出現を許す
"allow": ["も"]
}
}
}
Tests
npm test
Reference
- Doubled Joshi Validator · Issue #460 · redpen-cc/redpen
- 事象の構造から見る二重デ格構文の発生
- 第8回:読みやすさへの工夫 3(てにおは助詞) - たくみの匠
- (Microsoft Word - JCLWorkshop2013_2\214\303\213{.doc) - JCLWorkshop_No3_02.pdf
- 助詞の連続使用を避け分かりやすい文章を書こう! - 有限な時間の果てに
- 作文入門
- 形態素解析ツールの品詞体系
- Redpenの実装
Related Libraries
- azu/kuromojin a wrapper of kuromoji.js
- azu/sentence-splitter
Contributing
- 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
License
MIT
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
4 years ago
4 years ago
5 years ago
5 years ago
5 years ago
6 years ago
6 years ago
6 years ago
6 years ago
8 years ago
8 years ago
8 years ago
8 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago