Skip to content

Commit d18c94d

Browse files
committed
fix: 品詞細分類2,3も助詞の一致比較に利用するに変更
kuromojiの形態素解析が単語に依存しているため、余計なfalse positiveを減らす目的。 > 削除しようとするとエラーが発生する もOKになる。検知できなくなるケースは今のところ見つかっていない fix #29
1 parent 611d963 commit d18c94d

File tree

2 files changed

+30
-32
lines changed

2 files changed

+30
-32
lines changed

src/token-utils.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,8 +58,11 @@ export const concatJoishiTokens = (tokens: KuromojiToken[]) => {
5858
// http://www.unixuser.org/~euske/doc/postag/index.html#chasen
5959
// http://chasen.naist.jp/snapshot/ipadic/ipadic/doc/ipadic-ja.pdf
6060
export const createKeyFromKey = (token: KuromojiToken) => {
61-
// e.g.) "は:助詞.係助詞"
62-
return `${token.surface_form}:${token.pos}.${token.pos_detail_1}`;
61+
// e.g.) "は:助詞.係助詞.*.*"
62+
// "しようとすると" と には次の違いある
63+
// と 助詞 格助詞 一般 *
64+
// と 助詞 接続助詞 * *
65+
return `${token.surface_form}:${token.pos}.${token.pos_detail_1}.${token.pos_detail_2}.${token.pos_detail_3}`;
6366
};
6467
// keyからsurfaceを取り出す
6568
export const restoreToSurfaceFromKey = (key: string) => {

test/no-doubled-joshi-test.ts

Lines changed: 25 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,17 @@ tester.run("no-double-joshi", rule, {
1818
"そのため、文字列の長さを正確に測るにはある程度の妥協が必要になります。",
1919
"そんな事で言うべきではない。",
2020
"言うのは簡単の法則。",
21+
// 品詞細分類2の一致を見ている
22+
// "しようとすると" と には次の違いある
23+
// と 助詞 格助詞 一般 *
24+
// と 助詞 接続助詞 * *
25+
"削除しようとすると問題が発生する",
26+
// kuromojiだと品詞細分類2が次の単語で変わる
27+
// https://github.com/textlint-ja/textlint-rule-no-doubled-joshi/issues/29
28+
"削除しようとするとエラーが発生する",
29+
// 並立助詞
2130
"台に登ったり降りたりする",
31+
"AとBとCを持ってきて",
2232
// fix regression - https://travis-ci.org/textlint-ja/textlint-rule-preset-ja-technical-writing/builds/207700760#L720
2333
"慣用的表現、熟語、概数、固有名詞、副詞など、漢数字を使用することが一般的な語句では漢数字を使います。",
2434
// 1個目の「と」は格助詞、2個めの「と」は接続助詞
@@ -27,19 +37,19 @@ tester.run("no-double-joshi", rule, {
2737
// "プロパティを削除しようとするとエラーが発生します。",
2838
{
2939
text: "太字も強調も同じように無視されます。",
30-
options: { allow: ["も"] }
40+
options: {allow: ["も"]}
3141
},
3242
// 区切り文字をカスタムする
3343
// ♪を区切り文字としたので、次の文は2つのセンテンスになる
3444
{
3545
text: "これはペンです♪これは鉛筆です♪",
36-
options: { separatorCharacters: ["♪"] }
46+
options: {separatorCharacters: ["♪"]}
3747
},
3848
// ,を読点とみなす
3949
{
4050
text: "これがiPhone,これがAndroidです。",
41-
options: { commaCharacters: [","] }
42-
}
51+
options: {commaCharacters: [","]}
52+
},
4353
],
4454
invalid: [
4555
// エラー位置は最後の助詞の位置を表示する
@@ -64,6 +74,15 @@ tester.run("no-double-joshi", rule, {
6474
}
6575
]
6676
},
77+
{
78+
text: "クォートで囲むことで文字列を作成できる点は、他の文字列リテラルと同じです。",
79+
errors: [
80+
{
81+
message: `一文に二回以上利用されている助詞 "で" がみつかりました。`,
82+
index: 9
83+
}
84+
]
85+
},
6786
{
6887
text: "列車事故でバスで振り替え輸送を行った。 ",
6988
errors: [
@@ -152,30 +171,6 @@ tester.run("no-double-joshi", rule, {
152171
}
153172
]
154173
},
155-
{
156-
text: "これとあれとそれを持ってきて。",
157-
errors: [
158-
{
159-
message: `一文に二回以上利用されている助詞 "と" がみつかりました。`,
160-
line: 1,
161-
column: 6
162-
}
163-
]
164-
},
165-
{
166-
text: `この行にはtextlintによる警告は出ない。
167-
この行にはtextlintにより警告が発せられる。この行に何かしようとすると起きるという
168-
この行にはtextlintによる警告は出ない。
169-
`,
170-
ext: ".txt",
171-
errors: [
172-
{
173-
message: `一文に二回以上利用されている助詞 "と" がみつかりました。`,
174-
line: 2,
175-
column: 38
176-
}
177-
]
178-
},
179174
{
180175
// に + は と に + は
181176
// https://github.com/textlint-ja/textlint-rule-no-doubled-joshi/issues/15
@@ -207,7 +202,7 @@ tester.run("no-double-joshi", rule, {
207202
// 次のtextは1つのセンテンスとして認識されるので、"は"が重複する
208203
{
209204
text: "これはペンです.これは鉛筆です.",
210-
options: { separatorCharacters: ["。"] },
205+
options: {separatorCharacters: ["。"]},
211206
errors: [
212207
{
213208
message: `一文に二回以上利用されている助詞 "は" がみつかりました。`,
@@ -218,7 +213,7 @@ tester.run("no-double-joshi", rule, {
218213
// 、を読点と認識させなくする
219214
{
220215
text: "これがiPhone、これがAndroidです。",
221-
options: { commaCharacters: [] },
216+
options: {commaCharacters: []},
222217
errors: [
223218
{
224219
message: `一文に二回以上利用されている助詞 "が" がみつかりました。`,

0 commit comments

Comments
 (0)