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

文中に同じ助詞が複数出てくるのをチェックするtextlintルール
MIT License
22 stars 4 forks source link

allow doubling particles separated with punctuation #2

Closed takahashim closed 8 years ago

takahashim commented 8 years ago

「右がiPhone、左がAndroidです。」や「ナイフで切断した後、ハンマーで破砕した。」といったように、同一の格助詞が読点で句切られている文を許容したいです。

単純には、splitSentencesの引数に使われているcharRegExpにを追加すれば良さそうですが、「なんでも読点を打てばよいというのはいかがなものか」ということもあるかと思います。その場合は間隔値の算出をポイント制にして、通常の単語は1ポイント、が間に挟まる場合は5ポイントといったような計算をするようにしてもよいかもしれません(ポイント値は適当です)。

azu commented 8 years ago

なるほど。

ものすごく安直な実装だとを間隔値(+1)することで

「右がiPhone、左がAndroidです。」

"が" と "が" で間隔値は2になるのでパスできます。(デフォルトでは間隔値2以上はセーフとゆるめ)

彼女は困り切った表情で、小声で尋ねた。

この変更の仕方だと上記のような"、"の使い方も単純に間隔値が増えるのでスルーされてしまいます。("で"の間隔値が2となる)

なので、仰るとおり助詞以外の単語も含めたポイント性にしてデフォルト値をもう少しあげるなりする必要が出てきそうな気はします。(今は助詞同士のみを見てる)

以前、文中のの最大数をチェックするルールを書いた時に、を箇条書きのように使うケースは例外するようなものを入れたりしてました。 も前後のコンテキストによっての重みは違う気がしているので、その辺を考慮する仕組みがあれば両立できるのかもしれないですね。。 (単純にまだテストケースが足りてない感じがするので、色々探す必要がありそう)

takahashim commented 8 years ago

最初にあげた2つの例は、

という、それぞれ違う許容の仕方になっているんですよね…。逆に言うと、

をチェックできるとよいのですが、そうすると単語(文節)の依存関係(係り受け)解析+格の意味解析が必要になるので、kuromojiではできなさそうです。

現状では、ある程度NGなものも許容するのは仕方ないとして、明らかにダメなものをチェックするようになるとうれしいです。以前RedPenを試してみたときの経験では、許容したいのにNGになるケースが多発するとチェッカーとして使う気力がなくなるので、false positiveは極力避けてくれれば…と思いました。

azu commented 8 years ago

許容したいのにNGになるケースが多発するとチェッカーとして使う気力がなくなるので、false positiveは極力避けてくれれば

自分が書いてるルール大体この方向ですね。 強くチェックしたらいならstrict: trueしてくださいという感じにしています。

なので、を間隔値を増やす要素として追加してデフォルトをゆるやかにして、現状の挙動はstrictの方に残そうと思います。

azu commented 8 years ago

ひとまず、デフォルトでは"、"を許容するようにして3.0.0をリリースしました。

続きは別のIssueを立てました #4