diff options
Diffstat (limited to 'language')
-rw-r--r-- | language/parser.ts | 14 | ||||
-rw-r--r-- | language/tags.ts | 17 |
2 files changed, 26 insertions, 5 deletions
diff --git a/language/parser.ts b/language/parser.ts index bb4ac1e..40bdd81 100644 --- a/language/parser.ts +++ b/language/parser.ts @@ -5,6 +5,11 @@ import "../util/array.ts"; import "../util/set.ts"; import { DeepPartial } from "../util/types.ts"; +const CONJUGABLE_TAGS = [ + ...Object.values(Tag.Class.Verb), + ...Object.values(Tag.Class.Adjective), +]; + // TODO: rename Parser to Search /** @summary main Parser class */ export default class Parser { @@ -20,6 +25,7 @@ export default class Parser { }); } + // Search.sentence() async parse(sentence: string, optional?: DeepPartial<InputSentenceProps>): Promise<ParseResult> { await this.ready; @@ -64,8 +70,8 @@ export default class Parser { // deconjugated words if (result.depth > 0) { - // can't be conjugated at all - if (!result.tags.anyOf(Object.values(Tag.Class.Verb))) return false; + // check if this word can be conjugated at all + if (!result.tags.anyOf(CONJUGABLE_TAGS)) return false; // ignore other wrong deconjugations if (result.tags.includes(Tag.Class.Verb.U) && @@ -74,6 +80,10 @@ export default class Parser { !result.tags.includes(Tag.Inflection.Reason.Ru)) return false; if (result.tags.includes(Tag.Class.Verb.Suru) && !result.tags.includes(Tag.Inflection.Reason.Suru)) return false; + if (result.tags.includes(Tag.Class.Adjective.I) && + !result.tags.includes(Tag.Inflection.Reason.Adjective.I)) return false; + if (result.tags.includes(Tag.Class.Adjective.Na) && + !result.tags.includes(Tag.Inflection.Reason.Adjective.Na)) return false; } // all other results should be valid grammatically diff --git a/language/tags.ts b/language/tags.ts index d40904f..3065c77 100644 --- a/language/tags.ts +++ b/language/tags.ts @@ -6,8 +6,6 @@ export const Tag = { Class: { /** @constant verb subgroup */ Verb: { - /** @constant any verb (fallback for vague dictionaries) */ - Unspecified: "class:verb", // TODO: deprecate this property and implement verb classifier in ../import/util.ts /** @constant noun that can be conjugated into a verb by adding する */ Suru: "class:verb:suru", /** @@ -21,6 +19,14 @@ export const Tag = { U: "class:verb:u", /** @constant ichidan verbs (〜る in [taekim]) */ Ru: "class:verb:ru", + /** @constant kuru (来る) */ + Kuru: "class:verb:kuru", + }, + Adjective: { + /** @constant adjectives that end in 〜い */ + I: "class:adj:i", + /** @constant adjectives that need to be conjugated using な */ + Na: "class:adj:na", }, /** @constant regular nouns or words that can be treated as nouns */ Noun: "class:noun", @@ -36,6 +42,8 @@ export const Tag = { * @see ./readme.md#behavior-altering-tags */ Expression: "class:expr", + /** @constant adverbs (e.g. 早く) */ + Adverb: "class:adverb", }, /** @constant types of names */ Name: { @@ -88,7 +96,10 @@ export const Tag = { /** @constant applied if word was deconjugated as kuru verb */ Kuru: "infl:reason:kuru", /** @constant applied if word was deconjugated as i-adjective */ - AdjI: "infl:reason:adj-i", + Adjective: { + I: "infl:reason:adj:i", + Na: "infl:reason:adj:na", + }, }, }, /** @constant uncategorized tags */ |