@doujinreviewers/textlint-rule-for-creation 0.0.2 → 1.1.2

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of @doujinreviewers/textlint-rule-for-creation might be problematic. Click here for more details.

package/README.md CHANGED
@@ -72,5 +72,8 @@ MIT
72
72
  [textlint 12リリース、ブラウザで動くtextlint editorをベータリリース](https://efcl.info/2021/05/27/textlint-12-editor/)
73
73
 
74
74
  ### ルール
75
- []()
76
- []()
75
+ [textlint-rule-ja-no-abusage](https://github.com/textlint-ja/textlint-rule-ja-no-abusage)
76
+
77
+ [textlint-rule-no-insert-re](https://github.com/textlint-ja/textlint-rule-no-insert-re)
78
+
79
+ [textlint-rule-no-insert-dropping-sa](https://github.com/textlint-ja/textlint-rule-no-insert-dropping-sa)
package/lib/dict/arrow.js CHANGED
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
 
3
3
  module.exports = {
4
- "jidousi_tadousi": ["開け", "あけ"]
4
+ "jidousi_tadousi": ["開け", "あけ"],
5
+ "zyosi": ["こそは", "こそを", "からが", "からは", "をこそ", "とやら", "やらが", "までも", "までに", "までは", "までもが", "ばかりか", "ばかりが", "ばかりは", "ばかりを", "ばっかりか", "ばっかりが", "ばっかりは", "ばっかりを", "などばかり", "などばっかり", "などが", "なども", "などは", "などを", "とかが", "とかも", "とかは", "とかを", "とかばかり", "とかばっかり", "には", "にも", "ばかりに", "にだって", "とかだって", "などだって", "のかも", "にかも", "とが", "とも", "とは", "さえも", "にさえ", "とさえ", "すらも", "にすら", "とすら", "だけが", "だけを", "ほども", "ほどを", "でも", "てでも", "たりも", "たりが", "たりは", "たりさえ", "たりすら", "たりなど", "ながらも", "つつも", "なりが", "なりを", "てなんて", "になんて", "もなんて", "ばかりなんて", "ばっかりなんて", "だけを", "だけが", "だけは", "だけかも", "だけかも", "なと"]
5
6
  };
6
7
  //# sourceMappingURL=arrow.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/dict/arrow.js"],"names":["module","exports"],"mappings":";;AAAAA,MAAM,CAACC,OAAP,GAAiB;AACf,qBAAmB,CACjB,IADiB,EAEjB,IAFiB;AADJ,CAAjB","sourcesContent":["module.exports = {\n \"jidousi_tadousi\": [\n \"開け\",\n \"あけ\",\n ]\n};"],"file":"arrow.js"}
1
+ {"version":3,"sources":["../../src/dict/arrow.js"],"names":["module","exports"],"mappings":";;AAAAA,MAAM,CAACC,OAAP,GAAiB;AACf,qBAAmB,CACjB,IADiB,EAEjB,IAFiB,CADJ;AAKf,WAAS,CACP,KADO,EAEP,KAFO,EAGP,KAHO,EAIP,KAJO,EAKP,KALO,EAMP,KANO,EAOP,KAPO,EAQP,KARO,EASP,KATO,EAUP,KAVO,EAWP,MAXO,EAYP,MAZO,EAaP,MAbO,EAcP,MAdO,EAeP,MAfO,EAgBP,OAhBO,EAiBP,OAjBO,EAkBP,OAlBO,EAmBP,OAnBO,EAoBP,OApBO,EAqBP,QArBO,EAsBP,KAtBO,EAuBP,KAvBO,EAwBP,KAxBO,EAyBP,KAzBO,EA0BP,KA1BO,EA2BP,KA3BO,EA4BP,KA5BO,EA6BP,KA7BO,EA8BP,OA9BO,EA+BP,QA/BO,EAgCP,IAhCO,EAiCP,IAjCO,EAkCP,MAlCO,EAmCP,MAnCO,EAoCP,OApCO,EAqCP,OArCO,EAsCP,KAtCO,EAuCP,KAvCO,EAwCP,IAxCO,EAyCP,IAzCO,EA0CP,IA1CO,EA2CP,KA3CO,EA4CP,KA5CO,EA6CP,KA7CO,EA8CP,KA9CO,EA+CP,KA/CO,EAgDP,KAhDO,EAiDP,KAjDO,EAkDP,KAlDO,EAmDP,KAnDO,EAoDP,KApDO,EAqDP,IArDO,EAsDP,KAtDO,EAuDP,KAvDO,EAwDP,KAxDO,EAyDP,KAzDO,EA0DP,MA1DO,EA2DP,MA3DO,EA4DP,MA5DO,EA6DP,MA7DO,EA8DP,KA9DO,EA+DP,KA/DO,EAgEP,KAhEO,EAiEP,MAjEO,EAkEP,MAlEO,EAmEP,MAnEO,EAoEP,QApEO,EAqEP,SArEO,EAsEP,KAtEO,EAuEP,KAvEO,EAwEP,KAxEO,EAyEP,MAzEO,EA0EP,MA1EO,EA2EP,IA3EO;AALM,CAAjB","sourcesContent":["module.exports = {\n \"jidousi_tadousi\": [\n \"開け\",\n \"あけ\",\n ],\n \"zyosi\": [\n \"こそは\",\n \"こそを\",\n \"からが\",\n \"からは\",\n \"をこそ\",\n \"とやら\",\n \"やらが\",\n \"までも\",\n \"までに\",\n \"までは\",\n \"までもが\",\n \"ばかりか\",\n \"ばかりが\",\n \"ばかりは\",\n \"ばかりを\",\n \"ばっかりか\",\n \"ばっかりが\",\n \"ばっかりは\",\n \"ばっかりを\",\n \"などばかり\",\n \"などばっかり\",\n \"などが\",\n \"なども\",\n \"などは\",\n \"などを\",\n \"とかが\",\n \"とかも\",\n \"とかは\",\n \"とかを\",\n \"とかばかり\",\n \"とかばっかり\",\n \"には\",\n \"にも\",\n \"ばかりに\",\n \"にだって\",\n \"とかだって\",\n \"などだって\",\n \"のかも\",\n \"にかも\",\n \"とが\",\n \"とも\",\n \"とは\",\n \"さえも\",\n \"にさえ\",\n \"とさえ\",\n \"すらも\",\n \"にすら\",\n \"とすら\",\n \"だけが\",\n \"だけを\",\n \"ほども\",\n \"ほどを\",\n \"でも\",\n \"てでも\",\n \"たりも\",\n \"たりが\",\n \"たりは\",\n \"たりさえ\",\n \"たりすら\",\n \"たりなど\",\n \"ながらも\",\n \"つつも\",\n \"なりが\",\n \"なりを\",\n \"てなんて\",\n \"になんて\",\n \"もなんて\",\n \"ばかりなんて\",\n \"ばっかりなんて\",\n \"だけを\",\n \"だけが\",\n \"だけは\",\n \"だけかも\",\n \"だけかも\",\n \"なと\",\n ]\n};"],"file":"arrow.js"}
@@ -0,0 +1,56 @@
1
+ "use strict";
2
+
3
+ module.exports = [{
4
+ "message": "\"適用\"の誤用である可能性があります。適応 => 適用",
5
+ "expected": "を適用",
6
+ "tokens": [{
7
+ "surface_form": "を",
8
+ "pos": "助詞",
9
+ "pos_detail_1": "格助詞",
10
+ "pos_detail_2": "一般",
11
+ "pos_detail_3": "*",
12
+ "conjugated_type": "*",
13
+ "conjugated_form": "*",
14
+ "basic_form": "を",
15
+ "reading": "ヲ",
16
+ "pronunciation": "ヲ"
17
+ }, {
18
+ "surface_form": "適応",
19
+ "pos": "名詞",
20
+ "pos_detail_1": "サ変接続",
21
+ "pos_detail_2": "*",
22
+ "pos_detail_3": "*",
23
+ "conjugated_type": "*",
24
+ "conjugated_form": "*",
25
+ "basic_form": "適応",
26
+ "reading": "テキオウ",
27
+ "pronunciation": "テキオー"
28
+ }]
29
+ }, {
30
+ "message": "動詞の連用形+辛い(つらい)の場合は、「ずらい」ではなく「づらい」が適切です。",
31
+ "expected": "$1づらい",
32
+ "tokens": [{
33
+ "pos": "動詞",
34
+ "pos_detail_1": "自立",
35
+ "conjugated_form": "連用形",
36
+ "_capture": "$1"
37
+ }, {
38
+ "surface_form": "ず"
39
+ }, {
40
+ "surface_form": "らい"
41
+ }]
42
+ }, {
43
+ "message": "動詞の連用形+辛い(つらい)の場合は、「ずらい」ではなく「づらい」が適切です。",
44
+ "expected": "$1づらい",
45
+ "tokens": [{
46
+ "pos": "動詞",
47
+ "pos_detail_1": "自立",
48
+ "conjugated_form": "連用形",
49
+ "_capture": "$1"
50
+ }, {
51
+ "surface_form": "ずら"
52
+ }, {
53
+ "surface_form": "い"
54
+ }]
55
+ }];
56
+ //# sourceMappingURL=gozidatuzi.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/dict/gozidatuzi.js"],"names":["module","exports"],"mappings":";;AAAAA,MAAM,CAACC,OAAP,GAAiB,CACf;AACE,aAAW,+BADb;AAEE,cAAY,KAFd;AAGE,YAAU,CACR;AACE,oBAAgB,GADlB;AAEE,WAAO,IAFT;AAGE,oBAAgB,KAHlB;AAIE,oBAAgB,IAJlB;AAKE,oBAAgB,GALlB;AAME,uBAAmB,GANrB;AAOE,uBAAmB,GAPrB;AAQE,kBAAc,GARhB;AASE,eAAW,GATb;AAUE,qBAAiB;AAVnB,GADQ,EAaR;AACE,oBAAgB,IADlB;AAEE,WAAO,IAFT;AAGE,oBAAgB,MAHlB;AAIE,oBAAgB,GAJlB;AAKE,oBAAgB,GALlB;AAME,uBAAmB,GANrB;AAOE,uBAAmB,GAPrB;AAQE,kBAAc,IARhB;AASE,eAAW,MATb;AAUE,qBAAiB;AAVnB,GAbQ;AAHZ,CADe,EA+Bf;AACE,aAAW,yCADb;AAEE,cAAY,OAFd;AAGE,YAAU,CACR;AACE,WAAO,IADT;AAEE,oBAAgB,IAFlB;AAGE,uBAAmB,KAHrB;AAIE,gBAAY;AAJd,GADQ,EAOR;AACE,oBAAgB;AADlB,GAPQ,EAUR;AACE,oBAAgB;AADlB,GAVQ;AAHZ,CA/Be,EAiDf;AACE,aAAW,yCADb;AAEE,cAAY,OAFd;AAGE,YAAU,CACR;AACE,WAAO,IADT;AAEE,oBAAgB,IAFlB;AAGE,uBAAmB,KAHrB;AAIE,gBAAY;AAJd,GADQ,EAOR;AACE,oBAAgB;AADlB,GAPQ,EAUR;AACE,oBAAgB;AADlB,GAVQ;AAHZ,CAjDe,CAAjB","sourcesContent":["module.exports = [\n {\n \"message\": \"\\\"適用\\\"の誤用である可能性があります。適応 => 適用\",\n \"expected\": \"を適用\",\n \"tokens\": [\n {\n \"surface_form\": \"を\",\n \"pos\": \"助詞\",\n \"pos_detail_1\": \"格助詞\",\n \"pos_detail_2\": \"一般\",\n \"pos_detail_3\": \"*\",\n \"conjugated_type\": \"*\",\n \"conjugated_form\": \"*\",\n \"basic_form\": \"を\",\n \"reading\": \"ヲ\",\n \"pronunciation\": \"ヲ\"\n },\n {\n \"surface_form\": \"適応\",\n \"pos\": \"名詞\",\n \"pos_detail_1\": \"サ変接続\",\n \"pos_detail_2\": \"*\",\n \"pos_detail_3\": \"*\",\n \"conjugated_type\": \"*\",\n \"conjugated_form\": \"*\",\n \"basic_form\": \"適応\",\n \"reading\": \"テキオウ\",\n \"pronunciation\": \"テキオー\"\n }\n ]\n },\n {\n \"message\": \"動詞の連用形+辛い(つらい)の場合は、「ずらい」ではなく「づらい」が適切です。\",\n \"expected\": \"$1づらい\",\n \"tokens\": [\n {\n \"pos\": \"動詞\",\n \"pos_detail_1\": \"自立\",\n \"conjugated_form\": \"連用形\",\n \"_capture\": \"$1\"\n },\n {\n \"surface_form\": \"ず\",\n },\n {\n \"surface_form\": \"らい\",\n }\n ]\n },\n {\n \"message\": \"動詞の連用形+辛い(つらい)の場合は、「ずらい」ではなく「づらい」が適切です。\",\n \"expected\": \"$1づらい\",\n \"tokens\": [\n {\n \"pos\": \"動詞\",\n \"pos_detail_1\": \"自立\",\n \"conjugated_form\": \"連用形\",\n \"_capture\": \"$1\"\n },\n {\n \"surface_form\": \"ずら\",\n },\n {\n \"surface_form\": \"い\",\n }\n ]\n }\n];"],"file":"gozidatuzi.js"}
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+
3
+ module.exports = [{
4
+ "message": "不要な「さ」が挿入されています。",
5
+ "expected": "$2$3",
6
+ "tokens": [{
7
+ "conjugated_form": "ガル接続",
8
+ "basic_form": ["辛い", "美味しい", "寒い"],
9
+ "_capture": "$2"
10
+ }, {
11
+ "surface_form": "さ",
12
+ "_index": true
13
+ }, {
14
+ "basic_form": "そう",
15
+ "pos_detail_1": ["接尾", "助詞類接続"],
16
+ "_capture": "$3"
17
+ }]
18
+ }, {
19
+ "message": "不要な「さ」が挿入されています。",
20
+ "expected": "$1$2$3",
21
+ "tokens": [{
22
+ "pos": "動詞",
23
+ "_capture": "$1"
24
+ }, {
25
+ "surface_form": "た",
26
+ "pos": "助動詞",
27
+ "_capture": "$2"
28
+ }, {
29
+ "surface_form": "さ",
30
+ "_index": true
31
+ }, {
32
+ "basic_form": "そう",
33
+ "pos_detail_1": ["接尾", "助詞類接続"],
34
+ "_capture": "$3"
35
+ }]
36
+ }];
37
+ //# sourceMappingURL=saire.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/dict/saire.js"],"names":["module","exports"],"mappings":";;AAAAA,MAAM,CAACC,OAAP,GAAiB,CACf;AACE,aAAW,kBADb;AAEE,cAAY,MAFd;AAGE,YAAU,CACR;AACE,uBAAmB,MADrB;AAEE,kBAAc,CAAC,IAAD,EAAO,MAAP,EAAe,IAAf,CAFhB;AAGE,gBAAY;AAHd,GADQ,EAMR;AACE,oBAAgB,GADlB;AAEE,cAAU;AAFZ,GANQ,EAUR;AACE,kBAAc,IADhB;AAEE,oBAAgB,CAAC,IAAD,EAAO,OAAP,CAFlB;AAGE,gBAAY;AAHd,GAVQ;AAHZ,CADe,EAqBf;AACE,aAAW,kBADb;AAEE,cAAY,QAFd;AAGE,YAAU,CACR;AACE,WAAO,IADT;AAEE,gBAAY;AAFd,GADQ,EAKR;AACE,oBAAgB,GADlB;AAEE,WAAO,KAFT;AAGE,gBAAY;AAHd,GALQ,EAUR;AACE,oBAAgB,GADlB;AAEE,cAAU;AAFZ,GAVQ,EAcR;AACE,kBAAc,IADhB;AAEE,oBAAgB,CAAC,IAAD,EAAO,OAAP,CAFlB;AAGE,gBAAY;AAHd,GAdQ;AAHZ,CArBe,CAAjB","sourcesContent":["module.exports = [\n {\n \"message\": \"不要な「さ」が挿入されています。\",\n \"expected\": \"$2$3\",\n \"tokens\": [\n {\n \"conjugated_form\": \"ガル接続\",\n \"basic_form\": [\"辛い\", \"美味しい\", \"寒い\"],\n \"_capture\": \"$2\"\n },\n {\n \"surface_form\": \"さ\",\n \"_index\": true\n },\n {\n \"basic_form\": \"そう\",\n \"pos_detail_1\": [\"接尾\", \"助詞類接続\"],\n \"_capture\": \"$3\"\n }\n ]\n },\n {\n \"message\": \"不要な「さ」が挿入されています。\",\n \"expected\": \"$1$2$3\",\n \"tokens\": [\n {\n \"pos\": \"動詞\",\n \"_capture\": \"$1\"\n },\n {\n \"surface_form\": \"た\",\n \"pos\": \"助動詞\",\n \"_capture\": \"$2\"\n },\n {\n \"surface_form\": \"さ\",\n \"_index\": true\n },\n {\n \"basic_form\": \"そう\",\n \"pos_detail_1\": [\"接尾\", \"助詞類接続\"],\n \"_capture\": \"$3\"\n }\n ]\n },\n];"],"file":"saire.js"}
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+
3
+ module.exports = [{
4
+ "message": "「さ」が抜けています。",
5
+ "expected": "$1さ$2",
6
+ "tokens": [{
7
+ "basic_form": ["良い", "無", "無い"],
8
+ "_capture": "$1"
9
+ }, {
10
+ "surface_form": "そう",
11
+ "pos_detail_1": ["接尾", "助詞類接続"],
12
+ "_capture": "$2"
13
+ }]
14
+ }];
15
+ //# sourceMappingURL=sanuki.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/dict/sanuki.js"],"names":["module","exports"],"mappings":";;AAAAA,MAAM,CAACC,OAAP,GAAiB,CACf;AACE,aAAW,aADb;AAEE,cAAY,OAFd;AAGE,YAAU,CACR;AACE,kBAAc,CAAC,IAAD,EAAO,GAAP,EAAY,IAAZ,CADhB;AAEE,gBAAY;AAFd,GADQ,EAKR;AACE,oBAAgB,IADlB;AAEE,oBAAgB,CAAC,IAAD,EAAO,OAAP,CAFlB;AAGE,gBAAY;AAHd,GALQ;AAHZ,CADe,CAAjB","sourcesContent":["module.exports = [\n {\n \"message\": \"「さ」が抜けています。\",\n \"expected\": \"$1さ$2\",\n \"tokens\": [\n {\n \"basic_form\": [\"良い\", \"無\", \"無い\"],\n \"_capture\": \"$1\"\n },\n {\n \"surface_form\": \"そう\",\n \"pos_detail_1\": [\"接尾\", \"助詞類接続\"],\n \"_capture\": \"$2\"\n }\n ]\n },\n];"],"file":"sanuki.js"}
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+
3
+ module.exports = [{
4
+ "message": "助詞の連続",
5
+ "tokens": [{
6
+ "pos": "助詞"
7
+ }, {
8
+ "pos": "助詞",
9
+ "pos_detail_2": ["一般", "*"] //引用や連語ならスルー
10
+
11
+ }]
12
+ }, {
13
+ "message": '接続助詞と接続詞の連続',
14
+ "tokens": [{
15
+ "pos": "助詞",
16
+ "pos_detail_1": "接続助詞"
17
+ }, {
18
+ "pos": "接続詞"
19
+ }]
20
+ }, {
21
+ "message": '接続助詞と助動詞の連続',
22
+ "tokens": [{
23
+ "pos": "助詞",
24
+ "pos_detail_1": "接続助詞"
25
+ }, {
26
+ "pos": "助動詞"
27
+ }]
28
+ }];
29
+ //# sourceMappingURL=zyosi.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/dict/zyosi.js"],"names":["module","exports"],"mappings":";;AAAAA,MAAM,CAACC,OAAP,GAAiB,CACf;AACE,aAAW,OADb;AAEE,YAAU,CACR;AACE,WAAO;AADT,GADQ,EAGN;AACA,WAAO,IADP;AAEA,oBAAgB,CAAC,IAAD,EAAO,GAAP,CAFhB,CAE2B;;AAF3B,GAHM;AAFZ,CADe,EAYf;AACE,aAAW,aADb;AAEE,YAAU,CACR;AACE,WAAO,IADT;AAEE,oBAAgB;AAFlB,GADQ,EAIN;AACA,WAAO;AADP,GAJM;AAFZ,CAZe,EAuBf;AACE,aAAW,aADb;AAEE,YAAU,CACR;AACE,WAAO,IADT;AAEE,oBAAgB;AAFlB,GADQ,EAIN;AACA,WAAO;AADP,GAJM;AAFZ,CAvBe,CAAjB","sourcesContent":["module.exports = [\n {\n \"message\": \"助詞の連続\",\n \"tokens\": [\n {\n \"pos\": \"助詞\",\n },{\n \"pos\": \"助詞\",\n \"pos_detail_2\": [\"一般\", \"*\"]//引用や連語ならスルー\n }\n ]\n },\n {\n \"message\": '接続助詞と接続詞の連続',\n \"tokens\": [\n {\n \"pos\": \"助詞\",\n \"pos_detail_1\": \"接続助詞\",\n },{\n \"pos\": \"接続詞\",\n }\n ]\n },\n {\n \"message\": '接続助詞と助動詞の連続',\n \"tokens\": [\n {\n \"pos\": \"助詞\",\n \"pos_detail_1\": \"接続助詞\",\n },{\n \"pos\": \"助動詞\",\n }\n ]\n },\n];"],"file":"zyosi.js"}
@@ -9,24 +9,10 @@ function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try
9
9
 
10
10
  function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
11
11
 
12
- var Romanizer = require('js-hira-kata-romanize');
13
-
14
- var romajiConv = require('@koozaki/romaji-conv');
15
-
16
12
  var arrow = require('./dict/arrow');
17
13
 
18
14
  class EnhancedEngine {
19
- constructor() {
20
- this.romanizer = new Romanizer({
21
- mapping: Romanizer.MAPPING_KUNREI,
22
- chouon: Romanizer.CHOUON_CIRCUMFLEX,
23
- upper: Romanizer.UPPER_NONE
24
- });
25
- }
26
-
27
- romanize(hiraganaOrKatakana) {
28
- return this.romanizer.romanize(hiraganaOrKatakana);
29
- }
15
+ constructor() {}
30
16
 
31
17
  checkRetasu(tokenizer, text) {
32
18
  return _asyncToGenerator(function* () {
@@ -49,6 +35,34 @@ class EnhancedEngine {
49
35
  })();
50
36
  }
51
37
 
38
+ checkZyosi(tokenizer, result, fulltext) {
39
+ return _asyncToGenerator(function* () {
40
+ if (arrow.zyosi.includes(fulltext.slice(result.range[0], result.range[1]))) {
41
+ return false;
42
+ }
43
+
44
+ var fulltokens = yield tokenizer(fulltext);
45
+ var tokens = [];
46
+ fulltokens.reduce((prev, current) => {
47
+ if (prev.pos == "助詞" && current.pos == "助詞" && (current.pos_detail_2 == "一般" || current.pos_detail_2 == "*")) {
48
+ tokens = [prev, current];
49
+ }
50
+
51
+ return current;
52
+ });
53
+
54
+ if (new RegExp(tokens[0].surface_form.repeat(3) + "|" + tokens[0].surface_form.repeat(2) + "[~〜ー!!]").test(fulltext)) {
55
+ return false;
56
+ }
57
+
58
+ if (/終助詞/.test(tokens[0].pos_detail_1) || /終助詞/.test(tokens[1].pos_detail_1) || tokens[0].surface_form == "のみ" && /格助詞/.test(tokens[1].pos_detail_1) || /連体化/.test(tokens[1].pos_detail_1)) {
59
+ return false;
60
+ }
61
+
62
+ return true;
63
+ })();
64
+ }
65
+
52
66
  }
53
67
 
54
68
  var _default = new EnhancedEngine();
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/enhanced-engine.js"],"names":["Romanizer","require","romajiConv","arrow","EnhancedEngine","constructor","romanizer","mapping","MAPPING_KUNREI","chouon","CHOUON_CIRCUMFLEX","upper","UPPER_NONE","romanize","hiraganaOrKatakana","checkRetasu","tokenizer","text","test","tokens","meirei","surface_form","conjugated_form","conjugated_type","jidousi_tadousi","includes"],"mappings":";;;;;;;;;;;AAAA,IAAMA,SAAS,GAAGC,OAAO,CAAC,uBAAD,CAAzB;;AACA,IAAMC,UAAU,GAAGD,OAAO,CAAC,sBAAD,CAA1B;;AACA,IAAME,KAAK,GAAGF,OAAO,CAAC,cAAD,CAArB;;AAEA,MAAMG,cAAN,CAAqB;AAEnBC,EAAAA,WAAW,GAAG;AACZ,SAAKC,SAAL,GAAiB,IAAIN,SAAJ,CAAc;AAC7BO,MAAAA,OAAO,EAAEP,SAAS,CAACQ,cADU;AAE7BC,MAAAA,MAAM,EAAET,SAAS,CAACU,iBAFW;AAG7BC,MAAAA,KAAK,EAAEX,SAAS,CAACY;AAHY,KAAd,CAAjB;AAKD;;AAEDC,EAAAA,QAAQ,CAACC,kBAAD,EAAoB;AAC1B,WAAO,KAAKR,SAAL,CAAeO,QAAf,CAAwBC,kBAAxB,CAAP;AACD;;AAEKC,EAAAA,WAAW,CAACC,SAAD,EAAYC,IAAZ,EAAiB;AAAA;AAChC,UAAG,KAAKC,IAAL,CAAUD,IAAV,CAAH,EAAmB;AACjBA,QAAAA,IAAI,IAAI,GAAR;AACD;;AACD,UAAIE,MAAM,SAASH,SAAS,CAACC,IAAD,CAA5B;AACA,UAAIG,MAAM,SAASJ,SAAS,CAACG,MAAM,CAAC,CAAD,CAAN,CAAUE,YAAV,GAAyB,GAA1B,CAA5B;;AACA,UAAGD,MAAM,CAAC,CAAD,CAAN,CAAUE,eAAV,IAA6B,KAA7B,IAAsC,KAAKJ,IAAL,CAAUE,MAAM,CAAC,CAAD,CAAN,CAAUG,eAApB,CAAzC,EAA8E;AAC5E;AACA,YAAG,CAACpB,KAAK,CAACqB,eAAN,CAAsBC,QAAtB,CAA+BL,MAAM,CAAC,CAAD,CAAN,CAAUC,YAAzC,CAAJ,EAA2D;AACzD;AACA,iBAAO,IAAP;AACD;AACF;;AACD,aAAO,KAAP;AAbgC;AAcjC;;AA5BkB;;eAgCN,IAAIjB,cAAJ,E","sourcesContent":["const Romanizer = require('js-hira-kata-romanize');\nconst romajiConv = require('@koozaki/romaji-conv');\nconst arrow = require('./dict/arrow');\n\nclass EnhancedEngine {\n\n constructor() {\n this.romanizer = new Romanizer({\n mapping: Romanizer.MAPPING_KUNREI,\n chouon: Romanizer.CHOUON_CIRCUMFLEX,\n upper: Romanizer.UPPER_NONE\n });\n }\n\n romanize(hiraganaOrKatakana){\n return this.romanizer.romanize(hiraganaOrKatakana);\n }\n\n async checkRetasu(tokenizer, text){\n if(/れ$/.test(text)){\n text += \"る\";\n }\n let tokens = await tokenizer(text);\n let meirei = await tokenizer(tokens[0].surface_form + \"。\");\n if(meirei[0].conjugated_form == \"命令e\" || /五段/.test(meirei[0].conjugated_type)){\n // 「れる」を抜いても命令形で意味が通じるか、最初の文字が五段活用動詞になると多分れ足す言葉\n if(!arrow.jidousi_tadousi.includes(meirei[0].surface_form)){\n // 許可リストにもない\n return true;\n }\n }\n return false;\n }\n\n}\n\nexport default new EnhancedEngine();"],"file":"enhanced-engine.js"}
1
+ {"version":3,"sources":["../src/enhanced-engine.js"],"names":["arrow","require","EnhancedEngine","constructor","checkRetasu","tokenizer","text","test","tokens","meirei","surface_form","conjugated_form","conjugated_type","jidousi_tadousi","includes","checkZyosi","result","fulltext","zyosi","slice","range","fulltokens","reduce","prev","current","pos","pos_detail_2","RegExp","repeat","pos_detail_1"],"mappings":";;;;;;;;;;;AAAA,IAAMA,KAAK,GAAGC,OAAO,CAAC,cAAD,CAArB;;AAEA,MAAMC,cAAN,CAAqB;AAEnBC,EAAAA,WAAW,GAAG,CACb;;AAEKC,EAAAA,WAAW,CAACC,SAAD,EAAYC,IAAZ,EAAiB;AAAA;AAChC,UAAG,KAAKC,IAAL,CAAUD,IAAV,CAAH,EAAmB;AACjBA,QAAAA,IAAI,IAAI,GAAR;AACD;;AACD,UAAIE,MAAM,SAASH,SAAS,CAACC,IAAD,CAA5B;AACA,UAAIG,MAAM,SAASJ,SAAS,CAACG,MAAM,CAAC,CAAD,CAAN,CAAUE,YAAV,GAAyB,GAA1B,CAA5B;;AACA,UAAGD,MAAM,CAAC,CAAD,CAAN,CAAUE,eAAV,IAA6B,KAA7B,IAAsC,KAAKJ,IAAL,CAAUE,MAAM,CAAC,CAAD,CAAN,CAAUG,eAApB,CAAzC,EAA8E;AAC5E;AACA,YAAG,CAACZ,KAAK,CAACa,eAAN,CAAsBC,QAAtB,CAA+BL,MAAM,CAAC,CAAD,CAAN,CAAUC,YAAzC,CAAJ,EAA2D;AACzD;AACA,iBAAO,IAAP;AACD;AACF;;AACD,aAAO,KAAP;AAbgC;AAcjC;;AAEKK,EAAAA,UAAU,CAACV,SAAD,EAAYW,MAAZ,EAAoBC,QAApB,EAA6B;AAAA;AAC3C,UAAGjB,KAAK,CAACkB,KAAN,CAAYJ,QAAZ,CAAqBG,QAAQ,CAACE,KAAT,CAAeH,MAAM,CAACI,KAAP,CAAa,CAAb,CAAf,EAA+BJ,MAAM,CAACI,KAAP,CAAa,CAAb,CAA/B,CAArB,CAAH,EAAyE;AACvE,eAAO,KAAP;AACD;;AACD,UAAIC,UAAU,SAAShB,SAAS,CAACY,QAAD,CAAhC;AACA,UAAIT,MAAM,GAAG,EAAb;AACAa,MAAAA,UAAU,CAACC,MAAX,CAAkB,CAACC,IAAD,EAAOC,OAAP,KAAmB;AACnC,YAAID,IAAI,CAACE,GAAL,IAAY,IAAZ,IAAoBD,OAAO,CAACC,GAAR,IAAe,IAAnC,KAA4CD,OAAO,CAACE,YAAR,IAAwB,IAAxB,IAAgCF,OAAO,CAACE,YAAR,IAAwB,GAApG,CAAJ,EAA8G;AAC5GlB,UAAAA,MAAM,GAAG,CAACe,IAAD,EAAOC,OAAP,CAAT;AACD;;AACD,eAAOA,OAAP;AACD,OALD;;AAMA,UAAG,IAAIG,MAAJ,CAAWnB,MAAM,CAAC,CAAD,CAAN,CAAUE,YAAV,CAAuBkB,MAAvB,CAA8B,CAA9B,IAAmC,GAAnC,GAAyCpB,MAAM,CAAC,CAAD,CAAN,CAAUE,YAAV,CAAuBkB,MAAvB,CAA8B,CAA9B,CAAzC,GAA4E,SAAvF,EAAkGrB,IAAlG,CAAuGU,QAAvG,CAAH,EAAoH;AAClH,eAAO,KAAP;AACD;;AACD,UAAI,MAAMV,IAAN,CAAWC,MAAM,CAAC,CAAD,CAAN,CAAUqB,YAArB,KAAsC,MAAMtB,IAAN,CAAWC,MAAM,CAAC,CAAD,CAAN,CAAUqB,YAArB,CAAvC,IACGrB,MAAM,CAAC,CAAD,CAAN,CAAUE,YAAV,IAA0B,IAA1B,IAAkC,MAAMH,IAAN,CAAWC,MAAM,CAAC,CAAD,CAAN,CAAUqB,YAArB,CADrC,IAEE,MAAMtB,IAAN,CAAWC,MAAM,CAAC,CAAD,CAAN,CAAUqB,YAArB,CAFL,EAGG;AACD,eAAO,KAAP;AACD;;AACD,aAAO,IAAP;AArB2C;AAsB5C;;AA3CkB;;eA+CN,IAAI3B,cAAJ,E","sourcesContent":["const arrow = require('./dict/arrow');\n\nclass EnhancedEngine {\n\n constructor() {\n }\n\n async checkRetasu(tokenizer, text){\n if(/れ$/.test(text)){\n text += \"る\";\n }\n let tokens = await tokenizer(text);\n let meirei = await tokenizer(tokens[0].surface_form + \"。\");\n if(meirei[0].conjugated_form == \"命令e\" || /五段/.test(meirei[0].conjugated_type)){\n // 「れる」を抜いても命令形で意味が通じるか、最初の文字が五段活用動詞になると多分れ足す言葉\n if(!arrow.jidousi_tadousi.includes(meirei[0].surface_form)){\n // 許可リストにもない\n return true;\n }\n }\n return false;\n }\n\n async checkZyosi(tokenizer, result, fulltext){\n if(arrow.zyosi.includes(fulltext.slice(result.range[0],result.range[1]))){\n return false;\n }\n let fulltokens = await tokenizer(fulltext);\n let tokens = [];\n fulltokens.reduce((prev, current) => {\n if (prev.pos == \"助詞\" && current.pos == \"助詞\" && (current.pos_detail_2 == \"一般\" || current.pos_detail_2 == \"*\")) {\n tokens = [prev, current];\n }\n return current;\n });\n if(new RegExp(tokens[0].surface_form.repeat(3) + \"|\" + tokens[0].surface_form.repeat(2) + \"[~〜ー!!]\").test(fulltext)){\n return false;\n }\n if((/終助詞/.test(tokens[0].pos_detail_1) || /終助詞/.test(tokens[1].pos_detail_1))\n || (tokens[0].surface_form == \"のみ\" && /格助詞/.test(tokens[1].pos_detail_1))\n || /連体化/.test(tokens[1].pos_detail_1)\n ){\n return false;\n }\n return true;\n }\n\n}\n\nexport default new EnhancedEngine();"],"file":"enhanced-engine.js"}
@@ -19,11 +19,17 @@ function _asyncToGenerator(fn) { return function () { var self = this, args = ar
19
19
 
20
20
  var loadDictionaries = () => {
21
21
  // unavoidable
22
- var dict1 = require('./dict/retasu');
22
+ var dict1 = require('./dict/zyosi');
23
23
 
24
- var dict2 = require('./dict/miss');
24
+ var dict2 = require('./dict/gozidatuzi');
25
25
 
26
- return dict1.concat(dict2);
26
+ var dict3 = require('./dict/retasu');
27
+
28
+ var dict4 = require('./dict/sanuki');
29
+
30
+ var dict5 = require('./dict/saire');
31
+
32
+ return dict1.concat(dict2, dict3, dict4, dict5);
27
33
  };
28
34
 
29
35
  var reporter = context => {
@@ -51,6 +57,10 @@ var reporter = context => {
51
57
  if (!(yield engine.checkRetasu(_kuromojin.tokenize, text.slice(result.range[0], result.range[1])))) {
52
58
  continue;
53
59
  }
60
+ } else if (result.message == "助詞の連続") {
61
+ if (!(yield engine.checkZyosi(_kuromojin.tokenize, result, text))) {
62
+ continue;
63
+ }
54
64
  }
55
65
 
56
66
  if (result.expected) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/textlint-rule-for-creation.js"],"names":["loadDictionaries","dict1","require","dict2","concat","reporter","context","Syntax","RuleError","fixer","report","getSource","matchAll","tokenize","dictionaries","engine","EnhancedEngine","Str","node","Promise","resolve","reject","text","results","result","message","checkRetasu","slice","range","expected","index","fix","replaceTextRange","linter"],"mappings":";;;;;;;AAAA;;AACA;;AACA;;;;;;;;AAEA,IAAMA,gBAAgB,GAAG,MAAM;AAC7B;AACA,MAAIC,KAAK,GAAGC,OAAO,CAAC,eAAD,CAAnB;;AACA,MAAIC,KAAK,GAAGD,OAAO,CAAC,aAAD,CAAnB;;AACA,SAAOD,KAAK,CAACG,MAAN,CAAaD,KAAb,CAAP;AACD,CALD;;AAOA,IAAME,QAAQ,GAAIC,OAAD,IAAa;AAC5B,MAAM;AAAEC,IAAAA,MAAF;AAAUC,IAAAA,SAAV;AAAqBC,IAAAA,KAArB;AAA4BC,IAAAA,MAA5B;AAAoCC,IAAAA;AAApC,MAAkDL,OAAxD;AACA,MAAMM,QAAQ,GAAG,kDAAsB;AACrCC,IAAAA,QAAQ,EAAEA,mBAD2B;AAErCC,IAAAA,YAAY,EAAEd,gBAAgB;AAFO,GAAtB,CAAjB;AAIA,MAAMe,MAAM,GAAGC,uBAAf;AACA,SAAO;AACL,KAACT,MAAM,CAACU,GAAR,EAAaC,IAAb,EAAmB;AACjB,aAAO,IAAIC,OAAJ;AAAA,qCAAY,WAAOC,OAAP,EAAgBC,MAAhB,EAA2B;AAC5C,cAAMC,IAAI,GAAGX,SAAS,CAACO,IAAD,CAAtB;AACA,cAAIK,OAAO,SAASX,QAAQ,CAACU,IAAD,CAA5B;;AACA,eAAK,IAAME,MAAX,IAAqBD,OAArB,EAA8B;AAC5B,gBAAGC,MAAM,CAACC,OAAP,IAAkB,gBAArB,EAAsC;AACpC,kBAAG,QAAQV,MAAM,CAACW,WAAP,CAAmBb,mBAAnB,EAA6BS,IAAI,CAACK,KAAL,CAAWH,MAAM,CAACI,KAAP,CAAa,CAAb,CAAX,EAA2BJ,MAAM,CAACI,KAAP,CAAa,CAAb,CAA3B,CAA7B,CAAR,CAAH,EAAsF;AACpF;AACD;AACF;;AACD,gBAAIJ,MAAM,CAACK,QAAX,EAAqB;AACnBnB,cAAAA,MAAM,CAACQ,IAAD,EAAO,IAAIV,SAAJ,CAAcgB,MAAM,CAACC,OAArB,EAA8B;AACzCK,gBAAAA,KAAK,EAAEN,MAAM,CAACM,KAD2B;AAEzCC,gBAAAA,GAAG,EAAEtB,KAAK,CAACuB,gBAAN,CAAuBR,MAAM,CAACI,KAA9B,EAAqCJ,MAAM,CAACK,QAA5C;AAFoC,eAA9B,CAAP,CAAN;AAID,aALD,MAKO;AACLnB,cAAAA,MAAM,CAACQ,IAAD,EAAO,IAAIV,SAAJ,CAAcgB,MAAM,CAACC,OAArB,EAA8B;AACzCK,gBAAAA,KAAK,EAAEN,MAAM,CAACM;AAD2B,eAA9B,CAAP,CAAN;AAGD;AACF;;AACDV,UAAAA,OAAO;AACR,SArBM;;AAAA;AAAA;AAAA;AAAA,UAAP;AAsBD;;AAxBI,GAAP;AA0BD,CAjCD;;eAmCe;AACba,EAAAA,MAAM,EAAE5B,QADK;AAEbI,EAAAA,KAAK,EAAEJ;AAFM,C","sourcesContent":["import { createTextlintMatcher } from \"morpheme-match-textlint\";\nimport { tokenize } from \"kuromojin\";\nimport EnhancedEngine from \"./enhanced-engine\";\n\nconst loadDictionaries = () => {\n // unavoidable\n let dict1 = require('./dict/retasu');\n let dict2 = require('./dict/miss');\n return dict1.concat(dict2)\n}\n\nconst reporter = (context) => {\n const { Syntax, RuleError, fixer, report, getSource } = context;\n const matchAll = createTextlintMatcher({\n tokenize: tokenize,\n dictionaries: loadDictionaries()\n });\n const engine = EnhancedEngine\n return {\n [Syntax.Str](node) {\n return new Promise(async (resolve, reject) => {\n const text = getSource(node);\n let results = await matchAll(text);\n for (const result of results) {\n if(result.message == \"れ足す言葉の可能性があります\"){\n if(!(await engine.checkRetasu(tokenize, text.slice(result.range[0],result.range[1])))){\n continue;\n }\n }\n if (result.expected) {\n report(node, new RuleError(result.message, {\n index: result.index,\n fix: fixer.replaceTextRange(result.range, result.expected)\n }));\n } else {\n report(node, new RuleError(result.message, {\n index: result.index\n }));\n }\n }\n resolve();\n });\n }\n };\n};\n\nexport default {\n linter: reporter,\n fixer: reporter\n};"],"file":"textlint-rule-for-creation.js"}
1
+ {"version":3,"sources":["../src/textlint-rule-for-creation.js"],"names":["loadDictionaries","dict1","require","dict2","dict3","dict4","dict5","concat","reporter","context","Syntax","RuleError","fixer","report","getSource","matchAll","tokenize","dictionaries","engine","EnhancedEngine","Str","node","Promise","resolve","reject","text","results","result","message","checkRetasu","slice","range","checkZyosi","expected","index","fix","replaceTextRange","linter"],"mappings":";;;;;;;AAAA;;AACA;;AACA;;;;;;;;AAEA,IAAMA,gBAAgB,GAAG,MAAM;AAC7B;AACA,MAAIC,KAAK,GAAGC,OAAO,CAAC,cAAD,CAAnB;;AACA,MAAIC,KAAK,GAAGD,OAAO,CAAC,mBAAD,CAAnB;;AACA,MAAIE,KAAK,GAAGF,OAAO,CAAC,eAAD,CAAnB;;AACA,MAAIG,KAAK,GAAGH,OAAO,CAAC,eAAD,CAAnB;;AACA,MAAII,KAAK,GAAGJ,OAAO,CAAC,cAAD,CAAnB;;AACA,SAAOD,KAAK,CAACM,MAAN,CAAaJ,KAAb,EAAoBC,KAApB,EAA2BC,KAA3B,EAAkCC,KAAlC,CAAP;AACD,CARD;;AAUA,IAAME,QAAQ,GAAIC,OAAD,IAAa;AAC5B,MAAM;AAAEC,IAAAA,MAAF;AAAUC,IAAAA,SAAV;AAAqBC,IAAAA,KAArB;AAA4BC,IAAAA,MAA5B;AAAoCC,IAAAA;AAApC,MAAkDL,OAAxD;AACA,MAAMM,QAAQ,GAAG,kDAAsB;AACrCC,IAAAA,QAAQ,EAAEA,mBAD2B;AAErCC,IAAAA,YAAY,EAAEjB,gBAAgB;AAFO,GAAtB,CAAjB;AAIA,MAAMkB,MAAM,GAAGC,uBAAf;AACA,SAAO;AACL,KAACT,MAAM,CAACU,GAAR,EAAaC,IAAb,EAAmB;AACjB,aAAO,IAAIC,OAAJ;AAAA,qCAAY,WAAOC,OAAP,EAAgBC,MAAhB,EAA2B;AAC5C,cAAMC,IAAI,GAAGX,SAAS,CAACO,IAAD,CAAtB;AACA,cAAIK,OAAO,SAASX,QAAQ,CAACU,IAAD,CAA5B;;AACA,eAAK,IAAME,MAAX,IAAqBD,OAArB,EAA8B;AAC5B,gBAAGC,MAAM,CAACC,OAAP,IAAkB,gBAArB,EAAsC;AACpC,kBAAG,QAAQV,MAAM,CAACW,WAAP,CAAmBb,mBAAnB,EAA6BS,IAAI,CAACK,KAAL,CAAWH,MAAM,CAACI,KAAP,CAAa,CAAb,CAAX,EAA2BJ,MAAM,CAACI,KAAP,CAAa,CAAb,CAA3B,CAA7B,CAAR,CAAH,EAAsF;AACpF;AACD;AACF,aAJD,MAIM,IAAGJ,MAAM,CAACC,OAAP,IAAkB,OAArB,EAA6B;AACjC,kBAAG,QAAQV,MAAM,CAACc,UAAP,CAAkBhB,mBAAlB,EAA4BW,MAA5B,EAAoCF,IAApC,CAAR,CAAH,EAAsD;AACpD;AACD;AACF;;AACD,gBAAIE,MAAM,CAACM,QAAX,EAAqB;AACnBpB,cAAAA,MAAM,CAACQ,IAAD,EAAO,IAAIV,SAAJ,CAAcgB,MAAM,CAACC,OAArB,EAA8B;AACzCM,gBAAAA,KAAK,EAAEP,MAAM,CAACO,KAD2B;AAEzCC,gBAAAA,GAAG,EAAEvB,KAAK,CAACwB,gBAAN,CAAuBT,MAAM,CAACI,KAA9B,EAAqCJ,MAAM,CAACM,QAA5C;AAFoC,eAA9B,CAAP,CAAN;AAID,aALD,MAKO;AACLpB,cAAAA,MAAM,CAACQ,IAAD,EAAO,IAAIV,SAAJ,CAAcgB,MAAM,CAACC,OAArB,EAA8B;AACzCM,gBAAAA,KAAK,EAAEP,MAAM,CAACO;AAD2B,eAA9B,CAAP,CAAN;AAGD;AACF;;AACDX,UAAAA,OAAO;AACR,SAzBM;;AAAA;AAAA;AAAA;AAAA,UAAP;AA0BD;;AA5BI,GAAP;AA8BD,CArCD;;eAuCe;AACbc,EAAAA,MAAM,EAAE7B,QADK;AAEbI,EAAAA,KAAK,EAAEJ;AAFM,C","sourcesContent":["import { createTextlintMatcher } from \"morpheme-match-textlint\";\nimport { tokenize } from \"kuromojin\";\nimport EnhancedEngine from \"./enhanced-engine\";\n\nconst loadDictionaries = () => {\n // unavoidable\n let dict1 = require('./dict/zyosi');\n let dict2 = require('./dict/gozidatuzi');\n let dict3 = require('./dict/retasu');\n let dict4 = require('./dict/sanuki');\n let dict5 = require('./dict/saire');\n return dict1.concat(dict2, dict3, dict4, dict5);\n}\n\nconst reporter = (context) => {\n const { Syntax, RuleError, fixer, report, getSource } = context;\n const matchAll = createTextlintMatcher({\n tokenize: tokenize,\n dictionaries: loadDictionaries()\n });\n const engine = EnhancedEngine\n return {\n [Syntax.Str](node) {\n return new Promise(async (resolve, reject) => {\n const text = getSource(node);\n let results = await matchAll(text);\n for (const result of results) {\n if(result.message == \"れ足す言葉の可能性があります\"){\n if(!(await engine.checkRetasu(tokenize, text.slice(result.range[0],result.range[1])))){\n continue;\n }\n }else if(result.message == \"助詞の連続\"){\n if(!(await engine.checkZyosi(tokenize, result, text))){\n continue;\n }\n }\n if (result.expected) {\n report(node, new RuleError(result.message, {\n index: result.index,\n fix: fixer.replaceTextRange(result.range, result.expected)\n }));\n } else {\n report(node, new RuleError(result.message, {\n index: result.index\n }));\n }\n }\n resolve();\n });\n }\n };\n};\n\nexport default {\n linter: reporter,\n fixer: reporter\n};"],"file":"textlint-rule-for-creation.js"}
package/package.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "0.0.2",
2
+ "version": "1.1.2",
3
3
  "keywords": [
4
4
  "textlintrule"
5
5
  ],
@@ -33,8 +33,6 @@
33
33
  "access": "public"
34
34
  },
35
35
  "dependencies": {
36
- "@koozaki/romaji-conv": "^2.0.16",
37
- "js-hira-kata-romanize": "^1.0.5",
38
36
  "kuromojin": "^3.0.0",
39
37
  "morpheme-match-textlint": "^2.0.6"
40
38
  }
package/src/dict/arrow.js CHANGED
@@ -2,5 +2,82 @@ module.exports = {
2
2
  "jidousi_tadousi": [
3
3
  "開け",
4
4
  "あけ",
5
+ ],
6
+ "zyosi": [
7
+ "こそは",
8
+ "こそを",
9
+ "からが",
10
+ "からは",
11
+ "をこそ",
12
+ "とやら",
13
+ "やらが",
14
+ "までも",
15
+ "までに",
16
+ "までは",
17
+ "までもが",
18
+ "ばかりか",
19
+ "ばかりが",
20
+ "ばかりは",
21
+ "ばかりを",
22
+ "ばっかりか",
23
+ "ばっかりが",
24
+ "ばっかりは",
25
+ "ばっかりを",
26
+ "などばかり",
27
+ "などばっかり",
28
+ "などが",
29
+ "なども",
30
+ "などは",
31
+ "などを",
32
+ "とかが",
33
+ "とかも",
34
+ "とかは",
35
+ "とかを",
36
+ "とかばかり",
37
+ "とかばっかり",
38
+ "には",
39
+ "にも",
40
+ "ばかりに",
41
+ "にだって",
42
+ "とかだって",
43
+ "などだって",
44
+ "のかも",
45
+ "にかも",
46
+ "とが",
47
+ "とも",
48
+ "とは",
49
+ "さえも",
50
+ "にさえ",
51
+ "とさえ",
52
+ "すらも",
53
+ "にすら",
54
+ "とすら",
55
+ "だけが",
56
+ "だけを",
57
+ "ほども",
58
+ "ほどを",
59
+ "でも",
60
+ "てでも",
61
+ "たりも",
62
+ "たりが",
63
+ "たりは",
64
+ "たりさえ",
65
+ "たりすら",
66
+ "たりなど",
67
+ "ながらも",
68
+ "つつも",
69
+ "なりが",
70
+ "なりを",
71
+ "てなんて",
72
+ "になんて",
73
+ "もなんて",
74
+ "ばかりなんて",
75
+ "ばっかりなんて",
76
+ "だけを",
77
+ "だけが",
78
+ "だけは",
79
+ "だけかも",
80
+ "だけかも",
81
+ "なと",
5
82
  ]
6
83
  };
@@ -0,0 +1,68 @@
1
+ module.exports = [
2
+ {
3
+ "message": "\"適用\"の誤用である可能性があります。適応 => 適用",
4
+ "expected": "を適用",
5
+ "tokens": [
6
+ {
7
+ "surface_form": "を",
8
+ "pos": "助詞",
9
+ "pos_detail_1": "格助詞",
10
+ "pos_detail_2": "一般",
11
+ "pos_detail_3": "*",
12
+ "conjugated_type": "*",
13
+ "conjugated_form": "*",
14
+ "basic_form": "を",
15
+ "reading": "ヲ",
16
+ "pronunciation": "ヲ"
17
+ },
18
+ {
19
+ "surface_form": "適応",
20
+ "pos": "名詞",
21
+ "pos_detail_1": "サ変接続",
22
+ "pos_detail_2": "*",
23
+ "pos_detail_3": "*",
24
+ "conjugated_type": "*",
25
+ "conjugated_form": "*",
26
+ "basic_form": "適応",
27
+ "reading": "テキオウ",
28
+ "pronunciation": "テキオー"
29
+ }
30
+ ]
31
+ },
32
+ {
33
+ "message": "動詞の連用形+辛い(つらい)の場合は、「ずらい」ではなく「づらい」が適切です。",
34
+ "expected": "$1づらい",
35
+ "tokens": [
36
+ {
37
+ "pos": "動詞",
38
+ "pos_detail_1": "自立",
39
+ "conjugated_form": "連用形",
40
+ "_capture": "$1"
41
+ },
42
+ {
43
+ "surface_form": "ず",
44
+ },
45
+ {
46
+ "surface_form": "らい",
47
+ }
48
+ ]
49
+ },
50
+ {
51
+ "message": "動詞の連用形+辛い(つらい)の場合は、「ずらい」ではなく「づらい」が適切です。",
52
+ "expected": "$1づらい",
53
+ "tokens": [
54
+ {
55
+ "pos": "動詞",
56
+ "pos_detail_1": "自立",
57
+ "conjugated_form": "連用形",
58
+ "_capture": "$1"
59
+ },
60
+ {
61
+ "surface_form": "ずら",
62
+ },
63
+ {
64
+ "surface_form": "い",
65
+ }
66
+ ]
67
+ }
68
+ ];
@@ -0,0 +1,46 @@
1
+ module.exports = [
2
+ {
3
+ "message": "不要な「さ」が挿入されています。",
4
+ "expected": "$2$3",
5
+ "tokens": [
6
+ {
7
+ "conjugated_form": "ガル接続",
8
+ "basic_form": ["辛い", "美味しい", "寒い"],
9
+ "_capture": "$2"
10
+ },
11
+ {
12
+ "surface_form": "さ",
13
+ "_index": true
14
+ },
15
+ {
16
+ "basic_form": "そう",
17
+ "pos_detail_1": ["接尾", "助詞類接続"],
18
+ "_capture": "$3"
19
+ }
20
+ ]
21
+ },
22
+ {
23
+ "message": "不要な「さ」が挿入されています。",
24
+ "expected": "$1$2$3",
25
+ "tokens": [
26
+ {
27
+ "pos": "動詞",
28
+ "_capture": "$1"
29
+ },
30
+ {
31
+ "surface_form": "た",
32
+ "pos": "助動詞",
33
+ "_capture": "$2"
34
+ },
35
+ {
36
+ "surface_form": "さ",
37
+ "_index": true
38
+ },
39
+ {
40
+ "basic_form": "そう",
41
+ "pos_detail_1": ["接尾", "助詞類接続"],
42
+ "_capture": "$3"
43
+ }
44
+ ]
45
+ },
46
+ ];
@@ -0,0 +1,17 @@
1
+ module.exports = [
2
+ {
3
+ "message": "「さ」が抜けています。",
4
+ "expected": "$1さ$2",
5
+ "tokens": [
6
+ {
7
+ "basic_form": ["良い", "無", "無い"],
8
+ "_capture": "$1"
9
+ },
10
+ {
11
+ "surface_form": "そう",
12
+ "pos_detail_1": ["接尾", "助詞類接続"],
13
+ "_capture": "$2"
14
+ }
15
+ ]
16
+ },
17
+ ];
@@ -0,0 +1,35 @@
1
+ module.exports = [
2
+ {
3
+ "message": "助詞の連続",
4
+ "tokens": [
5
+ {
6
+ "pos": "助詞",
7
+ },{
8
+ "pos": "助詞",
9
+ "pos_detail_2": ["一般", "*"]//引用や連語ならスルー
10
+ }
11
+ ]
12
+ },
13
+ {
14
+ "message": '接続助詞と接続詞の連続',
15
+ "tokens": [
16
+ {
17
+ "pos": "助詞",
18
+ "pos_detail_1": "接続助詞",
19
+ },{
20
+ "pos": "接続詞",
21
+ }
22
+ ]
23
+ },
24
+ {
25
+ "message": '接続助詞と助動詞の連続',
26
+ "tokens": [
27
+ {
28
+ "pos": "助詞",
29
+ "pos_detail_1": "接続助詞",
30
+ },{
31
+ "pos": "助動詞",
32
+ }
33
+ ]
34
+ },
35
+ ];
@@ -1,19 +1,8 @@
1
- const Romanizer = require('js-hira-kata-romanize');
2
- const romajiConv = require('@koozaki/romaji-conv');
3
1
  const arrow = require('./dict/arrow');
4
2
 
5
3
  class EnhancedEngine {
6
4
 
7
5
  constructor() {
8
- this.romanizer = new Romanizer({
9
- mapping: Romanizer.MAPPING_KUNREI,
10
- chouon: Romanizer.CHOUON_CIRCUMFLEX,
11
- upper: Romanizer.UPPER_NONE
12
- });
13
- }
14
-
15
- romanize(hiraganaOrKatakana){
16
- return this.romanizer.romanize(hiraganaOrKatakana);
17
6
  }
18
7
 
19
8
  async checkRetasu(tokenizer, text){
@@ -32,6 +21,30 @@ class EnhancedEngine {
32
21
  return false;
33
22
  }
34
23
 
24
+ async checkZyosi(tokenizer, result, fulltext){
25
+ if(arrow.zyosi.includes(fulltext.slice(result.range[0],result.range[1]))){
26
+ return false;
27
+ }
28
+ let fulltokens = await tokenizer(fulltext);
29
+ let tokens = [];
30
+ fulltokens.reduce((prev, current) => {
31
+ if (prev.pos == "助詞" && current.pos == "助詞" && (current.pos_detail_2 == "一般" || current.pos_detail_2 == "*")) {
32
+ tokens = [prev, current];
33
+ }
34
+ return current;
35
+ });
36
+ if(new RegExp(tokens[0].surface_form.repeat(3) + "|" + tokens[0].surface_form.repeat(2) + "[~〜ー!!]").test(fulltext)){
37
+ return false;
38
+ }
39
+ if((/終助詞/.test(tokens[0].pos_detail_1) || /終助詞/.test(tokens[1].pos_detail_1))
40
+ || (tokens[0].surface_form == "のみ" && /格助詞/.test(tokens[1].pos_detail_1))
41
+ || /連体化/.test(tokens[1].pos_detail_1)
42
+ ){
43
+ return false;
44
+ }
45
+ return true;
46
+ }
47
+
35
48
  }
36
49
 
37
50
  export default new EnhancedEngine();
@@ -4,9 +4,12 @@ import EnhancedEngine from "./enhanced-engine";
4
4
 
5
5
  const loadDictionaries = () => {
6
6
  // unavoidable
7
- let dict1 = require('./dict/retasu');
8
- let dict2 = require('./dict/miss');
9
- return dict1.concat(dict2)
7
+ let dict1 = require('./dict/zyosi');
8
+ let dict2 = require('./dict/gozidatuzi');
9
+ let dict3 = require('./dict/retasu');
10
+ let dict4 = require('./dict/sanuki');
11
+ let dict5 = require('./dict/saire');
12
+ return dict1.concat(dict2, dict3, dict4, dict5);
10
13
  }
11
14
 
12
15
  const reporter = (context) => {
@@ -26,6 +29,10 @@ const reporter = (context) => {
26
29
  if(!(await engine.checkRetasu(tokenize, text.slice(result.range[0],result.range[1])))){
27
30
  continue;
28
31
  }
32
+ }else if(result.message == "助詞の連続"){
33
+ if(!(await engine.checkZyosi(tokenize, result, text))){
34
+ continue;
35
+ }
29
36
  }
30
37
  if (result.expected) {
31
38
  report(node, new RuleError(result.message, {
package/src/dict/miss.js DELETED
@@ -1,32 +0,0 @@
1
- module.exports = [
2
- {
3
- "message": "\"適用\"の誤用である可能性があります。適応 => 適用",
4
- "expected": "を適用",
5
- "tokens": [
6
- {
7
- "surface_form": "を",
8
- "pos": "助詞",
9
- "pos_detail_1": "格助詞",
10
- "pos_detail_2": "一般",
11
- "pos_detail_3": "*",
12
- "conjugated_type": "*",
13
- "conjugated_form": "*",
14
- "basic_form": "を",
15
- "reading": "ヲ",
16
- "pronunciation": "ヲ"
17
- },
18
- {
19
- "surface_form": "適応",
20
- "pos": "名詞",
21
- "pos_detail_1": "サ変接続",
22
- "pos_detail_2": "*",
23
- "pos_detail_3": "*",
24
- "conjugated_type": "*",
25
- "conjugated_form": "*",
26
- "basic_form": "適応",
27
- "reading": "テキオウ",
28
- "pronunciation": "テキオー"
29
- }
30
- ]
31
- },
32
- ];