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

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

文の途中に改行があるとエラーになる #69

Open tanioka256 opened 1 month ago

tanioka256 commented 1 month ago

以下の文で no-doubled-joshi のエラーが発生しました。

関数でアクセスで
きる。

以下のコマンドを bash 上で実行すると再現します。

$ npm init -y
$ npm install textlint textlint-rule-no-doubled-joshi --save-dev
$ echo -e "関数でアクセスで\nきる。" > test.txt
$ npx textlint --rule no-doubled-joshi test.txt

エラーメッセージは次のようになりました。

test.txt
  1:8  error  一文に二回以上利用されている助詞 "で" がみつかりました。

次の助詞が連続しているため、文を読みにくくしています。

- 関数"で"
- アクセス"で"

同じ助詞を連続して利用しない、文の中で順番を入れ替える、文を分割するなどを検討してください。
  no-doubled-joshi

✖ 1 problem (1 error, 0 warnings)

echo コマンドの \n の部分を削除するとエラーは出ませんでした。

azu commented 1 month ago
image

https://textlint.github.io/astexplorer/#/snippet/woXCqHBhcnNlcklEwrN0ZXh0bGludDp0xI0tdG8tYXN0wqjEhXR0xJBnc8KBxIrEjMSOxJDEksSUdMSWxJjEmnTDgMKodsSGc2lvbsSjxKXEjcSPxJHEk8SVxJfEmcSbwqYxNC4wLjTCqGZpbGVuYW1lwrBzb3VyY2UudW5kZcWKbmVkwqRjb8Wcw5kiw6nClsKiw6bClcKww6PCgcKnw6PCgsKixbHCr8WxwrvFscK5xa7CpwrFrsKNxbHCi8OjwoDCgg}

txtでは、改行でそれぞれ別のパラグラフとして認識されるためだと思います。(こちらはルール側では対応は難しいです)

Markdownでは、"関数でアクセスで\nきる。"という感じになってこれもエラーですが、どうするかは悩ましい感じがしますね。改行を無視すれば対応はできるとは思いますが、形態素解析をしているルールは大体同じ壊れ方をするとは思います。 意味が変わるところで改行を入れると、文章としても意味は変わる可能性がある(どうレンダリングされるかは検知できない)ので、自然なエラーとも言えます。

tanioka256 commented 1 month ago

azu 様、丁寧な説明ありがとうございました。

text プラグインは、改行が Paragraph ノードの区切りになることを理解しました。

markdown プラグインの動作でも試したところ、行末の 2 個の空白と改行が Break ノードになるため、改行の前後で文字列が区切られていないような結果になりました。

個人的に欲しい結果を得るために、単一の改行を Break ノードに、複数の改行 (空行) を Paragraph ノードの区切りになるようなプラグインを作ることにしました。