textlint-ja / textlint-rule-ja-no-redundant-expression

冗長な表現をチェックするtextlintルール
MIT License
27 stars 3 forks source link

より一般的なルールに変更・追加 #6

Closed shirayu closed 5 years ago

shirayu commented 5 years ago

リンク先の趣旨にのっとり,より多くの表現がマッチするように変更

azu commented 5 years ago

(ちょっとグローバルに入れないといけないのが面倒ですが)、technological-book-corpus-jaのコーパスでテストしてみました。

# ルールとコーパスをglobalへインストール
$ npm i -g . textlint technological-book-corpus-ja
# コーパスに対してルールを実行する
$ technological-book-corpus-ja | xargs textlint --rule textlint-rule-ja-no-redundant-expression -f pretty-error
azu commented 5 years ago
ja-no-redundant-expression: "処理を行う"は冗長な表現です。"処理する"など簡潔な表現にすると文章が明瞭になります。参考: http://www.atmarkit.co.jp/ait/articles/1001/19/news106_2.html
/Users/azu/.nodebrew/node/v11.5.0/lib/node_modules/technological-book-corpus-ja/source/Hatena-Textbook/swift-development-apps.md:669:43
                                                                v
    668.
    669. Storyboard で設定された segue の identifier に合わせて処理を行うことができる。
    670.

ja-no-redundant-expression: "することが可能です"は冗長な表現です。"することが可能"を省き簡潔な表現にすると文章が明瞭になります。参考: http://qiita.com/takahi-i/items/a93dc2ff42af6b93f6e0
/Users/azu/.nodebrew/node/v11.5.0/lib/node_modules/technological-book-corpus-ja/source/js-primer/object/README.md:60:32
                                                                       v
    59. オブジェクトは、一度作成した後もその値自体を変更できるためミュータブル(mutable)の特性を持ちます。
    60. そのため、作成したオブジェクトに対して、後からプロパティを追加することが可能です。
    61.
                                                                       ^

これとかは少し意味がおかしくなりそうなケースですね。 (たしかこういうのがありそうなので、確実だろうという感じの少し冗長なtokenに限定してたんですよね。)

shirayu commented 5 years ago

ご確認ありがとうございます.

このPRの直接の影響は前者の処理を行うことができる -> 処理をできるですね. このルールでは 処理をすることができる に修正されます. 「を行う」を「する」に置換すると「することができる」になってしまい,文法的には変ではないですが,まだ冗長ですね. 「〜を行うことができる」を「〜できる」に修正するルールを先に適用するのがよいのでしょうか?

後者の追加することが可能です の検出は問題ないのではないでしょうか? (この例を見て関連issueを思いついたので別途 #7 として立てました)

azu commented 5 years ago

あ、前者は問題なかったですね。 後者もメッセージ的にそのまま置換すると変と思ってたのですが、自動修正はされないので大丈夫でした。


ja-no-redundant-expression: "オペレーションを実行"は冗長な表現です。"オペレーションする"など簡潔な表現にすると文章が明瞭になります。参考: http://www.atmarkit.co.jp/ait/articles/1001/19/news106_2.html
/Users/azu/.nodebrew/node/v11.5.0/lib/node_modules/technological-book-corpus-ja/source/Introduction-to-Add-on-Development-in-Blender/chapter_02/02_Register_Multiple_Operation_Classes.md:135:41
                                                                     v
    134.
    135. その後 ```self.report()``` メソッドを用いて、ユーザに対してオペレーションを実行した後に、オブジェクトを拡大・縮小したことがわかるようなメッセージをスクリプト実行ログに出力します。ここで、```execute()``` メソッドの引数である ```self``` は、オブジェクトのインスタンスです。
    136.                                                                  ^

"実行" -> "する" だと、これ"オペレーションするした"ですが、fixはされないから平気か。

📝 明日もう一度チェックしてみます。 エラー検出が増える変更なので、メジャーアップデートする感じになると思います。

azu commented 5 years ago

後、mecabの特性的に半角の記号がサ変接続となるらしいです。 (まあ現実的にはtypoか!みたいにコードにするので誤検知にはなりにくい気もしますが)

shirayu commented 5 years ago

次のケースは"$1を実行"が適当なんじゃないかなと思いました。 {処理, プログラム, テスト}を実行する

そうですね.コト(事態)ではなくモノ(物体)を指す場合は「〜を実行」でも問題なさそうですね.

(「事態」か「物体」かどちらの用法であるかの判定は「事態性判別」というテーマで研究されています. http://cl.sd.tmu.ac.jp/~komachi/papers/jnlp2010-eventnoun.pdf なお,「お茶する」の「お茶」や,「チンする」の「チン」のように,サ変名詞ではないけれど事態を表す場合というのも有りえます)

サ変接続 だけど する にしにくい例外ルールを定義できるようにするとかですかね

はい,簡易的には例外を指定できるようにするのがよさそうですね.

azu commented 5 years ago

どのようにオプション化するのがいいかはちょっと悩みどころですが、次の感じが愚直ですかね。 少し冗長すぎる感じはしますが…

Example

module.exports = [
    {
        id: "$1を実行",
        message: `"$1を実行"は冗長な表現です。"$1する"など簡潔な表現にすると文章が明瞭になります。`,
        url: "http://www.atmarkit.co.jp/ait/articles/1001/19/news106_2.html",
        tokens: [
            {
                "pos": "名詞",
                "pos_detail_1": "サ変接続",
                "_capture": "$1"
            },
            {
                "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": "ジッコー"
            },
        ]
    }

]

.textlintrc:

{
    "rules": {
        "ja-no-redundant-expression": {
           "dictionary": {
              "$1を行う": {
                "disable": true
              },
              "$1を実行": {
                "allow": ["ソフトウェア"] // 含まれているなら無視
              }
           }
        }
    }
}

現状の辞書自体は人によっては少しfalse positiveがありますが、辞書自体には問題ないのでこのままマージして、別PRで制御できる仕組みを追加するとかですかね。

azu commented 5 years ago

8 にIssueを分けたので、とりあえずマージします。