npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

textlint-rule-no-doubled-joshi

v5.1.0

Published

textlint rule check doubled joshi

Downloads

138,285

Readme

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

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

対応方法

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

  • 助詞の書き間違いなので、別の助詞に置き換える
    • 例) 私は彼は好きだ私は彼が好きだ
  • 複数のことを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 } となっています。

助詞:連体化 "の"

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

助詞:格助詞 "を"

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

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

接続助詞:"て"

試しいただい

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

並立助詞

登ったり降りたりする

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

〜かどうか

これにするかどうか**検討する

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

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

これにするかを検討する

連語(助詞)

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

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