Skip to content

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

Folders and files

NameName
Last commit message
Last commit date
Nov 25, 2023
Nov 25, 2023
Nov 14, 2015
Jan 6, 2024
Jan 6, 2024
Nov 12, 2015
Nov 12, 2015
Jan 6, 2024
Feb 18, 2025
Jan 6, 2024
Nov 25, 2023

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