Giter Club home page Giter Club logo

textlint-rule-no-doubled-joshi's Introduction

textlint-ja

textlintの日本語コミュニティです。

textlintの日本語関係のルールのリポジトリを置いたり、ルールの作り方やこういう事をチェックしたいという話を扱う場所です。

また、textlint-jaは複数人でパッケージを管理することで、パッケージのメンテナンス性を保つことを目的にしています。 textlint-jaにパッケージを移管して複数人で管理したい場合は、次の方法で伝えてください。

Gitter

Gitterに自由にチャットできるチャンネルがあります。 日本語で問題ないので、気軽に書き込んでください。

Join the chat at https://gitter.im/textlint-ja/textlint-ja

ガイドライン

このガイドラインはtextlint-ja organizationの既存、新しいメンバーに対するものです。

このドキュメントは新しいメンバーやパッケージを追加する手順についてを紹介しています。

原則

  • 人がボトルネックになることを避けること
  • 人が正しいことをできるように信用すること(正しくないことが証明されない限り)

人がボトルネックになるのを避けるためには、すべてのメンバーがプロジェクト管理に必要な権限を扱える必要があります。

いくつかの行動については他のメンバーやコミュニティと適切であるかを話し合ったほうが良いかもしれません。その他については個人の決定を優先して良いでしょう。

不適切な行動についてはプロジェクトチームの [email protected] に報告されるかもしれません。 不適切な行動は Code of Conduct に定義されています。

すべての苦情は、レビュー、調査され、必要かつ適切と判断された対応がとられます。プロジェクトチームは、事象の報告者に関する守秘義務があります。

For maintainer

メンテナーは自由に新しいメンバーを追加できます。

Code of Conduct に同意でき、プロジェクトに関心がある信用できる人を見つけた場合、次の手順でプロジェクトのメンバーに追加できます。

GitHub

  1. https://github.com/orgs/textlint-ja/people を開く
  2. Invite memberをクリック
  3. 招待したいメンバーのユーザ名またはEmailを入力
  4. "Owner"を選択
  5. Send Invitationする

詳細は Inviting users to join your organization - User Documentation を参照してください。

npm

  1. https://www.npmjs.com/settings/textlint-ja/packages を開く
  2. 招待したいメンバーのユーザ名またはEmailを入力
  3. "Owner"を選択
  4. add memberをクリック

詳細は Managing Members · npm Orgs Documentation を参照してください。

For new member

Organizationへパッケージを追加するには、次の手順で追加できます。

GitHub

Organizationへパッケージを追加するには、次の手順で追加できます。

  1. https://github.com/$USER/$PROJECT/settings (リポジトリの設定ページ) を開く
  2. Transfer をクリック
  3. "New owner's GitHub username or organization name"にtextlint-ja と入力
  4. "I understand, transfer this repository" をクリックして移譲

詳細は About repository transfers - User Documentation を参照してください。

npm

次のコマンドの $PKGNAME を自分のパッケージ名に置き換えてから実行してください。

npm access grant read-write textlint-ja:developers $PKGNAME

または次の操作でも移譲できます。

  1. https://www.npmjs.com/settings/textlint-ja/teams/team/developers/access を開く
  2. "Populate from personal packages"の選択肢から移譲したいパッケージ名を選択
  3. make it so をクリック

詳細は Managing team access to Org packages | npm Documentation を参照してください。

Attribution

このガイドラインは Maintenance Guidelines for Organization に基づいています。

このガイドラインは Creative Commons Attribution 4.0 International Public License(CC BY 4.0) のライセンスで利用できます。

textlint-rule-no-doubled-joshi's People

Contributors

azu avatar dependabot[bot] avatar k-tahiro avatar mshibanami avatar takahashim avatar yujiorama avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

textlint-rule-no-doubled-joshi's Issues

"に"の連続

pre/post scriptを自動的に実行しないように

はvalidな気がする

ignore paragraph in List

add ListItem to ignore list

- [これはそれはどれは](http://example.com]

のようなリストのLinkみたいのが無視できないという問題

# 参考サイト

- [これはそれはどれは](http://example.com]
- [これはそれはどれは](http://example.com]

のような形で書くとき、この文字列は自分で扱うものではなくサイトのタイトルとなるため、障害になりやすい…

https://github.com/azu/textlint-rule-no-doubled-joshi/blob/fe0c8234d0ca14c0b29fb7bc12d2e54bc95d5d13/src/no-doubled-joshi.js#L72

index baseに変更する

const originalIndex = source.originalIndexFromPosition({
line: sentence.loc.start.line,
column: sentence.loc.start.column + (current.word_position - 1)
});

もしかしたら column + word_position で位置がずれているのかもしれない。
originalIndexFromIndex を使うようにすれば、columnずれは起きなくなるはず。

allow doubling particles separated with punctuation

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

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

異なる種類の助詞の重複を許したい

『ターミナルで「test」入力する』を与えると「一文に二回以上利用されている助詞 "と" がみつかりました」のエラーが出ますが、1個目の「と」は格助詞、2個めの「と」は接続助詞です。このような場合は重複を許したいです。

品詞の種類も一致条件に利用する

REPLで実行するコードをブロック文で囲むことでうまくいきます
https://azu.github.io/morpheme-match/?text=REPL%E3%81%A7%E5%AE%9F%E8%A1%8C%E3%81%99%E3%82%8B%E3%82%B3%E3%83%BC%E3%83%89%E3%82%92%E3%83%96%E3%83%AD%E3%83%83%E3%82%AF%E6%96%87%E3%81%A7%E5%9B%B2%E3%82%80%E3%81%93%E3%81%A8%E3%81%A7%E3%81%86%E3%81%BE%E3%81%8F%E3%81%84%E3%81%8D%E3%81%BE%E3%81%99

"ブロック文で囲むことで" この "de"は品詞が違うので、連続してないとみなすことで誤検知を減らせる?

Codeと `、`が連続すると、`、`が間隔値として無視されてしまう

関数宣言で関数`fn1`、関数式で関数`fn2`を定義する

これを"で"が連続していると判定してしまう。
があるので

で -> 、 -> で

なので、間隔が1+空いているので問題ないはず。

問題

マスクの処理によって、___、というトークンの一部になってしまってる。

関数宣言で関数___、関数式で関数___を定義する

https://kuromojin.netlify.app/#%E9%96%A2%E6%95%B0%E5%AE%A3%E8%A8%80%E3%81%A7%E9%96%A2%E6%95%B0___%E3%80%81%E9%96%A2%E6%95%B0%E5%BC%8F%E3%81%A7%E9%96%A2%E6%95%B0___%E3%82%92%E5%AE%9A%E7%BE%A9%E3%81%99%E3%82%8B

"、" の許容とコンテキストの両立

#2 #3 で"、"をデフォルトでは許容するように変更した。

この変更により、本来はエラーとしていたものも許容されるケースがある。
strict: trueの場合は本来のエラーを再現した挙動を維持した状態となっている。

"、"がコンテキストにより意味合いが変わるため、それを補足する方法について考えるIssue

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

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

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

36a0498 という感じで

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

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

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


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

意味的に対になるものが並立している場合
文が複文になっていて、同じデ格の格助詞がそれぞれ別の動詞にかかっている場合

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

同じ格助詞が一つの動詞に複数かかっていないか、またはかかっていても意味的に並立している場合

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

separatorCharsの設定が無視される

環境

  • macOS 10.15 Catalina
  • Node 13.3.0
  • textlint 11.5.0
  • textlint-rule-no-doubled-joshi 3.5.3

テストした文字列

1行ごとに異なるファイルに入れています.

右がiPhone,左がAndroidです。
右がiPhone,左がAndroidです.
右がiPhone、左がAndroidです。
右がiPhone、左がAndroidです.
右がiPhone!左がAndroidです!
右がiPhone?左がAndroidです?

.textlintrc

{
    "rules": {
        "no-doubled-joshi": {
            "min_interval": 1,
            "strict": false,
            "allow": [],
            "separatorChars": [""]
        }
    }
}

期待される動作

区切り文字の設定がだけになっているため,全て検出されるはずです.ただし,だけは扱いが特殊なため,

右がiPhone、左がAndroidです。
右がiPhone、左がAndroidです.

の2つを除く全てがエラーになるはずです.

実際の動作

区切り文字に何を指定しても結果に影響しません.例えばのみを指定したとき,

右がiPhone,左がAndroidです。
右がiPhone,左がAndroidです.

だけがエラーとして検出されます.また,区切り文字にを指定しても,結果は変わりませんでした.

私見

TypeScriptにもtextlintにも詳しくないのですが,ソースコードを見る限りseparatorCharsはどこにも使われていないように見えます.
また,全角ピリオドを使う文章では全角カンマ()を読点()の代わりに使用するため,読点のみ扱いが異なる現在の実装では不都合が出る文章も多いかと思いますが,いかがでしょうか?

がの連続

リリース中にproductionビルドだとアプリが動作しないバグが見つかる

とか がかかってもおかしくないケースな気がする

括弧で囲まれた文章が一文として判定される

image

「」や各種括弧内の文章が"。"で文を区切っているにもかかわらず一文として判定され、別々の文でも同じ助詞を使っていると指摘対象になってしまいます。小説を書くときは文章を「」で囲うことは珍しくないため、囲っていても通常の文と同様に扱っていただけると助かります。

[Question]「登ったり降りたり」を許容する方法

「登ったり降りたり」というのは助詞の連続かもしれないが、寛容的な言い回しなので許容したい時、設定する方法はありますか?

他にも

  • 「それはそれは」
  • 「見たことも聞いたことも」
  • 「親でも子でも」
  • 「してもしなくても」
  • 「貴方にとっても私にとっても」

など

doesn't work for plain text files

This rule doesn't work for plain text files.

$ echo '材料不足で代替素材で製品を作った。' > test.txt
$ textlint --rule no-doubled-joshi test.txt
$
# No warnings output from textlint

It works for the same sentence in markdown files though.

$ echo '材料不足で代替素材で製品を作った。' > test.md
$ textlint --rule no-doubled-joshi test.md
/Users/io-monad/test.md
  1:10  error  一文に二回以上利用されている助詞 "で" がみつかりました。  no-doubled-joshi

✖ 1 problem (1 error, 0 warnings)

It seems textlint core passes to [Syntax.Paragraph] handler of the rule with a node of { type: "Paragraph", raw: "Blah Blah", range: ... } and StringSource#toString() of textlint-util-to-string returns an empty string for that node.

I'm not pretty sure whether this is a problem of textline-util-to-string or this rule, or perhaps textlint core.

Thanks.

EDIT: Oh, forgot to write some versions.

Tested with textlint 5.7.0

$ npm ls -g | grep textlint
├─┬ [email protected]
│ ├─┬ [email protected]
│ ├─┬ [email protected]
│ ├─┬ [email protected]
├─┬ [email protected]
│ ├── [email protected]
│ └─┬ [email protected]

エラーメッセージの詳細化

CopilotのQuick Fixesで助詞の修正もできる。

image

~xのようにxをビット否定演算子は演算した結果は、-(x + 1)となります。

このエラーメッセージで、具体的にどの助詞がどこの助詞と重なっているかを含めると良くなりそう。

一文に二回以上利用されている助詞 "は" がみつかりました。

ビット否定演算子"は"
演算した結果"は"

助詞 "は" が連続しているため、助詞を変更する または文を区切ってください。

とか、もう少し何を修正すればいいのかをエラーメッセージに入れたい。
そうすると人間にもCopilotに良い影響が出る

読点がハードコードされている

現状の実装

読点はソースコード中にハードコードされており,ユーザが任意に設定することは出来ません.

export const is読点Token = (token: KuromojiToken) => {
return token.surface_form === "、" && token.pos === "名詞";
};

起き得る問題

全角ピリオドを使用した文章では,の代わりに全角カンマ()を用いることが多く見られます.そのため,現状の実装では全角カンマを使用する文章においては正しく動作しません.

提案

  • ユーザが任意で読点として扱う文字列を変更できるような設定を加える

または

  • に加えても読点として使用する

のいずれかの変更を入れて頂けると幸いです.

refs #25

"に" と "には" を区別したい

ECMAScriptが参照するUnicodeの仕様も更新されて続けています。
そのため、文字列の長さを正確に測るにはある程度の妥協が必要になります。

正確測るは で二重になってる。
けどにはという感じがするのだけど、これはkuromojiが変なのか、日本語が変なのか。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.