Skip to content

textlint-ja/textlint-rule-no-doubled-joshi

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

textlint-rule-no-doubled-joshi Actions Status: test

1つの文中に同じ助詞が連続して出てくるのをチェックするtextlintルールです。

文中で同じ助詞が連続すると文章が読みにくくなります。

例) という助詞が連続している

材料不足で代替素材で製品を作った。

という助詞が1つの文中に連続して書かれていため、次のようなエラーが報告されます。

一文に二回以上利用されている助詞 "で" がみつかりました。

次の助詞が連続しているため、文を読みにくくしています。

- 不足"で"
- 素材"で"

同じ助詞を連続して利用しない、文の中で順番を入れ替える、文を分割するなどを検討してください。

OK:

私は彼が好きだ
オブジェクトを返す関数を公開した
これが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以内にある同じ助詞は連続しているとみなされます
    • 指定した間隔値以下で同じ助詞が出現した場合エラーが出力されます
    • ⚠️ あまり変更を想定してないので、変更した場合は意図通りに動かない場合があります
  • strict: 厳しくチェックするかどうか
    • Default: false
    • 下記参照。例外として許容しているものもエラーとするかどうか
    • trueにすると誤検知が発生しやすくなります
  • allow: 複数回の出現を許す助詞
    • Default: []
    • 並立の助詞など、複数回出現しても無視する助詞を指定します
    • 例) "も"を許可したい場合は { "allow": ["も"] }
  • separatorCharacters: 文の区切り文字の配列
    • Default: [".", ".", "。", "?", "!", "?", "!"]
    • separatorCharactersを設定するとデフォルト値は上書きされます
    • のみを文の区切り文字にしたい場合は。{ "separatorCharacters" : ["。"] }のように指定します
  • commaCharacters: 句点となる文字の配列
    • Default: ["、", ","]
    • 読点として認識する文字の配列を指定します
    • 読点は間隔値を+1する効果があります

対応方法

修正方法としては、次のようなものがあります。

  • 助詞の書き間違いなので、別の助詞に置き換える
    • 例) 私は彼は好きだ私は彼が好きだ
  • 複数のことを1つの文で書いている可能性があるため、助詞が連続している文を分割する
    • 1文でまとめようとして、無理やり助詞で文を繋いでいる可能性があります
    • 文自体を分けることで、同じ助詞が連続していることがなくなります
    • 例) asciidwango/js-primer#1598 (comment)
  • 助詞で無理やり文を繋げている可能性があるので、文の中で順番を入れ替える
    • 助詞で文の中身を無理やり繋げようとしていて、使える助詞の選択肢が狭くなっている可能性があります
    • 文の流れを箇条書きなどにして整理してみてください
    • 例) asciidwango/js-primer#1594 (comment)
  • 助詞が不要なら削除して、文を簡潔にする
    • "実際に" などのように強調的な言葉を削除することで、助詞が不要になる可能性があります
    • 技術文書では簡潔な文章を心がけることが多いため、強調的な単語自体を削除することもあります
  • 日本語としても意味が通り、一般的な用法なのにエラーとなった
    • ルールの実装に問題がある可能性があります
    • 例文とともにIssueを作成してください

また、allowオプションで、特定の助詞が連続して出てくることを許可できます。

文自体を直す余地がない場合は、コメントなどを使ってエラーを無視してください。

判定処理

ある助詞(かつ品詞細分類)が、最低間隔値(距離)以内に連続して書かれている場合をエラーとして検出します

材料不足で代替素材で製品を作った。

この文中の助詞 同士の間隔値 は 1 となります。 デフォルトの最低間隔値(min_interval)は1となるなるため、このケースはエラーとして判定されます。

これはペンです。これは鉛筆です。

この文は句点()によって2つの文として認識されます。 そのため、それぞれの文中での助詞は1度のみの出現となりエラーとはなりません。

句点となる文字列は separatorCharacters オプションで指定できます。

このルールが助詞として認識するものは、次のサイトで確認できます。

読点での区切り

これがiPhone、これがAndroidです。

読点文字()が助詞の間にある場合、間隔値は+1されます。 そのため、助詞の間隔値は2となりデフォルトではエラーとなりません。

読点文字は commaCharacters オプションで指定できます。

カッコでの区切り

次のescapeHTML関数タグ関数です(詳細文字列の章を参照)

括弧(())が助詞の間にある場合、間隔値は+1されます。 そのため、この例の助詞の間隔値は2となりデフォルトではエラーとなりません。

括弧記号はkuromoji.jsで定義されている記号を元に判定しています。

例外

以下の項目については、曖昧性があるため助詞が連続していてもデフォルトではエラーとして扱いません。

設定が { strict: true } ならばエラーとして報告されますが、デフォルトでは{ strict: false } となっているのでエラーとして報告されません。

助詞:連体化 "の"

"の" の重なりは例外として許可します。

助詞:格助詞 "を"

オブジェクトを返す関数を公開する

"を" の重なりは例外として許可します。

接続助詞:"て"

試しいただい

接続助詞 "て" の重なりは例外として許可します。

並立助詞

登ったり降りたりする

並立助詞(たり)が連続するのは、意図した助詞の使い方であるため許可します。

〜かどうか

これにするどう検討する

助詞()が連続していますが、"〜かどうか"の表現は一般的であるため許可します。

📝 次のように書き換えることで、助詞が連続していない形にできます。

これにするかを検討する

連語(助詞)

連語は一つの助詞の塊として認識します。

OK: 文字列の長さを正確**に**測る**には**ある程度の妥協が必要になります。
NG: 文字列**には**そこ**には***問題がある。

その他の助詞

その他の助詞も例外として扱いたい場合は allow オプションを利用します。

デフォルトでは次の文はエラーとなる。

太字強調同じように無視されます。

オプションで"allow": ["も"]を指定することで、を例として扱うことができます。

{
    "rules": {
        "no-doubled-joshi": {
            // 助詞のうち「も」は複数回の出現を許す
            "allow": ["も"]
        }
    }
}

Tests

npm test

Reference

Related Libraries

Contributing

  1. Fork it!
  2. Create your feature branch: git checkout -b my-new-feature
  3. Commit your changes: git commit -am 'Add some feature'
  4. Push to the branch: git push origin my-new-feature
  5. Submit a pull request :D

License

MIT