Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Merged
merged 2 commits into from
Dec 26, 2018

Conversation

shirayu
Copy link
Contributor

@shirayu shirayu commented Dec 25, 2018

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

@azu
Copy link
Member

azu commented Dec 25, 2018

(ちょっとグローバルに入れないといけないのが面倒ですが)、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
Copy link
Member

azu commented Dec 25, 2018

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
Copy link
Contributor Author

shirayu commented Dec 25, 2018

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

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

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

@azu
Copy link
Member

azu commented Dec 25, 2018

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


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はされないから平気か。

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

Copy link
Member

@azu azu left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

実際に既存の文章にルールを適応して、修正をやってみました。

大体は別の表現があったのですが、次のケースは"$1を実行"が適当なんじゃないかなと思いました。

という表現はvalidな感じがします。
("処理"は微妙なケースが多いけど)

{ソフトウェア, コマンド} は サ変接続 じゃないからセーフか。

preset-ja-technical-writing/ja-no-redundant-expression: "プログラムを実行"は冗長な表現です。"プログラムする"など簡潔な表現にすると文章が明瞭になります。参考: http://www.atmarkit.co.jp/ait/articles/1001/19/news106_2.html
/Users/azu/.ghq/github.com/asciidwango/js-primer/source/basic/read-eval-print/README.md:274:8
                        v
    273. 
    274. 実行時エラーはプログラムを実行している最中に発生するエラーです。
    275. 実行時(ランタイム)におきるエラーであるためランタイムエラーと呼ばれることもあります。
                        ^

すこし迷うケース

  • テストを実行する

"テスト(プログラム)を実行する"の省略に見える。
"テストをする"だと意味が違う感じになってしまう。


preset-ja-technical-writing/ja-no-redundant-expression: "テストを実行"は冗長な表現です。"テストする"など簡潔な表現にすると文章が明瞭になります。参考: http://www.atmarkit.co.jp/ait/articles/1001/19/news106_2.html
/Users/azu/.ghq/github.com/asciidwango/js-primer/source/use-case/nodecli/refactor-and-unittest/README.md:72:5
                 v
    71. 
    72. ユニットテストを実行するには、Mochaが提供する`mocha`コマンドを使います。
    73. Mochaをインストールした後、package.jsonの`scripts`プロパティを次のように記述します。
                 ^
  • "処理を行うX"を〜する

Async Functionとは非同期処理する関数を定義します。

とも言い換えはできるから、まあ大丈夫か。


preset-ja-technical-writing/ja-no-redundant-expression: "処理を行う"は冗長な表現です。"処理する"など簡潔な表現にすると文章が明瞭になります。参考: http://www.atmarkit.co.jp/ait/articles/1001/19/news106_2.html
/Users/azu/.ghq/github.com/asciidwango/js-primer/source/basic/async/README.md:1228:20
                                   v
    1227. 
    1228. Async Functionとは非同期処理を行う関数を定義する構文です。
    1229. Async Functionは通常の関数とは異なり、必ず`Promise`インスタンスを返す関数を定義します。
                                   ^

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

@@ -253,20 +253,13 @@ module.exports = [
},
{
// https://azu.github.io/morpheme-match/?text=動作の(確認を行わなければ)ならない
message: `"確認を行わなければ"は冗長な表現です。"確認しなければ"など簡潔な表現にすると文章が明瞭になります。`,
message: `"$1を行う"は冗長な表現です。"$1する"など簡潔な表現にすると文章が明瞭になります。`,
url: "http://www.atmarkit.co.jp/ait/articles/1001/19/news106_2.html",
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

📝 メモ
https://www.mew.org/~kazu/doc/japanese.html
のほうが参考としてはわかりやすいかな。
複数URLを書ける仕組みを入れたほうがよさそう

@azu
Copy link
Member

azu commented Dec 26, 2018

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

@shirayu
Copy link
Contributor Author

shirayu commented Dec 26, 2018

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

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

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

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

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

@azu
Copy link
Member

azu commented Dec 26, 2018

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

  • 各辞書(tokenの集合)に対して id のような 名前をつける
  • ルールのオプションで、id に対して
    • その辞書を(disable、デフォルトfalse)有効/無効化できるようにする(アップデートが大変な場合も多そうなので、マイグレーション的にON/OFFできるように)
    • その辞書で例外(allow、デフォルト[] or ["ソフトウェア"]など)を指定できるようにする
      • オプションはJSONなので正規表現リテラルが使えないため、@textlint/regexp-string-matcherを使うと文字列で正規表現も扱える

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
Copy link
Member

azu commented Dec 26, 2018

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

@azu azu merged commit b635c51 into textlint-ja:master Dec 26, 2018
azu pushed a commit that referenced this pull request Dec 31, 2018
#7 の一部に対処しました.

- "することを可能"
- "することをできる"

の検出を

- "すること[助詞]可能"
- "すること[助詞]できる"

に拡充しました.

またREADMEも修正しました.

#6 と同様にtechnological-book-corpus-jaを使った[比較結果](https://gist.github.com/shirayu/0507909cb8b5f3b689d46fcd29b489e4)も添付します.
azu added a commit to asciidwango/js-primer that referenced this pull request Jan 12, 2019
…614)

* refactor(textlint): textlint-rule-ja-no-redundant-expressionの検知を元に修正

Refs: textlint-ja/textlint-rule-ja-no-redundant-expression#6

* refactor: "すること[助詞]できる"を修正

* refactor: 行う、実行する系の冗長な表現を修正

* fix(variable): fix lint

* Update source/use-case/ajaxapp/display/README.md

* Update source/use-case/ajaxapp/promise/README.md

* Update source/basic/async/README.md

* Update source/basic/async/README.md

* Update source/basic/async/README.md

* Update source/basic/class/README.md

* Update source/basic/class/README.md

* Update source/basic/class/README.md

* Update source/basic/function-declaration/README.md

* Update source/basic/read-eval-print/README.md

* Update source/basic/string/README.md

* Update source/basic/string/README.md

* Update source/intro/feedback/README.md

* Update source/basic/condition/README.md

* Update source/basic/function-declaration/README.md

* Update source/basic/implicit-coercion/README.md

* Update source/basic/implicit-coercion/README.md

* chore(textlint): デフォルトの設定に戻す

* refactor: 細かい修正

* Update source/basic/function-scope/README.md

* Update source/use-case/todoapp/event-model/README.md
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants