diff options
| author | StefanVukovic99 <stefanvukovic44@gmail.com> | 2024-02-04 08:14:22 +0100 | 
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-02-04 07:14:22 +0000 | 
| commit | 6b327e0b7a7e8c91f1a7d99520c8769863228074 (patch) | |
| tree | fd37929468a53a48b1ab39f45a5220f45f08c0c3 | |
| parent | 1a10af12fb16d5719818c3dc16f95af075210190 (diff) | |
allow inflection rule chains with "polite" (#627)
* fix deinflection bug
* add test
* fix polite te and past
* expand verb flag
* fix polite negative
* fix polite volitional
* fix polite past negative
* remove unneeded rules in
* new deinflector format
* make nicer
* lint
* remove extra line
| -rw-r--r-- | ext/data/language/japanese-transforms.json | 145 | ||||
| -rw-r--r-- | test/data/anki-note-builder-test-results.json | 10 | ||||
| -rw-r--r-- | test/data/translator-test-results-note-data1.json | 19 | ||||
| -rw-r--r-- | test/data/translator-test-results.json | 19 | ||||
| -rw-r--r-- | test/language-transformer.test.js | 150 | 
5 files changed, 154 insertions, 189 deletions
| diff --git a/ext/data/language/japanese-transforms.json b/ext/data/language/japanese-transforms.json index a4667879..af2d0b04 100644 --- a/ext/data/language/japanese-transforms.json +++ b/ext/data/language/japanese-transforms.json @@ -1,6 +1,17 @@  {      "language": "ja",      "conditions": { +        "v": { +            "name": "Verb", +            "partsOfSpeech": ["v1", "v5", "vk", "vs", "vz"], +            "i18n": [ +                { +                    "language": "ja", +                    "name": "動詞" +                } +            ], +            "subConditions": ["v1", "v5", "vk", "vs", "vz"] +        },          "v1": {              "name": "Ichidan verb",              "partsOfSpeech": ["v1"], @@ -365,7 +376,8 @@                  {"suffixIn": "添うて", "suffixOut": "添う", "conditionsIn": ["iru"], "conditionsOut": ["v5"]},                  {"suffixIn": "副うて", "suffixOut": "副う", "conditionsIn": ["iru"], "conditionsOut": ["v5"]},                  {"suffixIn": "厭うて", "suffixOut": "厭う", "conditionsIn": ["iru"], "conditionsOut": ["v5"]}, -                {"suffixIn": "のたもうて", "suffixOut": "のたまう", "conditionsIn": ["iru"], "conditionsOut": ["v5"]} +                {"suffixIn": "のたもうて", "suffixOut": "のたまう", "conditionsIn": ["iru"], "conditionsOut": ["v5"]}, +                {"suffixIn": "まして", "suffixOut": "ます", "conditionsIn": [], "conditionsOut": ["v"]}              ]          },          { @@ -531,7 +543,7 @@          {              "name": "imperative negative",              "rules": [ -                {"suffixIn": "な", "suffixOut": "", "conditionsIn": [], "conditionsOut": ["v1", "v5", "vk", "vs", "vz"]} +                {"suffixIn": "な", "suffixOut": "", "conditionsIn": [], "conditionsOut": ["v"]}              ]          },          { @@ -592,7 +604,8 @@                  {"suffixIn": "為ない", "suffixOut": "為る", "conditionsIn": ["adj-i"], "conditionsOut": ["vs"]},                  {"suffixIn": "こない", "suffixOut": "くる", "conditionsIn": ["adj-i"], "conditionsOut": ["vk"]},                  {"suffixIn": "来ない", "suffixOut": "来る", "conditionsIn": ["adj-i"], "conditionsOut": ["vk"]}, -                {"suffixIn": "來ない", "suffixOut": "來る", "conditionsIn": ["adj-i"], "conditionsOut": ["vk"]} +                {"suffixIn": "來ない", "suffixOut": "來る", "conditionsIn": ["adj-i"], "conditionsOut": ["vk"]}, +                {"suffixIn": "ません", "suffixOut": "ます", "conditionsIn": ["v"], "conditionsOut": ["v"]}              ]          },          { @@ -659,114 +672,31 @@                  {"suffixIn": "添うた", "suffixOut": "添う", "conditionsIn": [], "conditionsOut": ["v5"]},                  {"suffixIn": "副うた", "suffixOut": "副う", "conditionsIn": [], "conditionsOut": ["v5"]},                  {"suffixIn": "厭うた", "suffixOut": "厭う", "conditionsIn": [], "conditionsOut": ["v5"]}, -                {"suffixIn": "のたもうた", "suffixOut": "のたまう", "conditionsIn": [], "conditionsOut": ["v5"]} +                {"suffixIn": "のたもうた", "suffixOut": "のたまう", "conditionsIn": [], "conditionsOut": ["v5"]}, +                {"suffixIn": "ました", "suffixOut": "ます", "conditionsIn": [], "conditionsOut": ["v"]}, +                {"suffixIn": "ませんでした", "suffixOut": "ません", "conditionsIn": [], "conditionsOut": ["v"]}              ]          },          {              "name": "polite",              "rules": [ -                {"suffixIn": "ます", "suffixOut": "る", "conditionsIn": [], "conditionsOut": ["v1"]}, -                {"suffixIn": "います", "suffixOut": "う", "conditionsIn": [], "conditionsOut": ["v5"]}, -                {"suffixIn": "きます", "suffixOut": "く", "conditionsIn": [], "conditionsOut": ["v5"]}, -                {"suffixIn": "ぎます", "suffixOut": "ぐ", "conditionsIn": [], "conditionsOut": ["v5"]}, -                {"suffixIn": "します", "suffixOut": "す", "conditionsIn": [], "conditionsOut": ["v5"]}, -                {"suffixIn": "ちます", "suffixOut": "つ", "conditionsIn": [], "conditionsOut": ["v5"]}, -                {"suffixIn": "にます", "suffixOut": "ぬ", "conditionsIn": [], "conditionsOut": ["v5"]}, -                {"suffixIn": "びます", "suffixOut": "ぶ", "conditionsIn": [], "conditionsOut": ["v5"]}, -                {"suffixIn": "みます", "suffixOut": "む", "conditionsIn": [], "conditionsOut": ["v5"]}, -                {"suffixIn": "ります", "suffixOut": "る", "conditionsIn": [], "conditionsOut": ["v5"]}, -                {"suffixIn": "じます", "suffixOut": "ずる", "conditionsIn": [], "conditionsOut": ["vz"]}, -                {"suffixIn": "します", "suffixOut": "する", "conditionsIn": [], "conditionsOut": ["vs"]}, -                {"suffixIn": "為ます", "suffixOut": "為る", "conditionsIn": [], "conditionsOut": ["vs"]}, -                {"suffixIn": "きます", "suffixOut": "くる", "conditionsIn": [], "conditionsOut": ["vk"]}, -                {"suffixIn": "来ます", "suffixOut": "来る", "conditionsIn": [], "conditionsOut": ["vk"]}, -                {"suffixIn": "來ます", "suffixOut": "來る", "conditionsIn": [], "conditionsOut": ["vk"]} -            ] -        }, -        { -            "name": "polite negative", -            "rules": [ -                {"suffixIn": "くありません", "suffixOut": "い", "conditionsIn": [], "conditionsOut": ["adj-i"]}, -                {"suffixIn": "ません", "suffixOut": "る", "conditionsIn": [], "conditionsOut": ["v1"]}, -                {"suffixIn": "いません", "suffixOut": "う", "conditionsIn": [], "conditionsOut": ["v5"]}, -                {"suffixIn": "きません", "suffixOut": "く", "conditionsIn": [], "conditionsOut": ["v5"]}, -                {"suffixIn": "ぎません", "suffixOut": "ぐ", "conditionsIn": [], "conditionsOut": ["v5"]}, -                {"suffixIn": "しません", "suffixOut": "す", "conditionsIn": [], "conditionsOut": ["v5"]}, -                {"suffixIn": "ちません", "suffixOut": "つ", "conditionsIn": [], "conditionsOut": ["v5"]}, -                {"suffixIn": "にません", "suffixOut": "ぬ", "conditionsIn": [], "conditionsOut": ["v5"]}, -                {"suffixIn": "びません", "suffixOut": "ぶ", "conditionsIn": [], "conditionsOut": ["v5"]}, -                {"suffixIn": "みません", "suffixOut": "む", "conditionsIn": [], "conditionsOut": ["v5"]}, -                {"suffixIn": "りません", "suffixOut": "る", "conditionsIn": [], "conditionsOut": ["v5"]}, -                {"suffixIn": "じません", "suffixOut": "ずる", "conditionsIn": [], "conditionsOut": ["vz"]}, -                {"suffixIn": "しません", "suffixOut": "する", "conditionsIn": [], "conditionsOut": ["vs"]}, -                {"suffixIn": "為ません", "suffixOut": "為る", "conditionsIn": [], "conditionsOut": ["vs"]}, -                {"suffixIn": "きません", "suffixOut": "くる", "conditionsIn": [], "conditionsOut": ["vk"]}, -                {"suffixIn": "来ません", "suffixOut": "来る", "conditionsIn": [], "conditionsOut": ["vk"]}, -                {"suffixIn": "來ません", "suffixOut": "來る", "conditionsIn": [], "conditionsOut": ["vk"]} -            ] -        }, -        { -            "name": "polite past", -            "rules": [ -                {"suffixIn": "ました", "suffixOut": "る", "conditionsIn": [], "conditionsOut": ["v1"]}, -                {"suffixIn": "いました", "suffixOut": "う", "conditionsIn": [], "conditionsOut": ["v5"]}, -                {"suffixIn": "きました", "suffixOut": "く", "conditionsIn": [], "conditionsOut": ["v5"]}, -                {"suffixIn": "ぎました", "suffixOut": "ぐ", "conditionsIn": [], "conditionsOut": ["v5"]}, -                {"suffixIn": "しました", "suffixOut": "す", "conditionsIn": [], "conditionsOut": ["v5"]}, -                {"suffixIn": "ちました", "suffixOut": "つ", "conditionsIn": [], "conditionsOut": ["v5"]}, -                {"suffixIn": "にました", "suffixOut": "ぬ", "conditionsIn": [], "conditionsOut": ["v5"]}, -                {"suffixIn": "びました", "suffixOut": "ぶ", "conditionsIn": [], "conditionsOut": ["v5"]}, -                {"suffixIn": "みました", "suffixOut": "む", "conditionsIn": [], "conditionsOut": ["v5"]}, -                {"suffixIn": "りました", "suffixOut": "る", "conditionsIn": [], "conditionsOut": ["v5"]}, -                {"suffixIn": "じました", "suffixOut": "ずる", "conditionsIn": [], "conditionsOut": ["vz"]}, -                {"suffixIn": "しました", "suffixOut": "する", "conditionsIn": [], "conditionsOut": ["vs"]}, -                {"suffixIn": "為ました", "suffixOut": "為る", "conditionsIn": [], "conditionsOut": ["vs"]}, -                {"suffixIn": "きました", "suffixOut": "くる", "conditionsIn": [], "conditionsOut": ["vk"]}, -                {"suffixIn": "来ました", "suffixOut": "来る", "conditionsIn": [], "conditionsOut": ["vk"]}, -                {"suffixIn": "來ました", "suffixOut": "來る", "conditionsIn": [], "conditionsOut": ["vk"]} -            ] -        }, -        { -            "name": "polite past negative", -            "rules": [ -                {"suffixIn": "くありませんでした", "suffixOut": "い", "conditionsIn": [], "conditionsOut": ["adj-i"]}, -                {"suffixIn": "ませんでした", "suffixOut": "る", "conditionsIn": [], "conditionsOut": ["v1"]}, -                {"suffixIn": "いませんでした", "suffixOut": "う", "conditionsIn": [], "conditionsOut": ["v5"]}, -                {"suffixIn": "きませんでした", "suffixOut": "く", "conditionsIn": [], "conditionsOut": ["v5"]}, -                {"suffixIn": "ぎませんでした", "suffixOut": "ぐ", "conditionsIn": [], "conditionsOut": ["v5"]}, -                {"suffixIn": "しませんでした", "suffixOut": "す", "conditionsIn": [], "conditionsOut": ["v5"]}, -                {"suffixIn": "ちませんでした", "suffixOut": "つ", "conditionsIn": [], "conditionsOut": ["v5"]}, -                {"suffixIn": "にませんでした", "suffixOut": "ぬ", "conditionsIn": [], "conditionsOut": ["v5"]}, -                {"suffixIn": "びませんでした", "suffixOut": "ぶ", "conditionsIn": [], "conditionsOut": ["v5"]}, -                {"suffixIn": "みませんでした", "suffixOut": "む", "conditionsIn": [], "conditionsOut": ["v5"]}, -                {"suffixIn": "りませんでした", "suffixOut": "る", "conditionsIn": [], "conditionsOut": ["v5"]}, -                {"suffixIn": "じませんでした", "suffixOut": "ずる", "conditionsIn": [], "conditionsOut": ["vz"]}, -                {"suffixIn": "しませんでした", "suffixOut": "する", "conditionsIn": [], "conditionsOut": ["vs"]}, -                {"suffixIn": "為ませんでした", "suffixOut": "為る", "conditionsIn": [], "conditionsOut": ["vs"]}, -                {"suffixIn": "きませんでした", "suffixOut": "くる", "conditionsIn": [], "conditionsOut": ["vk"]}, -                {"suffixIn": "来ませんでした", "suffixOut": "来る", "conditionsIn": [], "conditionsOut": ["vk"]}, -                {"suffixIn": "來ませんでした", "suffixOut": "來る", "conditionsIn": [], "conditionsOut": ["vk"]} -            ] -        }, -        { -            "name": "polite volitional", -            "rules": [ -                {"suffixIn": "ましょう", "suffixOut": "る", "conditionsIn": [], "conditionsOut": ["v1"]}, -                {"suffixIn": "いましょう", "suffixOut": "う", "conditionsIn": [], "conditionsOut": ["v5"]}, -                {"suffixIn": "きましょう", "suffixOut": "く", "conditionsIn": [], "conditionsOut": ["v5"]}, -                {"suffixIn": "ぎましょう", "suffixOut": "ぐ", "conditionsIn": [], "conditionsOut": ["v5"]}, -                {"suffixIn": "しましょう", "suffixOut": "す", "conditionsIn": [], "conditionsOut": ["v5"]}, -                {"suffixIn": "ちましょう", "suffixOut": "つ", "conditionsIn": [], "conditionsOut": ["v5"]}, -                {"suffixIn": "にましょう", "suffixOut": "ぬ", "conditionsIn": [], "conditionsOut": ["v5"]}, -                {"suffixIn": "びましょう", "suffixOut": "ぶ", "conditionsIn": [], "conditionsOut": ["v5"]}, -                {"suffixIn": "みましょう", "suffixOut": "む", "conditionsIn": [], "conditionsOut": ["v5"]}, -                {"suffixIn": "りましょう", "suffixOut": "る", "conditionsIn": [], "conditionsOut": ["v5"]}, -                {"suffixIn": "じましょう", "suffixOut": "ずる", "conditionsIn": [], "conditionsOut": ["vz"]}, -                {"suffixIn": "しましょう", "suffixOut": "する", "conditionsIn": [], "conditionsOut": ["vs"]}, -                {"suffixIn": "為ましょう", "suffixOut": "為る", "conditionsIn": [], "conditionsOut": ["vs"]}, -                {"suffixIn": "きましょう", "suffixOut": "くる", "conditionsIn": [], "conditionsOut": ["vk"]}, -                {"suffixIn": "来ましょう", "suffixOut": "来る", "conditionsIn": [], "conditionsOut": ["vk"]}, -                {"suffixIn": "來ましょう", "suffixOut": "來る", "conditionsIn": [], "conditionsOut": ["vk"]} +                {"suffixIn": "ます", "suffixOut": "る", "conditionsIn": ["v1"], "conditionsOut": ["v1"]}, +                {"suffixIn": "います", "suffixOut": "う", "conditionsIn": ["v5"], "conditionsOut": ["v5"]}, +                {"suffixIn": "きます", "suffixOut": "く", "conditionsIn": ["v5"], "conditionsOut": ["v5"]}, +                {"suffixIn": "ぎます", "suffixOut": "ぐ", "conditionsIn": ["v5"], "conditionsOut": ["v5"]}, +                {"suffixIn": "します", "suffixOut": "す", "conditionsIn": ["v5"], "conditionsOut": ["v5"]}, +                {"suffixIn": "ちます", "suffixOut": "つ", "conditionsIn": ["v5"], "conditionsOut": ["v5"]}, +                {"suffixIn": "にます", "suffixOut": "ぬ", "conditionsIn": ["v5"], "conditionsOut": ["v5"]}, +                {"suffixIn": "びます", "suffixOut": "ぶ", "conditionsIn": ["v5"], "conditionsOut": ["v5"]}, +                {"suffixIn": "みます", "suffixOut": "む", "conditionsIn": ["v5"], "conditionsOut": ["v5"]}, +                {"suffixIn": "ります", "suffixOut": "る", "conditionsIn": ["v5"], "conditionsOut": ["v5"]}, +                {"suffixIn": "じます", "suffixOut": "ずる", "conditionsIn": ["vz"], "conditionsOut": ["vz"]}, +                {"suffixIn": "します", "suffixOut": "する", "conditionsIn": ["vs"], "conditionsOut": ["vs"]}, +                {"suffixIn": "為ます", "suffixOut": "為る", "conditionsIn": ["vs"], "conditionsOut": ["vs"]}, +                {"suffixIn": "きます", "suffixOut": "くる", "conditionsIn": ["vk"], "conditionsOut": ["vk"]}, +                {"suffixIn": "来ます", "suffixOut": "来る", "conditionsIn": ["vk"], "conditionsOut": ["vk"]}, +                {"suffixIn": "來ます", "suffixOut": "來る", "conditionsIn": ["vk"], "conditionsOut": ["vk"]}, +                {"suffixIn": "くあります", "suffixOut": "い", "conditionsIn": ["v"], "conditionsOut": ["adj-i"]}              ]          },          { @@ -819,7 +749,8 @@                  {"suffixIn": "為よう", "suffixOut": "為る", "conditionsIn": [], "conditionsOut": ["vs"]},                  {"suffixIn": "こよう", "suffixOut": "くる", "conditionsIn": [], "conditionsOut": ["vk"]},                  {"suffixIn": "来よう", "suffixOut": "来る", "conditionsIn": [], "conditionsOut": ["vk"]}, -                {"suffixIn": "來よう", "suffixOut": "來る", "conditionsIn": [], "conditionsOut": ["vk"]} +                {"suffixIn": "來よう", "suffixOut": "來る", "conditionsIn": [], "conditionsOut": ["vk"]}, +                {"suffixIn": "ましょう", "suffixOut": "ます", "conditionsIn": [], "conditionsOut": ["v"]}              ]          },          { diff --git a/test/data/anki-note-builder-test-results.json b/test/data/anki-note-builder-test-results.json index 526beec7..364c4ee9 100644 --- a/test/data/anki-note-builder-test-results.json +++ b/test/data/anki-note-builder-test-results.json @@ -1692,7 +1692,7 @@          "cloze-body": "打ち込んでいませんでした",          "cloze-prefix": "cloze-prefix",          "cloze-suffix": "cloze-suffix", -        "conjugation": "-te « progressive or perfect « polite past negative", +        "conjugation": "-te « progressive or perfect « polite « negative « past",          "dictionary": "Test Dictionary 2",          "document-title": "title",          "expression": "打ち込む", @@ -1727,7 +1727,7 @@          "cloze-body": "打ち込んでいませんでした",          "cloze-prefix": "cloze-prefix",          "cloze-suffix": "cloze-suffix", -        "conjugation": "-te « progressive or perfect « polite past negative", +        "conjugation": "-te « progressive or perfect « polite « negative « past",          "dictionary": "Test Dictionary 2",          "document-title": "title",          "expression": "打ち込む", @@ -1762,7 +1762,7 @@          "cloze-body": "打ち込んでいませんでした",          "cloze-prefix": "cloze-prefix",          "cloze-suffix": "cloze-suffix", -        "conjugation": "-te « progressive or perfect « polite past negative", +        "conjugation": "-te « progressive or perfect « polite « negative « past",          "dictionary": "Test Dictionary 2",          "document-title": "title",          "expression": "打ち込む", @@ -1797,7 +1797,7 @@          "cloze-body": "打ち込んでいませんでした",          "cloze-prefix": "cloze-prefix",          "cloze-suffix": "cloze-suffix", -        "conjugation": "-te « progressive or perfect « polite past negative", +        "conjugation": "-te « progressive or perfect « polite « negative « past",          "dictionary": "Test Dictionary 2",          "document-title": "title",          "expression": "打ち込む", @@ -2837,7 +2837,7 @@          "cloze-body": "testました",          "cloze-prefix": "cloze-prefix",          "cloze-suffix": "cloze-suffix", -        "conjugation": "polite past", +        "conjugation": "polite « past",          "dictionary": "Test Dictionary 2",          "document-title": "title",          "expression": "読む", diff --git a/test/data/translator-test-results-note-data1.json b/test/data/translator-test-results-note-data1.json index 510b1bb5..5f140902 100644 --- a/test/data/translator-test-results-note-data1.json +++ b/test/data/translator-test-results-note-data1.json @@ -15851,7 +15851,9 @@                "inflectionRules": [                  "-te",                  "progressive or perfect", -                "polite past negative" +                "polite", +                "negative", +                "past"                ]              }            ], @@ -16276,7 +16278,9 @@                "inflectionRules": [                  "-te",                  "progressive or perfect", -                "polite past negative" +                "polite", +                "negative", +                "past"                ]              }            ], @@ -16701,7 +16705,9 @@                "inflectionRules": [                  "-te",                  "progressive or perfect", -                "polite past negative" +                "polite", +                "negative", +                "past"                ]              }            ], @@ -17126,7 +17132,9 @@                "inflectionRules": [                  "-te",                  "progressive or perfect", -                "polite past negative" +                "polite", +                "negative", +                "past"                ]              }            ], @@ -26937,7 +26945,8 @@              {                "source": "algorithm",                "inflectionRules": [ -                "polite past" +                "polite", +                "past"                ]              }            ], diff --git a/test/data/translator-test-results.json b/test/data/translator-test-results.json index 2b43e4bc..925d36cf 100644 --- a/test/data/translator-test-results.json +++ b/test/data/translator-test-results.json @@ -9424,7 +9424,9 @@              "inflectionRules": [                "-te",                "progressive or perfect", -              "polite past negative" +              "polite", +              "negative", +              "past"              ]            }          ], @@ -9622,7 +9624,9 @@              "inflectionRules": [                "-te",                "progressive or perfect", -              "polite past negative" +              "polite", +              "negative", +              "past"              ]            }          ], @@ -9820,7 +9824,9 @@              "inflectionRules": [                "-te",                "progressive or perfect", -              "polite past negative" +              "polite", +              "negative", +              "past"              ]            }          ], @@ -10018,7 +10024,9 @@              "inflectionRules": [                "-te",                "progressive or perfect", -              "polite past negative" +              "polite", +              "negative", +              "past"              ]            }          ], @@ -15113,7 +15121,8 @@            {              "source": "algorithm",              "inflectionRules": [ -              "polite past" +              "polite", +              "past"              ]            }          ], diff --git a/test/language-transformer.test.js b/test/language-transformer.test.js index a0a69b64..9e9a9ee3 100644 --- a/test/language-transformer.test.js +++ b/test/language-transformer.test.js @@ -80,8 +80,8 @@ function testDeinflections() {                  {term: '愛しい', source: '愛しくない',             rule: 'adj-i', reasons: ['negative']},                  {term: '愛しい', source: '愛しさ',                 rule: 'adj-i', reasons: ['noun']},                  {term: '愛しい', source: '愛しかった',             rule: 'adj-i', reasons: ['past']}, -                {term: '愛しい', source: '愛しくありません',      rule: 'adj-i', reasons: ['polite negative']}, -                {term: '愛しい', source: '愛しくありませんでした', rule: 'adj-i', reasons: ['polite past negative']}, +                {term: '愛しい', source: '愛しくありません',      rule: 'adj-i', reasons: ['polite', 'negative']}, +                {term: '愛しい', source: '愛しくありませんでした', rule: 'adj-i', reasons: ['polite', 'negative', 'past']},                  {term: '愛しい', source: '愛しき',                 rule: 'adj-i', reasons: ['-ki']},                  {term: '愛しい', source: '愛しげ',                 rule: 'adj-i', reasons: ['-ge']}              ] @@ -93,7 +93,7 @@ function testDeinflections() {                  {term: '食べる', source: '食べる',           rule: 'v1', reasons: []},                  {term: '食べる', source: '食べます',         rule: 'v1', reasons: ['polite']},                  {term: '食べる', source: '食べた',           rule: 'v1', reasons: ['past']}, -                {term: '食べる', source: '食べました',       rule: 'v1', reasons: ['polite past']}, +                {term: '食べる', source: '食べました',       rule: 'v1', reasons: ['polite', 'past']},                  {term: '食べる', source: '食べて',           rule: 'v1', reasons: ['-te']},                  {term: '食べる', source: '食べられる',       rule: 'v1', reasons: ['potential or passive']},                  {term: '食べる', source: '食べられる',       rule: 'v1', reasons: ['potential or passive']}, @@ -101,15 +101,16 @@ function testDeinflections() {                  {term: '食べる', source: '食べさせられる',   rule: 'v1', reasons: ['causative', 'potential or passive']},                  {term: '食べる', source: '食べろ',           rule: 'v1', reasons: ['imperative']},                  {term: '食べる', source: '食べない',         rule: 'v1', reasons: ['negative']}, -                {term: '食べる', source: '食べません',       rule: 'v1', reasons: ['polite negative']}, +                {term: '食べる', source: '食べません',       rule: 'v1', reasons: ['polite', 'negative']},                  {term: '食べる', source: '食べなかった',     rule: 'v1', reasons: ['negative', 'past']}, -                {term: '食べる', source: '食べませんでした', rule: 'v1', reasons: ['polite past negative']}, +                {term: '食べる', source: '食べませんでした', rule: 'v1', reasons: ['polite', 'negative', 'past']},                  {term: '食べる', source: '食べなくて',       rule: 'v1', reasons: ['negative', '-te']},                  {term: '食べる', source: '食べられない',     rule: 'v1', reasons: ['potential or passive', 'negative']},                  {term: '食べる', source: '食べられない',     rule: 'v1', reasons: ['potential or passive', 'negative']},                  {term: '食べる', source: '食べさせない',     rule: 'v1', reasons: ['causative', 'negative']},                  {term: '食べる', source: '食べさせられない', rule: 'v1', reasons: ['causative', 'potential or passive', 'negative']},                  {term: '食べる', source: '食べるな',         rule: 'v1', reasons: ['imperative negative']}, +                {term: '食べる', source: '食べまして',        rule: 'v1', reasons: ['polite', '-te']},                  {term: '食べる', source: '食べれば',         rule: 'v1', reasons: ['-ba']},                  {term: '食べる', source: '食べちゃう',       rule: 'v1', reasons: ['-chau']}, @@ -125,7 +126,7 @@ function testDeinflections() {                  {term: '食べる', source: '食べざる',           rule: 'v1', reasons: ['-zaru']},                  {term: '食べる', source: '食べねば',           rule: 'v1', reasons: ['-neba']},                  {term: '食べる', source: '食べ',             rule: 'v1d', reasons: ['masu stem']}, -                {term: '食べる', source: '食べましょう',     rule: 'v1', reasons: ['polite volitional']}, +                {term: '食べる', source: '食べましょう',     rule: 'v1', reasons: ['polite', 'volitional']},                  {term: '食べる', source: '食べよう',         rule: 'v1', reasons: ['volitional']},                  // ['causative passive']                  {term: '食べる', source: '食べとく',         rule: 'v1', reasons: ['-toku']}, @@ -143,7 +144,7 @@ function testDeinflections() {                  {term: '買う', source: '買う',             rule: 'v5', reasons: []},                  {term: '買う', source: '買います',         rule: 'v5', reasons: ['polite']},                  {term: '買う', source: '買った',           rule: 'v5', reasons: ['past']}, -                {term: '買う', source: '買いました',       rule: 'v5', reasons: ['polite past']}, +                {term: '買う', source: '買いました',       rule: 'v5', reasons: ['polite', 'past']},                  {term: '買う', source: '買って',           rule: 'v5', reasons: ['-te']},                  {term: '買う', source: '買える',           rule: 'v5', reasons: ['potential']},                  {term: '買う', source: '買われる',         rule: 'v5', reasons: ['passive']}, @@ -151,15 +152,16 @@ function testDeinflections() {                  {term: '買う', source: '買わせられる',     rule: 'v5', reasons: ['causative', 'potential or passive']},                  {term: '買う', source: '買え',             rule: 'v5', reasons: ['imperative']},                  {term: '買う', source: '買わない',         rule: 'v5', reasons: ['negative']}, -                {term: '買う', source: '買いません',       rule: 'v5', reasons: ['polite negative']}, +                {term: '買う', source: '買いません',       rule: 'v5', reasons: ['polite', 'negative']},                  {term: '買う', source: '買わなかった',     rule: 'v5', reasons: ['negative', 'past']}, -                {term: '買う', source: '買いませんでした', rule: 'v5', reasons: ['polite past negative']}, +                {term: '買う', source: '買いませんでした', rule: 'v5', reasons: ['polite', 'negative', 'past']},                  {term: '買う', source: '買わなくて',       rule: 'v5', reasons: ['negative', '-te']},                  {term: '買う', source: '買えない',         rule: 'v5', reasons: ['potential', 'negative']},                  {term: '買う', source: '買われない',       rule: 'v5', reasons: ['passive', 'negative']},                  {term: '買う', source: '買わせない',       rule: 'v5', reasons: ['causative', 'negative']},                  {term: '買う', source: '買わせられない',   rule: 'v5', reasons: ['causative', 'potential or passive', 'negative']},                  {term: '買う', source: '買うな',           rule: 'v5', reasons: ['imperative negative']}, +                {term: '買う', source: '買いまして',     rule: 'v5', reasons: ['polite', '-te']},                  {term: '買う', source: '買えば',           rule: 'v5', reasons: ['-ba']},                  {term: '買う', source: '買っちゃう',       rule: 'v5', reasons: ['-chau']}, @@ -175,7 +177,7 @@ function testDeinflections() {                  {term: '買う', source: '買わざる',           rule: 'v5', reasons: ['-zaru']},                  {term: '買う', source: '買わねば',           rule: 'v5', reasons: ['-neba']},                  {term: '買う', source: '買い',             rule: 'v5', reasons: ['masu stem']}, -                {term: '買う', source: '買いましょう',     rule: 'v5', reasons: ['polite volitional']}, +                {term: '買う', source: '買いましょう',     rule: 'v5', reasons: ['polite', 'volitional']},                  {term: '買う', source: '買おう',           rule: 'v5', reasons: ['volitional']},                  {term: '買う', source: '買わされる',       rule: 'v5', reasons: ['causative passive']},                  {term: '買う', source: '買っとく',         rule: 'v5', reasons: ['-toku']}, @@ -193,7 +195,7 @@ function testDeinflections() {                  {term: '行く', source: '行く',             rule: 'v5', reasons: []},                  {term: '行く', source: '行きます',         rule: 'v5', reasons: ['polite']},                  {term: '行く', source: '行った',           rule: 'v5', reasons: ['past']}, -                {term: '行く', source: '行きました',       rule: 'v5', reasons: ['polite past']}, +                {term: '行く', source: '行きました',       rule: 'v5', reasons: ['polite', 'past']},                  {term: '行く', source: '行って',           rule: 'v5', reasons: ['-te']},                  {term: '行く', source: '行ける',           rule: 'v5', reasons: ['potential']},                  {term: '行く', source: '行かれる',         rule: 'v5', reasons: ['passive']}, @@ -201,15 +203,16 @@ function testDeinflections() {                  {term: '行く', source: '行かせられる',     rule: 'v5', reasons: ['causative', 'potential or passive']},                  {term: '行く', source: '行け',             rule: 'v5', reasons: ['imperative']},                  {term: '行く', source: '行かない',         rule: 'v5', reasons: ['negative']}, -                {term: '行く', source: '行きません',       rule: 'v5', reasons: ['polite negative']}, +                {term: '行く', source: '行きません',       rule: 'v5', reasons: ['polite', 'negative']},                  {term: '行く', source: '行かなかった',     rule: 'v5', reasons: ['negative', 'past']}, -                {term: '行く', source: '行きませんでした', rule: 'v5', reasons: ['polite past negative']}, +                {term: '行く', source: '行きませんでした', rule: 'v5', reasons: ['polite', 'negative', 'past']},                  {term: '行く', source: '行かなくて',       rule: 'v5', reasons: ['negative', '-te']},                  {term: '行く', source: '行けない',         rule: 'v5', reasons: ['potential', 'negative']},                  {term: '行く', source: '行かれない',       rule: 'v5', reasons: ['passive', 'negative']},                  {term: '行く', source: '行かせない',       rule: 'v5', reasons: ['causative', 'negative']},                  {term: '行く', source: '行かせられない',   rule: 'v5', reasons: ['causative', 'potential or passive', 'negative']},                  {term: '行く', source: '行くな',           rule: 'v5', reasons: ['imperative negative']}, +                {term: '行く', source: '行きまして',     rule: 'v5', reasons: ['polite', '-te']},                  {term: '行く', source: '行けば',           rule: 'v5', reasons: ['-ba']},                  {term: '行く', source: '行っちゃう',       rule: 'v5', reasons: ['-chau']}, @@ -225,7 +228,7 @@ function testDeinflections() {                  {term: '行く', source: '行かざる',           rule: 'v5', reasons: ['-zaru']},                  {term: '行く', source: '行かねば',           rule: 'v5', reasons: ['-neba']},                  {term: '行く', source: '行き',             rule: 'v5', reasons: ['masu stem']}, -                {term: '行く', source: '行きましょう',     rule: 'v5', reasons: ['polite volitional']}, +                {term: '行く', source: '行きましょう',     rule: 'v5', reasons: ['polite', 'volitional']},                  {term: '行く', source: '行こう',           rule: 'v5', reasons: ['volitional']},                  {term: '行く', source: '行かされる',       rule: 'v5', reasons: ['causative passive']},                  {term: '行く', source: '行いとく',         rule: 'v5', reasons: ['-toku']}, @@ -243,7 +246,7 @@ function testDeinflections() {                  {term: '泳ぐ', source: '泳ぐ',             rule: 'v5', reasons: []},                  {term: '泳ぐ', source: '泳ぎます',         rule: 'v5', reasons: ['polite']},                  {term: '泳ぐ', source: '泳いだ',           rule: 'v5', reasons: ['past']}, -                {term: '泳ぐ', source: '泳ぎました',       rule: 'v5', reasons: ['polite past']}, +                {term: '泳ぐ', source: '泳ぎました',       rule: 'v5', reasons: ['polite', 'past']},                  {term: '泳ぐ', source: '泳いで',           rule: 'v5', reasons: ['-te']},                  {term: '泳ぐ', source: '泳げる',           rule: 'v5', reasons: ['potential']},                  {term: '泳ぐ', source: '泳がれる',         rule: 'v5', reasons: ['passive']}, @@ -251,15 +254,16 @@ function testDeinflections() {                  {term: '泳ぐ', source: '泳がせられる',     rule: 'v5', reasons: ['causative', 'potential or passive']},                  {term: '泳ぐ', source: '泳げ',             rule: 'v5', reasons: ['imperative']},                  {term: '泳ぐ', source: '泳がない',         rule: 'v5', reasons: ['negative']}, -                {term: '泳ぐ', source: '泳ぎません',       rule: 'v5', reasons: ['polite negative']}, +                {term: '泳ぐ', source: '泳ぎません',       rule: 'v5', reasons: ['polite', 'negative']},                  {term: '泳ぐ', source: '泳がなかった',     rule: 'v5', reasons: ['negative', 'past']}, -                {term: '泳ぐ', source: '泳ぎませんでした', rule: 'v5', reasons: ['polite past negative']}, +                {term: '泳ぐ', source: '泳ぎませんでした', rule: 'v5', reasons: ['polite', 'negative', 'past']},                  {term: '泳ぐ', source: '泳がなくて',       rule: 'v5', reasons: ['negative', '-te']},                  {term: '泳ぐ', source: '泳げない',         rule: 'v5', reasons: ['potential', 'negative']},                  {term: '泳ぐ', source: '泳がれない',       rule: 'v5', reasons: ['passive', 'negative']},                  {term: '泳ぐ', source: '泳がせない',       rule: 'v5', reasons: ['causative', 'negative']},                  {term: '泳ぐ', source: '泳がせられない',   rule: 'v5', reasons: ['causative', 'potential or passive', 'negative']},                  {term: '泳ぐ', source: '泳ぐな',           rule: 'v5', reasons: ['imperative negative']}, +                {term: '泳ぐ', source: '泳ぎまして',     rule: 'v5', reasons: ['polite', '-te']},                  {term: '泳ぐ', source: '泳げば',           rule: 'v5', reasons: ['-ba']},                  {term: '泳ぐ', source: '泳いじゃう',       rule: 'v5', reasons: ['-chau']}, @@ -275,7 +279,7 @@ function testDeinflections() {                  {term: '泳ぐ', source: '泳がざる',           rule: 'v5', reasons: ['-zaru']},                  {term: '泳ぐ', source: '泳がねば',           rule: 'v5', reasons: ['-neba']},                  {term: '泳ぐ', source: '泳ぎ',             rule: 'v5', reasons: ['masu stem']}, -                {term: '泳ぐ', source: '泳ぎましょう',     rule: 'v5', reasons: ['polite volitional']}, +                {term: '泳ぐ', source: '泳ぎましょう',     rule: 'v5', reasons: ['polite', 'volitional']},                  {term: '泳ぐ', source: '泳ごう',           rule: 'v5', reasons: ['volitional']},                  {term: '泳ぐ', source: '泳がされる',       rule: 'v5', reasons: ['causative passive']},                  {term: '泳ぐ', source: '泳いどく',         rule: 'v5', reasons: ['-toku']}, @@ -292,7 +296,7 @@ function testDeinflections() {                  {term: '話す', source: '話す',             rule: 'v5', reasons: []},                  {term: '話す', source: '話します',         rule: 'v5', reasons: ['polite']},                  {term: '話す', source: '話した',           rule: 'v5', reasons: ['past']}, -                {term: '話す', source: '話しました',       rule: 'v5', reasons: ['polite past']}, +                {term: '話す', source: '話しました',       rule: 'v5', reasons: ['polite', 'past']},                  {term: '話す', source: '話して',           rule: 'v5', reasons: ['-te']},                  {term: '話す', source: '話せる',           rule: 'v5', reasons: ['potential']},                  {term: '話す', source: '話される',         rule: 'v5', reasons: ['passive']}, @@ -300,15 +304,16 @@ function testDeinflections() {                  {term: '話す', source: '話させられる',     rule: 'v5', reasons: ['causative', 'potential or passive']},                  {term: '話す', source: '話せ',             rule: 'v5', reasons: ['imperative']},                  {term: '話す', source: '話さない',         rule: 'v5', reasons: ['negative']}, -                {term: '話す', source: '話しません',       rule: 'v5', reasons: ['polite negative']}, +                {term: '話す', source: '話しません',       rule: 'v5', reasons: ['polite', 'negative']},                  {term: '話す', source: '話さなかった',     rule: 'v5', reasons: ['negative', 'past']}, -                {term: '話す', source: '話しませんでした', rule: 'v5', reasons: ['polite past negative']}, +                {term: '話す', source: '話しませんでした', rule: 'v5', reasons: ['polite', 'negative', 'past']},                  {term: '話す', source: '話さなくて',       rule: 'v5', reasons: ['negative', '-te']},                  {term: '話す', source: '話せない',         rule: 'v5', reasons: ['potential', 'negative']},                  {term: '話す', source: '話されない',       rule: 'v5', reasons: ['passive', 'negative']},                  {term: '話す', source: '話させない',       rule: 'v5', reasons: ['causative', 'negative']},                  {term: '話す', source: '話させられない',   rule: 'v5', reasons: ['causative', 'potential or passive', 'negative']},                  {term: '話す', source: '話すな',           rule: 'v5', reasons: ['imperative negative']}, +                {term: '話す', source: '話しまして',     rule: 'v5', reasons: ['polite', '-te']},                  {term: '話す', source: '話せば',           rule: 'v5', reasons: ['-ba']},                  {term: '話す', source: '話しちゃう',       rule: 'v5', reasons: ['-chau']}, @@ -324,7 +329,7 @@ function testDeinflections() {                  {term: '話す', source: '話さざる',           rule: 'v5', reasons: ['-zaru']},                  {term: '話す', source: '話さねば',           rule: 'v5', reasons: ['-neba']},                  {term: '話す', source: '話し',             rule: 'v5', reasons: ['masu stem']}, -                {term: '話す', source: '話しましょう',     rule: 'v5', reasons: ['polite volitional']}, +                {term: '話す', source: '話しましょう',     rule: 'v5', reasons: ['polite', 'volitional']},                  {term: '話す', source: '話そう',           rule: 'v5', reasons: ['volitional']},                  // ['causative passive']                  {term: '話す', source: '話しとく',         rule: 'v5', reasons: ['-toku']}, @@ -342,7 +347,7 @@ function testDeinflections() {                  {term: '待つ', source: '待つ',             rule: 'v5', reasons: []},                  {term: '待つ', source: '待ちます',         rule: 'v5', reasons: ['polite']},                  {term: '待つ', source: '待った',           rule: 'v5', reasons: ['past']}, -                {term: '待つ', source: '待ちました',       rule: 'v5', reasons: ['polite past']}, +                {term: '待つ', source: '待ちました',       rule: 'v5', reasons: ['polite', 'past']},                  {term: '待つ', source: '待って',           rule: 'v5', reasons: ['-te']},                  {term: '待つ', source: '待てる',           rule: 'v5', reasons: ['potential']},                  {term: '待つ', source: '待たれる',         rule: 'v5', reasons: ['passive']}, @@ -350,15 +355,16 @@ function testDeinflections() {                  {term: '待つ', source: '待たせられる',     rule: 'v5', reasons: ['causative', 'potential or passive']},                  {term: '待つ', source: '待て',             rule: 'v5', reasons: ['imperative']},                  {term: '待つ', source: '待たない',         rule: 'v5', reasons: ['negative']}, -                {term: '待つ', source: '待ちません',       rule: 'v5', reasons: ['polite negative']}, +                {term: '待つ', source: '待ちません',       rule: 'v5', reasons: ['polite', 'negative']},                  {term: '待つ', source: '待たなかった',     rule: 'v5', reasons: ['negative', 'past']}, -                {term: '待つ', source: '待ちませんでした', rule: 'v5', reasons: ['polite past negative']}, +                {term: '待つ', source: '待ちませんでした', rule: 'v5', reasons: ['polite', 'negative', 'past']},                  {term: '待つ', source: '待たなくて',       rule: 'v5', reasons: ['negative', '-te']},                  {term: '待つ', source: '待てない',         rule: 'v5', reasons: ['potential', 'negative']},                  {term: '待つ', source: '待たれない',       rule: 'v5', reasons: ['passive', 'negative']},                  {term: '待つ', source: '待たせない',       rule: 'v5', reasons: ['causative', 'negative']},                  {term: '待つ', source: '待たせられない',   rule: 'v5', reasons: ['causative', 'potential or passive', 'negative']},                  {term: '待つ', source: '待つな',           rule: 'v5', reasons: ['imperative negative']}, +                {term: '待つ', source: '待ちまして',     rule: 'v5', reasons: ['polite', '-te']},                  {term: '待つ', source: '待てば',           rule: 'v5', reasons: ['-ba']},                  {term: '待つ', source: '待っちゃう',       rule: 'v5', reasons: ['-chau']}, @@ -374,7 +380,7 @@ function testDeinflections() {                  {term: '待つ', source: '待たざる',           rule: 'v5', reasons: ['-zaru']},                  {term: '待つ', source: '待たねば',           rule: 'v5', reasons: ['-neba']},                  {term: '待つ', source: '待ち',             rule: 'v5', reasons: ['masu stem']}, -                {term: '待つ', source: '待ちましょう',     rule: 'v5', reasons: ['polite volitional']}, +                {term: '待つ', source: '待ちましょう',     rule: 'v5', reasons: ['polite', 'volitional']},                  {term: '待つ', source: '待とう',           rule: 'v5', reasons: ['volitional']},                  {term: '待つ', source: '待たされる',       rule: 'v5', reasons: ['causative passive']},                  {term: '待つ', source: '待っとく',         rule: 'v5', reasons: ['-toku']}, @@ -392,7 +398,7 @@ function testDeinflections() {                  {term: '死ぬ', source: '死ぬ',             rule: 'v5', reasons: []},                  {term: '死ぬ', source: '死にます',         rule: 'v5', reasons: ['polite']},                  {term: '死ぬ', source: '死んだ',           rule: 'v5', reasons: ['past']}, -                {term: '死ぬ', source: '死にました',       rule: 'v5', reasons: ['polite past']}, +                {term: '死ぬ', source: '死にました',       rule: 'v5', reasons: ['polite', 'past']},                  {term: '死ぬ', source: '死んで',           rule: 'v5', reasons: ['-te']},                  {term: '死ぬ', source: '死ねる',           rule: 'v5', reasons: ['potential']},                  {term: '死ぬ', source: '死なれる',         rule: 'v5', reasons: ['passive']}, @@ -400,15 +406,16 @@ function testDeinflections() {                  {term: '死ぬ', source: '死なせられる',     rule: 'v5', reasons: ['causative', 'potential or passive']},                  {term: '死ぬ', source: '死ね',             rule: 'v5', reasons: ['imperative']},                  {term: '死ぬ', source: '死なない',         rule: 'v5', reasons: ['negative']}, -                {term: '死ぬ', source: '死にません',       rule: 'v5', reasons: ['polite negative']}, +                {term: '死ぬ', source: '死にません',       rule: 'v5', reasons: ['polite', 'negative']},                  {term: '死ぬ', source: '死ななかった',     rule: 'v5', reasons: ['negative', 'past']}, -                {term: '死ぬ', source: '死にませんでした', rule: 'v5', reasons: ['polite past negative']}, +                {term: '死ぬ', source: '死にませんでした', rule: 'v5', reasons: ['polite', 'negative', 'past']},                  {term: '死ぬ', source: '死ななくて',       rule: 'v5', reasons: ['negative', '-te']},                  {term: '死ぬ', source: '死ねない',         rule: 'v5', reasons: ['potential', 'negative']},                  {term: '死ぬ', source: '死なれない',       rule: 'v5', reasons: ['passive', 'negative']},                  {term: '死ぬ', source: '死なせない',       rule: 'v5', reasons: ['causative', 'negative']},                  {term: '死ぬ', source: '死なせられない',   rule: 'v5', reasons: ['causative', 'potential or passive', 'negative']},                  {term: '死ぬ', source: '死ぬな',           rule: 'v5', reasons: ['imperative negative']}, +                {term: '死ぬ', source: '死にまして',     rule: 'v5', reasons: ['polite', '-te']},                  {term: '死ぬ', source: '死ねば',           rule: 'v5', reasons: ['-ba']},                  {term: '死ぬ', source: '死んじゃう',       rule: 'v5', reasons: ['-chau']}, @@ -424,7 +431,7 @@ function testDeinflections() {                  {term: '死ぬ', source: '死なざる',           rule: 'v5', reasons: ['-zaru']},                  {term: '死ぬ', source: '死なねば',           rule: 'v5', reasons: ['-neba']},                  {term: '死ぬ', source: '死に',             rule: 'v5', reasons: ['masu stem']}, -                {term: '死ぬ', source: '死にましょう',     rule: 'v5', reasons: ['polite volitional']}, +                {term: '死ぬ', source: '死にましょう',     rule: 'v5', reasons: ['polite', 'volitional']},                  {term: '死ぬ', source: '死のう',           rule: 'v5', reasons: ['volitional']},                  {term: '死ぬ', source: '死なされる',       rule: 'v5', reasons: ['causative passive']},                  {term: '死ぬ', source: '死んどく',         rule: 'v5', reasons: ['-toku']}, @@ -441,7 +448,7 @@ function testDeinflections() {                  {term: '遊ぶ', source: '遊ぶ',             rule: 'v5', reasons: []},                  {term: '遊ぶ', source: '遊びます',         rule: 'v5', reasons: ['polite']},                  {term: '遊ぶ', source: '遊んだ',           rule: 'v5', reasons: ['past']}, -                {term: '遊ぶ', source: '遊びました',       rule: 'v5', reasons: ['polite past']}, +                {term: '遊ぶ', source: '遊びました',       rule: 'v5', reasons: ['polite', 'past']},                  {term: '遊ぶ', source: '遊んで',           rule: 'v5', reasons: ['-te']},                  {term: '遊ぶ', source: '遊べる',           rule: 'v5', reasons: ['potential']},                  {term: '遊ぶ', source: '遊ばれる',         rule: 'v5', reasons: ['passive']}, @@ -449,15 +456,16 @@ function testDeinflections() {                  {term: '遊ぶ', source: '遊ばせられる',     rule: 'v5', reasons: ['causative', 'potential or passive']},                  {term: '遊ぶ', source: '遊べ',             rule: 'v5', reasons: ['imperative']},                  {term: '遊ぶ', source: '遊ばない',         rule: 'v5', reasons: ['negative']}, -                {term: '遊ぶ', source: '遊びません',       rule: 'v5', reasons: ['polite negative']}, +                {term: '遊ぶ', source: '遊びません',       rule: 'v5', reasons: ['polite', 'negative']},                  {term: '遊ぶ', source: '遊ばなかった',     rule: 'v5', reasons: ['negative', 'past']}, -                {term: '遊ぶ', source: '遊びませんでした', rule: 'v5', reasons: ['polite past negative']}, +                {term: '遊ぶ', source: '遊びませんでした', rule: 'v5', reasons: ['polite', 'negative', 'past']},                  {term: '遊ぶ', source: '遊ばなくて',       rule: 'v5', reasons: ['negative', '-te']},                  {term: '遊ぶ', source: '遊べない',         rule: 'v5', reasons: ['potential', 'negative']},                  {term: '遊ぶ', source: '遊ばれない',       rule: 'v5', reasons: ['passive', 'negative']},                  {term: '遊ぶ', source: '遊ばせない',       rule: 'v5', reasons: ['causative', 'negative']},                  {term: '遊ぶ', source: '遊ばせられない',   rule: 'v5', reasons: ['causative', 'potential or passive', 'negative']},                  {term: '遊ぶ', source: '遊ぶな',           rule: 'v5', reasons: ['imperative negative']}, +                {term: '遊ぶ', source: '遊びまして',     rule: 'v5', reasons: ['polite', '-te']},                  {term: '遊ぶ', source: '遊べば',           rule: 'v5', reasons: ['-ba']},                  {term: '遊ぶ', source: '遊んじゃう',       rule: 'v5', reasons: ['-chau']}, @@ -473,7 +481,7 @@ function testDeinflections() {                  {term: '遊ぶ', source: '遊ばざる',           rule: 'v5', reasons: ['-zaru']},                  {term: '遊ぶ', source: '遊ばねば',           rule: 'v5', reasons: ['-neba']},                  {term: '遊ぶ', source: '遊び',             rule: 'v5', reasons: ['masu stem']}, -                {term: '遊ぶ', source: '遊びましょう',     rule: 'v5', reasons: ['polite volitional']}, +                {term: '遊ぶ', source: '遊びましょう',     rule: 'v5', reasons: ['polite', 'volitional']},                  {term: '遊ぶ', source: '遊ぼう',           rule: 'v5', reasons: ['volitional']},                  {term: '遊ぶ', source: '遊ばされる',       rule: 'v5', reasons: ['causative passive']},                  {term: '遊ぶ', source: '遊んどく',         rule: 'v5', reasons: ['-toku']}, @@ -490,7 +498,7 @@ function testDeinflections() {                  {term: '飲む', source: '飲む',             rule: 'v5', reasons: []},                  {term: '飲む', source: '飲みます',         rule: 'v5', reasons: ['polite']},                  {term: '飲む', source: '飲んだ',           rule: 'v5', reasons: ['past']}, -                {term: '飲む', source: '飲みました',       rule: 'v5', reasons: ['polite past']}, +                {term: '飲む', source: '飲みました',       rule: 'v5', reasons: ['polite', 'past']},                  {term: '飲む', source: '飲んで',           rule: 'v5', reasons: ['-te']},                  {term: '飲む', source: '飲める',           rule: 'v5', reasons: ['potential']},                  {term: '飲む', source: '飲まれる',         rule: 'v5', reasons: ['passive']}, @@ -498,15 +506,16 @@ function testDeinflections() {                  {term: '飲む', source: '飲ませられる',     rule: 'v5', reasons: ['causative', 'potential or passive']},                  {term: '飲む', source: '飲め',             rule: 'v5', reasons: ['imperative']},                  {term: '飲む', source: '飲まない',         rule: 'v5', reasons: ['negative']}, -                {term: '飲む', source: '飲みません',       rule: 'v5', reasons: ['polite negative']}, +                {term: '飲む', source: '飲みません',       rule: 'v5', reasons: ['polite', 'negative']},                  {term: '飲む', source: '飲まなかった',     rule: 'v5', reasons: ['negative', 'past']}, -                {term: '飲む', source: '飲みませんでした', rule: 'v5', reasons: ['polite past negative']}, +                {term: '飲む', source: '飲みませんでした', rule: 'v5', reasons: ['polite', 'negative', 'past']},                  {term: '飲む', source: '飲まなくて',       rule: 'v5', reasons: ['negative', '-te']},                  {term: '飲む', source: '飲めない',         rule: 'v5', reasons: ['potential', 'negative']},                  {term: '飲む', source: '飲まれない',       rule: 'v5', reasons: ['passive', 'negative']},                  {term: '飲む', source: '飲ませない',       rule: 'v5', reasons: ['causative', 'negative']},                  {term: '飲む', source: '飲ませられない',   rule: 'v5', reasons: ['causative', 'potential or passive', 'negative']},                  {term: '飲む', source: '飲むな',           rule: 'v5', reasons: ['imperative negative']}, +                {term: '飲む', source: '飲みまして',     rule: 'v5', reasons: ['polite', '-te']},                  {term: '飲む', source: '飲めば',           rule: 'v5', reasons: ['-ba']},                  {term: '飲む', source: '飲んじゃう',       rule: 'v5', reasons: ['-chau']}, @@ -522,7 +531,7 @@ function testDeinflections() {                  {term: '飲む', source: '飲まざる',           rule: 'v5', reasons: ['-zaru']},                  {term: '飲む', source: '飲まねば',           rule: 'v5', reasons: ['-neba']},                  {term: '飲む', source: '飲み',             rule: 'v5', reasons: ['masu stem']}, -                {term: '飲む', source: '飲みましょう',     rule: 'v5', reasons: ['polite volitional']}, +                {term: '飲む', source: '飲みましょう',     rule: 'v5', reasons: ['polite', 'volitional']},                  {term: '飲む', source: '飲もう',           rule: 'v5', reasons: ['volitional']},                  {term: '飲む', source: '飲まされる',       rule: 'v5', reasons: ['causative passive']},                  {term: '飲む', source: '飲んどく',         rule: 'v5', reasons: ['-toku']}, @@ -539,7 +548,7 @@ function testDeinflections() {                  {term: '作る', source: '作る',             rule: 'v5', reasons: []},                  {term: '作る', source: '作ります',         rule: 'v5', reasons: ['polite']},                  {term: '作る', source: '作った',           rule: 'v5', reasons: ['past']}, -                {term: '作る', source: '作りました',       rule: 'v5', reasons: ['polite past']}, +                {term: '作る', source: '作りました',       rule: 'v5', reasons: ['polite', 'past']},                  {term: '作る', source: '作って',           rule: 'v5', reasons: ['-te']},                  {term: '作る', source: '作れる',           rule: 'v5', reasons: ['potential']},                  {term: '作る', source: '作られる',         rule: 'v5', reasons: ['passive']}, @@ -547,15 +556,16 @@ function testDeinflections() {                  {term: '作る', source: '作らせられる',     rule: 'v5', reasons: ['causative', 'potential or passive']},                  {term: '作る', source: '作れ',             rule: 'v5', reasons: ['imperative']},                  {term: '作る', source: '作らない',         rule: 'v5', reasons: ['negative']}, -                {term: '作る', source: '作りません',       rule: 'v5', reasons: ['polite negative']}, +                {term: '作る', source: '作りません',       rule: 'v5', reasons: ['polite', 'negative']},                  {term: '作る', source: '作らなかった',     rule: 'v5', reasons: ['negative', 'past']}, -                {term: '作る', source: '作りませんでした', rule: 'v5', reasons: ['polite past negative']}, +                {term: '作る', source: '作りませんでした', rule: 'v5', reasons: ['polite', 'negative', 'past']},                  {term: '作る', source: '作らなくて',       rule: 'v5', reasons: ['negative', '-te']},                  {term: '作る', source: '作れない',         rule: 'v5', reasons: ['potential', 'negative']},                  {term: '作る', source: '作られない',       rule: 'v5', reasons: ['passive', 'negative']},                  {term: '作る', source: '作らせない',       rule: 'v5', reasons: ['causative', 'negative']},                  {term: '作る', source: '作らせられない',   rule: 'v5', reasons: ['causative', 'potential or passive', 'negative']},                  {term: '作る', source: '作るな',           rule: 'v5', reasons: ['imperative negative']}, +                {term: '作る', source: '作りまして',     rule: 'v5', reasons: ['polite', '-te']},                  {term: '作る', source: '作れば',           rule: 'v5', reasons: ['-ba']},                  {term: '作る', source: '作っちゃう',       rule: 'v5', reasons: ['-chau']}, @@ -571,7 +581,7 @@ function testDeinflections() {                  {term: '作る', source: '作らざる',           rule: 'v5', reasons: ['-zaru']},                  {term: '作る', source: '作らねば',           rule: 'v5', reasons: ['-neba']},                  {term: '作る', source: '作り',             rule: 'v5', reasons: ['masu stem']}, -                {term: '作る', source: '作りましょう',     rule: 'v5', reasons: ['polite volitional']}, +                {term: '作る', source: '作りましょう',     rule: 'v5', reasons: ['polite', 'volitional']},                  {term: '作る', source: '作ろう',           rule: 'v5', reasons: ['volitional']},                  {term: '作る', source: '作らされる',       rule: 'v5', reasons: ['causative passive']},                  {term: '作る', source: '作っとく',         rule: 'v5', reasons: ['-toku']}, @@ -589,7 +599,7 @@ function testDeinflections() {                  {term: '為る', source: '為る',           rule: 'vs', reasons: []},                  {term: '為る', source: '為ます',         rule: 'vs', reasons: ['polite']},                  {term: '為る', source: '為た',           rule: 'vs', reasons: ['past']}, -                {term: '為る', source: '為ました',       rule: 'vs', reasons: ['polite past']}, +                {term: '為る', source: '為ました',       rule: 'vs', reasons: ['polite', 'past']},                  {term: '為る', source: '為て',           rule: 'vs', reasons: ['-te']},                  {term: '為る', source: '為られる',       rule: 'vs', reasons: ['potential or passive']},                  {term: '為る', source: '為れる',         rule: 'vs', reasons: ['passive']}, @@ -599,9 +609,9 @@ function testDeinflections() {                  {term: '為る', source: '為させられる',   rule: 'vs', reasons: ['causative', 'potential or passive']},                  {term: '為る', source: '為ろ',           rule: 'vs', reasons: ['imperative']},                  {term: '為る', source: '為ない',         rule: 'vs', reasons: ['negative']}, -                {term: '為る', source: '為ません',       rule: 'vs', reasons: ['polite negative']}, +                {term: '為る', source: '為ません',       rule: 'vs', reasons: ['polite', 'negative']},                  {term: '為る', source: '為なかった',     rule: 'vs', reasons: ['negative', 'past']}, -                {term: '為る', source: '為ませんでした', rule: 'vs', reasons: ['polite past negative']}, +                {term: '為る', source: '為ませんでした', rule: 'vs', reasons: ['polite', 'negative', 'past']},                  {term: '為る', source: '為なくて',       rule: 'vs', reasons: ['negative', '-te']},                  {term: '為る', source: '為られない',     rule: 'vs', reasons: ['potential or passive', 'negative']},                  {term: '為る', source: '為れない',       rule: 'vs', reasons: ['passive', 'negative']}, @@ -610,6 +620,7 @@ function testDeinflections() {                  {term: '為る', source: '為せられない',   rule: 'vs', reasons: ['causative', 'potential or passive', 'negative']},                  {term: '為る', source: '為させられない', rule: 'vs', reasons: ['causative', 'potential or passive', 'negative']},                  {term: '為る', source: '為るな',         rule: 'vs', reasons: ['imperative negative']}, +                {term: '為る', source: '為まして',     rule: 'vs', reasons: ['polite', '-te']},                  {term: '為る', source: '為れば',         rule: 'vs', reasons: ['-ba']},                  {term: '為る', source: '為ちゃう',       rule: 'vs', reasons: ['-chau']}, @@ -625,7 +636,7 @@ function testDeinflections() {                  {term: '為る', source: '為ざる',           rule: 'vs', reasons: ['-zaru']},                  {term: '為る', source: '為ねば',           rule: 'vs', reasons: ['-neba']},                  // ['masu stem'] -                {term: '為る', source: '為ましょう',     rule: 'vs', reasons: ['polite volitional']}, +                {term: '為る', source: '為ましょう',     rule: 'vs', reasons: ['polite', 'volitional']},                  {term: '為る', source: '為よう',         rule: 'vs', reasons: ['volitional']},                  // ['causative passive']                  {term: '為る', source: '為とく',         rule: 'vs', reasons: ['-toku']}, @@ -638,7 +649,7 @@ function testDeinflections() {                  {term: 'する', source: 'する',           rule: 'vs', reasons: []},                  {term: 'する', source: 'します',         rule: 'vs', reasons: ['polite']},                  {term: 'する', source: 'した',           rule: 'vs', reasons: ['past']}, -                {term: 'する', source: 'しました',       rule: 'vs', reasons: ['polite past']}, +                {term: 'する', source: 'しました',       rule: 'vs', reasons: ['polite', 'past']},                  {term: 'する', source: 'して',           rule: 'vs', reasons: ['-te']},                  {term: 'する', source: 'できる',         rule: 'vs', reasons: ['potential']},                  {term: 'する', source: '出来る',         rule: 'vs', reasons: ['potential']}, @@ -650,9 +661,9 @@ function testDeinflections() {                  {term: 'する', source: 'せさせられる',   rule: 'vs', reasons: ['causative', 'potential or passive']},                  {term: 'する', source: 'しろ',           rule: 'vs', reasons: ['imperative']},                  {term: 'する', source: 'しない',         rule: 'vs', reasons: ['negative']}, -                {term: 'する', source: 'しません',       rule: 'vs', reasons: ['polite negative']}, +                {term: 'する', source: 'しません',       rule: 'vs', reasons: ['polite', 'negative']},                  {term: 'する', source: 'しなかった',     rule: 'vs', reasons: ['negative', 'past']}, -                {term: 'する', source: 'しませんでした', rule: 'vs', reasons: ['polite past negative']}, +                {term: 'する', source: 'しませんでした', rule: 'vs', reasons: ['polite', 'negative', 'past']},                  {term: 'する', source: 'しなくて',       rule: 'vs', reasons: ['negative', '-te']},                  {term: 'する', source: 'せられない',     rule: 'vs', reasons: ['potential or passive', 'negative']},                  {term: 'する', source: 'されない',       rule: 'vs', reasons: ['passive', 'negative']}, @@ -661,6 +672,7 @@ function testDeinflections() {                  {term: 'する', source: 'させられない',   rule: 'vs', reasons: ['causative', 'potential or passive', 'negative']},                  {term: 'する', source: 'せさせられない', rule: 'vs', reasons: ['causative', 'potential or passive', 'negative']},                  {term: 'する', source: 'するな',         rule: 'vs', reasons: ['imperative negative']}, +                {term: 'する', source: 'しまして',     rule: 'vs', reasons: ['polite', '-te']},                  {term: 'する', source: 'すれば',         rule: 'vs', reasons: ['-ba']},                  {term: 'する', source: 'しちゃう',       rule: 'vs', reasons: ['-chau']}, @@ -676,7 +688,7 @@ function testDeinflections() {                  {term: 'する', source: 'せざる',           rule: 'vs', reasons: ['-zaru']},                  {term: 'する', source: 'せねば',           rule: 'vs', reasons: ['-neba']},                  // ['masu stem'] -                {term: 'する', source: 'しましょう',     rule: 'vs', reasons: ['polite volitional']}, +                {term: 'する', source: 'しましょう',     rule: 'vs', reasons: ['polite', 'volitional']},                  {term: 'する', source: 'しよう',         rule: 'vs', reasons: ['volitional']},                  // ['causative passive']                  {term: 'する', source: 'しとく',         rule: 'vs', reasons: ['-toku']}, @@ -689,7 +701,7 @@ function testDeinflections() {                  {term: '来る', source: '来る',           rule: 'vk', reasons: []},                  {term: '来る', source: '来ます',         rule: 'vk', reasons: ['polite']},                  {term: '来る', source: '来た',           rule: 'vk', reasons: ['past']}, -                {term: '来る', source: '来ました',       rule: 'vk', reasons: ['polite past']}, +                {term: '来る', source: '来ました',       rule: 'vk', reasons: ['polite', 'past']},                  {term: '来る', source: '来て',           rule: 'vk', reasons: ['-te']},                  {term: '来る', source: '来られる',       rule: 'vk', reasons: ['potential or passive']},                  {term: '来る', source: '来られる',       rule: 'vk', reasons: ['potential or passive']}, @@ -697,15 +709,16 @@ function testDeinflections() {                  {term: '来る', source: '来させられる',   rule: 'vk', reasons: ['causative', 'potential or passive']},                  {term: '来る', source: '来い',           rule: 'vk', reasons: ['imperative']},                  {term: '来る', source: '来ない',         rule: 'vk', reasons: ['negative']}, -                {term: '来る', source: '来ません',       rule: 'vk', reasons: ['polite negative']}, +                {term: '来る', source: '来ません',       rule: 'vk', reasons: ['polite', 'negative']},                  {term: '来る', source: '来なかった',     rule: 'vk', reasons: ['negative', 'past']}, -                {term: '来る', source: '来ませんでした', rule: 'vk', reasons: ['polite past negative']}, +                {term: '来る', source: '来ませんでした', rule: 'vk', reasons: ['polite', 'negative', 'past']},                  {term: '来る', source: '来なくて',       rule: 'vk', reasons: ['negative', '-te']},                  {term: '来る', source: '来られない',     rule: 'vk', reasons: ['potential or passive', 'negative']},                  {term: '来る', source: '来られない',     rule: 'vk', reasons: ['potential or passive', 'negative']},                  {term: '来る', source: '来させない',     rule: 'vk', reasons: ['causative', 'negative']},                  {term: '来る', source: '来させられない', rule: 'vk', reasons: ['causative', 'potential or passive', 'negative']},                  {term: '来る', source: '来るな',         rule: 'vk', reasons: ['imperative negative']}, +                {term: '来る', source: '来まして',     rule: 'vk', reasons: ['polite', '-te']},                  {term: '来る', source: '来れば',         rule: 'vk', reasons: ['-ba']},                  {term: '来る', source: '来ちゃう',       rule: 'vk', reasons: ['-chau']}, @@ -721,7 +734,7 @@ function testDeinflections() {                  {term: '来る', source: '来ざる',           rule: 'vk', reasons: ['-zaru']},                  {term: '来る', source: '来ねば',           rule: 'vk', reasons: ['-neba']},                  {term: '来る', source: '来',             rule: 'vk', reasons: ['masu stem']}, -                {term: '来る', source: '来ましょう',     rule: 'vk', reasons: ['polite volitional']}, +                {term: '来る', source: '来ましょう',     rule: 'vk', reasons: ['polite', 'volitional']},                  {term: '来る', source: '来よう',         rule: 'vk', reasons: ['volitional']},                  // ['causative passive']                  {term: '来る', source: '来とく',         rule: 'vk', reasons: ['-toku']}, @@ -734,7 +747,7 @@ function testDeinflections() {                  {term: '來る', source: '來る',           rule: 'vk', reasons: []},                  {term: '來る', source: '來ます',         rule: 'vk', reasons: ['polite']},                  {term: '來る', source: '來た',           rule: 'vk', reasons: ['past']}, -                {term: '來る', source: '來ました',       rule: 'vk', reasons: ['polite past']}, +                {term: '來る', source: '來ました',       rule: 'vk', reasons: ['polite', 'past']},                  {term: '來る', source: '來て',           rule: 'vk', reasons: ['-te']},                  {term: '來る', source: '來られる',       rule: 'vk', reasons: ['potential or passive']},                  {term: '來る', source: '來られる',       rule: 'vk', reasons: ['potential or passive']}, @@ -742,15 +755,16 @@ function testDeinflections() {                  {term: '來る', source: '來させられる',   rule: 'vk', reasons: ['causative', 'potential or passive']},                  {term: '來る', source: '來い',           rule: 'vk', reasons: ['imperative']},                  {term: '來る', source: '來ない',         rule: 'vk', reasons: ['negative']}, -                {term: '來る', source: '來ません',       rule: 'vk', reasons: ['polite negative']}, +                {term: '來る', source: '來ません',       rule: 'vk', reasons: ['polite', 'negative']},                  {term: '來る', source: '來なかった',     rule: 'vk', reasons: ['negative', 'past']}, -                {term: '來る', source: '來ませんでした', rule: 'vk', reasons: ['polite past negative']}, +                {term: '來る', source: '來ませんでした', rule: 'vk', reasons: ['polite', 'negative', 'past']},                  {term: '來る', source: '來なくて',       rule: 'vk', reasons: ['negative', '-te']},                  {term: '來る', source: '來られない',     rule: 'vk', reasons: ['potential or passive', 'negative']},                  {term: '來る', source: '來られない',     rule: 'vk', reasons: ['potential or passive', 'negative']},                  {term: '來る', source: '來させない',     rule: 'vk', reasons: ['causative', 'negative']},                  {term: '來る', source: '來させられない', rule: 'vk', reasons: ['causative', 'potential or passive', 'negative']},                  {term: '來る', source: '來るな',         rule: 'vk', reasons: ['imperative negative']}, +                {term: '來る', source: '來まして',     rule: 'vk', reasons: ['polite', '-te']},                  {term: '來る', source: '來れば',         rule: 'vk', reasons: ['-ba']},                  {term: '來る', source: '來ちゃう',       rule: 'vk', reasons: ['-chau']}, @@ -766,7 +780,7 @@ function testDeinflections() {                  {term: '來る', source: '來ざる',           rule: 'vk', reasons: ['-zaru']},                  {term: '來る', source: '來ねば',           rule: 'vk', reasons: ['-neba']},                  {term: '來る', source: '來',             rule: 'vk', reasons: ['masu stem']}, -                {term: '來る', source: '來ましょう',     rule: 'vk', reasons: ['polite volitional']}, +                {term: '來る', source: '來ましょう',     rule: 'vk', reasons: ['polite', 'volitional']},                  {term: '來る', source: '來よう',         rule: 'vk', reasons: ['volitional']},                  // ['causative passive']                  {term: '來る', source: '來とく',         rule: 'vk', reasons: ['-toku']}, @@ -779,7 +793,7 @@ function testDeinflections() {                  {term: 'くる', source: 'くる',           rule: 'vk', reasons: []},                  {term: 'くる', source: 'きます',         rule: 'vk', reasons: ['polite']},                  {term: 'くる', source: 'きた',           rule: 'vk', reasons: ['past']}, -                {term: 'くる', source: 'きました',       rule: 'vk', reasons: ['polite past']}, +                {term: 'くる', source: 'きました',       rule: 'vk', reasons: ['polite', 'past']},                  {term: 'くる', source: 'きて',           rule: 'vk', reasons: ['-te']},                  {term: 'くる', source: 'こられる',       rule: 'vk', reasons: ['potential or passive']},                  {term: 'くる', source: 'こられる',       rule: 'vk', reasons: ['potential or passive']}, @@ -787,15 +801,16 @@ function testDeinflections() {                  {term: 'くる', source: 'こさせられる',   rule: 'vk', reasons: ['causative', 'potential or passive']},                  {term: 'くる', source: 'こい',           rule: 'vk', reasons: ['imperative']},                  {term: 'くる', source: 'こない',         rule: 'vk', reasons: ['negative']}, -                {term: 'くる', source: 'きません',       rule: 'vk', reasons: ['polite negative']}, +                {term: 'くる', source: 'きません',       rule: 'vk', reasons: ['polite', 'negative']},                  {term: 'くる', source: 'こなかった',     rule: 'vk', reasons: ['negative', 'past']}, -                {term: 'くる', source: 'きませんでした', rule: 'vk', reasons: ['polite past negative']}, +                {term: 'くる', source: 'きませんでした', rule: 'vk', reasons: ['polite', 'negative', 'past']},                  {term: 'くる', source: 'こなくて',       rule: 'vk', reasons: ['negative', '-te']},                  {term: 'くる', source: 'こられない',     rule: 'vk', reasons: ['potential or passive', 'negative']},                  {term: 'くる', source: 'こられない',     rule: 'vk', reasons: ['potential or passive', 'negative']},                  {term: 'くる', source: 'こさせない',     rule: 'vk', reasons: ['causative', 'negative']},                  {term: 'くる', source: 'こさせられない', rule: 'vk', reasons: ['causative', 'potential or passive', 'negative']},                  {term: 'くる', source: 'くるな',         rule: 'vk', reasons: ['imperative negative']}, +                {term: 'くる', source: 'きまして',     rule: 'vk', reasons: ['polite', '-te']},                  {term: 'くる', source: 'くれば',         rule: 'vk', reasons: ['-ba']},                  {term: 'くる', source: 'きちゃう',       rule: 'vk', reasons: ['-chau']}, @@ -811,7 +826,7 @@ function testDeinflections() {                  {term: 'くる', source: 'こざる',           rule: 'vk', reasons: ['-zaru']},                  {term: 'くる', source: 'こねば',           rule: 'vk', reasons: ['-neba']},                  {term: 'くる', source: 'き',             rule: 'vk', reasons: ['masu stem']}, -                {term: 'くる', source: 'きましょう',     rule: 'vk', reasons: ['polite volitional']}, +                {term: 'くる', source: 'きましょう',     rule: 'vk', reasons: ['polite', 'volitional']},                  {term: 'くる', source: 'こよう',         rule: 'vk', reasons: ['volitional']},                  // ['causative passive']                  {term: 'くる', source: 'きとく',         rule: 'vk', reasons: ['-toku']}, @@ -829,7 +844,7 @@ function testDeinflections() {                  {term: '論ずる', source: '論ずる',           rule: 'vz', reasons: []},                  {term: '論ずる', source: '論じます',         rule: 'vz', reasons: ['polite']},                  {term: '論ずる', source: '論じた',           rule: 'vz', reasons: ['past']}, -                {term: '論ずる', source: '論じました',       rule: 'vz', reasons: ['polite past']}, +                {term: '論ずる', source: '論じました',       rule: 'vz', reasons: ['polite', 'past']},                  {term: '論ずる', source: '論じて',           rule: 'vz', reasons: ['-te']},                  {term: '論ずる', source: '論ぜられる',       rule: 'vz', reasons: ['potential or passive']},                  {term: '論ずる', source: '論ざれる',         rule: 'vz', reasons: ['potential or passive']}, @@ -841,9 +856,9 @@ function testDeinflections() {                  {term: '論ずる', source: '論ぜさせられる',   rule: 'vz', reasons: ['causative', 'potential or passive']},                  {term: '論ずる', source: '論じろ',           rule: 'vz', reasons: ['imperative']},                  {term: '論ずる', source: '論じない',         rule: 'vz', reasons: ['negative']}, -                {term: '論ずる', source: '論じません',       rule: 'vz', reasons: ['polite negative']}, +                {term: '論ずる', source: '論じません',       rule: 'vz', reasons: ['polite', 'negative']},                  {term: '論ずる', source: '論じなかった',     rule: 'vz', reasons: ['negative', 'past']}, -                {term: '論ずる', source: '論じませんでした', rule: 'vz', reasons: ['polite past negative']}, +                {term: '論ずる', source: '論じませんでした', rule: 'vz', reasons: ['polite', 'negative', 'past']},                  {term: '論ずる', source: '論じなくて',       rule: 'vz', reasons: ['negative', '-te']},                  {term: '論ずる', source: '論ぜられない',     rule: 'vz', reasons: ['potential or passive', 'negative']},                  {term: '論ずる', source: '論じされない',     rule: 'vz', reasons: ['passive', 'negative']}, @@ -853,6 +868,7 @@ function testDeinflections() {                  {term: '論ずる', source: '論じさせられない', rule: 'vz', reasons: ['causative', 'potential or passive', 'negative']},                  {term: '論ずる', source: '論ぜさせられない', rule: 'vz', reasons: ['causative', 'potential or passive', 'negative']},                  {term: '論ずる', source: '論ずるな',         rule: 'vz', reasons: ['imperative negative']}, +                {term: '論ずる', source: '論じまして',     rule: 'vz', reasons: ['polite', '-te']},                  {term: '論ずる', source: '論ずれば',         rule: 'vz', reasons: ['-ba']},                  {term: '論ずる', source: '論じちゃう',       rule: 'vz', reasons: ['-chau']}, @@ -868,7 +884,7 @@ function testDeinflections() {                  {term: '論ずる', source: '論ぜざる',           rule: 'vz', reasons: ['-zaru']},                  {term: '論ずる', source: '論ぜねば',           rule: 'vz', reasons: ['-neba']},                  // ['masu stem'] -                {term: '論ずる', source: '論じましょう',     rule: 'vz', reasons: ['polite volitional']}, +                {term: '論ずる', source: '論じましょう',     rule: 'vz', reasons: ['polite', 'volitional']},                  {term: '論ずる', source: '論じよう',         rule: 'vz', reasons: ['volitional']},                  // ['causative passive']                  {term: '論ずる', source: '論じとく',         rule: 'vz', reasons: ['-toku']}, @@ -1044,7 +1060,7 @@ function testDeinflections() {              tests: [                  {term: '抱き抱える', source: '抱き抱えていなければ', rule: 'v1', reasons: ['-te', 'progressive or perfect', 'negative', '-ba']},                  {term: '抱きかかえる', source: '抱きかかえていなければ', rule: 'v1', reasons: ['-te', 'progressive or perfect', 'negative', '-ba']}, -                {term: '打ち込む', source: '打ち込んでいませんでした', rule: 'v5', reasons: ['-te', 'progressive or perfect', 'polite past negative']}, +                {term: '打ち込む', source: '打ち込んでいませんでした', rule: 'v5', reasons: ['-te', 'progressive or perfect', 'polite', 'negative', 'past']},                  {term: '食べる', source: '食べさせられたくなかった', rule: 'v1', reasons: ['causative', 'potential or passive', '-tai', 'negative', 'past']}              ]          }, |