diff --git a/cogs/japanese.py b/cogs/japanese.py new file mode 100644 index 0000000..54b0841 --- /dev/null +++ b/cogs/japanese.py @@ -0,0 +1,40 @@ +import json +from discord.ext import commands +from utils import conjugator + + +class Japanese(commands.Cog): + """A cog that provides some useful japanese tools""" + + def __init__(self): + + with open("utils/japanese_verbs.json") as f: + verbs = json.load(f) + + for key, value in verbs.items(): + if value == 1: + verbs[key] = conjugator.GodanVerbs(key) + if value == 2: + verbs[key] = conjugator.IchidanVerbs(key) + if value == 3: + verbs[key] = conjugator.IrregularVerbs(key) + + self.verbs = verbs + + @commands.command(aliases=["活用", "かつよう", "katsuyou"]) + async def conjugate(self, ctx, verb): + """Conjugate the provided verb. Provide the verb in dictionary form + + EXAMPLE: !conjugate 食べる + RESULT: A menu providing common conjugations for 食べる + """ + verb = self.verbs.get(verb) + + if verb is None: + return await ctx.send(f"Sorry, I don't know {verb}") + + await verb.display(ctx) + + +def setup(bot): + bot.add_cog(Japanese()) diff --git a/utils/conjugator.py b/utils/conjugator.py new file mode 100644 index 0000000..6275f96 --- /dev/null +++ b/utils/conjugator.py @@ -0,0 +1,608 @@ +import discord +from enum import Enum +from discord.ext import menus + + +class GodanEndingTypes(Enum): + u = 1 + tsu_ru = 2 + mu_bu_nu = 3 + ku = 4 + gu = 5 + su = 6 + + +godan_transformation = { + "ぐ": {"あ": "が", "い": "ぎ", "え": "げ", "お": "ご"}, + "す": {"あ": "さ", "い": "し", "え": "せ", "お": "そ"}, + "く": {"あ": "か", "い": "き", "え": "け", "お": "こ"}, + "ぬ": {"あ": "な", "い": "に", "え": "ね", "お": "の"}, + "む": {"あ": "ま", "い": "み", "え": "め", "お": "も"}, + "う": {"あ": "あ", "い": "い", "え": "え", "お": "お"}, + "ぶ": {"あ": "ば", "い": "び", "え": "べ", "お": "ぼ"}, + "つ": {"あ": "た", "い": "ち", "え": "て", "お": "と"}, + "る": {"あ": "ら", "い": "り", "え": "れ", "お": "ろ"}, +} + + +class ConjugationMenu(menus.ListPageSource): + def __init__(self, data): + self.main = data.pop("main") + self.type = data.pop("type") + super().__init__(data.pop("verbs"), per_page=1) + + async def format_page(self, menu, entry): + offset = menu.current_page * self.per_page + e = discord.Embed(title=f"Conjugation guide for {self.main}") + e.description = "\n\n".join( + f"**{form_type}**\n**Rule:** {rule}\n**Conjugation:** {form}" + for form_type, (rule, form) in entry.items() + ) + e.set_footer(text=f"{offset+1}/{self.get_max_pages()} pages") + return e + + +class Verbs: + def __init__(self, verb): + if verb == "来る": + verb = "くる" + self.verb = verb + self.stem = self.verb[:-1] + self.ending = self.verb[-1] + + if self.ending == "う": + self.godan_ending_type = GodanEndingTypes.u + elif self.ending in ["つ", "る"]: + self.godan_ending_type = GodanEndingTypes.tsu_ru + elif self.ending in ["む", "ぶ", "ぬ"]: + self.godan_ending_type = GodanEndingTypes.mu_bu_nu + elif self.ending == "く": + self.godan_ending_type = GodanEndingTypes.ku + elif self.ending == "ぐ": + self.godan_ending_type = GodanEndingTypes.gu + elif self.ending == "す": + self.godan_ending_type = GodanEndingTypes.su + + def te_form(self): + raise NotImplementedError() + + def verb_stem(self, ending="い"): + raise NotImplementedError() + + def negative_te_form(self): + raise NotImplementedError() + + def masu_form(self): + raise NotImplementedError() + + def masen_form(self): + raise NotImplementedError() + + def mashita_form(self): + raise NotImplementedError() + + def masendeshita_form(self): + raise NotImplementedError() + + def dictionary_form(self): + raise NotImplementedError() + + def nai_form(self): + raise NotImplementedError() + + def ta_form(self): + raise NotImplementedError() + + def nakatta_form(self): + raise NotImplementedError() + + def ba_form(self): + raise NotImplementedError() + + def negative_ba_form(self): + raise NotImplementedError() + + def tara_form(self): + raise NotImplementedError() + + def negative_tara_form(self): + raise NotImplementedError() + + def imperative_form(self): + raise NotImplementedError() + + def formal_imperative_form(self): + raise NotImplementedError() + + def volitional_form(self): + raise NotImplementedError() + + def formal_volitional_form(self): + raise NotImplementedError() + + def potential_form(self): + raise NotImplementedError() + + def passive_form(self): + raise NotImplementedError() + + def causative_form(self): + raise NotImplementedError() + + def causative_passive_form(self): + raise NotImplementedError() + + async def display(self, ctx): + data = { + "main": self.verb, + "type": self.verb_type, + "verbs": [ + { + "Polite present affirmative": self.masu_form(), + "Polite present negative": self.masen_form(), + "Polite past affirmative": self.mashita_form(), + "Polite past negative": self.masendeshita_form(), + }, + { + "Plain present affirmative": self.dictionary_form(), + "Plain present negative": self.nai_form(), + "Plain past affirmative": self.ta_form(), + "Plain past negative": self.nakatta_form(), + }, + { + "Te form": self.te_form(), + "Negative te form": self.negative_te_form(), + }, + { + "General conditional": self.ba_form(), + "General conditional negative": self.negative_ba_form(), + "Hypothetical conditional": self.tara_form(), + "Hypothetical conditional negative": self.negative_tara_form(), + }, + { + "Imperative": self.imperative_form(), + "Formal imperative": self.formal_imperative_form(), + "Suggestion": self.volitional_form(), + "Formal suggestion": self.formal_volitional_form(), + }, + { + "Potential": self.potential_form(), + "Passive": self.passive_form(), + "Causative": self.causative_form(), + "Causative Passive": self.causative_passive_form(), + }, + ], + } + + pages = menus.MenuPages( + source=ConjugationMenu(data), clear_reactions_after=True + ) + await pages.start(ctx) + + +class GodanVerbs(Verbs): + verb_type = "Godan" + + def verb_stem(self, ending="い"): + return f"{self.stem}{godan_transformation[self.ending][ending]}" + + def te_form(self): + rule = ( + "If the ending is う、つ、る replace it with って.\n" + "If the ending is む、ぶ、ぬ replace it with んで.\n" + "If the ending is く replace it with いて.\n" + "If the ending is ぐ replace it with いで.\n" + "If the ending is す replace it with して." + ) + if ( + self.godan_ending_type is GodanEndingTypes.u + or self.godan_ending_type is GodanEndingTypes.tsu_ru + ): + return rule, f"{self.stem}って" + elif self.godan_ending_type is GodanEndingTypes.mu_bu_nu: + return rule, f"{self.stem}んで" + elif self.godan_ending_type is GodanEndingTypes.ku: + return rule, f"{self.stem}いて" + elif self.godan_ending_type is GodanEndingTypes.gu: + return rule, f"{self.stem}いで" + elif self.godan_ending_type is GodanEndingTypes.su: + return rule, f"{self.stem}して" + + def negative_te_form(self): + rule = ( + "If the ending is う、 replace it with わ. Then add なくて regardless of ending" + ) + if self.godan_ending_type is GodanEndingTypes.u: + return rule, f"{self.stem}わなくて" + else: + return rule, f"{self.verb_stem('あ')}なくて" + + def masu_form(self): + rule = "Replace the ending with the corresponding い kana, then add ます" + return rule, f"{self.verb_stem('い')}ます" + + def masen_form(self): + rule = "Replace the ending with the corresponding い kana, then add ません" + return rule, f"{self.verb_stem('い')}ません" + + def mashita_form(self): + rule = "Replace the ending with the corresponding い kana, then add ました" + return rule, f"{self.verb_stem('い')}ました" + + def masendeshita_form(self): + rule = "Replace the ending with the corresponding い kana, then add ませんでした" + return rule, f"{self.verb_stem('い')}ませんでした" + + def dictionary_form(self): + rule = "The verb stem is followed by the corresponding う kana" + return rule, self.verb + + def nai_form(self): + rule = "If the ending is う、 replace it with わ. Then add ない regardless of ending" + if self.godan_ending_type is GodanEndingTypes.u: + return rule, f"{self.stem}わない" + else: + return rule, f"{self.verb_stem('あ')}ない" + + def ta_form(self): + rule = ( + "If the ending is う、つ、る replace it with った.\n" + "If the ending is む、ぶ、ぬ replace it with んだ.\n" + "If the ending is く replace it with いた.\n" + "If the ending is ぐ replace it with いだ.\n" + "If the ending is す replace it with した." + ) + if ( + self.godan_ending_type is GodanEndingTypes.u + or self.godan_ending_type is GodanEndingTypes.tsu_ru + ): + return rule, f"{self.stem}った" + elif self.godan_ending_type is GodanEndingTypes.mu_bu_nu: + return rule, f"{self.stem}んだ" + elif self.godan_ending_type is GodanEndingTypes.ku: + return rule, f"{self.stem}いた" + elif self.godan_ending_type is GodanEndingTypes.gu: + return rule, f"{self.stem}いだ" + elif self.godan_ending_type is GodanEndingTypes.su: + return rule, f"{self.stem}した" + + def nakatta_form(self): + rule = ( + "If the ending is う、 replace it with わ. Then add なかった regardless of ending" + ) + if self.godan_ending_type is GodanEndingTypes.u: + return rule, f"{self.stem}わなかった" + else: + return rule, f"{self.verb_stem('あ')}なかった" + + def ba_form(self): + rule = ( + "If the ending is う、つ、る replace it with えば.\n" + "If the ending is む、ぶ、ぬ replace it with めば.\n" + "If the ending is く replace it with いけば.\n" + "If the ending is ぐ replace it with けば.\n" + "If the ending is す replace it with せば." + ) + if ( + self.godan_ending_type is GodanEndingTypes.u + or self.godan_ending_type is GodanEndingTypes.tsu_ru + ): + return rule, f"{self.stem}えば" + elif self.godan_ending_type is GodanEndingTypes.mu_bu_nu: + return rule, f"{self.stem}めば" + elif self.godan_ending_type is GodanEndingTypes.ku: + return rule, f"{self.stem}いけば" + elif self.godan_ending_type is GodanEndingTypes.gu: + return rule, f"{self.stem}げば" + elif self.godan_ending_type is GodanEndingTypes.su: + return rule, f"{self.stem}せば" + + def negative_ba_form(self): + rule = ( + "If the ending is う、 replace it with わ. Then add なければ regardless of ending" + ) + if self.godan_ending_type is GodanEndingTypes.u: + return rule, f"{self.stem}わなければ" + else: + return rule, f"{self.verb_stem('あ')}なければ" + + def tara_form(self): + rule = ( + "If the ending is う、つ、る replace it with ったら.\n" + "If the ending is む、ぶ、ぬ replace it with んだら.\n" + "If the ending is く replace it with いたら.\n" + "If the ending is ぐ replace it with いだら.\n" + "If the ending is す replace it with したら." + ) + if ( + self.godan_ending_type is GodanEndingTypes.u + or self.godan_ending_type is GodanEndingTypes.tsu_ru + ): + return rule, f"{self.stem}ったら" + elif self.godan_ending_type is GodanEndingTypes.mu_bu_nu: + return rule, f"{self.stem}んだら" + elif self.godan_ending_type is GodanEndingTypes.ku: + return rule, f"{self.stem}いたら" + elif self.godan_ending_type is GodanEndingTypes.gu: + return rule, f"{self.stem}いだら" + elif self.godan_ending_type is GodanEndingTypes.su: + return rule, f"{self.stem}したら" + + def negative_tara_form(self): + rule = ( + "If the ending is う、 replace it with わ. Then add なkったら regardless of ending" + ) + if self.godan_ending_type is GodanEndingTypes.u: + return rule, f"{self.stem}わなかったら" + else: + return rule, f"{self.verb_stem('あ')}なかったら" + + def imperative_form(self): + rule = "Replace the ending with the corresponding え form" + return rule, f"{self.verb_stem('え')}" + + def formal_imperative_form(self): + rule = "Replace the ending with the corresponding い form. Then add なさい" + return rule, f"{self.verb_stem('い')}なさい" + + def volitional_form(self): + rule = "Replace the ending with the corresponding お form. Then add う" + return rule, f"{self.verb_stem('お')}う" + + def formal_volitional_form(self): + rule = "Replace the ending with the corresponding い form. Then add ましょう" + return rule, f"{self.verb_stem('い')}ましょう" + + def potential_form(self): + rule = "Replace the ending with the corresponding え form. Then add る" + return rule, f"{self.verb_stem('え')}る" + + def passive_form(self): + rule = "Replace the ending with the corresponding あ form. Then add れる" + return rule, f"{self.verb_stem('あ')}れる" + + def causative_form(self): + rule = "Replace the ending with the corresponding あ form. Then add せる" + return rule, f"{self.verb_stem('あ')}せる" + + def causative_passive_form(self): + rule = "Replace the ending with the corresponding あ form. Then add せられる" + return rule, f"{self.verb_stem('あ')}せられる" + + +class IchidanVerbs(Verbs): + verb_type = "Godan" + + def te_form(self): + rule = "Attach て to the verb stem" + return rule, f"{self.verb_stem()}て" + + def verb_stem(self, ending="い"): + return self.stem + + def negative_te_form(self): + rule = "Attach ないで to the verb stem" + return rule, f"{self.verb_stem()}ないで" + + def masu_form(self): + rule = "Attach ます to the verb stem" + return rule, f"{self.verb_stem()}ます" + + def masen_form(self): + rule = "Attach ません to the verb stem" + return rule, f"{self.verb_stem()}ません" + + def mashita_form(self): + rule = "Attach ました to the verb stem" + return rule, f"{self.verb_stem()}ました" + + def masendeshita_form(self): + rule = "Attach ませんでした to the verb stem" + return rule, f"{self.verb_stem()}ませんでした" + + def dictionary_form(self): + rule = "The verb stem followed by る" + return rule, self.verb + + def nai_form(self): + rule = "Attach ない to the verb stem" + return rule, f"{self.verb_stem()}ない" + + def ta_form(self): + rule = "Attach た to the verb stem" + return rule, f"{self.verb_stem()}た" + + def nakatta_form(self): + rule = "Attach なかった to the verb stem" + return rule, f"{self.verb_stem()}なかった" + + def ba_form(self): + rule = "Attach れば to the verb stem" + return rule, f"{self.verb_stem()}れば" + + def negative_ba_form(self): + rule = "Attach なければ to the verb stem" + return rule, f"{self.verb_stem()}なければ" + + def tara_form(self): + rule = "Attach たら to the verb stem" + return rule, f"{self.verb_stem()}たら" + + def negative_tara_form(self): + rule = "Attach なかったら to the verb stem" + return rule, f"{self.verb_stem()}なかったら" + + def imperative_form(self): + rule = "The ending る becomes れ" + return rule, f"{self.verb_stem()[:-1]}れ" + + def formal_imperative_form(self): + rule = "Attach なさい to the verb stem" + return rule, f"{self.verb_stem()}なさい" + + def volitional_form(self): + rule = "Attach よう to the verb stem" + return rule, f"{self.verb_stem()}よう" + + def formal_volitional_form(self): + rule = "Attach ましょう to the verb stem" + return rule, f"{self.verb_stem()}ましょう" + + def potential_form(self): + rule = "Attach られる to the verb stem" + return rule, f"{self.verb_stem()}られる" + + def passive_form(self): + rule = "Attach られる to the verb stem" + return rule, f"{self.verb_stem()}られる" + + def causative_form(self): + rule = "Attach させる to the verb stem" + return rule, f"{self.verb_stem()}させる" + + def causative_passive_form(self): + rule = "Attach させられる to the verb stem" + return rule, f"{self.verb_stem()}させられる" + + +class IrregularVerbs(Verbs): + verb_type = "Irregular" + + def te_form(self): + rule = "Replace the stem with the corresponding い kana, then add て" + return rule, f"{self.verb_stem('い')}て" + + def verb_stem(self, ending="い"): + return godan_transformation[self.stem][ending] + + def negative_te_form(self): + if self.stem == "す": + rule = "Replace the stem with the corresponding い kana, then add ないで" + return rule, f"{self.verb_stem('い')}ないで" + else: + rule = "Replace the stem with the corresponding お kana, then add ないで" + return rule, f"{self.verb_stem('お')}ないで" + + def masu_form(self): + rule = "Replace the stem with the corresponding い kana, then add ます" + return rule, f"{self.verb_stem('い')}ます" + + def masen_form(self): + rule = "Replace the stem with the corresponding い kana, then add ません" + return rule, f"{self.verb_stem('い')}ません" + + def mashita_form(self): + rule = "Replace the stem with the corresponding い kana, then add ました" + return rule, f"{self.verb_stem('い')}ました" + + def masendeshita_form(self): + rule = "Replace the stem with the corresponding い kana, then add ませんでした" + return rule, f"{self.verb_stem('い')}ませんでした" + + def dictionary_form(self): + rule = "Add る to the verb stem" + return rule, self.verb + + def nai_form(self): + if self.stem == "す": + rule = "Replace the stem with the corresponding い kana, then add ない" + return rule, f"{self.verb_stem('い')}ない" + else: + rule = "Replace the stem with the corresponding お kana, then add ない" + return rule, f"{self.verb_stem('お')}ない" + + def ta_form(self): + rule = "Replace the stem with the corresponding い kana, then add た" + return rule, f"{self.verb_stem('い')}た" + + def nakatta_form(self): + if self.stem == "す": + rule = "Replace the stem with the corresponding い kana, then add なかった" + return rule, f"{self.verb_stem('い')}なかった" + else: + rule = "Replace the stem with the corresponding お kana, then add なかった" + return rule, f"{self.verb_stem('お')}なかった" + + def ba_form(self): + if self.stem == "す": + rule = "Add れば to the verb stem" + return rule, f"{self.stem}れば" + else: + rule = "Replace the stem with the corresponding お kana, then add れば" + return rule, f"{self.verb_stem('お')}れば" + + def negative_ba_form(self): + if self.stem == "す": + rule = "Replace the stem with the corresponding い kana, then add なければ" + return rule, f"{self.verb_stem('い')}なければ" + else: + rule = "Replace the stem with the corresponding お kana, then add なければ" + return rule, f"{self.verb_stem('お')}なければ" + + def tara_form(self): + rule = "Replace the stem with the corresponding い kana, then add たら" + return rule, f"{self.verb_stem('い')}たら" + + def negative_tara_form(self): + if self.stem == "す": + rule = "Replace the stem with the corresponding い kana, then add なかったら" + return rule, f"{self.verb_stem('い')}なかったら" + else: + rule = "Replace the stem with the corresponding お kana, then add なかったら" + return rule, f"{self.verb_stem('お')}なかったら" + + def imperative_form(self): + if self.stem == "す": + rule = "Replace the stem with the corresponding い kana, then add る" + return rule, f"{self.verb_stem('い')}る" + else: + rule = "Replace with こい" + return rule, "こい" + + def formal_imperative_form(self): + rule = "Replace the stem with the corresponding い kana, then add なさい" + return rule, f"{self.verb_stem('い')}なさい" + + def volitional_form(self): + if self.stem == "す": + rule = "Replace the stem with the corresponding い kana, then add よう" + return rule, f"{self.verb_stem('い')}よう" + else: + rule = "Replace the stem with the corresponding お kana, then add よう" + return rule, f"{self.verb_stem('お')}よう" + + def formal_volitional_form(self): + rule = "Replace the stem with the corresponding い kana, then add ましょう" + return rule, f"{self.verb_stem('い')}ましょう" + + def potential_form(self): + if self.stem == "す": + rule = "Replace with できる" + return rule, "できる" + else: + rule = "Replace the stem with the corresponding お kana, then add られる" + return rule, f"{self.verb_stem('お')}られる" + + def passive_form(self): + if self.stem == "す": + rule = "Replace the stem with the corresponding あ kana, then add られる" + return rule, f"{self.verb_stem('あ')}られる" + else: + rule = "Replace the stem with the corresponding お kana, then add られる" + return rule, f"{self.verb_stem('お')}られる" + + def causative_form(self): + if self.stem == "す": + rule = "Replace with させる" + return rule, "させる" + else: + rule = "Replace the stem with the corresponding お kana, then add させる" + return rule, f"{self.verb_stem('お')}させる" + + def causative_passive_form(self): + if self.stem == "す": + rule = "Replace with させられる" + return rule, "させられる" + else: + rule = "Replace the stem with the corresponding お kana, then add させられる" + return rule, f"{self.verb_stem('お')}させられる" diff --git a/utils/japanese_verbs.json b/utils/japanese_verbs.json new file mode 100644 index 0000000..26879a5 --- /dev/null +++ b/utils/japanese_verbs.json @@ -0,0 +1 @@ +{"加える": 2, "認める": 2, "答える": 2, "現れる": 2, "避ける": 2, "禁じる": 2, "浴びる": 2, "居る": 2, "出来る": 2, "生きる": 2, "聞こえる": 2, "生まれる": 2, "折れる": 2, "焦げる": 2, "負ける": 2, "外れる": 2, "足りる": 2, "抜ける": 2, "遅れる": 2, "怠ける": 2, "売れる": 2, "見える": 2, "汚れる": 2, "濡れる": 2, "始める": 2, "信じる": 2, "曲げる": 2, "借りる": 2, "切れる": 2, "立てる": 2, "焼ける": 2, "変える": 2, "調べる": 2, "晴れる": 2, "崩れる": 2, "取れる": 2, "解ける": 2, "慰める": 2, "言いつける": 2, "比べる": 2, "続ける": 2, "冷える": 2, "数える": 2, "決める": 2, "定める": 2, "届ける": 2, "食べる": 2, "優れる": 2, "長ける": 2, "取り換える": 2, "倒れる": 2, "惚れる": 2, "落ちる": 2, "恐れる": 2, "感じる": 2, "見つける": 2, "片付ける": 2, "流れる": 2, "忘れる": 2, "集める": 2, "得る": 2, "壊れる": 2, "着換える": 2, "降りる": 2, "疲れる": 2, "起きる": 2, "慣れる": 2, "あげる": 2, "呉れる": 2, "出る": 2, "出かける": 2, "迎える": 2, "生える": 2, "暮れる": 2, "掛ける": 2, "助ける": 2, "妨げる": 2, "抱える": 2, "増える": 2, "苦しませる": 2, "伏せる": 2, "連れる": 2, "漏れる": 2, "寄せる": 2, "舐める": 2, "並べる": 2, "見る": 2, "下げる": 2, "間違える": 2, "拵える": 2, "溶ける": 2, "混ぜる": 2, "知らせる": 2, "開ける": 2, "慌てる": 2, "別れる": 2, "過ぎる": 2, "重ねる": 2, "企てる": 2, "褒める": 2, "儲ける": 2, "入れる": 2, "乗 せる": 2, "掲げる": 2, "覚える": 2, "求める": 2, "似る": 2, "抑える": 2, "逃げる": 2, "蓄える": 2, "離れる": 2, "見せる": 2, "閉める": 2, "腰掛ける": 2, "寝る": 2, "広める": 2, "構える": 2, "止める": 2, "強める": 2, "固める": 2, "支える": 2, "引き受ける": 2, "教える": 2, "戒める": 2, "考える": 2, "投げる": 2, "捨てる": 2, "育てる": 2, "虐める": 2, "触れる": 2, "乗り換える": 2, "点ける": 2, "消える": 2, "眺める": 2, "着る": 2, "枯れる": 2, "勤める": 2, "傷つける": 2, "罵る": 1, "足す": 1, " 寄る": 1, "着く": 1, "志す": 1, "襲う": 1, "侍る": 1, "目立つ": 1, "焼く": 1, "魂消る": 1, "基づく": 1, "眩む": 1, "直る": 1, "決まる": 1, "異なる": 1, "違う": 1, "見つかる": 1, "喜ぶ": 1, "脂ぎる": 1, "焦る": 1, "困る": 1, "無くなる": 1, "間違う": 1, "混じる": 1, "次ぐ": 1, "重なる": 1, "儲かる": 1, "迷う": 1, "悲しむ": 1, "助かる": 1, "驚く": 1, "劣る": 1, "霞む": 1, "込む": 1, "乾く": 1, "空く": 1, "固まる": 1, "痛む": 1, "流行る": 1, "強まる": 1, "始まる": 1, "捻る": 1, "噛む": 1, "咲く": 1, "吹く": 1, "乗る": 1, "威張る": 1, "沸く": 1, "壊す": 1, "沸かす": 1, "買う": 1, "呼ぶ": 1, "構う": 1, "運ぶ": 1, "担ぐ": 1, "挟む": 1, "祝う": 1, "変わる": 1, "追う": 1, "喋る": 1, "選ぶ": 1, "食い違う": 1, "登る": 1, "閉まる": 1, "来る": 3, "参る": 1, "通う": 1, "凝らす": 1, "続く": 1, "冷やす": 1, "渡る": 1, "越す": 1, "砕く": 1, "泣く": 1, "切る": 1, "踊る": 1, "腐る": 1, "偽る": 1, "飾る": 1, "減る": 1, "負かす": 1, "喜ばす": 1, "言い表す": 1, "崩す": 1, "滅ぼす": 1, "死ぬ": 1, "掘る": 1, " 話し合う": 1, "嫌がる": 1, "飲む": 1, "降ろす": 1, "乾かす": 1, "干す": 1, "抱く": 1, "励ます": 1, "終わる": 1, "楽しむ": 1, "入る": 1, "抜く": 1, "出す": 1, "向かう": 1, "眠る": 1, "転ぶ": 1, "降る": 1, "下がる": 1, "散る": 1, "怖がる": 1, "沈む": 1, "釣る": 1, "畳む": 1, "並ぶ": 1, "集まる": 1, "仰ぐ": 1, "怒る": 1, "曇る": 1, "太る": 1, "馴染む": 1, "暖まる": 1, "返す": 1, "睨む": 1, "齧る": 1, "行く": 1, "進む": 1, "狂う": 1, "回る": 1, "通る": 1, "上がる": 1, "握る": 1, "静まる": 1, "生やす": 1, "育つ": 1, "渡す": 1, "有る": 1, "持つ": 1, "手伝う": 1, "隠れる": 1, "隠す": 1, "仄めかす": 1, "急ぐ": 1, "増やす": 1, "示す": 1, "吸う": 1, "招く": 1, "誘う": 1, "飛ぶ": 1, "飼う": 1, "蹴る": 1, "殺す": 1, "知る": 1, "笑う": 1, "漏らす": 1, "傾く": 1, "習う": 1, "学ぶ": 1, "残す": 1, "残る": 1, "貸す": 1, "逃がす": 1, "通おす": 1, "枯らす": 1, "臥せる": 1, "好む": 1, "限る": 1, "聞く": 1, "暮らす": 1, "住む": 1, "見做す": 1, "落とす": 1, "失う": 1, "無くす": 1, "可愛がる": 1, "騒ぐ": 1, "污す": 1, "稼ぐ": 1, "作る": 1, "合う": 1, "熟す": 1, "会う": 1, "溶かす": 1, "どじる": 1, "動く": 1, "要る": 1, "起こる": 1, "開く": 1, "見逃す": 1, "倒す": 1, "塗る": 1, "払う": 1, "滅びる": 1, "口説く": 1, "拾う": 1, "遊ぶ": 1, "弾く": 1, "企む": 1, "刺す": 1, "突く": 1, "磨く": 1, "流がす": 1, "祈る": 1, "守る": 1, "庇う": 1, "引く": 1, "殴る": 1, "押す": 1, "履く": 1, "置く": 1, "届く": 1, "及ぶ": 1, "読む": 1, "貰う": 1, "減らす": 1, "断わる": 1, "惜しむ": 1, "外す": 1, "直す": 1, "繰り返す": 1, "頼む": 1, "救う": 1, "休む": 1, "戻る": 1, "帰る": 1, "戻す": 1, "実る": 1, "走る": 1, "満たす": 1, "言う": 1, "叱る": 1, "探す": 1, "売る": 1, "送る": 1, "気付く": 1, "離す": 1, "光る": 1, "輝く": 1, "現す": 1, "歌う": 1, "座る": 1, "滑る": 1, "話す": 1, "過ごす": 1, "言いふらす": 1, "敷く": 1, "広まる": 1, "頑張る": 1, "見張る": 1, "立つ": 1, "泊まる": 1, "盗む": 1, "踏む": 1, "張る": 1, "止まる": 1, "黙る": 1, "励む": 1, "苦しむ": 1, "言い出す": 1, "適う": 1, "囲む": 1, "泳ぐ": 1, "脱ぐ": 1, "関わる": 1, "掛かる": 1, "取る": 1, "言い換える": 1, "冷やかす": 1, "練る": 1, "試す": 1, "思う": 1, "思いつく": 1, "縛る": 1, "結ぶ": 1, "触る": 1, "騙す": 1, "消す": 1, "曲がる": 1, "回 わす": 1, "捩じる": 1, "分かる": 1, "組む": 1, "解く": 1, "使う": 1, "待つ": 1, "起こす": 1, "歩く": 1, "欲しがる": 1, "洗う": 1, "被る": 1, "勝つ": 1, "働く": 1, "気遣う": 1, "祀る": 1, "包む": 1, "書く": 1, "する": 3, "くる": 3} \ No newline at end of file