diff --git a/TODO.md b/TODO.md
index 2f2a5d5..877a7ee 100644
--- a/TODO.md
+++ b/TODO.md
@@ -1,10 +1,13 @@
### Todo
- [x] Add factory classes to reduce the amount of class import statements
+- [ ] Add dynamic import functionality to factory classes to reduce boilerplate
- [x] Support exporting to MDict (.MDX) dictionary format
+- [x] Validate JSON schema of Yomichan terms during export
+- [ ] Add support for monokakido search keys from index files
+- [ ] Delete unneeded media from temp build directory before final export
- [ ] Add test suite
- [ ] Add documentation (docstrings, etc.)
-- [ ] Validate JSON schema of Yomichan terms during export
- [ ] Add build scripts for producing program binaries
- [ ] Validate scraped webpages after downloading
- [ ] Log non-fatal failures to a log file instead of raising exceptions
@@ -13,7 +16,7 @@
- [ ] [Yoji-Jukugo.com](https://yoji-jukugo.com/)
- [ ] [実用日本語表現辞典](https://www.weblio.jp/cat/dictionary/jtnhj)
- [ ] Support more Monokakido dictionaries
- - [ ] 三省堂国語辞典 第8版 (SANKOKU8)
+ - [x] 三省堂国語辞典 第8版 (SANKOKU8)
- [ ] 精選版 日本国語大辞典 (NDS)
- [ ] 大辞泉 第2版 (DAIJISEN2)
- [ ] 明鏡国語辞典 第3版 (MK3)
diff --git a/bot/crawlers/crawlers.py b/bot/crawlers/crawlers.py
index 3af886c..51e0552 100644
--- a/bot/crawlers/crawlers.py
+++ b/bot/crawlers/crawlers.py
@@ -39,9 +39,9 @@ class Crawler(ABC):
self._entries.append(entry)
print()
- def make_yomichan_dictionary(self, media_dir):
+ def make_yomichan_dictionary(self, media_dir, validate):
exporter = new_yomi_exporter(self._target)
- exporter.export(self._entries, media_dir)
+ exporter.export(self._entries, media_dir, validate)
def make_mdict_dictionary(self, media_dir, icon_file):
exporter = new_mdict_exporter(self._target)
@@ -152,3 +152,7 @@ class Smk8Crawler(_MonokakidoCrawler):
class Daijirin2Crawler(_MonokakidoCrawler):
pass
+
+
+class Sankoku8Crawler(_MonokakidoCrawler):
+ pass
diff --git a/bot/crawlers/factory.py b/bot/crawlers/factory.py
index 081567b..d7450ea 100644
--- a/bot/crawlers/factory.py
+++ b/bot/crawlers/factory.py
@@ -5,6 +5,7 @@ from bot.crawlers.crawlers import JitenonYojiCrawler
from bot.crawlers.crawlers import JitenonKotowazaCrawler
from bot.crawlers.crawlers import Smk8Crawler
from bot.crawlers.crawlers import Daijirin2Crawler
+from bot.crawlers.crawlers import Sankoku8Crawler
def new_crawler(target):
@@ -14,5 +15,6 @@ def new_crawler(target):
Targets.JITENON_KOTOWAZA: JitenonKotowazaCrawler,
Targets.SMK8: Smk8Crawler,
Targets.DAIJIRIN2: Daijirin2Crawler,
+ Targets.SANKOKU8: Sankoku8Crawler,
}
return crawler_map[target](target)
diff --git a/bot/data.py b/bot/data.py
index e29c0a5..95349db 100644
--- a/bot/data.py
+++ b/bot/data.py
@@ -37,14 +37,16 @@ def load_config():
@cache
def load_yomichan_inflection_categories():
- file_name = os.path.join("yomichan", "inflection_categories.json")
+ file_name = os.path.join(
+ "yomichan", "inflection_categories.json")
data = __load_json(file_name)
return data
@cache
def load_yomichan_metadata():
- file_name = os.path.join("yomichan", "index.json")
+ file_name = os.path.join(
+ "yomichan", "index.json")
data = __load_json(file_name)
return data
@@ -53,31 +55,21 @@ def load_yomichan_metadata():
def load_variant_kanji():
def loader(data, row):
data[row[0]] = row[1]
- file_name = os.path.join("entries", "variant_kanji.csv")
+ file_name = os.path.join(
+ "entries", "variant_kanji.csv")
data = {}
__load_csv(file_name, loader, data)
return data
@cache
-def load_smk8_phrase_readings():
+def load_phrase_readings(target):
def loader(data, row):
entry_id = (int(row[0]), int(row[1]))
reading = row[2]
data[entry_id] = reading
- file_name = os.path.join("entries", "smk8", "phrase_readings.csv")
- data = {}
- __load_csv(file_name, loader, data)
- return data
-
-
-@cache
-def load_daijirin2_phrase_readings():
- def loader(data, row):
- entry_id = (int(row[0]), int(row[1]))
- reading = row[2]
- data[entry_id] = reading
- file_name = os.path.join("entries", "daijirin2", "phrase_readings.csv")
+ file_name = os.path.join(
+ "entries", target.value, "phrase_readings.csv")
data = {}
__load_csv(file_name, loader, data)
return data
@@ -92,7 +84,8 @@ def load_daijirin2_kana_abbreviations():
if abbr.strip() != "":
abbreviations.append(abbr)
data[entry_id] = abbreviations
- file_name = os.path.join("entries", "daijirin2", "kana_abbreviations.csv")
+ file_name = os.path.join(
+ "entries", "daijirin2", "kana_abbreviations.csv")
data = {}
__load_csv(file_name, loader, data)
return data
@@ -100,14 +93,24 @@ def load_daijirin2_kana_abbreviations():
@cache
def load_yomichan_name_conversion(target):
- file_name = os.path.join("yomichan", "name_conversion", f"{target.value}.json")
+ file_name = os.path.join(
+ "yomichan", "name_conversion", f"{target.value}.json")
data = __load_json(file_name)
return data
+@cache
+def load_yomichan_term_schema():
+ file_name = os.path.join(
+ "yomichan", "dictionary-term-bank-v3-schema.json")
+ schema = __load_json(file_name)
+ return schema
+
+
@cache
def load_mdict_name_conversion(target):
- file_name = os.path.join("mdict", "name_conversion", f"{target.value}.json")
+ file_name = os.path.join(
+ "mdict", "name_conversion", f"{target.value}.json")
data = __load_json(file_name)
return data
@@ -131,7 +134,8 @@ def __load_adobe_glyphs():
data[code].append(character)
else:
data[code] = [character]
- file_name = os.path.join("entries", "adobe", "Adobe-Japan1_sequences.txt")
+ file_name = os.path.join(
+ "entries", "adobe", "Adobe-Japan1_sequences.txt")
data = {}
__load_csv(file_name, loader, data, delim=';')
return data
@@ -139,7 +143,8 @@ def __load_adobe_glyphs():
@cache
def __load_override_adobe_glyphs():
- file_name = os.path.join("entries", "adobe", "override_glyphs.json")
+ file_name = os.path.join(
+ "entries", "adobe", "override_glyphs.json")
json_data = __load_json(file_name)
data = {}
for key, val in json_data.items():
diff --git a/bot/entries/daijirin2.py b/bot/entries/daijirin2.py
index 196bd0c..f7a629c 100644
--- a/bot/entries/daijirin2.py
+++ b/bot/entries/daijirin2.py
@@ -2,7 +2,7 @@ from bs4 import BeautifulSoup
import bot.entries.expressions as Expressions
import bot.soup as Soup
-from bot.data import load_daijirin2_phrase_readings
+from bot.data import load_phrase_readings
from bot.data import load_daijirin2_kana_abbreviations
from bot.entries.entry import Entry
from bot.entries.daijirin2_preprocess import preprocess_page
@@ -221,7 +221,7 @@ class Daijirin2PhraseEntry(_BaseDaijirin2Entry):
return expressions
def _find_readings(self):
- phrase_readings = load_daijirin2_phrase_readings()
+ phrase_readings = load_phrase_readings(self.target)
text = phrase_readings[self.entry_id]
alternatives = Expressions.expand_daijirin_alternatives(text)
readings = []
diff --git a/bot/entries/factory.py b/bot/entries/factory.py
index a3dec69..162c102 100644
--- a/bot/entries/factory.py
+++ b/bot/entries/factory.py
@@ -5,6 +5,7 @@ from bot.entries.jitenon import JitenonYojiEntry
from bot.entries.jitenon import JitenonKotowazaEntry
from bot.entries.smk8 import Smk8Entry
from bot.entries.daijirin2 import Daijirin2Entry
+from bot.entries.sankoku8 import Sankoku8Entry
def new_entry(target, page_id):
@@ -14,5 +15,6 @@ def new_entry(target, page_id):
Targets.JITENON_KOTOWAZA: JitenonKotowazaEntry,
Targets.SMK8: Smk8Entry,
Targets.DAIJIRIN2: Daijirin2Entry,
+ Targets.SANKOKU8: Sankoku8Entry,
}
return entry_map[target](target, page_id)
diff --git a/bot/entries/sankoku8.py b/bot/entries/sankoku8.py
new file mode 100644
index 0000000..9653f68
--- /dev/null
+++ b/bot/entries/sankoku8.py
@@ -0,0 +1,260 @@
+from bs4 import BeautifulSoup
+import bot.entries.expressions as Expressions
+import bot.soup as Soup
+from bot.entries.entry import Entry
+from bot.data import load_phrase_readings
+from bot.entries.sankoku8_preprocess import preprocess_page
+
+
+class _BaseSankoku8Entry(Entry):
+ def __init__(self, target, entry_id):
+ super().__init__(target, entry_id)
+ self.children = []
+ self.phrases = []
+ self._hyouki_name = "表記"
+ self._midashi_name = None
+ self._midashi_kana_name = None
+
+ def get_global_identifier(self):
+ parent_part = format(self.entry_id[0], '06')
+ child_part = hex(self.entry_id[1]).lstrip('0x').zfill(4).upper()
+ return f"@{self.target.value}-{parent_part}-{child_part}"
+
+ def set_page(self, page):
+ page = self.__decompose_subentries(page)
+ self._page = page
+
+ def get_page_soup(self):
+ soup = BeautifulSoup(self._page, "xml")
+ return soup
+
+ def _get_headwords(self):
+ soup = self.get_page_soup()
+ self._delete_unused_nodes(soup)
+ readings = self._find_readings(soup)
+ expressions = self._find_expressions(soup)
+ headwords = {}
+ for reading in readings:
+ headwords[reading] = []
+ if len(readings) == 1:
+ reading = readings[0]
+ if soup.find(self._midashi_name).find(self._hyouki_name) is None:
+ headwords[reading].append(reading)
+ for exp in expressions:
+ if exp not in headwords[reading]:
+ headwords[reading].append(exp)
+ elif len(readings) > 1 and len(expressions) == 0:
+ for reading in readings:
+ headwords[reading].append(reading)
+ elif len(readings) > 1 and len(expressions) == 1:
+ if soup.find(self._midashi_name).find(self._hyouki_name) is None:
+ for reading in readings:
+ headwords[reading].append(reading)
+ expression = expressions[0]
+ for reading in readings:
+ if expression not in headwords[reading]:
+ headwords[reading].append(expression)
+ elif len(readings) > 1 and len(expressions) == len(readings):
+ if soup.find(self._midashi_name).find(self._hyouki_name) is None:
+ for reading in readings:
+ headwords[reading].append(reading)
+ for idx, reading in enumerate(readings):
+ exp = expressions[idx]
+ if exp not in headwords[reading]:
+ headwords[reading].append(exp)
+ else:
+ raise Exception() # shouldn't happen
+ return headwords
+
+ def _add_variant_expressions(self, headwords):
+ for expressions in headwords.values():
+ Expressions.add_variant_kanji(expressions)
+ Expressions.add_fullwidth(expressions)
+ Expressions.remove_iteration_mark(expressions)
+ Expressions.add_iteration_mark(expressions)
+
+ def get_part_of_speech_tags(self):
+ if self._part_of_speech_tags is not None:
+ return self._part_of_speech_tags
+ self._part_of_speech_tags = []
+ soup = self.get_page_soup()
+ for midashi in soup.find_all([self._midashi_name, "見出部要素"]):
+ pos_group = midashi.find("品詞G")
+ if pos_group is None:
+ continue
+ for tag in pos_group.find_all("a"):
+ if tag.text not in self._part_of_speech_tags:
+ self._part_of_speech_tags.append(tag.text)
+ return self._part_of_speech_tags
+
+ def _find_expressions(self, soup):
+ expressions = []
+ for hyouki in soup.find_all(self._hyouki_name):
+ for expression in parse_hyouki_soup(hyouki, [""]):
+ expressions.append(expression)
+ return expressions
+
+ def _find_readings(self, soup):
+ midasi_kana = soup.find(self._midashi_kana_name)
+ readings = parse_hyouki_soup(midasi_kana, [""])
+ return readings
+
+ def __decompose_subentries(self, page):
+ soup = BeautifulSoup(page, features="xml")
+ subentry_parameters = [
+ [Sankoku8ChildEntry, ["子項目"], self.children],
+ [Sankoku8PhraseEntry, ["句項目"], self.phrases],
+ ]
+ for x in subentry_parameters:
+ subentry_class, tags, subentry_list = x
+ for tag in tags:
+ tag_soup = soup.find(tag)
+ while tag_soup is not None:
+ tag_soup.name = "項目"
+ subentry_id = self.id_string_to_entry_id(tag_soup.attrs["id"])
+ self.SUBENTRY_ID_TO_ENTRY_ID[subentry_id] = self.entry_id
+ subentry = subentry_class(self.target, subentry_id)
+ page = tag_soup.decode()
+ subentry.set_page(page)
+ subentry_list.append(subentry)
+ tag_soup.decompose()
+ tag_soup = soup.find(tag)
+ return soup.decode()
+
+ @staticmethod
+ def id_string_to_entry_id(id_string):
+ parts = id_string.split("-")
+ if len(parts) == 1:
+ return (int(parts[0]), 0)
+ elif len(parts) == 2:
+ # subentries have a hexadecimal part
+ return (int(parts[0]), int(parts[1], 16))
+ else:
+ raise Exception(f"Invalid entry ID: {id_string}")
+
+ @staticmethod
+ def _delete_unused_nodes(soup):
+ """Remove extra markup elements that appear in the entry
+ headword line which are not part of the entry headword"""
+ unused_nodes = [
+ "語構成", "平板", "アクセント", "表外字マーク", "表外音訓マーク",
+ "アクセント分節", "活用分節", "ルビG", "分書"
+ ]
+ for name in unused_nodes:
+ Soup.delete_soup_nodes(soup, name)
+
+
+class Sankoku8Entry(_BaseSankoku8Entry):
+ def __init__(self, target, page_id):
+ entry_id = (page_id, 0)
+ super().__init__(target, entry_id)
+ self._midashi_name = "見出部"
+ self._midashi_kana_name = "見出仮名"
+
+ def set_page(self, page):
+ page = preprocess_page(page)
+ super().set_page(page)
+
+
+class Sankoku8ChildEntry(_BaseSankoku8Entry):
+ def __init__(self, target, page_id):
+ super().__init__(target, page_id)
+ self._midashi_name = "子見出部"
+ self._midashi_kana_name = "子見出仮名"
+
+
+class Sankoku8PhraseEntry(_BaseSankoku8Entry):
+ def get_part_of_speech_tags(self):
+ # phrases do not contain these tags
+ return []
+
+ def _get_headwords(self):
+ soup = self.get_page_soup()
+ self._delete_unused_nodes(soup)
+ expressions = self._find_expressions(soup)
+ readings = self._find_readings(soup)
+ headwords = {}
+ if len(expressions) != len(readings):
+ raise Exception(f"{self.entry_id[0]}-{self.entry_id[1]}")
+ for idx, expression in enumerate(expressions):
+ reading = readings[idx]
+ if reading in headwords:
+ headwords[reading].append(expression)
+ else:
+ headwords[reading] = [expression]
+ return headwords
+
+ def _find_expressions(self, soup):
+ phrase_soup = soup.find("句表記")
+ expressions = parse_hyouki_soup(phrase_soup, [""])
+ return expressions
+
+ def _find_readings(self, soup):
+ reading_patterns = load_phrase_readings(self.target)
+ reading_pattern = reading_patterns[self.entry_id]
+ readings = parse_hyouki_pattern(reading_pattern)
+ return readings
+
+
+def parse_hyouki_soup(soup, base_exps):
+ omitted_characters = [
+ "/", "〈", "〉", "(", ")", "⦅", "⦆", ":", "…"
+ ]
+ exps = base_exps.copy()
+ for child in soup.children:
+ new_exps = []
+ if child.name == "言換G":
+ for alt in child.find_all("言換"):
+ parts = parse_hyouki_soup(alt, [""])
+ for exp in exps:
+ for part in parts:
+ new_exps.append(exp + part)
+ elif child.name == "補足表記":
+ alt1 = child.find("表記対象")
+ alt2 = child.find("表記内容G")
+ parts1 = parse_hyouki_soup(alt1, [""])
+ parts2 = parse_hyouki_soup(alt2, [""])
+ for exp in exps:
+ for part in parts1:
+ new_exps.append(exp + part)
+ for part in parts2:
+ new_exps.append(exp + part)
+ elif child.name == "省略":
+ parts = parse_hyouki_soup(child, [""])
+ for exp in exps:
+ new_exps.append(exp)
+ for part in parts:
+ new_exps.append(exp + part)
+ elif child.name is not None:
+ new_exps = parse_hyouki_soup(child, exps)
+ else:
+ text = child.text
+ for char in omitted_characters:
+ text = text.replace(char, "")
+ for exp in exps:
+ new_exps.append(exp + text)
+ exps = new_exps.copy()
+ return exps
+
+
+def parse_hyouki_pattern(pattern):
+ replacements = {
+ "(": "<省略>(",
+ ")": ")省略>",
+ "{": "<補足表記><表記対象>",
+ "・": "表記対象><表記内容G>(<表記内容>",
+ "}": "表記内容>)表記内容G>補足表記>",
+ "〈": "<言換G>〈<言換>",
+ "/": "言換>/<言換>",
+ "〉": "言換>〉言換G>",
+ "⦅": "<補足表記><表記対象>",
+ "\": "表記対象><表記内容G>⦅<表記内容>",
+ "⦆": "表記内容>⦆表記内容G>補足表記>",
+ }
+ markup = f"{pattern}"
+ for key, val in replacements.items():
+ markup = markup.replace(key, val)
+ soup = BeautifulSoup(markup, "xml")
+ hyouki_soup = soup.find("span")
+ exps = parse_hyouki_soup(hyouki_soup, [""])
+ return exps
diff --git a/bot/entries/sankoku8_preprocess.py b/bot/entries/sankoku8_preprocess.py
new file mode 100644
index 0000000..73fb31a
--- /dev/null
+++ b/bot/entries/sankoku8_preprocess.py
@@ -0,0 +1,28 @@
+import re
+from bs4 import BeautifulSoup
+
+from bot.data import get_adobe_glyph
+
+
+def preprocess_page(page):
+ soup = BeautifulSoup(page, features="xml")
+ __replace_glyph_codes(soup)
+ page = __strip_page(soup)
+ return page
+
+
+def __replace_glyph_codes(soup):
+ for el in soup.find_all("glyph"):
+ m = re.search(r"^glyph:([0-9]+);?$", el.attrs["style"])
+ code = int(m.group(1))
+ for geta in el.find_all(string="〓"):
+ glyph = get_adobe_glyph(code)
+ geta.replace_with(glyph)
+
+
+def __strip_page(soup):
+ koumoku = soup.find(["項目"])
+ if koumoku is not None:
+ return koumoku.decode()
+ else:
+ raise Exception(f"Primary 項目 not found in page:\n{soup.prettify()}")
diff --git a/bot/entries/smk8.py b/bot/entries/smk8.py
index 2308893..2d43e4a 100644
--- a/bot/entries/smk8.py
+++ b/bot/entries/smk8.py
@@ -2,7 +2,7 @@ from bs4 import BeautifulSoup
import bot.entries.expressions as Expressions
import bot.soup as Soup
-from bot.data import load_smk8_phrase_readings
+from bot.data import load_phrase_readings
from bot.entries.entry import Entry
from bot.entries.smk8_preprocess import preprocess_page
@@ -163,7 +163,7 @@ class Smk8ChildEntry(_BaseSmk8Entry):
class Smk8PhraseEntry(_BaseSmk8Entry):
def __init__(self, target, entry_id):
super().__init__(target, entry_id)
- self.__phrase_readings = load_smk8_phrase_readings()
+ self.__phrase_readings = load_phrase_readings(self.target)
def get_part_of_speech_tags(self):
# phrases do not contain these tags
diff --git a/bot/mdict/exporters/export.py b/bot/mdict/exporters/export.py
index c100f67..b8e8347 100644
--- a/bot/mdict/exporters/export.py
+++ b/bot/mdict/exporters/export.py
@@ -218,3 +218,8 @@ class Smk8Exporter(_MonokakidoExporter):
class Daijirin2Exporter(_MonokakidoExporter):
def _get_attribution(self, entries):
return "© Sanseido Co., LTD. 2019"
+
+
+class Sankoku8Exporter(_MonokakidoExporter):
+ def _get_attribution(self, entries):
+ return "© Sanseido Co., LTD. 2021"
diff --git a/bot/mdict/exporters/factory.py b/bot/mdict/exporters/factory.py
index 2c2015c..5417493 100644
--- a/bot/mdict/exporters/factory.py
+++ b/bot/mdict/exporters/factory.py
@@ -5,6 +5,7 @@ from bot.mdict.exporters.export import JitenonYojiExporter
from bot.mdict.exporters.export import JitenonKotowazaExporter
from bot.mdict.exporters.export import Smk8Exporter
from bot.mdict.exporters.export import Daijirin2Exporter
+from bot.mdict.exporters.export import Sankoku8Exporter
def new_mdict_exporter(target):
@@ -14,5 +15,6 @@ def new_mdict_exporter(target):
Targets.JITENON_KOTOWAZA: JitenonKotowazaExporter,
Targets.SMK8: Smk8Exporter,
Targets.DAIJIRIN2: Daijirin2Exporter,
+ Targets.SANKOKU8: Sankoku8Exporter,
}
return exporter_map[target](target)
diff --git a/bot/mdict/glossary/sankoku8.py b/bot/mdict/glossary/sankoku8.py
new file mode 100644
index 0000000..8ee16f0
--- /dev/null
+++ b/bot/mdict/glossary/sankoku8.py
@@ -0,0 +1,137 @@
+import re
+from bs4 import BeautifulSoup
+from bot.data import load_mdict_name_conversion
+from bot.name_conversion import convert_names
+
+
+def make_glossary(entry, media_dir):
+ soup = entry.get_page_soup()
+ __reposition_marks(soup)
+ __remove_appendix_links(soup)
+ __convert_images(soup)
+ __remove_links_without_href(soup)
+ __convert_links(soup, entry)
+ __add_parent_link(soup, entry)
+ __add_homophone_links(soup, entry)
+
+ name_conversion = load_mdict_name_conversion(entry.target)
+ convert_names(soup, name_conversion)
+
+ glossary = soup.span.decode()
+ return glossary
+
+
+def __reposition_marks(soup):
+ """These 表外字マーク symbols will be converted to rubies later, so they need to
+ be positioned after the corresponding text in order to appear correctly"""
+ for elm in soup.find_all("表外字"):
+ mark = elm.find("表外字マーク")
+ elm.append(mark)
+ for elm in soup.find_all("表外音訓"):
+ mark = elm.find("表外音訓マーク")
+ elm.append(mark)
+
+
+def __remove_appendix_links(soup):
+ """This info would be useful and nice to have, but jitenbot currently
+ isn't designed to fetch and process these appendix files. It probably
+ wouldn't be possible to include them in Yomichan, but it would definitely
+ be possible for Mdict."""
+ for elm in soup.find_all("a"):
+ if not elm.has_attr("href"):
+ continue
+ if elm.attrs["href"].startswith("appendix"):
+ elm.attrs["data-name"] = "a"
+ elm.attrs["data-href"] = elm.attrs["href"]
+ elm.name = "span"
+ del elm.attrs["href"]
+
+
+def __convert_images(soup):
+ conversions = [
+ ["svg-logo/重要語.svg", "*"],
+ ["svg-logo/最重要語.svg", "**"],
+ ["svg-logo/一般常識語.svg", "☆☆"],
+ ["svg-logo/追い込み.svg", ""],
+ ["svg-special/区切り線.svg", "|"],
+ ["svg-accent/平板.svg", "⎺"],
+ ["svg-accent/アクセント.svg", "⌝"],
+ ["svg-logo/アク.svg", "アク"],
+ ["svg-logo/丁寧.svg", "丁寧"],
+ ["svg-logo/可能.svg", "可能"],
+ ["svg-logo/尊敬.svg", "尊敬"],
+ ["svg-logo/接尾.svg", "接尾"],
+ ["svg-logo/接頭.svg", "接頭"],
+ ["svg-logo/表記.svg", "表記"],
+ ["svg-logo/謙譲.svg", "謙譲"],
+ ["svg-logo/区別.svg", "区別"],
+ ["svg-logo/由来.svg", "由来"],
+ ]
+ for conversion in conversions:
+ filename, text = conversion
+ for elm in soup.find_all("img", attrs={"src": filename}):
+ elm.attrs["data-name"] = elm.name
+ elm.attrs["data-src"] = elm.attrs["src"]
+ elm.name = "span"
+ elm.string = text
+ del elm.attrs["src"]
+
+
+def __remove_links_without_href(soup):
+ for elm in soup.find_all("a"):
+ if elm.has_attr("href"):
+ continue
+ elm.attrs["data-name"] = elm.name
+ elm.name = "span"
+
+
+def __convert_links(soup, entry):
+ for elm in soup.find_all("a"):
+ href = elm.attrs["href"].split(" ")[0]
+ if re.match(r"^#?[0-9]+(?:-[0-9A-F]{4})?$", href):
+ href = href.removeprefix("#")
+ ref_entry_id = entry.id_string_to_entry_id(href)
+ if ref_entry_id in entry.ID_TO_ENTRY:
+ ref_entry = entry.ID_TO_ENTRY[ref_entry_id]
+ else:
+ ref_entry = entry.ID_TO_ENTRY[(ref_entry_id[0], 0)]
+ gid = ref_entry.get_global_identifier()
+ elm.attrs["href"] = f"entry://{gid}"
+ elif re.match(r"^entry:", href):
+ pass
+ elif re.match(r"^https?:[\w\W]*", href):
+ pass
+ else:
+ raise Exception(f"Invalid href format: {href}")
+
+
+def __add_parent_link(soup, entry):
+ elm = soup.find("親見出相当部")
+ if elm is not None:
+ parent_entry = entry.get_parent()
+ gid = parent_entry.get_global_identifier()
+ elm.attrs["href"] = f"entry://{gid}"
+ elm.attrs["data-name"] = elm.name
+ elm.name = "a"
+
+
+def __add_homophone_links(soup, entry):
+ forward_link = ["←", entry.entry_id[0] + 1]
+ backward_link = ["→", entry.entry_id[0] - 1]
+ homophone_info_list = [
+ ["svg-logo/homophone1.svg", [forward_link]],
+ ["svg-logo/homophone2.svg", [forward_link, backward_link]],
+ ["svg-logo/homophone3.svg", [backward_link]],
+ ]
+ for homophone_info in homophone_info_list:
+ filename, link_info = homophone_info
+ for elm in soup.find_all("img", attrs={"src": filename}):
+ for info in link_info:
+ text, link_id = info
+ link_entry = entry.ID_TO_ENTRY[(link_id, 0)]
+ gid = link_entry.get_global_identifier()
+ link = BeautifulSoup("", "xml").a
+ link.string = text
+ link.attrs["href"] = f"entry://{gid}"
+ elm.append(link)
+ elm.unwrap()
diff --git a/bot/mdict/terms/factory.py b/bot/mdict/terms/factory.py
index 78a05cd..8cee8e7 100644
--- a/bot/mdict/terms/factory.py
+++ b/bot/mdict/terms/factory.py
@@ -5,6 +5,7 @@ from bot.mdict.terms.jitenon import JitenonYojiTerminator
from bot.mdict.terms.jitenon import JitenonKotowazaTerminator
from bot.mdict.terms.smk8 import Smk8Terminator
from bot.mdict.terms.daijirin2 import Daijirin2Terminator
+from bot.mdict.terms.sankoku8 import Sankoku8Terminator
def new_terminator(target):
@@ -14,5 +15,6 @@ def new_terminator(target):
Targets.JITENON_KOTOWAZA: JitenonKotowazaTerminator,
Targets.SMK8: Smk8Terminator,
Targets.DAIJIRIN2: Daijirin2Terminator,
+ Targets.SANKOKU8: Sankoku8Terminator,
}
return terminator_map[target](target)
diff --git a/bot/mdict/terms/sankoku8.py b/bot/mdict/terms/sankoku8.py
new file mode 100644
index 0000000..5c1bfb7
--- /dev/null
+++ b/bot/mdict/terms/sankoku8.py
@@ -0,0 +1,23 @@
+from bot.mdict.terms.terminator import Terminator
+from bot.mdict.glossary.sankoku8 import make_glossary
+
+
+class Sankoku8Terminator(Terminator):
+ def _glossary(self, entry):
+ if entry.entry_id in self._glossary_cache:
+ return self._glossary_cache[entry.entry_id]
+ glossary = make_glossary(entry, self._media_dir)
+ self._glossary_cache[entry.entry_id] = glossary
+ return glossary
+
+ def _link_glossary_parameters(self, entry):
+ return [
+ [entry.children, "子項目"],
+ [entry.phrases, "句項目"],
+ ]
+
+ def _subentry_lists(self, entry):
+ return [
+ entry.children,
+ entry.phrases,
+ ]
diff --git a/bot/targets.py b/bot/targets.py
index 3c4c571..157786f 100644
--- a/bot/targets.py
+++ b/bot/targets.py
@@ -7,3 +7,4 @@ class Targets(Enum):
JITENON_KOTOWAZA = "jitenon-kotowaza"
SMK8 = "smk8"
DAIJIRIN2 = "daijirin2"
+ SANKOKU8 = "sankoku8"
diff --git a/bot/yomichan/exporters/export.py b/bot/yomichan/exporters/export.py
index 8665bfe..d348fed 100644
--- a/bot/yomichan/exporters/export.py
+++ b/bot/yomichan/exporters/export.py
@@ -3,13 +3,16 @@
import json
import os
import shutil
+import copy
from pathlib import Path
from datetime import datetime
from abc import ABC, abstractmethod
from platformdirs import user_documents_dir, user_cache_dir
+import fastjsonschema
from bot.data import load_yomichan_metadata
from bot.yomichan.terms.factory import new_terminator
+from bot.data import load_yomichan_term_schema
class Exporter(ABC):
@@ -19,7 +22,7 @@ class Exporter(ABC):
self._build_dir = None
self._terms_per_file = 2000
- def export(self, entries, image_dir):
+ def export(self, entries, image_dir, validate):
self.__init_build_image_dir(image_dir)
meta = load_yomichan_metadata()
index = meta[self._target.value]["index"]
@@ -27,6 +30,8 @@ class Exporter(ABC):
index["attribution"] = self._get_attribution(entries)
tags = meta[self._target.value]["tags"]
terms = self.__get_terms(entries)
+ if validate:
+ self.__validate_terms(terms)
self.__make_dictionary(terms, index, tags)
@abstractmethod
@@ -49,6 +54,14 @@ class Exporter(ABC):
self._build_dir = build_directory
return self._build_dir
+ def __get_invalid_term_dir(self):
+ cache_dir = user_cache_dir("jitenbot")
+ log_dir = os.path.join(cache_dir, "invalid_yomichan_terms")
+ if Path(log_dir).is_dir():
+ shutil.rmtree(log_dir)
+ os.makedirs(log_dir)
+ return log_dir
+
def __init_build_image_dir(self, image_dir):
build_dir = self._get_build_dir()
build_img_dir = os.path.join(build_dir, self._target.value)
@@ -71,8 +84,29 @@ class Exporter(ABC):
print()
return terms
+ def __validate_terms(self, terms):
+ print("Making a copy of term data for validation...")
+ terms_copy = copy.deepcopy(terms) # because validator will alter data!
+ term_count = len(terms_copy)
+ log_dir = self.__get_invalid_term_dir()
+ schema = load_yomichan_term_schema()
+ validator = fastjsonschema.compile(schema)
+ failure_count = 0
+ for idx, term in enumerate(terms_copy):
+ update = f"Validating term {idx+1}/{term_count}"
+ print(update, end='\r', flush=True)
+ try:
+ validator([term])
+ except fastjsonschema.JsonSchemaException:
+ failure_count += 1
+ term_file = os.path.join(log_dir, f"{idx}.json")
+ with open(term_file, "w", encoding='utf8') as f:
+ json.dump([term], f, indent=4, ensure_ascii=False)
+ print(f"\nFinished validating with {failure_count} error{'' if failure_count == 1 else 's'}")
+ if failure_count > 0:
+ print(f"Invalid terms saved to `{log_dir}` for debugging")
+
def __make_dictionary(self, terms, index, tags):
- print(f"Exporting {len(terms)} Yomichan terms...")
self.__write_term_banks(terms)
self.__write_index(index)
self.__write_tag_bank(tags)
@@ -80,14 +114,18 @@ class Exporter(ABC):
self.__rm_build_dir()
def __write_term_banks(self, terms):
+ print(f"Exporting {len(terms)} JSON terms")
build_dir = self._get_build_dir()
max_i = int(len(terms) / self._terms_per_file) + 1
for i in range(max_i):
+ start = self._terms_per_file * i
+ end = self._terms_per_file * (i + 1)
+ update = f"Writing terms to term banks {start} - {end}"
+ print(update, end='\r', flush=True)
term_file = os.path.join(build_dir, f"term_bank_{i+1}.json")
with open(term_file, "w", encoding='utf8') as f:
- start = self._terms_per_file * i
- end = self._terms_per_file * (i + 1)
json.dump(terms[start:end], f, indent=4, ensure_ascii=False)
+ print()
def __write_index(self, index):
build_dir = self._get_build_dir()
@@ -104,6 +142,7 @@ class Exporter(ABC):
json.dump(tags, f, indent=4, ensure_ascii=False)
def __write_archive(self, filename):
+ print("Archiving data to ZIP file...")
archive_format = "zip"
out_dir = os.path.join(user_documents_dir(), "jitenbot", "yomichan")
if not Path(out_dir).is_dir():
@@ -151,19 +190,22 @@ class JitenonKotowazaExporter(_JitenonExporter):
pass
-class Smk8Exporter(Exporter):
+class _MonokakidoExporter(Exporter):
def _get_revision(self, entries):
timestamp = datetime.now().strftime("%Y-%m-%d")
return f"{self._target.value};{timestamp}"
+
+class Smk8Exporter(_MonokakidoExporter):
def _get_attribution(self, entries):
return "© Sanseido Co., LTD. 2020"
-class Daijirin2Exporter(Exporter):
- def _get_revision(self, entries):
- timestamp = datetime.now().strftime("%Y-%m-%d")
- return f"{self._target.value};{timestamp}"
-
+class Daijirin2Exporter(_MonokakidoExporter):
def _get_attribution(self, entries):
return "© Sanseido Co., LTD. 2019"
+
+
+class Sankoku8Exporter(_MonokakidoExporter):
+ def _get_attribution(self, entries):
+ return "© Sanseido Co., LTD. 2021"
diff --git a/bot/yomichan/exporters/factory.py b/bot/yomichan/exporters/factory.py
index 06568e3..afed7fd 100644
--- a/bot/yomichan/exporters/factory.py
+++ b/bot/yomichan/exporters/factory.py
@@ -5,6 +5,7 @@ from bot.yomichan.exporters.export import JitenonYojiExporter
from bot.yomichan.exporters.export import JitenonKotowazaExporter
from bot.yomichan.exporters.export import Smk8Exporter
from bot.yomichan.exporters.export import Daijirin2Exporter
+from bot.yomichan.exporters.export import Sankoku8Exporter
def new_yomi_exporter(target):
@@ -14,5 +15,6 @@ def new_yomi_exporter(target):
Targets.JITENON_KOTOWAZA: JitenonKotowazaExporter,
Targets.SMK8: Smk8Exporter,
Targets.DAIJIRIN2: Daijirin2Exporter,
+ Targets.SANKOKU8: Sankoku8Exporter,
}
return exporter_map[target](target)
diff --git a/bot/yomichan/glossary/icons.py b/bot/yomichan/glossary/icons.py
index 2e83821..4cf46c2 100644
--- a/bot/yomichan/glossary/icons.py
+++ b/bot/yomichan/glossary/icons.py
@@ -26,6 +26,27 @@ def make_monochrome_fill_rectangle(path, text):
f.write(svg)
+@cache
+def make_accent(path):
+ svg = __svg_accent()
+ with open(path, "w", encoding="utf-8") as f:
+ f.write(svg)
+
+
+@cache
+def make_heiban(path):
+ svg = __svg_heiban()
+ with open(path, "w", encoding="utf-8") as f:
+ f.write(svg)
+
+
+@cache
+def make_red_char(path, char):
+ svg = __svg_red_character(char)
+ with open(path, "w", encoding="utf-8") as f:
+ f.write(svg)
+
+
def __calculate_svg_ratio(path):
with open(path, "r", encoding="utf-8") as f:
xml = f.read()
@@ -82,3 +103,30 @@ def __svg_masked_rectangle(text):
fill='black' mask='url(#a)'/>
"""
return svg.strip()
+
+
+def __svg_heiban():
+ svg = f"""
+"""
+ return svg.strip()
+
+
+def __svg_accent():
+ svg = f"""
+"""
+ return svg.strip()
+
+
+def __svg_red_character(char):
+ svg = f"""
+"""
+ return svg.strip()
diff --git a/bot/yomichan/glossary/sankoku8.py b/bot/yomichan/glossary/sankoku8.py
new file mode 100644
index 0000000..5501381
--- /dev/null
+++ b/bot/yomichan/glossary/sankoku8.py
@@ -0,0 +1,344 @@
+import re
+import os
+from bs4 import BeautifulSoup
+
+import bot.yomichan.glossary.icons as Icons
+from bot.data import load_yomichan_name_conversion
+from bot.yomichan.glossary.gloss import make_gloss
+from bot.name_conversion import convert_names
+
+
+def make_glossary(entry, media_dir):
+ soup = entry.get_page_soup()
+ __remove_glyph_styles(soup)
+ __reposition_marks(soup)
+ __remove_links_without_href(soup)
+ __remove_appendix_links(soup)
+ __convert_links(soup, entry)
+ __add_parent_link(soup, entry)
+ __add_homophone_links(soup, entry)
+ __convert_images_to_text(soup)
+ __text_parens_to_images(soup, media_dir)
+ __replace_icons(soup, media_dir)
+ __replace_accent_symbols(soup, media_dir)
+ __convert_gaiji(soup, media_dir)
+ __convert_graphics(soup, media_dir)
+ __convert_number_icons(soup, media_dir)
+
+ name_conversion = load_yomichan_name_conversion(entry.target)
+ convert_names(soup, name_conversion)
+
+ gloss = make_gloss(soup.span)
+ glossary = [gloss]
+ return glossary
+
+
+def __remove_glyph_styles(soup):
+ """The css_parser library will emit annoying warning messages
+ later if it sees these glyph character styles"""
+ for elm in soup.find_all("glyph"):
+ if elm.has_attr("style"):
+ elm["data-style"] = elm.attrs["style"]
+ del elm.attrs["style"]
+
+
+def __reposition_marks(soup):
+ """These マーク symbols will be converted to rubies later, so they need to
+ be positioned after the corresponding text in order to appear correctly"""
+ for elm in soup.find_all("表外字"):
+ mark = elm.find("表外字マーク")
+ elm.append(mark)
+ for elm in soup.find_all("表外音訓"):
+ mark = elm.find("表外音訓マーク")
+ elm.append(mark)
+
+
+def __remove_links_without_href(soup):
+ for elm in soup.find_all("a"):
+ if elm.has_attr("href"):
+ continue
+ elm.attrs["data-name"] = elm.name
+ elm.name = "span"
+
+
+def __remove_appendix_links(soup):
+ for elm in soup.find_all("a"):
+ if elm.attrs["href"].startswith("appendix"):
+ elm.unwrap()
+
+
+def __convert_links(soup, entry):
+ for elm in soup.find_all("a"):
+ href = elm.attrs["href"].split(" ")[0]
+ href = href.removeprefix("#")
+ if not re.match(r"^[0-9]+(?:-[0-9A-F]{4})?$", href):
+ raise Exception(f"Invalid href format: {href}")
+ ref_entry_id = entry.id_string_to_entry_id(href)
+ if ref_entry_id in entry.ID_TO_ENTRY:
+ ref_entry = entry.ID_TO_ENTRY[ref_entry_id]
+ else:
+ ref_entry = entry.ID_TO_ENTRY[(ref_entry_id[0], 0)]
+ expression = ref_entry.get_first_expression()
+ elm.attrs["href"] = f"?query={expression}&wildcards=off"
+
+
+def __add_parent_link(soup, entry):
+ elm = soup.find("親見出相当部")
+ if elm is not None:
+ parent_entry = entry.get_parent()
+ expression = parent_entry.get_first_expression()
+ elm.attrs["href"] = f"?query={expression}&wildcards=off"
+ elm.name = "a"
+
+
+def __add_homophone_links(soup, entry):
+ forward_link = ["←", entry.entry_id[0] + 1]
+ backward_link = ["→", entry.entry_id[0] - 1]
+ homophone_info_list = [
+ ["svg-logo/homophone1.svg", [forward_link]],
+ ["svg-logo/homophone2.svg", [forward_link, backward_link]],
+ ["svg-logo/homophone3.svg", [backward_link]],
+ ]
+ for homophone_info in homophone_info_list:
+ filename, link_info = homophone_info
+ for elm in soup.find_all("img", attrs={"src": filename}):
+ for info in link_info:
+ text, link_id = info
+ link_entry = entry.ID_TO_ENTRY[(link_id, 0)]
+ expression = link_entry.get_first_expression()
+ link = BeautifulSoup("", "xml").a
+ link.string = text
+ link.attrs["href"] = f"?query={expression}&wildcards=off"
+ elm.append(link)
+ elm.unwrap()
+
+
+def __convert_images_to_text(soup):
+ conversions = [
+ ["svg-logo/重要語.svg", "*", "vertical-align: super; font-size: 0.6em"],
+ ["svg-logo/最重要語.svg", "**", "vertical-align: super; font-size: 0.6em"],
+ ["svg-logo/一般常識語.svg", "☆☆", "vertical-align: super; font-size: 0.6em"],
+ ["svg-logo/追い込み.svg", "", ""],
+ ["svg-special/区切り線.svg", "|", ""],
+ ]
+ for conversion in conversions:
+ filename, text, style = conversion
+ for elm in soup.find_all("img", attrs={"src": filename}):
+ if text == "":
+ elm.unwrap()
+ continue
+ if style != "":
+ elm.attrs["style"] = style
+ elm.attrs["data-name"] = elm.name
+ elm.attrs["data-src"] = elm.attrs["src"]
+ elm.name = "span"
+ elm.string = text
+ del elm.attrs["src"]
+
+
+def __text_parens_to_images(soup, media_dir):
+ for elm in soup.find_all("red"):
+ char = elm.text
+ if char not in ["(", ")"]:
+ continue
+ filename = f"red_{char}.svg"
+ path = os.path.join(media_dir, filename)
+ Icons.make_red_char(path, char)
+ ratio = Icons.calculate_ratio(path)
+ img = BeautifulSoup("", "xml").img
+ img.attrs = {
+ "height": 1.0,
+ "width": ratio,
+ "sizeUnits": "em",
+ "collapsible": False,
+ "collapsed": False,
+ "background": False,
+ "appearance": "auto",
+ "path": f"{os.path.basename(media_dir)}/{filename}",
+ }
+ elm.attrs["data-name"] = elm.name
+ elm.name = "span"
+ elm.string = ""
+ elm.append(img)
+ elm.attrs["style"] = "vertical-align: text-bottom;"
+
+
+def __replace_icons(soup, media_dir):
+ cls_to_appearance = {
+ "default": "monochrome",
+ "fill": "monochrome",
+ "red": "auto",
+ "redfill": "auto",
+ "none": "monochrome",
+ }
+ icon_info_list = [
+ ["svg-logo/アク.svg", "アク", "default"],
+ ["svg-logo/丁寧.svg", "丁寧", "default"],
+ ["svg-logo/可能.svg", "可能", "default"],
+ ["svg-logo/尊敬.svg", "尊敬", "default"],
+ ["svg-logo/接尾.svg", "接尾", "default"],
+ ["svg-logo/接頭.svg", "接頭", "default"],
+ ["svg-logo/表記.svg", "表記", "default"],
+ ["svg-logo/謙譲.svg", "謙譲", "default"],
+ ["svg-logo/区別.svg", "区別", "redfill"],
+ ["svg-logo/由来.svg", "由来", "redfill"],
+ ["svg-logo/人.svg", "", "none"],
+ ["svg-logo/他.svg", "", "none"],
+ ["svg-logo/動.svg", "", "none"],
+ ["svg-logo/名.svg", "", "none"],
+ ["svg-logo/句.svg", "", "none"],
+ ["svg-logo/派.svg", "", "none"],
+ ["svg-logo/自.svg", "", "none"],
+ ["svg-logo/連.svg", "", "none"],
+ ["svg-logo/造.svg", "", "none"],
+ ["svg-logo/造2.svg", "", "none"],
+ ["svg-logo/造3.svg", "", "none"],
+ ["svg-logo/百科.svg", "", "none"],
+ ]
+ for icon_info in icon_info_list:
+ src, text, cls = icon_info
+ for elm in soup.find_all("img", attrs={"src": src}):
+ path = media_dir
+ for part in src.split("/"):
+ path = os.path.join(path, part)
+ __make_rectangle(path, text, cls)
+ ratio = Icons.calculate_ratio(path)
+ img = BeautifulSoup("", "xml").img
+ img.attrs = {
+ "height": 1.0,
+ "width": ratio,
+ "sizeUnits": "em",
+ "collapsible": False,
+ "collapsed": False,
+ "background": False,
+ "appearance": cls_to_appearance[cls],
+ "title": elm.attrs["alt"] if elm.has_attr("alt") else "",
+ "path": f"{os.path.basename(media_dir)}/{src}",
+ }
+ elm.name = "span"
+ elm.clear()
+ elm.append(img)
+ elm.attrs["style"] = "vertical-align: text-bottom; margin-right: 0.25em;"
+
+
+def __replace_accent_symbols(soup, media_dir):
+ accent_info_list = [
+ ["svg-accent/平板.svg", Icons.make_heiban],
+ ["svg-accent/アクセント.svg", Icons.make_accent],
+ ]
+ for info in accent_info_list:
+ src, write_svg_function = info
+ for elm in soup.find_all("img", attrs={"src": src}):
+ path = media_dir
+ for part in src.split("/"):
+ path = os.path.join(path, part)
+ write_svg_function(path)
+ ratio = Icons.calculate_ratio(path)
+ img = BeautifulSoup("", "xml").img
+ img.attrs = {
+ "height": 1.0,
+ "width": ratio,
+ "sizeUnits": "em",
+ "collapsible": False,
+ "collapsed": False,
+ "background": False,
+ "appearance": "auto",
+ "path": f"{os.path.basename(media_dir)}/{src}",
+ }
+ elm.name = "span"
+ elm.clear()
+ elm.append(img)
+ elm.attrs["style"] = "vertical-align: text-bottom;"
+
+
+def __convert_gaiji(soup, media_dir):
+ for elm in soup.find_all("img"):
+ if not elm.has_attr("src"):
+ continue
+ src = elm.attrs["src"]
+ if src.startswith("graphics"):
+ continue
+ path = media_dir
+ for part in src.split("/"):
+ if part.strip() == "":
+ continue
+ path = os.path.join(path, part)
+ ratio = Icons.calculate_ratio(path)
+ img = BeautifulSoup("", "xml").img
+ img.attrs = {
+ "height": 1.0,
+ "width": ratio,
+ "sizeUnits": "em",
+ "collapsible": False,
+ "collapsed": False,
+ "background": False,
+ "appearance": "monochrome",
+ "title": elm.attrs["alt"] if elm.has_attr("alt") else "",
+ "path": f"{os.path.basename(media_dir)}/{src}",
+ }
+ elm.name = "span"
+ elm.clear()
+ elm.append(img)
+ elm.attrs["style"] = "vertical-align: text-bottom;"
+
+
+def __convert_graphics(soup, media_dir):
+ for elm in soup.find_all("img"):
+ if not elm.has_attr("src"):
+ continue
+ src = elm.attrs["src"]
+ if not src.startswith("graphics"):
+ continue
+ elm.attrs = {
+ "collapsible": True,
+ "collapsed": True,
+ "title": elm.attrs["alt"] if elm.has_attr("alt") else "",
+ "path": f"{os.path.basename(media_dir)}/{src}",
+ "src": src,
+ }
+
+
+def __convert_number_icons(soup, media_dir):
+ for elm in soup.find_all("大語義番号"):
+ if elm.find_parent("a") is None:
+ filename = f"{elm.text}-fill.svg"
+ appearance = "monochrome"
+ path = os.path.join(media_dir, filename)
+ __make_rectangle(path, elm.text, "fill")
+ else:
+ filename = f"{elm.text}-bluefill.svg"
+ appearance = "auto"
+ path = os.path.join(media_dir, filename)
+ __make_rectangle(path, elm.text, "bluefill")
+ ratio = Icons.calculate_ratio(path)
+ img = BeautifulSoup("", "xml").img
+ img.attrs = {
+ "height": 1.0,
+ "width": ratio,
+ "sizeUnits": "em",
+ "collapsible": False,
+ "collapsed": False,
+ "background": False,
+ "appearance": appearance,
+ "title": elm.text,
+ "path": f"{os.path.basename(media_dir)}/{filename}",
+ }
+ elm.name = "span"
+ elm.clear()
+ elm.append(img)
+ elm.attrs["style"] = "vertical-align: text-bottom; margin-right: 0.25em;"
+
+
+def __make_rectangle(path, text, cls):
+ if cls == "none":
+ pass
+ elif cls == "fill":
+ Icons.make_monochrome_fill_rectangle(path, text)
+ elif cls == "red":
+ Icons.make_rectangle(path, text, "red", "white", "red")
+ elif cls == "redfill":
+ Icons.make_rectangle(path, text, "red", "red", "white")
+ elif cls == "bluefill":
+ Icons.make_rectangle(path, text, "blue", "blue", "white")
+ else:
+ Icons.make_rectangle(path, text, "black", "transparent", "black")
diff --git a/bot/yomichan/terms/factory.py b/bot/yomichan/terms/factory.py
index d3fc199..8c596cb 100644
--- a/bot/yomichan/terms/factory.py
+++ b/bot/yomichan/terms/factory.py
@@ -5,6 +5,7 @@ from bot.yomichan.terms.jitenon import JitenonYojiTerminator
from bot.yomichan.terms.jitenon import JitenonKotowazaTerminator
from bot.yomichan.terms.smk8 import Smk8Terminator
from bot.yomichan.terms.daijirin2 import Daijirin2Terminator
+from bot.yomichan.terms.sankoku8 import Sankoku8Terminator
def new_terminator(target):
@@ -14,5 +15,6 @@ def new_terminator(target):
Targets.JITENON_KOTOWAZA: JitenonKotowazaTerminator,
Targets.SMK8: Smk8Terminator,
Targets.DAIJIRIN2: Daijirin2Terminator,
+ Targets.SANKOKU8: Sankoku8Terminator,
}
return terminator_map[target](target)
diff --git a/bot/yomichan/terms/sankoku8.py b/bot/yomichan/terms/sankoku8.py
new file mode 100644
index 0000000..613f3bb
--- /dev/null
+++ b/bot/yomichan/terms/sankoku8.py
@@ -0,0 +1,47 @@
+from bot.entries.sankoku8 import Sankoku8PhraseEntry as PhraseEntry
+
+from bot.yomichan.terms.terminator import Terminator
+from bot.yomichan.glossary.sankoku8 import make_glossary
+from bot.yomichan.grammar import sudachi_rules, tags_to_rules
+
+
+class Sankoku8Terminator(Terminator):
+ def __init__(self, target):
+ super().__init__(target)
+
+ def _definition_tags(self, entry):
+ return ""
+
+ def _inflection_rules(self, entry, expression):
+ if isinstance(entry, PhraseEntry):
+ return sudachi_rules(expression)
+ pos_tags = entry.get_part_of_speech_tags()
+ if len(pos_tags) == 0:
+ return sudachi_rules(expression)
+ else:
+ return tags_to_rules(expression, pos_tags, self._inflection_categories)
+
+ def _glossary(self, entry):
+ if entry.entry_id in self._glossary_cache:
+ return self._glossary_cache[entry.entry_id]
+ glossary = make_glossary(entry, self._image_dir)
+ self._glossary_cache[entry.entry_id] = glossary
+ return glossary
+
+ def _sequence(self, entry):
+ return entry.entry_id[0] * 100000 + entry.entry_id[1]
+
+ def _term_tags(self, entry):
+ return ""
+
+ def _link_glossary_parameters(self, entry):
+ return [
+ [entry.children, "子"],
+ [entry.phrases, "句"]
+ ]
+
+ def _subentry_lists(self, entry):
+ return [
+ entry.children,
+ entry.phrases,
+ ]
diff --git a/data/entries/sankoku8/phrase_readings.csv b/data/entries/sankoku8/phrase_readings.csv
new file mode 100644
index 0000000..b9756f4
--- /dev/null
+++ b/data/entries/sankoku8/phrase_readings.csv
@@ -0,0 +1,3573 @@
+4,16385,ああいえばこういう
+16,16385,アーチをかける
+87,16385,あいくちがわるい
+139,16385,あいそがつきる
+139,16386,あいそも{こそ・こそ}もつきはてる
+149,16385,あいだにたつ
+161,16385,あいてにする
+161,16386,あいてになる
+214,16385,あいまをぬう
+262,16385,あおはあいよりいでてあいよりあおし
+293,16385,あおすじをたてる
+302,16385,あおなにしお
+342,16385,あがきがとれない
+351,16385,あかごのてをひねるよう
+365,16385,あかしんごうみんなでわたればこわくない
+426,16385,あかるみにでる
+435,16385,あきたつ
+435,16386,あきのひはつるべおとし
+440,16385,あきかぜがたつ
+458,16385,あきないはうしのよだれ
+460,16385,あきなすはよめにくわすな
+485,16385,あくがつよい
+489,16385,あいたくちがふさがらない
+496,16385,あくうんがつよい
+508,16385,あくじせんりをはしる
+521,16385,あくじょのふかなさけ
+536,16385,あくせんみにつかず
+578,16385,あくむからさめる
+587,16385,あぐらをかく
+602,16385,あけにそまる
+607,16385,あげあしをとる
+664,16385,あごがひあがる
+664,16386,あごでつかう
+664,16387,あごをだす
+664,16388,あごを{な・な}でる
+664,16389,あごをはずす
+674,16385,あさのごとくみだれる
+746,16385,あしがある
+746,16386,あしがちにつかない
+746,16387,あしがつく
+746,16388,あしがでる
+746,16389,あしがとおのく
+746,16390,あしがながい
+746,16391,あしがはやい
+746,16392,あしがはやい
+746,16393,あしでかく
+746,16394,あしでかせぐ
+746,16395,あしをあらう
+746,16396,あしをいれる
+746,16397,あしを{すく・すく}われる
+746,16398,あしをつかう
+746,16399,あしをとられる
+746,16400,あしをのばす
+746,16401,あしをはこぶ
+746,16402,あしをひっぱる
+746,16403,あしをぼうにする
+746,16404,あしをむけてねられない
+746,16405,あしをむける
+749,16385,あじもしゃしゃりもない
+749,16386,あじもそっけもない
+749,16387,あじをしめる
+774,16385,あしげにする
+790,16385,あしたはあしたのかぜがふく
+821,16385,あしもとからとりがたつ
+821,16386,あしもとがわるい
+821,16387,あしもとにつけこむ
+821,16388,あしもとにひがつく
+821,16389,あしもとにもおよばない
+821,16390,あしもとのあかるいうちに
+821,16391,あしもとへもよりつけない
+821,16392,あしもとを{すく・すく}われる
+821,16393,あしもとをみる
+837,16385,あすはわがみ
+841,16385,あずかってちからがある
+866,16385,あせになる
+866,16386,あせをかく
+866,16387,あせをながす
+913,16385,あたいをとらせる
+921,16385,あたかも{よ・よ}し
+947,16385,あたまがあがらない
+947,16386,あたまがいたい
+947,16387,あたまかくしてしりかくさず
+947,16388,あたまがさがる
+947,16389,あたまがしろくなる
+947,16390,あたまがひくい
+947,16391,あたまがまわる
+947,16392,あたまからゆげを〈たてる/だす〉
+947,16393,あたまがわく
+947,16394,あたまがわれるよう
+947,16395,あたまにくる
+947,16396,あたまのうえの{はえ・はえ}もおえない
+947,16397,あたまのくろい{ねずみ・ねずみ}
+947,16398,あたま(のなか)がまっしろになる
+947,16399,あたまひとつぬける
+947,16400,あたまをいためる
+947,16401,あたまをおさえる
+947,16402,あたまをかかえる
+947,16403,あたまをかく
+947,16404,あたまをさげる
+947,16405,あたまをつかう
+947,16406,あたまをつっこむ
+947,16407,あたまをはねる
+947,16408,あたまをひねる
+947,16409,あたまをひやす
+947,16410,あたまをまるめる
+947,16411,あたまを{もた・もた}げる
+953,16385,あたらしいさけをふるいかわぶくろにもる
+953,16386,あたらしいページをくわえる
+959,16385,あたりをはらう
+960,16385,あたりをつける
+964,16385,あたらずといえどもとおからず
+964,16386,あたるもはっけあたらぬもはっけ
+964,16387,あたるをさいわい
+973,16385,あちらたてればこちらがたたず
+974,16385,あっといわせる
+982,16385,あついものがこみあげる
+985,16385,あっかはりょうかをくちくする
+1000,16385,あっけにとられる
+1006,16385,あつささむさもひがんまで
+1049,16385,あつものにこりて{なます・なます}をふく
+1098,16385,あとがない
+1098,16386,あとにする
+1098,16387,あとにもさきにも
+1098,16388,あとの{かり・かり}がさきになる
+1098,16389,あとはのとなれやまとなれ
+1098,16390,あとをおう
+1098,16391,あとをたたない
+1098,16392,あとをひく
+1100,16385,あとをおう
+1100,16386,あとをたつ
+1100,16387,あとをつける
+1102,16385,あとあしですなをかける
+1141,16385,アドバルーンをあげる
+1164,16385,あながあく
+1164,16386,あながあくほど
+1164,16387,あながあったらはいりたい
+1234,16385,あばたもえくぼ
+1256,16385,あびるほどのむ
+1271,16385,あぶないはしをわたる
+1278,16385,あぶらがつかれる
+1278,16386,あぶらをうる
+1278,16387,あぶらをしぼる
+1279,16385,あぶらがのる
+1332,16385,あまいしるをすう
+1332,16386,あまくみる
+1367,16385,あまだれいしを{うが・うが}つ
+1410,16385,あみをはる
+1441,16385,あめがふろうが{やり・やり}がふろうが
+1441,16386,あめのふるひはてんきがわるい
+1441,16387,あめふってじかたまる
+1442,16385,アメと{ムチ・むち}
+1442,16386,あめをしゃぶらせる
+1460,16385,あめだまをしゃぶらせる
+1462,16385,あめつゆをしのぐ
+1476,16385,あやをつける
+1498,16385,あやまちてはあらたむるにはばかることなかれ
+1578,16385,あらねつをとる
+1623,16385,ありのはいでるすきもない
+1673,16385,あったもので(は)ない
+1673,16386,あってなきがごとし
+1761,16385,あわをくう
+1778,16385,あわせるかおがない
+1868,16385,あんしょうにのりあげる
+1877,16385,あんずるよりうむが{やす・やす}し
+1905,16385,アンテナをはる
+1974,16385,いはじんじゅつ
+1976,16385,いをはる
+1979,16385,いをたてる
+1980,16385,いあまってことばたらず
+1980,16386,いとする
+1980,16387,いにかいする
+1980,16388,いに{かな・かな}う
+1980,16389,いにそう
+1980,16390,いにそまない
+1980,16391,いにみたない
+1980,16392,いのあるところ
+1980,16393,いをうける
+1980,16394,いをえる
+1980,16395,いを{く・く}む
+1980,16396,いをつうじる
+1980,16397,いをつくす
+1980,16398,いをつよくする
+1980,16399,いをむかえる
+1980,16400,いをもちいる
+1994,16385,いいいみで
+2018,16385,いいかげんにしろ
+2111,16385,いいえてみょう
+2111,16386,いうことなし
+2111,16387,いうことをきかない
+2111,16388,いうにおよばず
+2111,16389,いうにこと(を)かいて
+2111,16390,いうにやおよぶ
+2111,16391,いうは{やす・やす}くおこなうは{かた・かた}し
+2111,16392,いうまでもない
+2111,16393,いうもさらなり
+2111,16394,いうを{ま・ま}たない
+2111,16395,いったいわない
+2111,16396,いわないことではない
+2111,16397,いわぬがはな
+2117,16385,いえをたたむ
+2208,16385,いかりしんとうにはっする
+2221,16385,いかんのいをひょうする
+2230,16385,いきがあがる
+2230,16386,いきがかかる
+2230,16387,いきがきれる
+2230,16388,いきがつまる
+2230,16389,いきがながい
+2230,16390,いきのかよった
+2230,16391,いきのしたから
+2230,16392,いきもつかせず
+2230,16393,いきをいれる
+2230,16394,いきをこらす
+2230,16395,いきをころす
+2230,16396,いきをつく
+2230,16397,いきをぬく
+2230,16398,いきを{の・の}む
+2230,16399,いきをひきとる
+2230,16400,いきをひそめる
+2230,16401,いきをふきかえす
+2232,16385,いきてんをつく
+2248,16385,いきうまのめをぬく
+2315,16385,いきのねをとめる
+2439,16385,いざかまくら
+2442,16385,いさいをはなつ
+2469,16385,いしがながれてこのはがしずむ
+2469,16386,いしにかじりついても
+2469,16387,いしにたつや
+2469,16388,いしにまくらしながれにくちすすぐ
+2469,16389,いしのうえにもさんねん
+2469,16390,いしもておわれる
+2478,16385,いじがわるい
+2478,16386,いじをはる
+2489,16385,いしきがたかい
+2514,16385,いしばしをたたいてわたる
+2558,16385,いしょくたりてれいせつをしる
+2587,16385,いずまいをただす
+2595,16385,いずれ{あやめ・あやめ}か{かきつばた・かきつばた}
+2632,16385,いそがばまわれ
+2648,16385,いたにつく
+2652,16385,いたいめをみる
+2652,16386,いたくもかゆくもない
+2652,16387,いたくもないはらをさぐられる
+2670,16385,いたごいちまいしたはじごく
+2685,16385,いたちのみちをきったよう
+2723,16385,いたれりつくせり
+2728,16385,いちかばちか
+2728,16386,いちからじゅうまで
+2728,16387,いちにもににも
+2728,16388,いちぬけた
+2728,16389,いちひめにたろう
+2728,16390,いちふじにたかさん{なすび・なすび}
+2728,16391,いちもにもなく
+2728,16392,いちをきいてじゅうをしる
+2752,16385,いちぎにおよばず
+2764,16385,いちごにつきる
+2768,16385,いちごんなかるべからず
+2768,16386,いちごんのもとに
+2768,16387,いちごんもない
+2772,16385,いちじがばんじ
+2777,16385,いちじつのちょうがある
+2778,16385,いちじゅのかげいちがのながれもたしょうのえん
+2811,16385,いちにちのちょうがある
+2841,16385,いちまいかむ
+2845,16385,いちみゃくあいつうじる
+2853,16385,いちもく(を)おく
+2874,16385,いちようおちててんかのあきをしる
+2905,16385,いっかをなす
+2941,16385,いっきょうをきっする
+2953,16385,いっけんきょに{ほ・ほ}ゆればばんけんじつをつたう
+2965,16385,いっこくをあらそう
+2984,16385,いっし(を)むくいる
+2986,16385,いっしまとわぬ
+2986,16386,いっしみだれず
+3002,16385,いっしゅうまわって
+3011,16385,いっしょうこうなり(て)ばんこつかる
+3012,16385,いっしょうにふす(る)
+3028,16385,いっすんさきはやみ
+3028,16386,いっすんのこういんかろんずべからず
+3028,16387,いっすんのむしにもごぶのたましい
+3030,16385,いっせいを{ふうび・ふうび}する
+3035,16385,いっせきをとうじる
+3036,16385,いっせきぶつ
+3036,16386,いっせきもうける
+3042,16385,いっせんをかくす
+3042,16386,いっせんをこえる
+3067,16385,いっちゅうをゆする
+3069,16385,いっちょうあがり
+3104,16385,いっとうちをぬく
+3116,16385,いっぱいくわす
+3117,16385,いっぱい、ちに{まみ・まみ}れる
+3123,16385,いっぱんを〈みて/もって〉ぜんぴょうを〈ぼくす/おす〉
+3137,16385,いっぷくいれる
+3137,16386,いっぷくつける
+3137,16387,いっぷくもる
+3148,16385,いっぽぬけでる
+3148,16386,いっぽまちがえば
+3148,16387,いっぽをゆずる
+3178,16385,いとのきれた{たこ・たこ}
+3178,16386,いとをたれる
+3178,16387,いとをひく
+3270,16385,いぬとさる
+3270,16386,いぬもあるけばぼうにあたる
+3270,16387,いぬもくわない
+3300,16385,いのちあってのものだね
+3300,16386,いのちからにばんめ
+3300,16387,いのちながければはじおおし
+3300,16388,いのちをおとす
+3300,16389,いのちをけずる
+3300,16390,いのちをちぢめる
+3347,16385,いぶくろをつかむ
+3347,16386,いぶくろをみたす
+3377,16385,いまこそわかれめ
+3377,16386,いまないた{からす・からす}がもうわらう
+3377,16387,いまにはじまったことで(は)ない
+3377,16388,いまはこれまで
+3377,16389,いまはむかし
+3377,16390,いまをときめく
+3408,16385,いまやおそし
+3435,16385,いも(のこ)をあらうよう
+3435,16386,いものにえたもごぞんじない
+3456,16385,いやもへちまもない
+3473,16385,いやけがさす
+3545,16385,いりまめにはながさく
+3558,16385,いてもたってもいられない
+3592,16385,いろのしろいはしちなんかくす
+3592,16386,いろをうしなう
+3592,16387,いろをうる
+3592,16388,いろをこのむ
+3592,16389,いろをそえる
+3592,16390,いろをただす
+3592,16391,いろをつける
+3592,16392,いろをなす
+3654,16385,いわしのあたまもしんじんから
+3685,16385,いんに{こ・こ}もる
+3685,16386,いんにように
+3707,16385,いんかんとおからず
+3730,16385,いんこうをやくする
+3852,16385,いんどうをわたす
+3853,16385,いんとくあればようほうあり
+3928,16385,{う・う}のまねをする{からす・からす}
+3928,16386,{う・う}のめ{たか・たか}のめ
+3980,16385,うえからものをいう
+3980,16386,うえにはうえがある
+3980,16387,うえをしたへのおおさわぎ
+3989,16385,ウエイトをおく
+4026,16385,うおがみずをえたよう
+4039,16385,うおごころあればみずごころ(あり)
+4102,16385,うきみをやつす
+4109,16385,うぐいすなかせたこともある
+4143,16385,うけてたつ
+4148,16385,うごの{たけのこ・たけのこ}のよう
+4152,16385,うごきがとれない
+4153,16385,うごかぬしょうこ
+4167,16385,うしにひかれてぜんこうじまいり
+4167,16386,うしをうまにのりかえる
+4169,16385,うじよりそだち
+4191,16385,うしろからてっぽうをうつ
+4191,16386,うしろをみせる
+4191,16387,うしろがみをひかれるおもい
+4191,16388,うしろゆびをさされる
+4207,16385,うすがみを〈はぐ/はがす〉よう
+4247,16385,うすめをあける
+4266,16385,うそからでたまこと
+4266,16386,うそでぬりかためる
+4266,16387,うそもひゃっかいいえばほんとうになる
+4266,16388,うそもほうべん
+4266,16389,うそをつけ
+4306,16385,うだつがあがらない
+4339,16385,うちかぶとをみすかす
+4438,16385,うてばひびく
+4466,16385,うっちゃりをくう
+4468,16385,うつつをぬかす
+4498,16385,うでがあがる
+4498,16386,うでがたつ
+4498,16387,うでがなる
+4498,16388,うでがよなきをする
+4498,16389,うでにおぼえがある
+4498,16390,うでによりをかける
+4498,16391,うでをこまねく
+4498,16392,うでをふるう
+4498,16393,うでをみがく
+4576,16385,うぶごえをあげる
+4587,16385,うまがあう
+4587,16386,うまにはのってみよ、ひとにはそうてみよ
+4587,16387,うまのせをわける
+4587,16388,うまのみみにねんぶつ
+4590,16385,うまいしるをすう
+4611,16385,うみのもくずとなる
+4611,16386,うみのものともやまのものともつかない
+4633,16385,うみのおやよりそだてのおや
+4646,16385,うむあいつうじる
+4646,16386,うむをいわさず
+4668,16385,うもれぎにはながさく
+4673,16385,うゆうにきす
+4678,16385,うらをかえす
+4678,16386,うらをかえせば
+4678,16387,うらをかく
+4678,16388,うらをとる
+4733,16385,うらみこつずいにてっする
+4733,16386,うらみを{の・の}む
+4737,16385,うらめにでる
+4752,16385,{うり・うり}のつるに{なすび・なすび}は{な・な}らぬ
+4766,16385,うりことばにかいことば
+4823,16385,うれしいひめいをあげる
+4858,16385,うわさがうわさをよぶ
+4858,16386,うわさがたつ
+4858,16387,うわさをすればかげ(がさす)
+4883,16385,うわまえをはねる
+4892,16385,うんをてんにまかせる
+4893,16385,うんだともつぶれたとも
+4893,16386,うんでもすんでもない
+4893,16387,うんともすんとも
+4928,16385,うんちくをかたむける
+4956,16385,えのないところにえをすげる
+4957,16385,えにかいたもち
+4957,16386,えにかいたよう
+4957,16387,えになる
+5077,16385,えいゆういろをこのむ
+5092,16385,エーからゼット(まで)
+5342,16385,えつにいる
+5370,16385,えつぼにいる
+5376,16385,えてにほをあげる
+5387,16385,えどのかたきをながさきでうつ
+5434,16385,えびで{たい・たい}をつる
+5514,16385,えらぶところがない
+5518,16385,えりをただす
+5589,16385,えんなきしゅじょうはどしがたし
+5589,16386,えんはいなものあじなもの
+5630,16385,えんぎでもない
+5630,16386,えんぎをいわう
+5630,16387,えんぎをかつぐ
+5679,16385,えんじゃくいずくんぞこうこくのこころざしをしらんや
+5703,16385,エンジンがかかる
+5796,16385,えんぴつをなめる
+5818,16385,えんまくをはる
+5835,16385,えんりょえしゃくもなく
+5840,16385,おをひく
+5938,16385,おうたこにおしえられてあさせをわたる
+5939,16385,おいつおわれつ
+6014,16385,おうせつに{いとま・いとま}がない
+6034,16385,おうとをもよおす
+6100,16385,おおありなごやのきんの{しゃち・しゃち}
+6148,16385,おおきくでる
+6231,16385,おおでをひろげる
+6231,16386,おおでをふる
+6261,16385,おおなたをふるう
+6286,16385,おおぶねにのったきもち
+6289,16385,おおぶろしきをひろげる
+6302,16385,おおみえをきる
+6315,16385,おおめにみる
+6353,16385,{おか・おか}にあがった{かっぱ・かっぱ}
+6386,16385,おかぶをうばう
+6389,16385,おかまをほる
+6463,16385,おきゅうをすえる
+6467,16385,おぎりにも
+6471,16385,おくがふかい
+6484,16385,おくじょうおくをかす
+6492,16385,オクターブがあがる
+6508,16385,おくばにもののはさまったいいかた
+6509,16385,おくびにもださない
+6510,16385,おくびょうかぜをふかす
+6523,16385,おくらになる
+6534,16385,おくれをとる
+6566,16385,おことばにあまえる
+6591,16385,おざがさめる
+6600,16385,おさきまっくら
+6600,16386,おさきぼうをかつぐ
+6602,16385,おざしきがかかる
+6605,16385,おさとがしれる
+6627,16385,おしもおされぬ
+6627,16386,おしもおされもせぬ
+6760,16385,おしてしるべし
+6789,16385,おそかりしゆらのすけ
+6791,16385,おそきにしっする
+6794,16385,おぞけをふるう
+6812,16385,おそれいりやのきしもじん
+6824,16385,おだをあげる
+6833,16385,おたかくとまる
+6853,16385,おだやかでない
+6878,16385,おちゃをにごす
+6878,16386,おちゃを{ひ・ひ}く
+6960,16385,おつやのよう
+6962,16385,おつりがくる
+6963,16385,おてをはいしゃく
+6991,16385,おとをたててくずれる
+7006,16385,おとこになる
+7006,16386,おとこをあげる
+7006,16387,おとこごころとあきのそら
+7021,16385,おとといきやがれ
+7063,16385,おなじあなの{むじな・むじな}
+7063,16386,おなじかまのめしをくう
+7063,16387,おなじテーブルにつく
+7076,16385,おにがでるかじゃがでるか
+7076,16386,おにがわらう
+7076,16387,おににかなぼう
+7076,16388,おにのいぬまに(いのちの)せんたく
+7076,16389,おにのくびをとったよう
+7076,16390,おにのめにもなみだ
+7076,16391,おにはそとふくはうち
+7076,16392,おにもじゅうはち、ばんちゃもでばな
+7076,16393,おにをあざむく
+7122,16385,おのれにかつ
+7122,16386,おのれを{むな・むな}しゅうする
+7123,16385,おはうちからす
+7124,16385,おはにあう
+7144,16385,おはちがまわる
+7161,16385,おびにみじかし{たすき・たすき}にながし
+7172,16385,おひげの{ちり・ちり}をはらう
+7197,16385,おひゃくどをふむ
+7202,16385,おひれをつける
+7243,16385,オブラートに〈つつむ/くるむ〉
+7283,16385,おぼれるものは{わら・わら}をもつかむ
+7333,16385,おめにかかる
+7333,16386,おめにかける
+7356,16385,おもいなかばにすぎる
+7356,16386,おもいにしずむ
+7356,16387,おもいもつかない
+7356,16388,おもいもよらない
+7356,16389,おもいをいたす
+7356,16390,おもいをはらす
+7356,16391,おもいをめぐらす
+7356,16392,おもいをよせる
+7356,16393,おもいたったがきちにち
+7358,16385,おもうにまかせない
+7358,16386,おもってもいない
+7366,16385,おもきをおく
+7366,16386,おもきをなす
+7385,16385,おもてをおかす
+7422,16385,おやのいんががこにむくいる
+7422,16386,おやのかおがみたい
+7422,16387,おやのこころこしらず
+7422,16388,おやのすねをかじる
+7422,16389,おやのひかりはななひかり
+7422,16390,おやはなくともこはそだつ
+7429,16385,おやかたひのまる
+7446,16385,おやすくない
+7456,16385,おやぶねにのったつもり
+7476,16385,およびがかかる
+7476,16386,およびでない
+7491,16385,おりにふれ(て)
+7491,16386,おりもおり
+7566,16385,おれがおれが
+7602,16385,おわりよければすべてよし
+7606,16385,おんにきる
+7606,16386,おんを{あだ・あだ}でかえす
+7606,16387,おんをうる
+7606,16388,おんをかえす
+7707,16385,おんなさんがいにいえなし
+7707,16386,おんなになる
+7707,16387,おんなごころとあきのそら
+7721,16385,おんぶにだっこ
+7749,16385,かもなくふかもなし
+7755,16385,かをさりじつにつく
+7756,16385,かのなくようなこえ
+7777,16385,がをおる
+7777,16386,がをはる
+7782,16385,がをまげる
+7845,16385,かいになる
+7854,16385,かいよりはじめよ
+7887,16385,かいいぬにてをかまれる
+7921,16385,がいかをあげる
+8057,16385,かいさいをさけぶ
+8171,16385,かいじんにきす
+8333,16385,かいとうらんまをたつ
+8363,16385,かいなをかえす
+8419,16385,がいぶんがわるい
+8552,16385,かえすときの{えんま・えんま}がお
+8565,16385,かえるのこはかえる
+8565,16386,かえるのつらにみず
+8567,16385,かえらぬたび
+8567,16386,かえらぬひととなる
+8567,16387,かえりなんいざ
+8578,16385,かおがあう
+8578,16386,かおがうれる
+8578,16387,かおがきく
+8578,16388,かおがたつ
+8578,16389,かおがつぶれる
+8578,16390,かおがひろい
+8578,16391,かおがみえる
+8578,16392,かおからひがでる
+8578,16393,かおにかいてある
+8578,16394,かおにでる
+8578,16395,かおにどろをぬる
+8578,16396,かおをあらってでなおしてこい
+8578,16397,かおをあわせる
+8578,16398,かおをかがやかせる
+8578,16399,かおをかす
+8578,16400,かおをくしゃくしゃにする
+8578,16401,かおをだす
+8578,16402,かおをつくる
+8581,16385,かおいろをみる
+8604,16385,かおりをきく
+8944,16385,かくすよりあらわる
+9069,16385,がくもんにおうどうなし
+9107,16385,かげでいとをひく
+9107,16386,かげになりひなたになって
+9108,16385,かげがうすい
+9108,16386,かげのかたちにそうよう
+9108,16387,かげもかたちもない
+9108,16388,かげをおとす
+9108,16389,かげをかくす
+9108,16390,かげをひそめる
+9130,16385,かけがえのない
+9161,16385,かけつけさんばい
+9179,16385,かげひなたになって
+9264,16385,かさにきる
+9267,16385,かさにかかる
+9272,16385,かざあなをあける
+9288,16385,かざかみにもおけない
+9303,16385,かざしもにたつ
+9316,16385,かさのだいがとぶ
+9329,16385,かさんをかたむける
+9356,16385,{かじ・かじ}をきる
+9356,16386,{かじ・かじ}をとる
+9498,16385,かしらをおろす
+9526,16385,かずしれず
+9569,16385,かすみをくう
+9592,16385,かぜかおる
+9592,16386,かぜがふけばおけやがもうかる
+9592,16387,かぜにたつ
+9592,16388,かぜひかる
+9592,16389,かぜをきる
+9592,16390,かぜをくらって
+9592,16391,かぜをふかせる
+9593,16385,かぜをひく
+9614,16385,かせぐにおいつくびんぼうなし
+9661,16385,かたがつく
+9662,16385,かたがつく
+9664,16385,かたにはまる
+9664,16386,かたにはめる
+9665,16385,かたがこる
+9665,16386,かたでいきをする
+9665,16387,かたでかぜ(を)きる
+9665,16388,かたにかかる
+9665,16389,かたにちからをいれる
+9665,16390,かたのちからをぬく
+9665,16391,かたのにをおろす
+9665,16392,かたをいからせる
+9665,16393,かたをいれる
+9665,16394,かたをおとす
+9665,16395,かたをかす
+9665,16396,かたを{すく・すく}める
+9665,16397,かたをたたく
+9665,16398,かたをならべる
+9665,16399,かたをほぐす
+9665,16400,かたをもつ
+9665,16401,かたをよせあう
+9670,16385,ガタがくる
+9677,16385,かたあしをつっこむ
+9749,16385,かたずを{の・の}む
+9760,16385,かたちからはいる
+9777,16385,かたなおれやつきる
+9777,16386,かたなにかけても
+9786,16385,かたはだ(を)ぬぐ
+9796,16385,かたひじいからせる
+9796,16386,かたひじはる
+9807,16385,かたぼう(を)かつぐ
+9817,16385,かたみがせまい
+9842,16385,かたるにおちる
+9842,16386,かたるにたる
+9862,16385,かちをおく
+9864,16385,かちにいく
+9864,16386,かちにのる
+9864,16387,かちをひろう
+9872,16385,かちうまにのる
+9913,16385,かちゅうの{くり・くり}をひろう
+9926,16385,かちんとくる
+9931,16385,かつをいれる
+9933,16385,かって{かぶと・かぶと}のおをしめよ
+9933,16386,かてばかんぐんまければぞくぐん
+9994,16385,かっこにいれる
+9996,16385,かっこうがつく
+9996,16386,かっこうをつける
+10026,16385,かっしてもとうせんのみずはのまず
+10055,16385,かってなねつをふく
+10055,16386,かってにしろ
+10131,16385,かでんにくつをいれず
+10142,16385,かどがたつ
+10142,16386,かどがとれる
+10197,16385,かなえのけいちょうをとう
+10209,16385,かなぐつわをはめる
+10247,16385,かにはこうらににせてあなをほる
+10264,16385,かねが{うな・うな}る
+10264,16386,かねにあかせて
+10264,16387,かねにいとめをつけない
+10264,16388,かねにする
+10264,16389,かねになる
+10264,16390,かねのきれめがえんのきれめ
+10264,16391,かねのなるき
+10264,16392,かねのわらじでさがす
+10264,16393,かねはてんかのまわり〈もち/もの〉
+10264,16394,かねをおとす
+10264,16395,かねをくう
+10299,16385,かねもち{けんか・けんか}せず
+10376,16385,かぶがあがる
+10397,16385,かふくは{あざな・あざな}えるなわの{ごと・ごと}し
+10410,16385,かぶとをぬぐ
+10415,16385,かぶりをふる
+10433,16385,かべにみみあり
+10435,16385,がべいにきす
+10452,16385,かほうはねてまて
+10470,16385,かまをかける
+10496,16385,かまどのしたのはいまで
+10496,16386,かまどをおこす
+10511,16385,かみならぬみ
+10511,16386,かみにめされる
+10511,16387,かみはさいぶにやどる
+10511,16388,かみもほとけもない
+10552,16385,かみしもをぬぐ
+10567,16385,かみなりにうたれたよう
+10567,16386,かみなりをおとす
+10571,16385,かみのけをさかだてる
+10595,16385,かんでふくめる
+10616,16385,かめのこうよりとしのこう
+10627,16385,かもが{ねぎ・ねぎ}をしょってくる
+10652,16385,かやのそと(におかれる)
+10664,16385,かゆいところにてがとどく
+10681,16385,からにとじこもる
+10681,16386,からをやぶる
+10734,16385,からすのなかぬひはあっても
+10746,16385,からだがあく
+10746,16386,からだがいうことをきかない
+10746,16387,からだがおよぐ
+10746,16388,からだをうる
+10746,16389,からだをはる
+10746,16390,からだをゆるす
+10912,16385,かりてきたねこ
+10912,16386,かりるときのじぞうがお、かえすときの{えんま・えんま}がお
+10969,16385,かれきにはな
+10969,16386,かれきもやまの{にぎ・にぎ}わい
+11018,16385,かわいいこにはたびをさせよ
+11022,16385,かわいさあまってにくさひゃくばい
+11035,16385,かわいたぞうきんをしぼる
+11057,16385,かわだちはかわではてる
+11102,16385,かんをかさねる
+11104,16385,かんにさわる
+11108,16385,かんをおおってことさだまる
+11109,16385,かんをつうじる
+11110,16385,かん、はつをいれず
+11111,16385,かんきわまる
+11111,16386,かんにたえた
+11111,16387,かんにたえない
+11115,16385,かんをつくす
+11137,16385,ガンをつける
+11160,16385,かんおけにかたあしをつっこむ
+11163,16385,かんかをまじえる
+11211,16385,かんきをこうむる
+11303,16385,がんこうしはいにてっする
+11316,16385,かんこどりがなく
+11374,16385,かんしゃかんげきあめあられ
+11377,16385,かんしゃくをおこす
+11441,16385,がんしょくなし
+11441,16386,がんしょくをうしなう
+11504,16385,かんぜんするところがない
+11543,16385,かんたんあいてらす
+11543,16386,かんたんをくだく
+11562,16385,かんちゅうぼうあり
+11563,16385,がんちゅうにない
+11586,16385,がんていにのこる
+11634,16385,かんなんなんじをたまにす
+11638,16385,かんにんぶくろのおがきれる
+11677,16385,かんぱつをいれず
+11683,16385,かんばんがなく
+11683,16386,かんばんをおろす
+11705,16385,かんぷなきまでに
+11768,16385,かんむりをまげる
+11808,16385,かんらくきわまりてあいじょうおおし
+11845,16385,きからおちたさる
+11845,16386,きではなを{くく・くく}る
+11845,16387,きにたけをつぐ
+11845,16388,きに{よ・よ}りてうおをもとむ
+11845,16389,きをみてもりをみず
+11848,16385,きがあう
+11848,16386,きがある
+11848,16387,きがいい
+11848,16388,きがおおい
+11848,16389,きがおおきくなる
+11848,16390,きがおけない
+11848,16391,きがおもい
+11848,16392,きがかつ
+11848,16393,きがかるい
+11848,16394,きがききすぎてまがぬける
+11848,16395,きがきく
+11848,16396,きがきでない
+11848,16397,きがくさる
+11848,16398,きがくるう
+11848,16399,きがさす
+11848,16400,きがしずむ
+11848,16401,きがしれない
+11848,16402,きがすすまない
+11848,16403,きがすむ
+11848,16404,きがする
+11848,16405,きが{せ・せ}く
+11848,16406,きがたつ
+11848,16407,きがちいさい
+11848,16408,きがちがう
+11848,16409,きがちる
+11848,16410,きがつく
+11848,16411,きがつまる
+11848,16412,きがつよい
+11848,16413,きがとおくなる
+11848,16414,きがとがめる
+11848,16415,きがない
+11848,16416,きがながい
+11848,16417,きがぬける
+11848,16418,きがのらない
+11848,16419,きがはずむ
+11848,16420,きがはやい
+11848,16421,きがはる
+11848,16422,きがはれる
+11848,16423,きがひける
+11848,16424,きがふさぐ
+11848,16425,きがふれる
+11848,16426,きがまぎれる
+11848,16427,きがまわる
+11848,16428,きがみじかい
+11848,16429,きがむく
+11848,16430,きがめいる
+11848,16431,きがもめる
+11848,16432,きがやすまる
+11848,16433,きがゆるむ
+11848,16434,きがよわい
+11848,16435,きがわかい
+11848,16436,きでもつ
+11848,16437,きにいる
+11848,16438,きにかかる
+11848,16439,きにかける
+11848,16440,きにくわない
+11848,16441,きにさわる
+11848,16442,きにする
+11848,16443,きにそう
+11848,16444,きにそまない
+11848,16445,きにとめる
+11848,16446,きになる
+11848,16447,きにやむ
+11848,16448,きのおけない
+11848,16449,きのきいた
+11848,16450,きのない
+11848,16451,きはこころ
+11848,16452,きもそぞろ
+11848,16453,きをいれる
+11848,16454,きをうしなう
+11848,16455,きをおく
+11848,16456,きをおとす
+11848,16457,きをかねる
+11848,16458,きをきかせる
+11848,16459,きをくばる
+11848,16460,きをしずめる
+11848,16461,きをたしかにもつ
+11848,16462,きをちらす
+11848,16463,きをつかう
+11848,16464,きをつける
+11848,16465,きをとられる
+11848,16466,きをとりなおす
+11848,16467,きをぬく
+11848,16468,きを{の・の}まれる
+11848,16469,きをはく
+11848,16470,きをはらす
+11848,16471,きをはる
+11848,16472,きをひく
+11848,16473,きをまぎらす
+11848,16474,きをまわす
+11848,16475,きをもたせる
+11848,16476,きをもむ
+11848,16477,きをゆるす
+11848,16478,きをゆるめる
+11848,16479,きをよくする
+11848,16480,きをらくにする
+11848,16481,きをわるくする
+11849,16385,きを{てら・てら}う
+11853,16385,きをいつにする
+11856,16385,きがじゅくす
+11856,16386,きにじょうじる
+11856,16387,きをみるにびん
+11869,16385,ぎ、しんにいる
+11870,16385,ぎをみてせざるはゆうなきなり
+11876,16385,ギアがはいる
+11876,16386,ギアをあげる
+11885,16385,きいにふれる
+11888,16385,きいをえたい
+11943,16385,きえんをあげる
+11963,16385,きかおくべし
+12039,16385,ききせまる
+12097,16385,ききみみをたてる
+12135,16385,きいてあきれる
+12135,16386,きいてごくらくみてじごく
+12135,16387,ききしにまさる
+12135,16388,きくはいっときのはじ
+12135,16389,きくみみをもたない
+12135,16390,きくもなみだ、かたるもなみだ
+12164,16385,きぐらいがたかい
+12194,16385,きげんをとる
+12291,16385,きじもなかずばうたれまい
+12402,16385,きしんやのごとし
+12419,16385,きずをなめあう
+12436,16385,きずぐちにしおをすりこむ
+12449,16385,きせをかける
+12450,16385,きせいをあげる
+12474,16385,きせきにいる
+12495,16385,きせんをせいする
+12534,16385,きたひには
+12538,16385,きたいに{ひん・ひん}する
+12593,16385,きちがいにはもの
+12682,16385,きつねと{たぬき・たぬき}の〈ばかしあい/だましあい〉
+12682,16386,きつねにつままれる
+12685,16385,きっぷがいい
+12728,16385,きどうにのる
+12764,16385,きぬをさくよう
+12806,16385,きばをとぐ
+12806,16386,きばをぬかれる
+12806,16387,きばを{む・む}く
+12848,16385,きびすをかえす
+12848,16386,きびすをせっして
+12885,16385,きぶんがいい
+12885,16386,きぶんがわるい
+12908,16385,きぼねがおれる
+12914,16385,きまえがいい
+12927,16385,きまりがわるい
+12931,16385,きみがわるい
+12945,16385,きみゃくをつうじる
+12979,16385,きめんひとをおどろかす
+12980,16385,きもがいれる
+12980,16386,きもがすわる
+12980,16387,きもがふとい
+12980,16388,きもにめいじる
+12980,16389,きもをつぶす
+12980,16390,きもをひやす
+12987,16385,きもちをいれる
+13063,16385,ぎゃくてにとる
+13106,16385,きゃっこうをあびる
+13194,16385,きゅうをおって
+13264,16385,きゅうきんをなおす
+13280,16385,きゅうこうをあたためる
+13303,16385,きゅうしにいっしょうをえる
+13318,16385,ぎゅうじをとる
+13373,16385,きゅうじんのこうをいっきにかく
+13382,16385,きゅうすればつうじる
+13399,16385,きゅうそねこをかむ
+13431,16385,きゅうちょうふところにいる
+13566,16385,きょをつく
+13571,16385,ぎょいをえる
+13574,16385,きょうのきだおれ
+13577,16385,きょうをよむ
+13668,16385,ぎょうかんをよむ
+13683,16385,ぎょうぎがいい
+13693,16385,きょうきんをひらく
+13969,16385,きょうべんをとる
+14014,16385,きょうらんをきとうに{めぐ・めぐ}らす
+14040,16385,ぎょえいがこい
+14206,16385,きょせいおつ
+14280,16385,きよみずのぶたいからとびおりる
+14332,16385,きりひとはおちててんかのあきをしる
+14430,16385,きりょうをさげる
+14440,16385,きりんもおいてはどばにおとる
+14442,16385,きってもきれない
+14442,16386,きればあかいちがでる
+14442,16387,きればちのでるよう
+14495,16385,ぎろんをじょうげする
+14645,16385,きんしつあいわす
+14672,16385,きんじょう(に)はなをそえる
+14698,16385,きんせんにふれる
+14735,16385,きんてきをいとめる
+14830,16385,ぎんりんおどる
+14841,16385,くにする
+14841,16386,くにやむ
+14841,16387,くはらくのたね
+14843,16385,ぐにもつかない
+14903,16385,くうかくわれるか
+14903,16386,くうやくわず
+14921,16385,くうきをよむ
+14975,16385,ぐうのねもでない
+15040,16385,くぎをさす
+15091,16385,くさはえる
+15093,16385,くさいめしをくう
+15093,16386,くさいものにふたをする
+15102,16385,くさきもなびく
+15102,16386,くさきもねむる
+15117,16385,くさのねをわけて(も)さがす
+15121,16385,くさびをうちこむ
+15140,16385,くさっても{たい・たい}
+15146,16385,くしのはがかけるよう
+15146,16386,くしのはを{ひ・ひ}くよう
+15148,16385,くじをきる
+15177,16385,くじゅうを〈なめる/のむ〉
+15225,16385,くすりがきく
+15225,16386,くすりくそうばい
+15225,16387,くすりにしたくもない
+15233,16385,くせになる
+15249,16385,くそくらえ
+15249,16386,くそのやくにもたたない
+15259,16385,くだをまく
+15286,16385,くちがうまい
+15286,16386,くちがうるさい
+15286,16387,くちがおもい
+15286,16388,くちがかかる
+15286,16389,くちがかたい
+15286,16390,くちがかるい
+15286,16391,くちがくさっても
+15286,16392,くちがこえる
+15286,16393,くちがさけても
+15286,16394,くちがすぎる
+15286,16395,くちがすべる
+15286,16396,くちがへらない
+15286,16397,くちがほぐれる
+15286,16398,くちがまがる
+15286,16399,くちがまわる
+15286,16400,くちからさきにうまれる
+15286,16401,くちからしんぞうがとびでそう
+15286,16402,くちからひがでる
+15286,16403,くちがわるい
+15286,16404,くちにかける
+15286,16405,くちにする
+15286,16406,くちになる
+15286,16407,くちにのぼる
+15286,16408,くちにのりする
+15286,16409,くちにはいる
+15286,16410,くちのしたから
+15286,16411,くちはわざわいのかど
+15286,16412,くちほどに(も)ない
+15286,16413,くちもはっちょう、てもはっちょう
+15286,16414,くちをあけてまつ
+15286,16415,くちをあわせる
+15286,16416,くちをかんする
+15286,16417,くちをきく
+15286,16418,くちをきる
+15286,16419,くちをきわめて
+15286,16420,くちをすっぱくして
+15286,16421,くちをそろえて
+15286,16422,くちをだす
+15286,16423,くちをついてでる
+15286,16424,くちをつぐむ
+15286,16425,くちをつめる
+15286,16426,くちをとがらせる
+15286,16427,くちをとざす
+15286,16428,くちをにごす
+15286,16429,くちをぬぐって
+15286,16430,くちをぬらす
+15286,16431,くちをのりする
+15286,16432,くちをはさむ
+15286,16433,くちをひらく
+15286,16434,くちをあけば
+15286,16435,くちをふうじる
+15286,16436,くちをふさぐ
+15286,16437,くちをむすぶ
+15286,16438,くちをわる
+15295,16385,くちうらをあわせる
+15311,16385,くちぐちにいう
+15313,16385,くちぐるまにのせられる
+15345,16385,くちのはにのぼる
+15348,16385,くちばしがきいろい
+15348,16386,くちばしをいれる
+15350,16385,くちはっちょうてはっちょう
+15354,16385,くちびをきる
+15356,16385,くちびるをかむ
+15356,16386,くちびるをつきだす
+15356,16387,くちびるを〈ぬすむ/うばう〉
+15421,16385,ぐっとくる
+15451,16385,くにやぶれてさんが{あ・あ}り
+15476,16385,くはいを〈なめる/きっする〉
+15480,16385,くびがつながる
+15480,16386,くびがとぶ
+15480,16387,くびがまわらない
+15480,16388,くびにする
+15480,16389,くびになる
+15480,16390,くびになわをつける
+15480,16391,くびのかわいちまい
+15480,16392,くびをあらってまっていろ
+15480,16393,くびを{かし・かし}げる
+15480,16394,くびをきる
+15480,16395,くびをすげかえる
+15480,16396,くびをたてにふる
+15480,16397,くびをつっこむ
+15480,16398,くびをながくする
+15480,16399,くびをひねる
+15480,16400,くびをふる
+15480,16401,くびをよこにふる
+15499,16385,くびつりのあしをひっぱる
+15501,16385,くびねっこをおさえられる
+15604,16385,くもつくばかり
+15604,16386,くもを{かすみ・かすみ}と
+15604,16387,くもをつかむよう
+15605,16385,くものこをちらすよう
+15637,16385,くらがたつ
+15640,16385,くらいじんしんをきわめる
+15667,16385,くらしがたつ
+15675,16385,グラスをかたむける
+15712,16385,くらべものにならない
+15727,16385,くらやみからうしをひきだす
+15819,16385,くるひもくるひも
+15819,16386,くるものはこばまず
+15841,16385,くるしいいきのしたから
+15841,16386,くるしいときのかみだのみ
+15956,16385,グローブを〈あわせる/まじえる〉
+16045,16385,くわをいれる
+16074,16385,ぐんをぬく
+16107,16385,くんし(は)あやうきにちかよらず
+16107,16386,くんし(は)ひょうへんす
+16115,16385,くんしゅさんもんにいるをゆるさず
+16169,16385,ぐんばいをあげる
+16169,16386,ぐんばいをかえす
+16185,16385,ぐんもうぞうを〈{な・な}でる/ひょうする〉
+16186,16385,ぐんもんにくだる
+16205,16385,けのはえたよう
+16205,16386,けをふいて{きず・きず}をもとめる
+16208,16385,けにもはれにも
+16225,16385,けいたりがたくていたりがたし
+16239,16385,げいがこまかい
+16239,16386,げいがない
+16239,16387,げいはみをたすける
+16262,16385,けいがいをとどめない
+16263,16385,けいがいにせっする
+16305,16385,けいこうとなるもぎゅうごとなるなかれ
+16359,16385,げいじゅつはながくじんせいはみじかし
+16392,16385,けいしてとおざける
+16401,16385,けいせつのこうをつむ
+16416,16385,けいぞくはちからなり
+16592,16385,げきをとばす
+16655,16385,げきりんにふれる
+16702,16385,けじめをつける
+16723,16385,けすじほども
+16741,16385,けたがちがう
+16742,16385,げたをあずける
+16742,16386,げたをはかせる
+16742,16387,げたをはくまでわからない
+16763,16385,けちがつく
+16763,16386,けちをつける
+16775,16385,ケツのあながちいさい
+16775,16386,ケツをまくる
+16775,16387,ケツをもつ
+16775,16388,ケツをわる
+16776,16385,けつをとる
+16806,16385,けっきにはやる
+16931,16385,げっぷがでるほど
+16944,16385,けつまつをつける
+16944,16386,けつまつをつげる
+16960,16385,けつるいをしぼる
+17007,16385,けびょうをつかう
+17024,16385,けむにまく
+17031,16385,けむりになる
+17031,16386,けむりをたてる
+17048,16385,けりをつける
+17100,16385,げんをかまえる
+17100,16386,げんをさゆうにする
+17100,16387,げんを{ま・ま}たない
+17137,16385,けんえんもただならぬなか
+17149,16385,けんかをうる
+17149,16386,けんかをかう
+17196,16385,けんぎがかかる
+17253,16385,げんげんひをはく
+17259,16385,げんこをくらわす
+17260,16385,げんごにぜっする
+17278,16385,げんこつをみまう
+17333,16385,げんじをろうする
+17574,16385,けんばのろうをとる
+17705,16385,こは{かすがい・かすがい}
+17705,16386,こはさんがいのくび(っ){かせ・かせ}
+17705,16387,こゆえのやみ
+17705,16388,こをもってしるおやのおん
+17721,16385,ごをうつ
+17742,16385,こいにこいする
+17742,16386,こいはしあんのほか
+17742,16387,こいはもうもく
+17795,16385,こうなりなとげる
+17795,16386,こうをそうする
+17796,16385,こうをそうする
+17803,16385,こうかふこうか
+17806,16385,こうをきく
+17813,16385,こうをあらためる
+17840,16385,ごうにいりてはごうにしたがえ
+17841,16385,ごうをにやす
+17869,16385,こういんやのごとし
+17936,16385,こうかいさきにたたず
+17957,16385,こうかくあわをとばす
+18026,16385,ごうきぼくとつじんにちかし
+18101,16385,こうけつをしぼる
+18191,16385,こうざいあいなかばする
+18209,16385,こうさんなきものはこうしんなし
+18237,16385,こうじまおおし
+18286,16385,こうしゅところをかえる
+18366,16385,こうしんにみちをひらく
+18377,16385,こうじんをはいする
+18403,16385,こうせいおそるべし
+18525,16385,こうだんにたつ
+18604,16385,こうとししてそうくにらる
+18625,16385,こうどうをふむ
+18699,16385,こうばこをつくる
+18763,16385,こうふんをもらす
+18771,16385,こうべをたれる
+18771,16386,こうべをめぐらす
+18794,16385,こうぼうにもふでのあやまり
+18794,16386,こうぼうふでをえらばず
+18878,16385,こうらに{こけ・こけ}がはえる
+18878,16386,こうらをへる
+18925,16385,こうるいをしぼる
+18956,16385,こえがうらがえる
+18956,16386,こえがかかる
+18956,16387,こえなきこえ
+18956,16388,こえにならないこえ
+18956,16389,こえのしたから
+18956,16390,こえをおとす
+18956,16391,こえをかける
+18956,16392,こえをきく
+18956,16393,こえをだいにする
+18956,16394,こえをつまらせる
+18956,16395,こえを{とが・とが}らす
+18956,16396,こえを{の・の}む
+18956,16397,こえをはずませる
+19048,16385,ゴールをわる
+19129,16385,ごきげんななめならず
+19129,16386,ごきげんをうかがう
+19138,16385,こきみがいい
+19148,16385,こきょう〈へ/に〉にしきをかざる
+19163,16385,こくにすぎる
+19294,16385,こくびを{かし・かし}げる
+19298,16385,こくびゃくをつける
+19298,16386,こくびゃくをべんじない
+19365,16385,こけつにいらずんばこじをえず
+19379,16385,こけんにかかわる
+19385,16385,ここのこえをあげる
+19387,16385,ここであったがひゃくねんめ
+19387,16386,ここにきて
+19387,16387,ここをせんどと
+19396,16385,ここうをしのぐ
+19411,16385,こごしをかがめる
+19434,16385,こころがあらわれる
+19434,16386,こころがうごく
+19434,16387,こころがおれる
+19434,16388,こころがはずむ
+19434,16389,こころここにあらず
+19434,16390,こころにあながあく
+19434,16391,こころにかかる
+19434,16392,こころにかける
+19434,16393,こころにしまない
+19434,16394,こころにとめる
+19434,16395,こころにもない
+19434,16396,こころをあわせる
+19434,16397,こころをいたす
+19434,16398,こころをいためる
+19434,16399,こころをいれかえる
+19434,16400,こころをうごかす
+19434,16401,こころをうつ
+19434,16402,こころをうばわれる
+19434,16403,こころをおににする
+19434,16404,こころをくだく
+19434,16405,こころをくばる
+19434,16406,こころをこめる
+19434,16407,こころをゆるす
+19434,16408,こころをよせる
+19490,16385,こしがおもい
+19490,16386,こしがかるい
+19490,16387,こしがすわる
+19490,16388,こしがたかい
+19490,16389,こしがたたない
+19490,16390,こしがつよい
+19490,16391,こしがひくい
+19490,16392,こしがひける
+19490,16393,こしをあげる
+19490,16394,こしをいれる
+19490,16395,こしをおちつける
+19490,16396,こしをおる
+19490,16397,こしをすえる
+19490,16398,こしをぬかす
+19490,16399,こしをわる
+19500,16385,ごしにあまる
+19500,16386,ごしにはいる
+19585,16385,ごじゅうにしててんめいをしる
+19589,16385,こじゅうとはおにせんびき
+19650,16385,こしたことはない
+19769,16385,こだてにとる
+19771,16385,こだねをやどす
+19774,16385,ごたぶんにもれず
+19809,16385,こちんとくる
+19897,16385,こつにくあい{は・は}む
+19924,16385,こてがきく
+19924,16386,こてをかざす
+19955,16385,ことあるごとに
+19955,16386,ことあれかし
+19955,16387,ことここにいたる
+19955,16388,ことこころざしとたがう
+19955,16389,こととする
+19955,16390,ことなきをえる
+19955,16391,ことにあたる
+19955,16392,ことにふれて
+19955,16393,ことによると
+19955,16394,こともあろうに
+19955,16395,こともなし
+19955,16396,ことをおこす
+19955,16397,ことをかまえる
+19955,16398,ことをこのむ
+19955,16399,ことをすすめる
+19955,16400,ことをなす
+19955,16401,ことをはこぶ
+19955,16402,ことをわける
+20022,16385,ことばがすぎる
+20022,16386,ことばがない
+20022,16387,ことばにあまえる
+20022,16388,ことばにあまる
+20022,16389,ことばをうしなう
+20022,16390,ことばをかえす
+20022,16391,ことばをつくして
+20022,16392,ことばをにごす
+20028,16385,こどもができる
+20028,16386,こどもはかぜのこ
+20038,16385,こなをかける
+20080,16385,このおやにしてこのこあり
+20124,16385,こばかにする
+20136,16385,こばなをうごめかす
+20136,16386,こばなをふくらませる
+20141,16385,こばらがたつ
+20154,16385,こびをうる
+20158,16385,こひざを〈うつ/たたく〉
+20187,16385,こぶさにわける
+20221,16385,ごへいをかつぐ
+20257,16385,こまをすすめる
+20260,16385,ごまを{す・す}る
+20287,16385,こまたのきれあがった
+20306,16385,こまものやをひらく
+20313,16385,こまわりがきく
+20340,16385,こみみにはさむ
+20463,16385,ごらんにいれる
+20502,16385,こるいをまもる
+20511,16385,これあるかな
+20511,16386,これさいわい
+20511,16387,これでもか
+20511,16388,これよりさき
+20511,16389,これをもって
+20511,16390,これをようするに
+20576,16385,ころばぬさきの{つえ・つえ}
+20576,16386,ころんでもただではおきない
+20593,16385,こわきにかかえる
+20612,16385,こわもてにでる
+20615,16385,こんをつめる
+20890,16385,ざがしらける
+20890,16386,ざがみだれる
+20890,16387,ざをもつ
+20938,16385,さいはなげられた
+21023,16385,さいくはりゅうりゅうしあげをごろうじろ
+21041,16385,さいげつひとをまたず
+21080,16385,さいさんがとれる
+21180,16385,さいだいもらさず
+21249,16385,さいはいをふる
+21273,16385,さいふのくちをしめる
+21273,16386,さいふ(のそこ)をはたく
+21273,16387,さいふ(のひも)がかたい
+21273,16388,さいふのひもをゆるめる
+21368,16385,さおをさす
+21407,16385,さかずきをふくむ
+21413,16385,さかてにとる
+21453,16385,さきにたつ
+21453,16386,さきをあらそう
+21453,16387,さきをこす
+21456,16385,{さぎ・さぎ}を{からす・からす}といいくるめる
+21525,16385,さきんずればひとをせいす
+21528,16385,さくをろうする
+21558,16385,さくしさくにおぼれる
+21624,16385,さぐりをいれる
+21630,16385,さけにのまれる
+21630,16386,さけはひゃくやくのちょう
+21722,16385,さじをなげる
+21832,16385,さしつさされつ
+22007,16385,さつびらをきる
+22090,16385,さばをよむ
+22175,16385,さまになる
+22220,16385,さもあらばあれ
+22220,16386,さもありなん
+22230,16385,さやをはらう
+22317,16385,さるもきからおちる
+22319,16385,さるものはおわず
+22319,16386,さるものはひびにうとし
+22389,16385,さわらぬかみにたたりなし
+22395,16385,さんをみだす
+22413,16385,さんうきたらんとほっしてかぜろうにみつ
+22459,16385,ざんきにたえない
+22570,16385,さんしゃをさける
+22573,16385,さんじゃくさがってしのかげをふまず
+22578,16385,さんじゅうにしてたつ
+22578,16386,さんじゅうろっけいにげるにしかず
+22584,16385,さんしょはこつぶでも〈ぴりり/ひりり〉とからい
+22688,16385,さんちゅうれきじつなし
+22703,16385,さんどのめしより
+22725,16385,さんにんよればもんじゅのちえ
+22788,16385,さんべんまわってたばこにしょ
+22854,16385,しいっとうをげんずる
+22854,16386,しのてんきをとる
+22854,16387,しをたまう
+22858,16385,しをつうじる
+22881,16385,じでいく
+22882,16385,じになる
+22887,16385,じをひくくする
+22917,16385,しあんにあまる
+23105,16385,しおをする
+23105,16386,しおをまく
+23163,16385,しかをおうものはやまをみず
+23168,16385,しがにもかけない
+23293,16385,じかんをかせぐ
+23323,16385,じぎに〈ひとしい/るいする〉
+23327,16385,しきいがたかい
+23560,16385,じごくでほとけ
+23560,16386,じごくのかま(のふた)があく
+23560,16387,じごくのさたもかねしだい
+23686,16385,じじつはしょうせつよりもきなり
+23721,16385,しじゅうにしてまどわず
+23799,16385,じしんかみなりかじ{おやじ・おやじ}
+23810,16385,ししてのち{や・や}む
+23810,16386,しせるこうめいいけるちゅうたつをはしらしむ
+23856,16385,しせいてんにあり
+23856,16386,しせいめいあり
+23858,16385,しせいをただす
+23896,16385,しせんをあつめる
+23896,16386,しせんをあびる
+23946,16385,じそんのためにびでんをかわず
+23949,16385,したにもおかない
+23950,16385,したがこえる
+23950,16386,したがまわる
+23950,16387,したをだす
+23950,16388,したをならす
+23950,16389,したをまく
+23953,16385,じたともにゆるす
+23974,16385,じだいがつく
+24031,16385,したてにでる
+24041,16385,したのねもかわかぬうちに
+24080,16385,じだんだ(を)ふむ
+24120,16385,しちゅうにかつをもとめる
+24245,16385,じっしにあまる
+24245,16386,じっしのさすところ
+24364,16385,しっぽをだす
+24364,16386,しっぽをつかまえる
+24364,16387,しっぽをふる
+24364,16388,しっぽをまく
+24482,16385,しなをつくる
+24549,16385,しにばなをさかせる
+24551,16385,しにみずをとる
+24559,16385,しにんにくちなし
+24564,16385,しんではなみがさくものか
+24564,16386,しんでもしにきれない
+24575,16385,しのつく
+24577,16385,しのぎをけずる
+24597,16385,しばにむちうつ
+24606,16385,しばいをうつ
+24642,16385,じばらをきる
+24694,16385,しびれがきれる
+24716,16385,しぶかわの{む・む}けた
+24721,16385,しふくをこやす
+24746,16385,しふんのかにまよう
+24752,16385,(じぶんで)じぶんのくびをしめる
+24828,16385,しまつがわるい
+24828,16386,しまつにおえない
+24895,16385,しめいをせいする
+24913,16385,しめしがつかない
+24944,16385,しもをおく
+24989,16385,しゃにかまえる
+24994,16385,じゃのみちはへび
+24994,16386,じゃはすんにしてひとを{の・の}む
+25037,16385,しゃかにせっぽう
+25080,16385,しゃくにさわる
+25185,16385,しゃじくをながす
+25276,16385,シャッターをきる
+25284,16385,シャッポをぬぐ
+25445,16385,しゅにまじわればあかくなる
+25445,16386,しゅをいれる
+25484,16385,しゆうをけっする
+25488,16385,じゅうよくごうをせいす
+25491,16385,じゅうかつだい
+25530,16385,しゅうかてきせず
+25677,16385,じゅうじをきる
+25677,16386,じゅうじかをせおう
+25827,16385,じゅうてんをおく
+25882,16385,しゅうはをおくる
+25886,16385,じゅうばこのすみを(⦅ようじ\ようじ⦆で)〈つつく/ほじくる〉
+25900,16385,しゅうびをひらく
+25935,16385,じゅうまんおくどへたびだつ
+25946,16385,じゅうもくのみるところ
+26153,16385,しゅごがおおきい
+26259,16385,しゅそりょうたんをじす
+26283,16385,しゅちゅうにおさめる
+26283,16386,しゅちゅうにきす
+26432,16385,しゅはいをかたむける
+26442,16385,しゅびはじょうじょう
+26447,16385,しゅひつをいれる
+26482,16385,じゅみょうがちぢまる
+26628,16385,しゅんじゅうにとむ
+26635,16385,しゅんしょういっこくあたいせんきん
+26685,16385,じゅんぷうにほをあげる
+26698,16385,しゅんみんあかつきをおぼえず
+26744,16385,しょいなげをくわせる
+26757,16385,しょうをいんとするものはまずうまをいよ
+26764,16385,しょうにあたる
+26791,16385,じょうがうつる
+26791,16386,じょうにもろい
+26791,16387,じょうをつうじる
+26811,16385,しょういをすててだいどうにつく
+26919,16385,しょうぎをさす
+26924,16385,じょうきをいっする
+27093,16385,しょうじきの{こうべ・こうべ}にかみやどる
+27176,16385,しょうじんかんきょしてふぜんをなす
+27189,16385,じょうずのてからみずがも(れ)る
+27247,16385,しょうそくをたつ
+27274,16385,じょうだんではない
+27274,16386,じょうだんをとばす
+27283,16385,しょうちゅうにおさめる
+27370,16385,しょうねをすえる
+27373,16385,しょうねんおいやすくがくなりがたし
+27384,16385,しょうのむしをころしてだいのむしをたすける
+27392,16385,しょうばいはみちによってかしこし
+27425,16385,しょうぶはときのうん
+27425,16386,しょうぶごとは{げた・げた}をはくまで
+27500,16385,しょうめんきって
+27500,16386,しょうめんをきる
+27556,16385,しょうりゃくにしたがう
+27674,16385,しょくがおちる
+27674,16386,しょくがすすむ
+27674,16387,しょくがほそい
+27674,16388,しょくがほそる
+27702,16385,しょくしがうごく
+27704,16385,しょくじがすすむ
+27707,16385,しょくしゅをのばす
+27726,16385,しょくぜんにのぼせる
+27851,16385,じょしとしょうじんはやしないがたし
+27897,16385,しょしんわするべからず
+27951,16385,しょたいをたたむ
+28126,16385,しらをきる
+28165,16385,しらぬがほとけ
+28165,16386,しらぬぞんぜぬ
+28165,16387,しらぬかおのはんべえ
+28169,16385,しらはのやがたつ
+28178,16385,しらべがつく
+28189,16385,しりがあおい
+28189,16386,しりがおもい
+28189,16387,しりがかるい
+28189,16388,しりがこそばゆい
+28189,16389,しりがながい
+28189,16390,しりがわれる
+28189,16391,しりにひがつく
+28189,16392,しりにほをかける
+28189,16393,しりのけをぬく
+28189,16394,しり(のした)にしく
+28189,16395,しりをあげる
+28189,16396,しりをすえる
+28189,16397,しりをたたく
+28189,16398,しりをぬぐう
+28189,16399,しりをふる
+28189,16400,しりをまくる
+28189,16401,しりをもちこむ
+28200,16385,しりうまにのる
+28252,16385,しりょくをつくす
+28260,16385,しったことではない
+28260,16386,しってかしらでか
+28260,16387,しってのとおり
+28260,16388,しらしむべからず、よらしむべし
+28260,16389,しるひとぞしる
+28260,16390,しるやしらずや
+28306,16385,しろいはをみせる
+28306,16386,しろいめでみる
+28381,16385,じわじわくる
+28400,16385,しんなくばたたず
+28400,16386,しんをとう
+28402,16385,しんにせまる
+28407,16385,しんはなきよりたにんはくいより
+28503,16385,じんかんいたるところせいざんあり
+28515,16385,しんき{ま・ま}きなおし
+28524,16385,じんぎをきる
+28524,16386,じんぎをとおす
+28569,16385,しんけいを{とが・とが}らせる
+28573,16385,しんけつをそそぐ
+28597,16385,じんごにおちない
+28614,16385,じんこうにかいしゃする
+28614,16386,じんこうにのぼる
+28616,16385,じんこうも{た・た}かず{へ・へ}もひらず
+28627,16385,しんこんをかたむける
+28643,16385,しんさんをなめる
+28660,16385,じんじをつくしててんめいをまつ
+28717,16385,しんしょうをはたく
+28777,16385,じんせいいきにかんず
+28813,16385,しんそうにそだつ
+28818,16385,しんぞうがつよい
+28818,16386,しんぞうがとびでそう
+28818,16387,しんぞうにけがはえている
+28850,16385,しんたんをさむからしめる
+28914,16385,しんとう(を)めっきゃくすればひもまたすずし
+28944,16385,しんにゅうをかける
+29018,16385,しんぺんをきれいにする
+29056,16385,しんめいをとして
+29056,16386,しんめいをなげうって
+29068,16385,じんもんにくだる
+29130,16385,ずにあたる
+29130,16386,ずにのる
+29131,16385,ずがたかい
+29142,16385,すいもあまいも{か・か}みわけた
+29248,16385,すいせいのごとく
+29280,16385,スイッチがはいる
+29320,16385,すいほうにきす
+29396,16385,スープのさめないきょり
+29452,16385,すがたをけす
+29482,16385,すきをこらす
+29484,16385,すきこそもののじょうずなれ
+29544,16385,すぎたるは{なお・なお}およばざるがごとし
+29595,16385,スクラムをくむ
+29664,16385,すごみをきかせる
+29680,16385,すじがいい
+29680,16386,すじがわるい
+29714,16385,すずをころがすようなこえ
+29714,16386,すずをつける
+29714,16387,すずをはったようなめ
+29740,16385,すずめひゃくまでおどりわすれず
+29849,16385,すっぱいものがたべたい
+29902,16385,すてたものではない
+29902,16386,すててかえりみない
+29902,16387,すてるかみあればひろうかみあり
+29972,16385,すなをかむよう
+30006,16385,すねにきずもつ
+30123,16385,すべったのころんだのと
+30136,16385,ずぼしをさされる
+30155,16385,すまじきものはみやづかえ
+30164,16385,すみにおけない
+30201,16385,すめばみやこ
+30211,16385,すもうにかってしょうぶにまける
+30211,16386,すもうにならない
+30388,16385,すんてつひとをさす
+30406,16385,せにはらはかえられぬ
+30406,16386,せをむける
+30415,16385,せいをうける
+30423,16385,せいがでる
+30423,16386,せいをだす
+30618,16385,せいこくを〈いる/える〉
+30640,16385,せいさつよだつのけんをにぎる
+30736,16385,せいしんいっとうなにごとかならざらん
+30814,16385,せいだくあわせ{の・の}む
+30981,16385,せいめいをとす
+31037,16385,せいるい{とも・とも}にくだる
+31093,16385,せきのあたたまるいとまがない
+31093,16386,せきをおなじゅうせず
+31093,16387,せきをけがす
+31094,16385,せきをきったよう
+31097,16385,せきをいれる
+31177,16385,せきひんあらうがごとし
+31232,16385,セコンドをきざむ
+31251,16385,せすじがさむくなる
+31251,16386,せすじがのびる
+31382,16385,せっしょくをたもつ
+31510,16385,せなかがみえる
+31510,16386,せなかをおう
+31510,16387,せなかをおす
+31510,16388,せなかをみてそだつ
+31537,16385,ぜひにおよばぬ
+31537,16386,ぜひもない
+31647,16385,ゼロがひとつおおい
+31647,16386,ゼロから(さい)〈しゅっぱつ/スタート〉する
+31659,16385,せわがやける
+31659,16386,せわにくだける
+31659,16387,せわになる
+31659,16388,せわはない
+31659,16389,せわをやく
+31669,16385,せんをこす
+31674,16385,せんがほそい
+31675,16385,せんにもれる
+31675,16386,せんをことにする
+31676,16385,せんにきる
+31692,16385,ぜんをおって
+31952,16385,ぜんしゃのてつをふむ
+31952,16386,ぜんしゃのふくてつ、こうしゃのいましめ
+32024,16385,ぜんしんぜんれいをうちこむ
+32114,16385,せんたんをきる
+32115,16385,せんたんをひらく
+32116,16385,せんだんはふたばよりかんばし
+32158,16385,ぜんてつをふむ
+32179,16385,せんとうをきる
+32183,16385,せんどうおおくしてふねやまにのぼる
+32321,16385,せんまんにんといえどもわれいかん
+32345,16385,ぜんもんのとら、こうもんのおおかみ
+32369,16385,せんりのつつみも{あり・あり}のあなからくずれる
+32369,16386,せんりのみちもいっぽよりはじまる
+32431,16385,そうとする
+32446,16385,そうはとんやがおろさない
+32502,16385,そうがにかかる
+32508,16385,そうかいへんじてそうでんとなる
+32617,16385,そうごうをくずす
+32794,16385,そうだんにのる
+32864,16385,そうはくをなめる
+33016,16385,ゾーンにはいる
+33080,16385,ぞくじにいりやすい
+33121,16385,そくせきを〈いんする/しるす〉
+33203,16385,そこがあさい
+33203,16386,そこがしれない
+33203,16387,そこがしれる
+33203,16388,そこがぬける
+33203,16389,そこがわれる
+33203,16390,そこをいれる
+33203,16391,そこをうつ
+33203,16392,そこをつく
+33203,16393,そこをつける
+33203,16394,そこをはらう
+33203,16395,そこをわる
+33204,16385,そこへいくと
+33204,16386,そこへもってきて
+33209,16385,そこいじがわるい
+33280,16385,そじょうにのせる
+33386,16385,ぞっとしない
+33393,16385,そっぽをむく
+33395,16385,そでにすがる
+33395,16386,そでにする
+33395,16387,そでふりあうもたしょうのえん
+33395,16388,そでをしぼる
+33395,16389,そでをとおす
+33395,16390,そでをひく
+33438,16385,そとぼりをうめる
+33463,16385,そのときはそのとき
+33480,16385,そのてはくわなのやきはまぐり
+33612,16385,そりがあわない
+33612,16386,そりをうたせる
+33636,16385,それかあらぬか
+33636,16386,それみたことか
+33671,16385,それはそうだ
+33671,16386,それはないでしょう
+33683,16385,そろいもそろって
+33690,16385,そろばんをはじく
+33737,16385,そんしてとくとれ
+33756,16385,そんなこんな
+33782,16385,たなし
+33785,16385,たとする
+33824,16385,たいをしずめる
+33824,16386,たいをひらく
+33837,16385,だいなりしょうなり
+33837,16386,だいのむしをいかしてしょうのむしをころす
+33837,16387,だいはしょうをかねる
+33837,16388,だいをなす
+33865,16385,だいいっせいをあげる
+33868,16385,だいいっぽをふみだす
+33919,16385,たいかくにれっする
+33954,16385,たいぎしんをめっす
+33971,16385,たいぎょをいっする
+34027,16385,たいこばんをおす
+34048,16385,だいこういでずんば
+34073,16385,たいざんめいどうして{ねずみ・ねずみ}いっぴき
+34091,16385,だいじにいたる
+34091,16386,だいじのまえのしょうじ
+34091,16387,だいじをとる
+34183,16385,だいじんかぜをふかせる
+34469,16385,たいよくはむよくににたり
+34537,16385,タオルをなげる
+34539,16385,たおれてのち{や・や}む
+34542,16385,たかがしれている
+34542,16386,たかのしれた
+34542,16387,たかをくくる
+34543,16385,たかはうえてもほをつまず
+34544,16385,たががゆるむ
+34544,16386,たがをしめる
+34764,16385,たけをわったよう
+34920,16385,たしてにでわる
+34940,16385,たぜいにぶぜい
+34954,16385,たたますますべんず
+34955,16385,ただの{ねずみ・ねずみ}ではない
+34955,16386,ただよりたかいものはない
+34957,16385,だだをこねる
+34973,16385,たたけばほこりがでる
+34997,16385,たたみのうえでしぬ
+35004,16385,たたらをふむ
+35078,16385,たちばがない
+35111,16385,たつとりあとをにごさず
+35111,16386,たてばしゃくやくすわればぼたん
+35202,16385,たづなをしめる
+35229,16385,たてにとる
+35229,16386,たてをつく
+35231,16385,たてからみてもよこからみても
+35231,16386,たてのものをよこにもしない
+35234,16385,たでくうむしもすきずき
+35241,16385,たていたにみず
+35338,16385,たなからぼたもち
+35338,16386,たなにあげる
+35344,16385,たなごころをさすよう
+35371,16385,たにんのせんきをずつうにやむ
+35371,16386,たにんのふこうはみつのあじ
+35374,16385,たねがわれる
+35374,16386,たねをつける
+35374,16387,たねをやどす
+35407,16385,たばになってかかる
+35424,16385,たびからたび
+35424,16386,たびのはじはかきすて
+35424,16387,たびはみちづれよはなさけ
+35514,16385,たまに{きず・きず}
+35514,16386,たまみがかざればひかりなし
+35514,16387,たまをいだいてつみあり
+35514,16388,たまをころがすよう
+35515,16385,たまがつまる
+35515,16386,たまがはしる
+35515,16387,たまをなげる
+35537,16385,たまごにめはな
+35541,16385,たましいをいれかえる
+35541,16386,たましいをてんがいへとばす
+35543,16385,だまされたとおもって
+35581,16385,(たみは)よらしむべし、しらしむべからず
+35594,16385,ためにする
+35597,16385,だめでもともと
+35597,16386,だめをおす
+35597,16387,だめをだす
+35628,16385,たもとをしぼる
+35628,16386,たもとをつらねる
+35628,16387,たもとをわかつ
+35717,16385,たれあって
+35720,16385,だれあって
+35720,16386,だれいうとなく
+35720,16387,だれしらぬものがない
+35720,16388,だれであれ
+35720,16389,だれのめにも
+35720,16390,だれ{はばか・はばか}らず
+35758,16385,たわらをわる
+35765,16385,たんをはっする
+35798,16385,たんかをきる
+35826,16385,たんきはそんき
+35894,16385,だんしちゅうぼうにいらず
+35905,16385,だんじておこなえばきしんもこれをさく
+35924,16385,だんじょしちさいにしてせきをおなじゅうせず
+36015,16385,たんちょにつく
+36155,16385,ちにあしをつける
+36155,16386,ちにおちる
+36155,16387,ちをはらう
+36156,16385,ちがかよう
+36156,16386,ちがさわぐ
+36156,16387,ちがのぼる
+36156,16388,ちでちをあらう
+36156,16389,ちとあせのけっしょう
+36156,16390,ちとなりにくとなる
+36156,16391,ちにうえる
+36156,16392,ちのあせをながす
+36156,16393,ちのあめがふる
+36156,16394,ちのうみになる
+36156,16395,ちのでる(よう)
+36156,16396,ちのなみだをながす
+36156,16397,ちのにじむ(よう)
+36156,16398,ちはみずよりもこし
+36156,16399,ちもなみだもない
+36156,16400,ちわきにくおどる
+36156,16401,ちをひく
+36156,16402,ちをみる
+36156,16403,ちをわける
+36158,16385,ちにいてらんをわすれず
+36199,16385,ちえがまわる
+36199,16386,ちえをつける
+36214,16385,チェックをいれる
+36229,16385,ちかにもぐる
+36269,16385,ちからになる
+36269,16386,ちからをいれる
+36269,16387,ちからをおとす
+36269,16388,ちからをかす
+36269,16389,ちからをかりる
+36269,16390,ちからをこめる
+36273,16385,ちきをえる
+36469,16385,ちっとやそっと
+36490,16385,ちにくをわけあう
+36499,16385,ちのけがおおい
+36545,16385,ちまつりにあげる
+36552,16385,ちみちをあげる
+36564,16385,ちゃにする
+36708,16385,ちゃばらもいっとき
+36768,16385,ちゅうにうく
+36834,16385,ちゅうげんにしかをおう
+36836,16385,ちゅうげんみみにさからう
+36883,16385,ちゅうしんにくんにつかえず
+36979,16385,ちゅうもんをつける
+36980,16385,ちゅうやをわかたず
+37011,16385,ちょにつく
+37012,16385,ちよにやちよに
+37026,16385,ちょうよはなよ
+37124,16385,ちょうしがいい
+37124,16386,ちょうしにのる
+37124,16387,ちょうしのなみにのる
+37124,16388,ちょうしをあわせる
+37124,16389,ちょうしをとる
+37167,16385,ちょうずをつかう
+37199,16385,ちょうだをいっする
+37220,16385,ちょうちんにつりがね
+37303,16385,ちょうやのゆめをさます
+37452,16385,ちょっとやそっと
+37497,16385,ちりもつもればやまとなる
+37497,16386,ちりをきる
+37541,16385,ちんとする
+37648,16385,ちんもくはきん
+37648,16386,ちんもくをまもる
+37648,16387,ちんもくをやぶる
+37700,16385,ついずいをゆるさない
+37867,16385,つえともはしらともたのむ
+37867,16386,つえをひく
+37910,16385,つきがみちる
+37910,16386,つきとすっぽん
+37910,16387,つきにむらくも、はなにかぜ
+37910,16388,つきみちて
+37917,16385,つぎからつぎへ
+38015,16385,つきよにかまをぬかれる
+38015,16386,つきよに{ちょうちん・ちょうちん}
+38062,16385,つけがまわってくる
+38062,16386,つけをまわす
+38156,16385,つちいっしょうかねいっしょう
+38156,16386,つちがつく
+38156,16387,つちにかえる
+38156,16388,つちにしたしむ
+38156,16389,つちをふむ
+38261,16385,つなをはる
+38271,16385,つなみてんでんこ
+38273,16385,つねにない
+38280,16385,つのをためてうしをころす
+38280,16386,つのをはやす
+38290,16385,つばをつける
+38303,16385,つぶがそろっている
+38307,16385,つぶしがきく
+38326,16385,つぼにはまる
+38366,16385,つみがない
+38366,16386,つみをきせる
+38366,16387,つみをきる
+38398,16385,つむじをまげる
+38402,16385,つめにひをともす
+38402,16386,つめの{あか・あか}ほど
+38402,16387,つめの{あか・あか}をせんじてのむ
+38402,16388,つめをとぐ
+38402,16389,つめをのばす
+38405,16385,つめあとをのこす
+38418,16385,つめばらをきらせる
+38478,16385,つらのかわがあつい
+38478,16386,つらのかわがせんまいばりだ
+38532,16385,つったさかなにえさを〈やら/あげ〉ない
+38589,16385,てがあがる
+38589,16386,てがうしろにまわる
+38589,16387,てがかかる
+38589,16388,てがこむ
+38589,16389,てがすく
+38589,16390,てがつく
+38589,16391,てがつけられない
+38589,16392,てがでない
+38589,16393,てがでる
+38589,16394,てがとどかない
+38589,16395,てがとどく
+38589,16396,てがない
+38589,16397,てがながい
+38589,16398,てがのびる
+38589,16399,てがはいる
+38589,16400,てがはなせない
+38589,16401,てがはなれる
+38589,16402,てがはやい
+38589,16403,てがまわる
+38589,16404,てにあせ(を)にぎる
+38589,16405,てにあまる
+38589,16406,てにいった
+38589,16407,てにいれる
+38589,16408,てにおえない
+38589,16409,てにおちる
+38589,16410,てにかける
+38589,16411,てにしょくをつける
+38589,16412,てにする
+38589,16413,てにつかない
+38589,16414,てにてをとって
+38589,16415,てにとる
+38589,16416,てにとるよう
+38589,16417,てにのる
+38589,16418,てのきれるよう
+38589,16419,てのほどこしようがない
+38589,16420,てのまいあしのふむところをしらず
+38589,16421,てもあしもでない
+38589,16422,てをあげる
+38589,16423,てをあげろ
+38589,16424,てをあわせる
+38589,16425,てをいれる
+38589,16426,てをうごかす
+38589,16427,てをうつ
+38589,16428,てをかえしなをかえ
+38589,16429,てをかける
+38589,16430,てをかす
+38589,16431,てをかりる
+38589,16432,てをきる
+38589,16433,てをくだす
+38589,16434,てをくむ
+38589,16435,てをくわえる
+38589,16436,てをこまねく
+38589,16437,てをしめる
+38589,16438,てをすかす
+38589,16439,てをそめる
+38589,16440,てをだす
+38589,16441,てをたずさえる
+38589,16442,てを{つか・つか}ねる
+38589,16443,てをつくす
+38589,16444,てをつける
+38589,16445,てをとおす
+38589,16446,てをとる
+38589,16447,てをにぎる
+38589,16448,てをぬく
+38589,16449,てをのばす
+38589,16450,てをひく
+38589,16451,てをひろげる
+38589,16452,てをほどこす
+38589,16453,てをまわす
+38589,16454,てをむすぶ
+38589,16455,てをやく
+38589,16456,てをやすめる
+38589,16457,てをゆるめる
+38589,16458,てをよごす
+38589,16459,てをわかつ
+38589,16460,てをわずらわす
+38599,16385,てあかのついた
+38776,16385,ていしゅのすきなあか{えぼし・えぼし}
+38776,16386,ていしゅをしりにしく
+38981,16385,テープをきる
+38982,16385,テーブルにのせる
+39021,16385,てかせあしかせ
+39026,16385,てがたなをきる
+39040,16385,てきにしおをおくる
+39040,16386,てきにまわす
+39040,16387,てきはほんのうじにあり
+39040,16388,てきもさるもの
+39155,16385,てぐすね(を)ひく
+39156,16385,てぐせがわるい
+39179,16385,てこでもうごかない
+39186,16385,てごころをくわえる
+39226,16385,てしおにかける
+39293,16385,てだまにとる
+39300,16385,てつはあついうちにうて
+39301,16385,てつをふむ
+39439,16385,てなべさげても
+39459,16385,てのうらをかえすよう
+39462,16385,てのひら(のうえ)でおどる
+39462,16386,てのひらをかえすよう
+39494,16385,ではなをくじく
+39496,16385,でばなをくじく
+39526,16385,てぶくろをなげる
+39670,16385,でる{くい・くい}はうたれる
+39670,16386,でるところへでる
+39670,16387,でるまくではない
+39711,16385,てんからふったかちからわいたか
+39711,16386,てんたかくうまこゆ
+39711,16387,てんにつばする
+39711,16388,てんににじつなくくにににおうなし
+39711,16389,てんにもちにも
+39711,16390,てんにものぼるここち
+39711,16391,てんのなせる
+39711,16392,てんはにぶつをあたえず
+39711,16393,てんはみずからたすくるものをたすく
+39711,16394,てんをあおぐ
+39711,16395,てんをまする
+39736,16385,てんかをとる
+39794,16385,てんぐになる
+39823,16385,てんさいはわすれたころにやってくる
+39855,16385,てんじゅをまっとうする
+39865,16385,てんじょうてんげゆいがどくそん
+39866,16385,てんじょうをうつ
+39888,16385,てんすうをかせぐ
+39898,16385,てんせきこけむさず
+39951,16385,てんてきいしを{うが・うが}つ
+40001,16385,てんばくうをゆく
+40022,16385,てんびんにかける
+40047,16385,てんぼうがない
+40065,16385,てんもうかいかいそにしてもらさず
+40104,16385,どがすぎる
+40104,16386,どをうしなう
+40104,16387,どをくわえる
+40104,16388,どをこす
+40128,16385,といえばうそになる
+40145,16385,トイレがちかい
+40150,16385,とうをえる
+40159,16385,とうがたつ
+40161,16385,とうにおちずかたるにおちる
+40161,16386,とうはいっときのはじ
+40177,16385,どうにいる
+40181,16385,どうということはない
+40224,16385,とうかしたしむべきこう
+40234,16385,どうかとおもう
+40261,16385,とうかんに(ふ)する
+40447,16385,どうじつのだんで(は)ない
+40585,16385,とうだいもとくらし
+40673,16385,どうにもしようがない
+40673,16386,どうにもならない
+40683,16385,どうのこうの
+40726,16385,どうびょうあいあわれむ
+40728,16385,とうふにかすがい
+40822,16385,とうりものいわざれども、したおのずからみちをなす
+40877,16385,とおくのしんせきよりちかくのたにん
+40916,16385,とおめがきく
+40965,16385,ときはかねなり
+40965,16386,ときをうつさず
+40965,16387,ときをわかたず
+40986,16385,ときしもあれ
+41016,16385,どぎもをぬく
+41040,16385,とくとする
+41040,16386,とくはこならず
+41050,16385,どくにもくすりにもならない
+41050,16386,どくをあおぐ
+41050,16387,どくをくらわばさらまで
+41050,16388,どくをもってどくをせいする
+41110,16385,どくしょひゃっぺん〈ぎ/い〉おのずからつうず
+41238,16385,とぐろをまく
+41259,16385,とこにつく
+41259,16386,とこに〈ふす/ふせる〉
+41259,16387,とこをとる
+41261,16385,どこにめをつけているのか
+41261,16386,どこのうまのほねかわからない
+41261,16387,どこふくかぜ
+41261,16388,どこをおせば
+41261,16389,どこをき(りと)っても
+41261,16390,どこを{たた・たた}いても
+41261,16391,どこを{たた・たた}けばそんなねがでるのか
+41298,16385,ところかまわず
+41298,16386,ところかわればしなかわる
+41298,16387,ところきらわず
+41298,16388,ところをえる
+41309,16385,とさかにくる
+41320,16385,としがあける
+41320,16386,としがいく
+41320,16387,としにはかてない
+41320,16388,としはあらそえない
+41320,16389,としをおって
+41320,16390,としをこす
+41320,16391,としをとる
+41326,16385,どじをふむ
+41367,16385,としはもいかぬ
+41373,16385,としまわりがわるい
+41380,16385,としゅなおじせず
+41384,16385,としょにひかれるひつじのよう
+41442,16385,どそくでふみこむ
+41477,16385,どちらにころんでも
+41502,16385,どっきにあてられる
+41502,16386,どっきをぬかれる
+41528,16385,とっこにとる
+41551,16385,どっちへころんでも
+41551,16386,どっちもどっち
+41597,16385,どつぼにはまる
+41621,16385,ととうをくむ
+41640,16385,とどまるところをしらない
+41641,16385,とどめをさす
+41660,16385,となりのしばふは〈あおい/うつくしい〉
+41660,16386,となりのふこうはかものあじ
+41676,16385,どのくち〈が/で〉いうのか
+41676,16386,どのつらさげて
+41778,16385,どひょうにつまる
+41778,16386,どひょうをわる
+41782,16385,とぶとりをおとすいきおい
+41782,16386,とぶようにうれる
+41782,16387,とんでひにいるなつのむし
+41784,16385,どぶにすてる
+41798,16385,とほうにくれる
+41839,16385,とむねをつかれる
+41888,16385,ともづなをとく
+41893,16385,ともにする
+41893,16386,ともにてんを{いただ・いただ}かず
+41906,16385,とやにつく
+41924,16385,とらのいをかる{きつね・きつね}
+41924,16386,とらのおをふむ
+41924,16387,とらはししてかわをのこす
+41924,16388,とらをのにはなつ
+41938,16385,ドライブがかかる
+42013,16385,とりなきさとの{こうもり・こうもり}
+42109,16385,とりつくしまもない
+42125,16385,とりとめ(が)ない
+42146,16385,とりはだがたつ
+42197,16385,とるにたりない
+42197,16386,とるものもとりあえず
+42198,16385,とらぬ{たぬき・たぬき}のかわざんよう
+42272,16385,どろのようにねむる
+42272,16386,どろをかぶる
+42272,16387,どろをぬる
+42272,16388,どろをはく
+42308,16385,どろぼうにおいせん
+42308,16386,どろぼうにもさんぶのり
+42308,16387,どろぼうをとらえてみればわがこなり
+42308,16388,どろぼうをみてなわをなう
+42319,16385,どろんをきめる
+42325,16385,とわのねむりにつく
+42412,16385,とんびが{たか・たか}をうむ
+42412,16386,とんびにあぶらあげをさらわれる
+42422,16385,とんぼをきる
+42431,16385,なに(し)おう
+42431,16386,なにはじない
+42431,16387,な(の)ある
+42431,16388,なのとおった
+42431,16389,なはたいをあらわす
+42431,16390,なもない
+42431,16391,なをあげる
+42431,16392,なをうる
+42431,16393,なをおしむ
+42431,16394,なをかりる
+42431,16395,なをすててじつをとる
+42431,16396,なをつらねる
+42431,16397,なをなす
+42431,16398,なをのこす
+42431,16399,なをはずかしめる
+42431,16400,なを{は・は}せる
+42444,16385,ないそではふれぬ
+42444,16386,ないでもない
+42444,16387,ないものはない
+42444,16388,なかったことにする
+42444,16389,なくてななくせ
+42624,16385,ながいねむりにつく
+42625,16385,ながいめでみる
+42625,16386,ながいものにはまかれろ
+42625,16387,ながい{わらじ・わらじ}をはく
+42710,16385,ながのいとまをつげる
+42755,16385,ながれに{さお・さお}さす
+42755,16386,ながれを{く・く}む
+42761,16385,なきをいれる
+42761,16386,なきをみる
+42764,16385,なきにひとしい
+42764,16386,なきをえない
+42787,16385,なきだしそうな
+42790,16385,なき(っ)つらにはち
+42802,16385,なきべそをかく
+42808,16385,なきものにする
+42817,16385,ないてばしょくをきる
+42817,16386,ないてもわらっても
+42817,16387,なくことじとうにはかてぬ
+42817,16388,なくこもだまる
+42817,16389,なくになけない
+42840,16385,なくんばあるべからず
+42885,16385,なさけが{あだ・あだ}となる
+42885,16386,なさけはひとのためならず
+42912,16385,なせばなる
+42940,16385,なたをふるう
+42952,16385,なだれをうつ
+42960,16385,なつとなる
+43029,16385,ななえのひざをやえにおって
+43047,16385,なにくわぬかお
+43047,16386,なににもまして
+43047,16387,なにはさておき
+43047,16388,なには(とも)あれ
+43047,16389,なにはなくとも
+43047,16390,なにふじゆうなく
+43047,16391,なにをおっしゃるうさぎさん
+43050,16385,なにがかなしくて
+43053,16385,なにからなにまで
+43063,16385,なにするものぞ
+43084,16385,なにわの{あし・あし}はいせの{はまおぎ・はまおぎ}
+43085,16385,なにを{お・お}いても
+43085,16386,なにをかいわんや
+43085,16387,なにをかくそう
+43097,16385,なのりをあげる
+43116,16385,なべをふる
+43141,16385,なまえをうる
+43141,16386,なまえをかりる
+43148,16385,なまきをさく
+43152,16385,なまくびをきる
+43155,16385,なまけもののせっくばたらき
+43180,16385,なまつばをのみこむ
+43196,16385,なまびょうほうはおおけがのもと
+43212,16385,なまよいほんしょう{たが・たが}わず
+43221,16385,なみしずか
+43221,16386,なみたかし
+43221,16387,なみにのる
+43237,16385,なみだにくれる
+43237,16386,なみだにしずむ
+43237,16387,なみだにむせぶ
+43237,16388,なみだをおさえる
+43237,16389,なみだをおぼえる
+43237,16390,なみだをきんじえない
+43237,16391,なみだをさそう
+43237,16392,なみだをそそぐ
+43237,16393,なみだを{の・の}む
+43237,16394,なみだをふるって
+43237,16395,なみだをもよおす
+43283,16385,ならいせいとなる
+43286,16385,ならうよりなれよ
+43305,16385,ならぬかんにんするがかんにん
+43318,16385,なりをひそめる
+43380,16385,なわをうつ
+43426,16385,なんくせをつける
+43446,16385,なんじじしんをしれ
+43466,16385,なんぞしらん
+43466,16386,なんぞはからん
+43513,16385,なんのことはない
+43550,16385,にがおもい
+43550,16386,にがかつ
+43592,16385,にえゆをのまされる
+43610,16385,にかいからめぐすり
+43610,16386,にかいへあげてはしごをはずす
+43620,16385,にがしたさかなはおおきい
+43629,16385,にがむしになる
+43629,16386,にがむしをかみつぶしたようなかお
+43652,16385,にくがあがる
+43652,16386,にくをきらせてほねをたつ
+43704,16385,にくまれっこよに{はばか・はばか}る
+43707,16385,にくんでもあまりある
+43718,16385,にげをうつ
+43739,16385,にげるがかち
+43766,16385,にさんにとどまらない
+43770,16385,にしもひがしもわからない
+43773,16385,にじのはしをわたる
+43780,16385,にしきをかざる
+43831,16385,にせをちぎる
+43836,16385,にせものをつかまされる
+43844,16385,にそくのわらじをはく
+43869,16385,にちにちこれこうじつ
+43949,16385,にとをおう
+43950,16385,にどあることはさんどある
+43976,16385,にのあしをふむ
+43978,16385,にのくがつげない
+44244,16385,にてもやいてもくえない
+44244,16386,にるなりやくなり
+44258,16385,にわとりがさきかたまごがさきか
+44258,16386,にわとりをさくにぎゅうとうをもちいる
+44261,16385,にんをみてほうをとけ
+44275,16385,にんげんいたるところせいざんあり
+44275,16386,にんげんのかわをかぶった
+44275,16387,にんげんばんじさいおうがうま
+44340,16385,ぬかに{くぎ・くぎ}
+44350,16385,ぬかみそがくさる
+44369,16385,ぬきさしならない
+44381,16385,ぬきつぬかれつ
+44389,16385,ぬけがいい
+44404,16385,ぬけめ(が)ない
+44409,16385,ぬすっとたけだけしい
+44409,16386,ぬすっとにおいせん
+44409,16387,ぬすっとにもさんぶのり
+44409,16388,ぬすっとのひるね
+44409,16389,ぬすっとをとらえてみればわがこなり
+44458,16385,ぬるまゆにつかる
+44471,16385,ぬれて〈で/に〉{あわ・あわ}
+44477,16385,ぬれぬさきこそつゆをも{いと・いと}え
+44480,16385,ねをあげる
+44481,16385,ねがはる
+44481,16386,ねをけす
+44482,16385,ねがはえる
+44482,16386,ねにもつ
+44482,16387,ねもはもない
+44482,16388,ねをおろす
+44482,16389,ねをすえる
+44518,16385,ねおきがわるい
+44524,16385,ねがってもない
+44553,16385,ねくびを{か・か}く
+44561,16385,ねこにかつおせち
+44561,16386,ねこにこばん
+44561,16387,ねこにまたたび
+44561,16388,ねこのくびにすずをつける
+44561,16389,ねこのこいっぴきいない
+44561,16390,ねこのてもかりたい
+44561,16391,ねこも{しゃくし・しゃくし}も
+44561,16392,ねこを{かぶ・かぶ}る
+44601,16385,ねざめがわるい
+44603,16385,ねじをまく
+44632,16385,ねずみにひかれる
+44643,16385,ねたばをあわせる
+44656,16385,ねつがさめる
+44656,16386,ねつにうかされる
+44656,16387,ねつをあげる
+44703,16385,ねってつをのむおもい
+44777,16385,ねみみにみず
+44816,16385,ねたこをおこす
+44816,16386,ねていて
+44816,16387,ねてもさめても
+44826,16385,ねんをいれる
+44826,16386,ねんをおす
+44844,16385,ねんきがはいる
+44917,16385,ねんりんをきざむ
+44929,16385,のうある{たか・たか}はつめをかくす
+44929,16386,のうがない
+44929,16387,のうではない
+44983,16385,のうじおわれりとする
+45137,16385,のしをつけて〈しんていする/さしあげる〉
+45213,16385,のどがなる
+45213,16386,のどからてがでる
+45213,16387,のどにささったとげ
+45213,16388,のどまででかかる
+45218,16385,のどくびをおさえる
+45226,16385,のどもとすぎればあつさをわすれる
+45226,16386,のどもとまででかかる
+45363,16385,のりとはさみ
+45374,16385,のりかかったふね
+45412,16385,のれんにうでおし
+45412,16386,のれんをおろす
+45412,16387,のれんをわける
+45420,16385,のろしをあげる
+45450,16385,はがたたない
+45454,16385,はがうくよう
+45454,16386,はがたたない
+45454,16387,はに{きぬ・きぬ}きせぬ
+45454,16388,はにははを
+45454,16389,はのぬけたよう
+45454,16390,はのねがあわない
+45454,16391,はをくいしばる
+45454,16392,はをみせる
+45530,16385,ハードルがたかい
+45575,16385,はいになる
+45693,16385,はいぐんのしょう、へいをかたらず
+45922,16385,はいふをつく
+46009,16385,はえばたて、たてばあゆめのおやごころ
+46050,16385,ばかと{はさみ・はさみ}はつかいよう
+46050,16386,ばかにする
+46050,16387,ばかにつけるくすりはない
+46050,16388,ばかにならない
+46050,16389,ばかをいえ
+46050,16390,ばかをみる
+46117,16385,はかりにかける
+46151,16385,はきだめにつる(がおりたよう)
+46160,16385,ばきゃくをあらわす
+46179,16385,はいてすてるほど
+46184,16385,ばくにつく
+46226,16385,はくじつのもとに
+46228,16385,はくしゃをかける
+46275,16385,ばくだんをかかえる
+46283,16385,はくちゅうのかんにある
+46311,16385,はくはつさんぜんじょう
+46320,16385,はくひょうをふむおもい
+46394,16385,ばけのかわがはがれる
+46458,16385,はさみをいれる
+46471,16385,はしがころんでもおかしい
+46471,16386,はしがころんでもわらう
+46471,16387,はしがすすむ
+46471,16388,はしにもぼうにもかからない
+46473,16385,はじをかく
+46473,16386,はじを{すす・すす}ぐ
+46482,16385,はしかのようなもの
+46494,16385,はしごをはずされる
+46521,16385,はじめよければおわりよし
+46547,16385,ばじょうゆたかに
+46566,16385,はすにかまえる
+46571,16385,バスにのりおくれる
+46619,16385,はずみをくらう
+46638,16385,ばせいをあびせる
+46660,16385,はたのみるめも
+46662,16385,はたをあげる
+46662,16386,はたをふる
+46662,16387,はたをまく
+46665,16385,はだがあわない
+46665,16386,はだでかんじる
+46665,16387,はだをいれる
+46665,16388,はだをゆるす
+46780,16385,はちのじをよせる
+46781,16385,はちのすをつ(つ)いたよう
+46814,16385,ばつがわるい
+46858,16385,はっきゅうをおう
+46864,16385,はっきりいって
+47015,16385,ぱっとしない
+47032,16385,はっぱをかける
+47114,16385,はとがまめでっぽうをくったよう
+47144,16385,バトンをわたす
+47145,16385,はながさく
+47145,16386,はなにあらし
+47145,16387,はなはさくらぎひとはぶし
+47145,16388,はなもはじらう
+47145,16389,はなもみもある
+47145,16390,はなより{だんご・だんご}
+47145,16391,はなをさかせる
+47145,16392,はなをそえる
+47145,16393,はなをもたせる
+47147,16385,はなもひっかけない
+47148,16385,はながあぐらをかく
+47148,16386,はながきく
+47148,16387,はながたかい
+47148,16388,はながまがる
+47148,16389,はなであしらう
+47148,16390,はなでわらう
+47148,16391,はなにかかる
+47148,16392,はなにかける
+47148,16393,はなにつく
+47148,16394,はなをあかす
+47148,16395,はなをおる
+47148,16396,はなをたかくする
+47148,16397,はなをつきあわす
+47148,16398,はなをつく
+47148,16399,はなをつままれてもわからない
+47148,16400,はなをつまむ
+47148,16401,はなをならす
+47156,16385,はないきがあらい
+47156,16386,はないきをうかがう
+47185,16385,はなげをのばす
+47185,16386,はなげをよまれる
+47195,16385,はなしがおちる
+47195,16386,はなしがかみあわない
+47195,16387,はなしがつく
+47195,16388,はなしがとおい
+47195,16389,はなしがはずむ
+47195,16390,はなしがはやい
+47195,16391,はなしがみえない
+47195,16392,はなしかわって
+47195,16393,はなしにならない
+47195,16394,はなしにはながさく
+47195,16395,はなしにみがはいる
+47195,16396,はなしのほをつぐ
+47195,16397,はなしをあわせる
+47195,16398,はなしをつける
+47195,16399,はなしをとおす
+47221,16385,はなぢもでない
+47229,16385,はなっぱしらがつよい
+47229,16386,はなっぱしらをへしおる
+47241,16385,はなのさきであしらう
+47242,16385,はなのしたがながい
+47242,16386,はなのしたがひあがる
+47242,16387,はなのしたをのばす
+47283,16385,はなもちならない
+47314,16385,はねがはえたよう
+47314,16386,はねをのばす
+47353,16385,はははつよし
+47354,16385,はばをきかせる
+47356,16385,ババをつかむ
+47356,16386,ババをひく
+47469,16385,はめをはずす
+47485,16385,はもんをとうじる
+47485,16386,はもんをひろげる
+47485,16387,はもんをよぶ
+47500,16385,はやおきはさんもんのとく
+47507,16385,はやがねをうつ
+47556,16385,はやめしもげいのうち
+47569,16385,はらがいえる
+47569,16386,はらがおおきくなる
+47569,16387,はらがくだる
+47569,16388,はらがくろい
+47569,16389,はらがすわる
+47569,16390,はらがたつ
+47569,16391,はらができる
+47569,16392,はらがはる
+47569,16393,はらがふくれる
+47569,16394,はらがふとい
+47569,16395,はらがへる
+47569,16396,はらがよじれる
+47569,16397,はらにいちもつ
+47569,16398,はらにおさめる
+47569,16399,はらにおちる
+47569,16400,はらにすえかねる
+47569,16401,はらのかわがよじれる
+47569,16402,はらはちぶんめにいしゃいらず
+47569,16403,はらもみのうち
+47569,16404,はらをあわせる
+47569,16405,はらをいためる
+47569,16406,はらをいやす
+47569,16407,はらをかかえる
+47569,16408,はらをかためる
+47569,16409,はらをきめる
+47569,16410,はらをきる
+47569,16411,はらをくくる
+47569,16412,はらをくだす
+47569,16413,はらをこしらえる
+47569,16414,はらをこやす
+47569,16415,はらをこわす
+47569,16416,はらをさぐる
+47569,16417,はらをすえる
+47569,16418,はらをたてる
+47569,16419,はらをめす
+47569,16420,はらをよじる
+47569,16421,はらをよむ
+47569,16422,はらをわる
+47669,16385,はらわたがにえくりかえる
+47669,16386,はらわたがよじれる
+47759,16385,はるたつ
+47759,16386,はるをうる
+47816,16385,ばれいをかさねる
+47839,16385,はれものにさわるよう
+47873,16385,はんでおしたよう
+47878,16385,はんをたれる
+47893,16385,ばんいかんなきをきす
+47893,16386,ばんやむをえず
+47960,16385,はんきをひるがえす
+48056,16385,ばんしにいっしょうをえる
+48058,16385,ばんじきゅうす
+48185,16385,ばんちゃもでばな
+48371,16385,ばんりょくそうちゅうこういってん
+48387,16385,ひいずるくに
+48387,16386,ひいちにちと
+48387,16387,ひがあさい
+48387,16388,ひがあたらない
+48387,16389,ひがくれてしまう
+48387,16390,ひくれてみちとおし
+48387,16391,ひにつきに
+48387,16392,ひのあたるばしょ
+48387,16393,ひをあらためて
+48387,16394,ひをうつす
+48387,16395,ひをおって
+48387,16396,ひをおなじくしてろんずべきでない
+48388,16385,ひをみない
+48389,16385,ひがつく
+48389,16386,ひがでる
+48389,16387,ひがはいる
+48389,16388,ひにあぶらをそそぐ
+48389,16389,ひにかける
+48389,16390,ひのきえたよう
+48389,16391,ひのついたよう
+48389,16392,ひのでるよう
+48389,16393,ひのないところにけむりはたたぬ
+48389,16394,ひのなかみずのなか
+48389,16395,ひをいれる
+48389,16396,ひをおとす
+48389,16397,ひをかける
+48389,16398,ひをしっする
+48389,16399,ひをつける
+48389,16400,ひをとおす
+48389,16401,ひをふく
+48389,16402,ひをみるより(も)あきらか
+48390,16385,ひがはいる
+48390,16386,ひをけす
+48390,16387,ひをたやす
+48393,16385,ひのうちどころがない
+48393,16386,ひをならす
+48405,16385,びにいりさいをうがつ
+48470,16385,ピークをうつ
+48494,16385,ピースがそろう
+48643,16385,ひかりをあてる
+48801,16385,ひくにひけない
+48821,16385,びくともしない
+48912,16385,ひざがぬける
+48912,16386,ひざがわらう
+48912,16387,ひざともだんごう
+48912,16388,ひざをうつ
+48912,16389,ひざをおる
+48912,16390,ひざをかかえる
+48912,16391,ひざをくずす
+48912,16392,ひざをくっする
+48912,16393,ひざをくむ
+48912,16394,ひざをすすめる
+48912,16395,ひざをただす
+48912,16396,ひざをつきあわせる
+48912,16397,ひざをつめる
+48912,16398,ひざをのりだす
+48912,16399,ひざをまじえる
+48935,16385,ひさしをかしておもやをとられる
+49088,16385,ひすればはな
+49131,16385,ひそみにならう
+49142,16385,ひたいがくもる
+49142,16386,ひたいでみる
+49142,16387,ひたいにあせする
+49142,16388,ひたいをあつめる
+49162,16385,ひだねをのこす
+49238,16385,ひっけんをあらたにする
+49245,16385,ひっこみがつかない
+49255,16385,ひっしにつくしがたい
+49259,16385,ひつじのかわをかぶった{おおかみ・おおかみ}
+49272,16385,ひつじんをはる
+49277,16385,ひつぜつにつくしがたい
+49293,16385,ピッチがはやい
+49293,16386,ピッチをあげる
+49340,16385,ひつようにせまられる
+49340,16386,ひつようははつめいのはは
+49358,16385,ひとあって
+49358,16386,ひとがいい
+49358,16387,ひとがかわる
+49358,16388,ひとがわるい
+49358,16389,ひととなる
+49358,16390,ひとにはそうてみよ、うまにはのってみよ
+49358,16391,ひとのうわさもしちじゅうごにち
+49358,16392,ひとのくちにとはたてられない
+49358,16393,ひとのふこうはみつのあじ
+49358,16394,ひとのふりみてわがふりなおせ
+49358,16395,ひとのふんどしですもうをとる
+49358,16396,ひとはいちだい、なはまつだい
+49358,16397,ひとはパンのみにていくるものにあらず
+49358,16398,ひともなげ
+49358,16399,ひとよんで
+49358,16400,ひとをえらぶ
+49358,16401,ひとをくう
+49358,16402,ひとをたてる
+49358,16403,ひとをのろわばあなふたつ
+49358,16404,ひとをばかにする
+49358,16405,ひとをひとともおもわない
+49358,16406,ひとをみたらどろぼうとおもえ
+49358,16407,ひとをみてほうをとけ
+49364,16385,ひとあせ〈かく/ながす〉
+49369,16385,ひとあわふかせる
+49372,16385,ひといきいれる
+49398,16385,ひとかたつく
+49406,16385,ひとかわ{む・む}く
+49406,16386,ひとかわ{む・む}ける
+49430,16385,ひとこえせんりょう
+49462,16385,ひとすじなわではいかない
+49472,16385,ひとたまりもない
+49478,16385,ひとつあなの{むじな・むじな}
+49478,16386,ひとつうえ
+49478,16387,ひとつかまのめしをくう
+49478,16388,ひとつまちがえば
+49484,16385,ひとっこひとり
+49524,16385,ひとはたあげる
+49525,16385,ひとはだぬぐ
+49528,16385,ひとはなさかせる
+49537,16385,ひとふでしめしまいらせそろ
+49540,16385,ひとふろあびる
+49542,16385,ひとほねおる
+49554,16385,ひとみをこらす
+49561,16385,ひとめにたつ
+49561,16386,ひとめにつく
+49561,16387,ひとめをしのぶ
+49561,16388,ひとめをはばかる
+49561,16389,ひとめをひく
+49568,16385,ひとやくかう
+49570,16385,ひとやまあてる
+49570,16386,ひとやまこす
+49575,16385,ひとりぐちはくえぬがふたりぐちはくえる
+49651,16385,ひのてがあがる
+49658,16385,ひのめをみる
+49676,16385,ひばなをちらす
+49686,16385,ひびこれこうじつ
+49688,16385,ひびがはいる
+49725,16385,ひぶたをきる
+49769,16385,ひまがいる
+49769,16386,ひまにあかせて
+49769,16387,ひまをおしむ
+49769,16388,ひまをくう
+49769,16389,ひまをさく
+49769,16390,ひまをだす
+49769,16391,ひまをつぶす
+49769,16392,ひまをとる
+49769,16393,ひまをぬすむ
+49769,16394,ひまをみる
+49834,16385,ひゃくもしょうち
+49841,16385,ひゃくしゃくかんとういっぽをすすめる
+49856,16385,ひゃくにちのせっぽう、{へ・へ}ひとつ
+49858,16385,ひゃくねんかせいをまつ
+49858,16386,ひゃくねんのこいもいちじにさめる
+49862,16385,ひゃくぶんはいっけんにしかず
+49892,16385,ひゃっぽゆずって
+49896,16385,ひやみずを〈あびせる/かける〉
+49898,16385,ひやめしをくう
+49943,16385,ひょうがあく
+50020,16385,ひょうしをとる
+50075,16385,ひょうそくがあわない
+50081,16385,ひょうたんあいいれず
+50082,16385,ひょうたんからこま(がでる)
+50118,16385,びょうぶとしょうにんはまっすぐではたたぬ
+50139,16385,ひょうめんきって
+50145,16385,ひょうりをなす
+50236,16385,ピリオドをうつ
+50260,16385,ひるをあざむく
+50360,16385,ひんにせまる
+50367,16385,ピンからキリまで
+50367,16386,ピンをはねる
+50386,16385,ひんくにせまる
+50407,16385,ひんしゅくをかう
+50414,16385,ひんすればどんする
+50440,16385,ぴんとくる
+50462,16385,びんぼうひまなし
+50462,16386,びんぼうゆるぎもしない
+50489,16385,ふにおちる
+50489,16386,ふのぬけたよう
+50497,16385,ぶがあつい
+50497,16386,ぶがある
+50497,16387,ぶがわるい
+50498,16385,ぶにあわない
+50592,16385,ふいをうつ
+50592,16386,ふいをくらう
+50645,16385,ぶいぶいいわせる
+50665,16385,フィルムにおさめる
+50690,16385,ふううんきゅうをつげる
+50709,16385,ふうげつをともとする
+50779,16385,ふうふげんかはいぬもくわない
+50810,16385,ふえふけどおどらず
+50810,16386,ふえをふく
+50936,16385,ふかくをとる
+50987,16385,ふきのきゃくとなる
+51060,16385,ふぎょうてんちにはじない
+51081,16385,ふくをきて(あるいて)いる
+51084,16385,ふくはうち、おにはそと
+51087,16385,ふけばとぶよう
+51091,16385,ふぐはくいたしいのちはおしし
+51173,16385,ふくすいぼんにかえらず
+51243,16385,ふくむところがある
+51362,16385,ぶしににごんはない
+51362,16386,ぶしはあいみたがい
+51362,16387,ぶしはくわねどたか{ようじ・ようじ}
+51503,16385,ふせつをあわせるよう
+51532,16385,ふたをあける
+51532,16386,ふたをする
+51536,16385,ぶたにしんじゅ
+51536,16386,ぶたもおだてりゃきにのぼる
+51541,16385,ぶたいにたつ
+51566,16385,ふたつにひとつ
+51583,16385,ふためとみられない
+51669,16385,ぶつぎをかもす
+51805,16385,ぶつもんにはいる
+51815,16385,ふでがあれる
+51815,16386,ふでがすべる
+51815,16387,ふでがたつ
+51815,16388,ふでをおく
+51815,16389,ふでをおこす
+51815,16390,ふでをおる
+51815,16391,ふでをおろす
+51815,16392,ふでをくわえる
+51815,16393,ふでをそめる
+51815,16394,ふでをたつ
+51815,16395,ふでをとる
+51815,16396,ふでをはしらせる
+51815,16397,ふでをふるう
+51815,16398,ふでをまげる
+51877,16385,ふとくのいたすところ
+51883,16385,ふところがあたたかい
+51883,16386,ふところがいたむ
+51883,16387,ふところが〈さびしい/さむい〉
+51883,16388,ふところがふかい
+51883,16389,ふところにいれる
+51883,16390,ふところにする
+51883,16391,ふところにはいる
+51883,16392,ふところをいためる
+51883,16393,ふところをこやす
+51951,16385,ふねを{こ・こ}ぐ
+52083,16385,ふもんにふす
+52089,16385,ふゆきたりなばはるとおからじ
+52287,16385,ふりあげたこぶしのおろしどころ
+52417,16385,ふってわいた
+52422,16385,ふるいにかける
+52457,16385,ふるきを{たず・たず}ねてあたらしきをしる
+52601,16385,ふれなばおちん
+52898,16385,ふんどしをしめる
+52934,16385,ぶんぼをはらう
+52978,16385,{へ・へ}でもない
+52978,16386,{へ・へ}ともおもわない
+52978,16387,{へ・へ}のつっぱりにもならない
+53013,16385,へいを〈あげる/おこす〉
+53013,16386,へいをおさめる
+53013,16387,へいをかまえる
+53013,16388,へいをもよおす
+53144,16385,へいたんをひらく
+53148,16385,へいちにはらんをおこす
+53198,16385,へいりのごとくすてる
+53317,16385,へそがちゃをわかす
+53317,16386,へそをまげる
+53321,16385,へそのおきっていらい
+53325,16385,へたなてっぽうもかずうちゃあたる
+53325,16386,へたのかんがえやすむににたり
+53325,16387,へたをうつ
+53325,16388,へた(を)すると
+53526,16385,へびににらまれた{かえる・かえる}
+53587,16385,へるもんじゃなし
+53632,16385,べんにきょうする
+53633,16385,ペンはけんよりもつよし
+53633,16386,ペンをいれる
+53633,16387,ペンをおく
+53633,16388,ペンをおる
+53633,16389,ペンをとる
+53633,16390,ペンをはしらせる
+53709,16385,べんじょがちかい
+53760,16385,ベンチをあたためる
+53812,16385,ぺんぺんぐさがはえる
+53843,16385,ほをいつにする
+53847,16385,ほにでる
+53893,16385,ポイントがたかい
+53893,16386,ポイントをおとす
+53895,16385,ほうにてらす
+53909,16385,ぼうにふる
+53909,16386,ぼうを{の・の}んだよう
+53910,16385,ぼうをもってぼうにむくいる
+53961,16385,ほうかをまじえる
+54190,16385,ぼうずにくけりゃ{けさ・けさ}までにくい
+54256,16385,ぼうちゅうかんあり
+54259,16385,ほうちょうをにぎる
+54391,16385,ほうもうをくぐる
+54394,16385,ほうもんをひらく
+54464,16385,ほおがおちる
+54464,16386,ほおがゆるむ
+54464,16387,ほおをそめる
+54464,16388,ほおをつねる
+54464,16389,ほおをふくらませる
+54469,16385,ほおがえしがつかない
+54673,16385,ぼけつをほる
+54685,16385,ほこをおさめる
+54687,16385,ほごにする
+54716,16385,ほこりをかぶる
+54735,16385,ほしがふる
+54735,16386,ほしがわれる
+54735,16387,ほしになる
+54735,16388,ほしのかずほど
+54735,16389,ほしをいただく
+54735,16390,ほしをおとす
+54849,16385,ほぞをかためる
+54849,16386,ほぞを{か・か}む
+54850,16385,ほそくながく
+54882,16385,ぼだいをとむらう
+55006,16385,ほっぺたがおちそう
+55006,16386,ほっぺたをつねる
+55037,16385,ほどがある
+55037,16386,ほどがいい
+55037,16387,ほどへて
+55044,16385,ほとけつくってたましいいれず
+55044,16386,ほとけのかおもさんど(まで)
+55071,16385,ほねがおれる
+55071,16386,ほねとかわになる
+55071,16387,ほねのずいまで
+55071,16388,ほねまでしゃぶる
+55071,16389,ほねを{うず・うず}める
+55071,16390,ほねをおる
+55071,16391,ほねをひろう
+55073,16385,ほねおりぞんのくたびれもうけ
+55079,16385,ほねっぷしがふとい
+55087,16385,ほねみにこたえる
+55087,16386,ほねみにしみる
+55087,16387,ほねみをおしまない
+55087,16388,ほねみをけずる
+55269,16385,ほれたはれた
+55316,16385,ぼんとしょうがつがいっしょにきたよう
+55356,16385,ほんきにする
+55356,16386,ほんきになる
+55389,16385,ほんごしをいれる
+55598,16385,ほんらいむいちもつ
+55613,16385,まにうける
+55614,16385,まがぬける
+55614,16386,まがもてない
+55614,16387,まがわるい
+55614,16388,まにあう
+55615,16385,まがさす
+55663,16385,まいきょにいとまがない
+55737,16385,マウンドをふむ
+55738,16385,まえにおちる
+55738,16386,まえをむく
+55827,16385,まがりなりにも
+55891,16385,まぎれもない
+55895,16385,まくがあがる
+55895,16386,まくがあく
+55895,16387,まくがおりる
+55895,16388,まくがきっておとされる
+55895,16389,まくになる
+55898,16385,まかぬたねははえぬ
+55924,16385,まくらをかわす
+55924,16386,まくらをたかくしてねる
+55924,16387,まくらをならべる
+55924,16388,まくらをぬらす
+55953,16385,まけるがかち
+55959,16385,まごにもいしょう
+55997,16385,まさるともおとらない
+56067,16385,マスクをかぶる
+56117,16385,またにかける
+56223,16385,まつがとれる
+56225,16385,まて{しば・しば}し
+56225,16386,まてどくらせど
+56225,16387,まてばかいろのひよりあり
+56242,16385,まっくろになって
+56276,16385,まっせきをけがす
+56296,16385,マットにしずむ
+56351,16385,まとをいる
+56351,16386,まとをえる
+56390,16385,まないたにのせる
+56397,16385,まなじりをけっする
+56426,16385,まねきをうける
+56436,16385,まのあたりにする
+56457,16385,まぶたがあわない
+56457,16386,まぶたがおもくなる
+56457,16387,まぶたにうかぶ
+56521,16385,まもりにはいる
+56525,16385,まゆがくもる
+56525,16386,まゆにつばをつける
+56525,16387,まゆにひがつく
+56525,16388,まゆひとつうごかさない
+56525,16389,まゆを{つ・つ}りあげる
+56525,16390,まゆをひそめる
+56525,16391,まゆをひらく
+56525,16392,まゆをよせる
+56540,16385,まよえるひつじ
+56570,16385,まるいたまごもきりよ(う)でしかく
+56643,16385,まれにみる
+56655,16385,まわしをきる
+56657,16385,まわたでくびをしめるよう
+56663,16385,まんをじす
+56663,16386,まんをひく
+56704,16385,まんざらでもない
+56716,16385,まんじりともしない
+56776,16385,まんぷくのしんらいをおく
+56797,16385,まんめんしゅをそそぐ
+56810,16385,みがたつ
+56810,16386,みがちぢむ
+56810,16387,みがはいる
+56810,16388,みがもたない
+56810,16389,みがもてない
+56810,16390,みからでた{さび・さび}
+56810,16391,みにあまる
+56810,16392,みにおぼえがない
+56810,16393,みにしみる
+56810,16394,みにつける
+56810,16395,みにつける
+56810,16396,みにつまされる
+56810,16397,みのおきどころがない
+56810,16398,みのふりかた
+56810,16399,みもふたもない
+56810,16400,みもほそる
+56810,16401,みもよもない
+56810,16402,みをあやまる
+56810,16403,みをいれる
+56810,16404,みをうる
+56810,16405,みをおく
+56810,16406,みをおこす
+56810,16407,みをかくす
+56810,16408,みをかためる
+56810,16409,みをきられる
+56810,16410,みをきる
+56810,16411,みをこがす
+56810,16412,みをこにして
+56810,16413,みを{ささ・ささ}げる
+56810,16414,みをしずめる
+56810,16415,みをじする
+56810,16416,みをすててこそうかぶせもあれ
+56810,16417,みをたてる
+56810,16418,みをつつしむ
+56810,16419,みをつつむ
+56810,16420,みをていする
+56810,16421,みをとうじる
+56810,16422,みをなげる
+56810,16423,みをのりだす
+56810,16424,みをひく
+56810,16425,みをひそめる
+56810,16426,みをまかせる
+56810,16427,みをもちくずす
+56810,16428,みを{もっ・もっ}て
+56810,16429,みをやつす
+56810,16430,みをよせる
+56811,16385,みがいる
+56811,16386,みをむすぶ
+56843,16385,ミイラとりがミイラになる
+56857,16385,みえもがいぶんもない
+56857,16386,みえをきる
+56857,16387,みえをはる
+56891,16385,みかけによらず
+56914,16385,みぎからひだり
+56914,16386,みぎといえばひだり
+56914,16387,みぎにでるものがいない
+56914,16388,みぎもひだりもわからない
+56961,16385,みこしをあげる
+56961,16386,みこしをかつぐ
+56961,16387,みこしをすえる
+56981,16385,みさおをたてる
+56989,16385,みざるきかざるいわざる
+57015,16385,ミシンをふむ
+57020,16385,みずがあう
+57020,16386,みずがあく
+57020,16387,みずがつく
+57020,16388,みずがでる
+57020,16389,みずがはいる
+57020,16390,みずきよければうお{す・す}まず
+57020,16391,みずとあぶら
+57020,16392,みずにおちたいぬはうて
+57020,16393,みずにながす
+57020,16394,みずになる
+57020,16395,みずにのる
+57020,16396,みずのひくきにつくよう
+57020,16397,みずはほうえんのうつわにしたがう
+57020,16398,みずもしたたる
+57020,16399,みずも{た・た}まらず
+57020,16400,みずももらさぬ
+57020,16401,みずをあける
+57020,16402,みずをうったよう
+57020,16403,みずをえたうおのよう
+57020,16404,みずをかける
+57020,16405,みずをさす
+57020,16406,みずをつかむ
+57020,16407,みずをつける
+57020,16408,みずをむける
+57054,16385,みずから(を)じする
+57166,16385,みせをたたむ
+57183,16385,みぜにをきる
+57195,16385,みぜんにふせぐ
+57196,16385,みそも{くそ・くそ}もいっしょに
+57196,16386,みそをつける
+57250,16385,みちがひらける
+57250,16386,みちなきみち
+57250,16387,みちをけっする
+57250,16388,みちをつける
+57250,16389,みちをひらく
+57250,16390,みちをひろう
+57250,16391,みちをわける
+57259,16385,みちくさをくう
+57284,16385,みちゆくひとのそでにすがる
+57291,16385,みつればかく
+57296,16385,みっかにあげず
+57296,16386,みっかみぬまのさくら
+57316,16385,みつごのたましいひゃくまで
+57376,16385,みつゆびをついて
+57475,16385,みのかわをはぐ
+57476,16385,みのけがよだつ
+57493,16385,みはてぬゆめ
+57510,16385,みふたつになる
+57532,16385,みみがいたい
+57532,16386,みみがこえる
+57532,16387,みみがとおい
+57532,16388,みみがはやい
+57532,16389,みみにする
+57532,16390,みみにたこ(ができる)
+57532,16391,みみにたつ
+57532,16392,みみにたっする
+57532,16393,みみにつく
+57532,16394,みみにのこる
+57532,16395,みみにはいる
+57532,16396,みみにはさむ
+57532,16397,みみにもかけず
+57532,16398,みみをあらう
+57532,16399,みみをうたがう
+57532,16400,みみをうつ
+57532,16401,みみをおおう
+57532,16402,みみをおおってすずをぬすむ
+57532,16403,みみをかす
+57532,16404,みみをかたむける
+57532,16405,みみをけがす
+57532,16406,みみをすます
+57532,16407,みみをそばだてる
+57532,16408,みみをそろえる
+57532,16409,みみをダンボにする
+57532,16410,みみをつんざく
+57532,16411,みみをふさぐ
+57532,16412,みみをほる
+57532,16413,みみを{ろう・ろう}する
+57549,16385,みみずののたくったよう
+57567,16385,みむきもしない
+57584,16385,みゃくがある
+57584,16386,みゃくをとる
+57673,16385,みょうりがわるい
+57673,16386,みょうりにつきる
+57697,16385,みてのとおり
+57697,16386,みてみぬふりをする
+57697,16387,みぬこときよし
+57697,16388,みるかげもない
+57697,16389,みるにしのびない
+57697,16390,みるにみかねて
+57697,16391,みるめがない
+57697,16392,みるめも
+57769,16385,むにする
+57814,16385,むかしとった{きねづか・きねづか}
+57928,16385,むこうさんげんりょうどなり
+57928,16386,むこうにまわす
+57928,16387,むこうをはる
+57962,16385,むしがいい
+57962,16386,むしがしらせる
+57962,16387,むしがすかない
+57962,16388,むしがつく
+57962,16389,むしのいどころがわるい
+57962,16390,むしもころさない
+57962,16391,むしをおこす
+57986,16385,むしずがはしる
+58078,16385,むすめひとりにむこはちにん
+58124,16385,むだめしをくう
+58129,16385,ムチと{ニンジン・にんじん}
+58218,16385,むねがあつくなる
+58218,16386,むねがいっぱいになる
+58218,16387,むねがおどる
+58218,16388,むねがさわぐ
+58218,16389,むねがつぶれる
+58218,16390,むねがつまる
+58218,16391,むねがはずむ
+58218,16392,むねがふくらむ
+58218,16393,むねがふさがる
+58218,16394,むねがやける
+58218,16395,むねがわるくなる
+58218,16396,むねにいちもつ
+58218,16397,むねにおちる
+58218,16398,むねにきく
+58218,16399,むねにささる
+58218,16400,むねにせまる
+58218,16401,むねにたたむ
+58218,16402,むねにてをあてて
+58218,16403,むねにひびく
+58218,16404,むねのすくよう
+58218,16405,むねのつかえがおりる
+58218,16406,むねをいためる
+58218,16407,むねをうつ
+58218,16408,むねをかす
+58218,16409,むねをかりる
+58218,16410,むねをこがす
+58218,16411,むねをさする
+58218,16412,むねをだす
+58218,16413,むねをたたく
+58218,16414,むねをつかれる
+58218,16415,むねをなでおろす
+58218,16416,むねをはる
+58218,16417,むねをふくらませる
+58307,16385,むりがとおればどうりがひっこむ
+58348,16385,めがあく
+58348,16386,めがおよぐ
+58348,16387,めがかたい
+58348,16388,めがきく
+58348,16389,めがくもる
+58348,16390,めがくらむ
+58348,16391,めがこえる
+58348,16392,めがさえる
+58348,16393,めがさめる
+58348,16394,めがすわる
+58348,16395,めがたかい
+58348,16396,めがちかい
+58348,16397,めがでる
+58348,16398,めがてんになる
+58348,16399,めがとおい
+58348,16400,めがとどく
+58348,16401,めがとびでる
+58348,16402,めがとまる
+58348,16403,めがない
+58348,16404,めがなくなる
+58348,16405,めがはいる
+58348,16406,めがはなせない
+58348,16407,めがはやい
+58348,16408,めがひかる
+58348,16409,めがまわる
+58348,16410,めからうろこがおちる
+58348,16411,めからはなへぬける
+58348,16412,めからひがでる
+58348,16413,めじゃない
+58348,16414,めとはなのさき
+58348,16415,めにあまる
+58348,16416,めにいっていじもない
+58348,16417,めにいれてもいたくない
+58348,16418,めにうかぶ
+58348,16419,めにうつる
+58348,16420,めにおさめる
+58348,16421,めにかどをたてる
+58348,16422,めにしみる
+58348,16423,めにする
+58348,16424,めにたつ
+58348,16425,めにつく
+58348,16426,めにとどめる
+58348,16427,めにのこる
+58348,16428,めにはいる
+58348,16429,めにはめを、はにははを
+58348,16430,めにふれる
+58348,16431,めにみえる
+58348,16432,めにもとまらぬ
+58348,16433,めにものいわす
+58348,16434,めにもの(を)みせる
+58348,16435,めのくろいうち
+58348,16436,めはくちほどにものをいう
+58348,16437,めはこころのまど
+58348,16438,めひきそでひき
+58348,16439,めもあてられない
+58348,16440,めもあや〈な/に〉
+58348,16441,めもくれない
+58348,16442,めをあそばせる
+58348,16443,めをあてる
+58348,16444,めをあわせる
+58348,16445,めをうたがう
+58348,16446,めをうばわれる
+58348,16447,めをおおう
+58348,16448,めをおとす
+58348,16449,めをかける
+58348,16450,めをかすめる
+58348,16451,めをきる
+58348,16452,めをくばる
+58348,16453,めをくれる
+58348,16454,めをこらす
+58348,16455,めをさらす
+58348,16456,めをさら(のよう)にする
+58348,16457,めをさんかくにする
+58348,16458,めをしろくろさせる
+58348,16459,めをすえる
+58348,16460,めをそばだてる
+58348,16461,めをそむける
+58348,16462,めを{そ・そ}らす
+58348,16463,めをたてる
+58348,16464,めをつける
+58348,16465,めをつぶる
+58348,16466,めをてんじる
+58348,16467,めをとおす
+58348,16468,めをとめる
+58348,16469,めをぬすむ
+58348,16470,めをはなす
+58348,16471,めをはなつ
+58348,16472,めをひからせる
+58348,16473,めをひく
+58348,16474,めをひらく
+58348,16475,めをほそめる
+58348,16476,めをまるくする
+58348,16477,めをまわす
+58348,16478,めをみはる
+58348,16479,めを{む・む}く
+58348,16480,めをむける
+58348,16481,めをやる
+58348,16482,めをよろこばせる
+58350,16385,めがでる
+58350,16386,めをつむ
+58350,16387,めをふく
+58363,16385,めいたんせきにせまる
+58363,16386,めいをほうじる
+58366,16385,めいをきる
+58370,16385,めいあんをべんじない
+58370,16386,めいあんをわける
+58491,16385,めいどのみやげにする
+58576,16385,メートルをあげる
+58593,16385,めがしらがあつくなる
+58593,16386,めがしらをおさえる
+58596,16385,めかどをたてる
+58602,16385,めがねにかなう
+58606,16385,メガホンをとる
+58617,16385,めくじらをたてる
+58619,16385,めくそはなくそをわらう
+58626,16385,めくらせんにんめあきせんにん
+58626,16386,めくらへびに{お・お}じず
+58643,16385,めさきがきく
+58643,16386,めさきをかえる
+58654,16385,めしをくう
+58694,16385,メスをいれる
+58726,16385,めだまがとびでる
+58748,16385,めっきがはげる
+58785,16385,めどがつく
+58803,16385,めのいろをかえる
+58810,16385,めのたまがとびでる
+58810,16386,めのたまのくろいうち
+58815,16385,めのまえが〈くらく/まっくらに〉なる
+58822,16385,めはながつく
+58874,16385,めりはりがきく
+58896,16385,めんがわれる
+58896,16386,めんとむかって
+58896,16387,めんをきる
+58896,16388,めんをとる
+58914,16385,めんしきがある
+58914,16386,めんしきをもつ
+58944,16385,メンチ(を)きる
+58954,16385,めんどうみがいい
+58954,16386,めんどうをかける
+58954,16387,めんどうをみる
+58961,16385,めんぴをはぐ
+58966,16385,めんぼくしだいもない
+58966,16386,めんぼくをほどこす
+58977,16385,もにふくする
+58977,16386,もをはっする
+58984,16385,もうを{ひら・ひら}く
+59011,16385,もうげんたしゃ
+59096,16385,もうひょうたしゃ
+59134,16385,モーションをかける
+59320,16385,もちはもちや
+59383,16385,もちやはもちや
+59390,16385,もちつもたれつ
+59416,16385,もったいをつける
+59420,16385,もって{いかん・いかん}となす
+59420,16386,もってめいすべし
+59459,16385,もとの{さや・さや}におさまる
+59459,16386,もともこもない
+59459,16387,もとをただせば
+59459,16388,もとをとる
+59513,16385,ものともせず
+59513,16386,ものにする
+59513,16387,ものになる
+59513,16388,ものはいいよう
+59513,16389,ものはそうだん
+59513,16390,ものはためし
+59513,16391,ものをいう
+59513,16392,ものをいわせる
+59519,16385,ものいえばくちびるさむしあきのかぜ
+59552,16385,ものごころ(が)つく
+59584,16385,もののかずではない
+59642,16385,もみじをちらす
+59659,16385,もも{くり・くり}さんねんかきはちねん
+59762,16385,もんをたたく
+59780,16385,もんこをはる
+59806,16385,もんぜんいちをなす
+59806,16386,もんぜん{じゃくら・じゃくら}をはる
+59806,16387,もんぜんのこぞうならわぬきょうをよむ
+59840,16385,やでもてっぽうでももってこい
+59840,16386,やもたてもたまらず
+59842,16385,やにいけんなし
+59842,16386,やにくだる
+59865,16385,やいばにかかる
+59865,16386,やいばにちぬる
+59900,16385,やきがまわる
+59900,16386,やきをいれる
+59957,16385,やくにたつ
+59957,16386,やくをつくる
+60059,16385,やぐらをふる
+60075,16385,やけいしにみず
+60091,16385,やけのの{きぎす・きぎす}よるのつる
+60097,16385,やけぼっくいにひがつく
+60149,16385,やすかろうわるかろう
+60154,16385,{やす・やす}きにつく
+60163,16385,やすみやすみいえ
+60167,16385,やすものかいのぜにうしない
+60192,16385,やせてもかれても
+60292,16385,やなぎにかぜ
+60292,16386,やなぎにゆきおれなし
+60292,16387,やなぎのしたにいつも{どじょう・どじょう}はいない
+60323,16385,やぶからぼう
+60323,16386,やぶをつついてへびをだす
+60350,16385,やまありたにあり
+60350,16386,やまがみえる
+60350,16387,やまたかきがゆえにたっとからず
+60350,16388,やまたかければたにふかし
+60350,16389,やまねむる
+60350,16390,やまわらう
+60350,16391,やまをあてる
+60350,16392,やまをかける
+60350,16393,やまをこす
+60350,16394,やまをたてる
+60350,16395,やまをはる
+60350,16396,やまをふむ
+60355,16385,やまいこうこうにいる
+60355,16386,やまいはきから
+60355,16387,やまいをえる
+60355,16388,やまいをやしなう
+60464,16385,やみからやみへほうむる
+60484,16385,やみよにてっぽう
+60485,16385,やむにやまれぬ
+60503,16385,ややあって
+60519,16385,やりがふっても
+60532,16385,やりだまにあげる
+60587,16385,ゆをつかう
+60611,16385,ゆうをこす
+60762,16385,ゆうしゅうのびを〈かざる/なす〉
+60830,16385,ゆうだちはうまのせをわける
+60904,16385,ゆうめいさかいをことにする
+60924,16385,ゆうようせまらぬ
+60938,16385,ゆうれいのしょうたいみたりかれおばな
+60946,16385,ゆえあって
+60946,16386,ゆえあるかな
+60946,16387,ゆえしらず
+60946,16388,ゆえなき
+60946,16389,ゆえなく(して)
+60946,16390,ゆえなしとしない
+60978,16385,ゆきとすみ
+60978,16386,ゆきをいただく
+61077,16385,ゆきつもどりつ
+61077,16386,ゆくとしてかならざるはない
+61087,16385,ゆげがたっている
+61140,16385,ゆだんもすきも(なら)ない
+61181,16385,ユニフォームをぬぐ
+61193,16385,ゆびをくっする
+61193,16386,ゆびをくわえる
+61193,16387,ゆびをさす
+61193,16388,ゆびをそめる
+61193,16389,ゆびをつめる
+61197,16385,ゆびおりかぞえてまつ
+61218,16385,ゆみおれやつきる
+61218,16386,ゆみをひく
+61220,16385,ゆみずのようにつかう
+61226,16385,ゆみやとるみ
+61228,16385,ゆめにゆめみる
+61228,16386,ゆめの(また)ゆめ
+61228,16387,ゆめはさかゆめ
+61228,16388,ゆめをむすぶ
+61236,16385,ゆめじをたどる
+61243,16385,ゆめみるよう
+61269,16385,ゆりかごからはかばまで
+61306,16385,よがよなら
+61306,16386,よにいう
+61306,16387,よにでる
+61306,16388,よにとう
+61306,16389,よをさる
+61306,16390,よをしのぶ
+61306,16391,よをすくう
+61306,16392,よをそむく
+61306,16393,よをわたる
+61308,16385,よのめもねずに
+61308,16386,よもひもあけない
+61308,16387,よるもひもなく
+61308,16388,よをあかす
+61308,16389,よをこめて
+61308,16390,よをてっする
+61308,16391,よをひについで
+61326,16385,よいごしのかねはもたない
+61348,16385,ようにきょうする
+61348,16386,ようにたつ
+61348,16387,ようをたす
+61348,16388,ようを{な・な}す
+61348,16389,ようをべんずる
+61349,16385,ようをつまんで
+61351,16385,ようのとうざいをとわず
+61355,16385,よういわんわ
+61659,16385,ようりょうがいい
+61659,16386,ようりょうをえない
+61709,16385,よぎなくされる
+61715,16385,よくのかわがつっぱる
+61715,16386,よくもとくもない
+61715,16387,よくをかく
+61795,16385,よこからみてもたてからみても
+61795,16386,よこにおく
+61795,16387,よこになる
+61795,16388,よこのものをたてにもしない
+61795,16389,よこをむく
+61815,16385,よこぐるまをおす
+61837,16385,よこづなをはる
+61840,16385,よこでをうつ
+61870,16385,よこやりをいれる
+61889,16385,よしにする
+61891,16385,よしのずいからてんじょうのぞく
+61892,16385,よしとする
+61937,16385,よせいをかる
+61955,16385,よぜんをたもつ
+61962,16385,よそおいをこらす
+61975,16385,よたをとばす
+61985,16385,よだれをながす
+61988,16385,よだんをゆるさない
+61995,16385,よつにくむ
+62061,16385,よねん(が)ない
+62192,16385,よんでじのごとく
+62193,16385,よめとおめ{かさ・かさ}のうち
+62216,16385,よりをもどす
+62241,16385,よりどりみどり
+62255,16385,よらばたいじゅのかげ
+62290,16385,よろしくやる
+62298,16385,よわいをかさねる
+62299,16385,よわいいぬほどよく{ほ・ほ}える
+62300,16385,よわきをだす
+62301,16385,よわきをたすけつよきを{くじ・くじ}く
+62306,16385,よわねをはく
+62313,16385,よわりめにたたりめ
+62430,16385,らいねんのことをいうとおにがわらう
+62471,16385,らくあればくあり
+62474,16385,らくいんをおされる
+62535,16385,らくようのしかをたかからしめる
+62579,16385,らちがあかない
+62579,16386,らちもない
+62579,16387,らちをあける
+62609,16385,ラッパをふく
+62797,16385,りあらず
+62799,16385,りがひでも
+62799,16386,りにおちる
+62845,16385,りかにかんむりをたださず
+62919,16385,りくつをこねる
+63027,16385,りちぎもののこだくさん
+63064,16385,りっすいのよちもない
+63253,16385,りゅういんがさがる
+63273,16385,りゅうこあいうつ
+63325,16385,りゅうびをさかだてる
+63356,16385,りょうとする
+63359,16385,りょうをいれる
+63359,16386,りょうをとる
+63496,16385,りょうてにはな
+63551,16385,りょうめがあく
+63559,16385,りょうやくはくちににがし
+63560,16385,りょうゆうならびたたず
+63577,16385,りょうりょうあい{ま・ま}って
+63620,16385,りょそうをとく
+63685,16385,りんげんあせの{ごと・ごと}し
+63760,16385,るいがおよぶ
+63761,16385,るいをまする
+63762,16385,るいはともをよぶ
+63804,16385,るいらんのあやうきにある
+63839,16385,るすになる
+63862,16385,ルビコン(がわ)をわたる
+63888,16385,れいをあつくする
+63888,16386,れいをしっする
+63888,16387,れいをとる
+63890,16385,れいにない
+63890,16386,れいによって
+63890,16387,れいによってれいのごとし
+63892,16385,れいがひとつおおい
+63982,16385,れいすいを〈あびせる/かける〉
+64039,16385,れいひつをふるう
+64095,16385,レールをしく
+64222,16385,レッテルをはる
+64391,16385,ろをきる
+64405,16385,ろうおおくしてこうすくなし
+64409,16385,ろうをえてしょくをのぞむ
+64410,16385,ろうを{か・か}むよう
+64461,16385,ろうこうにくちはてる
+64510,16385,ろうしてこうなし
+64625,16385,ローマはいちにちにしてならず
+64652,16385,ろくを{は・は}む
+64667,16385,ろくじゅうにしてみみしたがう
+64762,16385,ろとうにまよう
+64797,16385,ろめいをつなぐ
+64802,16385,ろれつがまわらない
+64803,16385,ろんよりしょうこ
+64803,16386,ろんを{ま・ま}たない
+64813,16385,ろんごよみのろんごしらず
+64826,16385,ろんじんをはる
+64850,16385,わをこうじる
+64851,16385,わをかける
+64903,16385,わがたにみずをひく
+64903,16386,わがみちをいく
+64907,16385,わがいをえたり
+64960,16385,わがみかわいさ
+64960,16386,わがみを{つね・つね}ってひとのいたさをしれ
+64991,16385,わきがあまい
+65021,16385,わきめもふらず
+65027,16385,わくをはめる
+65087,16385,わさびがきく
+65089,16385,わざわいをてんじてふくとなす
+65126,16385,わしてどうぜず
+65146,16385,わたのようにつかれる
+65149,16385,わだいを{ま・ま}く
+65159,16385,わたしとしたことが
+65164,16385,わたぼうしをかぶる
+65168,16385,わたりにふね
+65170,16385,わたるせけんにおにはない
+65197,16385,わとうをてんじる
+65220,16385,わびをいれる
+65253,16385,わらにもすがり(つき)たい
+65253,16386,わらのうえから
+65253,16387,わらをもつかみたい
+65254,16385,わらいがとまらない
+65255,16385,わらうかどにはふくきたる
+65256,16385,わらえないはなし
+65263,16385,わらじをぬぐ
+65281,16385,わりがいい
+65281,16386,わりにあう
+65281,16387,わりをくう
+65321,16385,わるいむしがつく
+65321,16386,わるいようにはしない
+65344,16385,われおとらじと
+65344,16386,われかんせず
+65344,16387,われともなく
+65344,16388,われにかえる
+65344,16389,われにもあらず
+65344,16390,われにもなく
+65344,16391,われもわれも
+65344,16392,われをわすれる
+65347,16385,われがねのようなこえ
+65355,16385,われなべに{と・と}じぶた
+65361,16385,われるようなはくしゅ
diff --git a/data/mdict/css/sankoku8.css b/data/mdict/css/sankoku8.css
new file mode 100644
index 0000000..0d56d1b
--- /dev/null
+++ b/data/mdict/css/sankoku8.css
@@ -0,0 +1,611 @@
+
+@font-face {
+ font-family: jpgothic;
+ src: local("Noto Sans CJK JP"), local("IPAexGothic"), local("Source Han Sans JP");
+}
+
+@font-face {
+ font-family: jpmincho;
+ src: local("Noto Serif CJK JP"), local("IPAexMincho"), local("IPAmjMincho"), local("Source Han Serif JP"), local("HanaMinA"), local("HanaMinB");
+}
+
+@font-face {
+ font-family: jpkyokasho;
+ src: local("A-OTF Kyoukasho ICA Pro R"), local("DFKyoKaSho-W4");
+}
+
+body {
+ margin: 0em 1em;
+ line-height: 1.5em;
+ font-family: jpmincho, serif;
+ font-size: 1.2em;
+}
+
+span[data-name="entry-index"] > a {
+ display: none;
+}
+
+span[data-name="項目"] {
+ display: block;
+ /*max-width: 39em;*/
+}
+
+span[data-name="見出部"] {
+ display: block;
+}
+
+span[data-name="見出仮名"] {
+ font-family: jpgothic, sans-serif;
+ font-weight: bold;
+}
+
+span[data-name="見出仮名"].アンチック {
+ font-family: jpmincho, serif;
+}
+
+span[data-name="表記G"] {
+ margin-left: 0.25em;
+}
+
+span[data-name="専門G"] {
+ margin-right: 0.25em;
+}
+
+span[data-name="常用漢字"] {
+ font-family: jpmincho, serif;
+}
+
+span[data-name="教育漢字"] {
+ font-family: jpkyokasho, jpmincho, serif;
+ color: green;
+}
+
+span[data-name="解説部"],
+span[data-name="子解説部"],
+span[data-name="句解説部"] {
+ display: block;
+ margin-left: 1em;
+}
+
+span[data-name="大語義"] {
+ display: block;
+}
+
+span[data-name="大語義"] + span[data-name="大語義"] {
+ margin-top: 0.5em;
+}
+
+span[data-name="大語義番号"] {
+ margin-right: 0.25em;
+ padding: 0.1em;
+ font-family: jpgothic, sans-serif;
+ font-size: 0.8em;
+ font-weight: bold;
+ color: white;
+ background-color: gray;
+ border-radius: 0.2em;
+}
+
+a span[data-name="大語義番号"] {
+ background-color: blue;
+ text-decoration-color: blue;
+}
+
+span[data-name="語義番号"] {
+ margin-right: 0.25em;
+}
+
+span[data-name="参照語義番号"] {
+ margin-left: 0.1em;
+}
+
+span[data-name="参照語義番号"]>span[data-name="語義番号"] {
+ margin-right: 0.1em;
+}
+
+span[data-name="参照語義番号"]:first-child {
+ margin-left: 0em;
+}
+
+span[data-name="語義"] {
+ display: block;
+}
+
+span[data-name="副義"] {
+ display: block;
+ margin-left: 1.0em;
+}
+
+span[data-name="注記語義"] {
+ margin-left: 0.5em;
+}
+
+span[data-name="語釈"] {
+}
+
+span[data-name="用例G"] {
+ display: block;
+ /*margin-left: 1.25em;*/
+}
+
+span[data-name="百科"] span[data-name="用例G"] {
+ display: inline;
+}
+
+span[data-name="注記"] span[data-name="用例G"] {
+ display: inline;
+}
+
+span[data-name="用例"] {
+}
+
+span[data-name="見出相当部"] {
+ margin-left: 0.125em;
+ margin-right: 0.125em;
+}
+
+span[data-name="ルビG"] {
+ font-size: 0.7em;
+ font-weight: normal;
+ vertical-align: 0.5em;
+ -webkit-user-select: none;
+}
+
+span[data-name="名詞形G"],
+span[data-name="動詞形G"],
+span[data-name="自動詞形G"],
+span[data-name="他動詞形G"],
+span[data-name="可能形G"],
+span[data-name="人G"],
+span[data-name="名詞人形G"] {
+ display: block;
+}
+
+span[data-name="語義"] span[data-name="名詞形G"],
+span[data-name="語義"] span[data-name="動詞形G"],
+span[data-name="語義"] span[data-name="自動詞形G"],
+span[data-name="語義"] span[data-name="他動詞形G"],
+span[data-name="語義"] span[data-name="可能形G"],
+span[data-name="語義"] span[data-name="人G"] {
+ display: inline;
+}
+
+span[data-name="副義"] span[data-name="名詞形G"],
+span[data-name="副義"] span[data-name="動詞形G"],
+span[data-name="副義"] span[data-name="自動詞形G"],
+span[data-name="副義"] span[data-name="他動詞形G"],
+span[data-name="副義"] span[data-name="可能形G"],
+span[data-name="副義"] span[data-name="人G"] {
+ display: inline;
+}
+
+span[data-name="注記"] span[data-name="名詞形G"],
+span[data-name="注記"] span[data-name="動詞形G"],
+span[data-name="注記"] span[data-name="自動詞形G"],
+span[data-name="注記"] span[data-name="他動詞形G"],
+span[data-name="注記"] span[data-name="可能形G"],
+span[data-name="注記"] span[data-name="人G"] {
+ display: inline;
+}
+
+span[data-name="共通"] span[data-name="名詞形G"],
+span[data-name="共通"] span[data-name="動詞形G"],
+span[data-name="共通"] span[data-name="自動詞形G"],
+span[data-name="共通"] span[data-name="他動詞形G"],
+span[data-name="共通"] span[data-name="可能形G"],
+span[data-name="共通"] span[data-name="人G"] {
+ display: inline;
+}
+
+span[data-name="名詞形G"] span[data-name="用例G"],
+span[data-name="動詞形G"] span[data-name="用例G"],
+span[data-name="自動詞形G"] span[data-name="用例G"],
+span[data-name="他動詞形G"] span[data-name="用例G"],
+span[data-name="可能形G"] span[data-name="用例G"],
+span[data-name="人G"] span[data-name="用例G"] {
+ display: inline;
+}
+
+span[data-name="参照G"] {
+ display: inline;
+}
+
+span[data-name="参照矢印"] {
+ margin-right: 0.25em;
+}
+
+span[data-name="参照"] {
+}
+
+span[data-name="子項目"] {
+ display: block;
+ margin-top: 0.5em;
+}
+
+span[data-name="子見出部"] {
+ display: block;
+ /* text-indent: -1em; */
+}
+
+span[data-name="子見出仮名"] {
+ font-family: jpgothic, sans-serif;
+ font-weight: bold;
+}
+
+span[data-name="親見出省略"] {
+ font-family: jpgothic, sans-serif;
+}
+
+span[data-name="句項目"] {
+ display: block;
+ margin-top: 0.5em;
+}
+
+span[data-name="句見出部"] {
+ display: block;
+ /* text-indent: -1em; */
+}
+
+span[data-name="句表記"] {
+ font-family: jpgothic, sans-serif;
+ font-weight: bold;
+}
+
+span[data-name="対義語G"] {
+}
+
+span[data-name="派生語G"] {
+ display: block;
+}
+
+span[data-name="謙譲形G"] {
+ display: block;
+}
+
+span[data-name="共通"] {
+ display: block;
+}
+
+span[data-name="共通ロゴ"] {
+ color: red;
+ margin-right: 0.25em;
+}
+
+span[data-name="rank1"] a,
+span[data-name="rank2"] a,
+span[data-name="rank3"] a,
+span[data-name="表外字マーク"] a,
+span[data-name="表外音訓マーク"] a,
+span[data-name="省略形"] a,
+span[data-name="熟字訓"] a,
+span[data-name="原籍"] a,
+span[data-name="品詞"] a,
+span[data-name="専門"] a,
+span[data-name="使用域"] a,
+span[data-name="rect"] a {
+ color: black;
+ border-top-style: none;
+}
+
+span[data-name="共通ロゴ"] a {
+ color: red;
+ border-top-style: none;
+}
+
+span[data-name="rect"].red a {
+ color: red;
+}
+
+a {
+ text-decoration: none;
+ padding-top: 0.04em;
+ /* border-top: solid 1px blue; */
+}
+
+a.appendix {
+ color: black;
+ text-decoration: none;
+ border-top-style: none;
+}
+
+a.black {
+ color: black;
+}
+
+span[data-name="カット"] {
+ display: block;
+ width: 75%;
+ margin-top: 1em;
+ margin-left: auto;
+ margin-right: auto;
+}
+
+span[data-name="カット"] img {
+ max-height: 200px;
+ max-width: 600px;
+}
+
+span[data-name="イタリック"] {
+ font-style: italic;
+}
+
+span[data-name="ボールド"] {
+ font-weight: bold;
+}
+
+span[data-name="色版"] {
+ color: red;
+}
+
+/* 独自定義 */
+
+span[data-name="rect"] {
+ margin-left: 0.25em;
+ margin-right: 0.25em;
+ padding: 0.1em;
+ font-size: 0.8em;
+ border-width: 0.04em;
+ border-style: solid;
+ border-color: black;
+ word-break: keep-all;
+ border-radius: 0.1em;
+}
+
+span[data-name="rect"].fill {
+ color: white;
+ border-style: none;
+ background-color: gray;
+}
+
+span[data-name="rect"].red {
+ color: red;
+ border-color: red;
+}
+
+span[data-name="red"] {
+ color: red;
+}
+
+span[data-name="glyph"] {
+ font-family: jpmincho, serif;
+}
+
+span[data-name="gaiji"] {
+ width: 1em;
+}
+
+span[data-name="frac"] {
+ width: 2em;
+}
+
+img.logo {
+ display: gaiji;
+ margin-right: 0.25em;
+ height: 1em;
+ text-combine-horizontal: all;
+}
+
+.logo-red {
+ height: 1em;
+ color: red;
+}
+
+span[data-name="平板"] .logo-red {
+ margin-left: 0.1em;
+}
+
+img.区切り線 {
+ display: gaiji;
+ height: 1em;
+ padding: 0 0.3em 0 0.05em;
+ color: gray;
+ text-combine-horizontal: all;
+}
+
+/* *, **, and ☆☆ symbols */
+span[data-src^="svg-logo"].rank {
+ font-size: 0.65em;
+ vertical-align: super;
+}
+
+img.gaiji {
+ display: gaiji;
+ height: 1em;
+ text-combine-horizontal: all;
+}
+
+img.svg {
+ zoom: 250%;
+}
+
+span[data-name="表外字マーク"] {
+ font-size: 0.5em;
+ vertical-align: 1em;
+ -webkit-user-select: none;
+}
+
+span[data-name="表外音訓マーク"] {
+ font-size: 0.5em;
+ vertical-align: 1em;
+ -webkit-user-select: none;
+}
+
+span[data-name="表外字ロゴ"],
+span[data-name="表外音訓ロゴ"] {
+ margin: 0em 0.5em;
+ font-size: 0.5em;
+}
+
+span[data-name="アクセント"] {
+}
+
+span[data-name="アクセント表記"] {
+ font-family: jpgothic, sans-serif;
+ font-weight: bold;
+ font-size: 0.85em;
+}
+
+span[data-name="横"] {
+ text-combine-horizontal: all 1;
+}
+
+span[data-name="縦中横"] {
+ text-combine-horizontal: all;
+}
+
+span[data-name="分子"],
+span[data-name="分母"] {
+ text-combine-horizontal: all;
+}
+
+span[data-name="英"],
+span[data-name="回転"] {
+ writing-mode: horizontal-tb;
+}
+
+span[data-name="i"] {
+ font-family: "Times New Roman";
+ font-style: italic;
+}
+
+span[data-name="横"] span[data-name="sub"] {
+ font-size: 0.7em;
+ vertical-align: 0.35em;
+}
+
+span[data-name="kanbun"] {
+ font-size: 0.5em;
+ vertical-align: -1em;
+}
+
+span[data-name="歴史仮名"] {
+ font-size: 0.7em;
+ vertical-align: 0.5em;
+ -webkit-user-select: none;
+}
+
+span[data-name="品詞G"] {
+ /* margin-left: 0.25em; */
+}
+
+span[data-name="ロゴ"] {
+ margin-right: 0.25em;
+}
+
+span[data-name="割書"] {
+ /*display: warichu;*/
+ /*font-size: 0.5em;*/
+}
+
+span[data-name="尊敬形G"],
+span[data-name="謙譲形G"],
+span[data-name="丁寧形G"] {
+ display: block;
+}
+
+span[data-name="百科"],
+span[data-name="由来"],
+span[data-name="区別"],
+span[data-name="アクセント注記"] {
+ display: block;
+}
+
+span[data-name="表記情報"] {
+ display: block;
+}
+
+span[data-name="別見出"] {
+ font-family: jpmincho, serif;
+ font-weight: bold;
+}
+
+span[data-name="読み"] {
+ font-size: 0.7em;
+}
+
+span[data-name="歴史仮名"]:before,
+span[data-name="ルビ"]:before {
+ content: "(";
+}
+
+span[data-name="歴史仮名"]:after,
+span[data-name="ルビ"]:after {
+ content: ")";
+}
+
+div[data-child-links] {
+ padding-left: 1em;
+}
+
+div[data-child-links] ul {
+ margin: 0;
+ padding-left: 2em;
+}
+
+div[data-child-links] span {
+ padding: 0.1em;
+ font-family: jpgothic, sans-serif;
+ font-size: 0.8em;
+ color: white;
+ border-width: 0.05em;
+ border-style: none;
+ border-color: black;
+ border-radius: 0.2em;
+ word-break: keep-all;
+}
+
+div[data-child-links="子項目"] span {
+ background-color: rgb(153, 42, 103);
+}
+
+div[data-child-links="句項目"] span {
+ background-color: rgb(176, 127, 57);
+}
+
+
+/* Replacements for vertical SVG icons */
+span[data-src="svg-logo/区別.svg"],
+span[data-src="svg-logo/由来.svg"] {
+ font-family: jpgothic, sans-serif;
+ margin-left: 0.25em;
+ margin-right: 0.25em;
+ padding: 0em 0.1em 0.1em 0.1em;
+ font-size: 0.8em;
+ word-break: keep-all;
+ border-radius: 0.2em;
+ border-style: none;
+ color: white;
+ background-color: red;
+}
+
+span[data-src="svg-logo/アク.svg"],
+span[data-src="svg-logo/丁寧.svg"],
+span[data-src="svg-logo/可能.svg"],
+span[data-src="svg-logo/尊敬.svg"],
+span[data-src="svg-logo/表記.svg"],
+span[data-src="svg-logo/謙譲.svg"],
+span[data-src="svg-logo/接尾.svg"],
+span[data-src="svg-logo/接頭.svg"] {
+ margin-left: 0.25em;
+ margin-right: 0.25em;
+ padding: 0em 0.1em 0.1em 0.1em;
+ font-size: 0.8em;
+ word-break: keep-all;
+ border-width: 0.1em;
+ border-style: solid;
+ border-radius: 0.2em;
+}
+
+span[data-src="svg-logo/アク.svg"],
+span[data-src="svg-logo/丁寧.svg"],
+span[data-src="svg-logo/可能.svg"],
+span[data-src="svg-logo/尊敬.svg"],
+span[data-src="svg-logo/表記.svg"],
+span[data-src="svg-logo/謙譲.svg"] {
+ font-family: jpgothic, sans-serif;
+}
+
+span[data-src="svg-logo/接尾.svg"],
+span[data-src="svg-logo/接頭.svg"] {
+ font-family: jpmincho, serif;
+}
diff --git a/data/mdict/description/sankoku8.mdx.description.html b/data/mdict/description/sankoku8.mdx.description.html
new file mode 100644
index 0000000..12abb77
--- /dev/null
+++ b/data/mdict/description/sankoku8.mdx.description.html
@@ -0,0 +1,7 @@
+三省堂国語辞典 第八版
+
+https://www.monokakido.jp/ja/dictionaries/sankoku8/index.html
+
+{{revision}}
+
+{{attribution}}
diff --git a/data/mdict/name_conversion/sankoku8.json b/data/mdict/name_conversion/sankoku8.json
new file mode 100644
index 0000000..c790845
--- /dev/null
+++ b/data/mdict/name_conversion/sankoku8.json
@@ -0,0 +1,22 @@
+{
+ "a": {},
+ "br": {},
+ "img": {},
+ "div": {},
+ "span": {},
+ "small": {},
+ "sup": {},
+ "sub": {},
+ "表外字": {
+ "name": "ruby"
+ },
+ "表外字マーク": {
+ "name": "rt"
+ },
+ "表外音訓": {
+ "name": "ruby"
+ },
+ "表外音訓マーク": {
+ "name": "rt"
+ }
+}
diff --git a/data/mdict/title/sankoku8.mdx.title.html b/data/mdict/title/sankoku8.mdx.title.html
new file mode 100644
index 0000000..fbb17d9
--- /dev/null
+++ b/data/mdict/title/sankoku8.mdx.title.html
@@ -0,0 +1 @@
+三省堂国語辞典 第八版
diff --git a/data/yomichan/dictionary-term-bank-v3-schema.json b/data/yomichan/dictionary-term-bank-v3-schema.json
new file mode 100644
index 0000000..335144c
--- /dev/null
+++ b/data/yomichan/dictionary-term-bank-v3-schema.json
@@ -0,0 +1,474 @@
+{
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "definitions": {
+ "structuredContent": {
+ "oneOf": [
+ {
+ "type": "string",
+ "description": "Represents a text node."
+ },
+ {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/structuredContent",
+ "description": "An array of child content."
+ }
+ },
+ {
+ "type": "object",
+ "oneOf": [
+ {
+ "type": "object",
+ "description": "Empty tags.",
+ "required": [
+ "tag"
+ ],
+ "additionalProperties": false,
+ "properties": {
+ "tag": {
+ "type": "string",
+ "const": "br"
+ },
+ "data": {
+ "$ref": "#/definitions/structuredContentData"
+ }
+ }
+ },
+ {
+ "type": "object",
+ "description": "Generic container tags.",
+ "required": [
+ "tag"
+ ],
+ "additionalProperties": false,
+ "properties": {
+ "tag": {
+ "type": "string",
+ "enum": ["ruby", "rt", "rp", "table", "thead", "tbody", "tfoot", "tr"]
+ },
+ "content": {
+ "$ref": "#/definitions/structuredContent"
+ },
+ "data": {
+ "$ref": "#/definitions/structuredContentData"
+ },
+ "lang": {
+ "type": "string",
+ "description": "Defines the language of an element in the format defined by RFC 5646."
+ }
+ }
+ },
+ {
+ "type": "object",
+ "description": "Table tags.",
+ "required": [
+ "tag"
+ ],
+ "additionalProperties": false,
+ "properties": {
+ "tag": {
+ "type": "string",
+ "enum": ["td", "th"]
+ },
+ "content": {
+ "$ref": "#/definitions/structuredContent"
+ },
+ "data": {
+ "$ref": "#/definitions/structuredContentData"
+ },
+ "colSpan": {
+ "type": "integer",
+ "minimum": 1
+ },
+ "rowSpan": {
+ "type": "integer",
+ "minimum": 1
+ },
+ "style": {
+ "$ref": "#/definitions/structuredContentStyle"
+ },
+ "lang": {
+ "type": "string",
+ "description": "Defines the language of an element in the format defined by RFC 5646."
+ }
+ }
+ },
+ {
+ "type": "object",
+ "description": "Container tags supporting configurable styles.",
+ "required": [
+ "tag"
+ ],
+ "additionalProperties": false,
+ "properties": {
+ "tag": {
+ "type": "string",
+ "enum": ["span", "div", "ol", "ul", "li"]
+ },
+ "content": {
+ "$ref": "#/definitions/structuredContent"
+ },
+ "data": {
+ "$ref": "#/definitions/structuredContentData"
+ },
+ "style": {
+ "$ref": "#/definitions/structuredContentStyle"
+ },
+ "lang": {
+ "type": "string",
+ "description": "Defines the language of an element in the format defined by RFC 5646."
+ }
+ }
+ },
+ {
+ "type": "object",
+ "description": "Image tag.",
+ "required": [
+ "tag",
+ "path"
+ ],
+ "additionalProperties": false,
+ "properties": {
+ "tag": {
+ "type": "string",
+ "const": "img"
+ },
+ "data": {
+ "$ref": "#/definitions/structuredContentData"
+ },
+ "path": {
+ "type": "string",
+ "description": "Path to the image file in the archive."
+ },
+ "width": {
+ "type": "number",
+ "description": "Preferred width of the image.",
+ "minimum": 0
+ },
+ "height": {
+ "type": "number",
+ "description": "Preferred width of the image.",
+ "minimum": 0
+ },
+ "title": {
+ "type": "string",
+ "description": "Hover text for the image."
+ },
+ "pixelated": {
+ "type": "boolean",
+ "description": "Whether or not the image should appear pixelated at sizes larger than the image's native resolution.",
+ "default": false
+ },
+ "imageRendering": {
+ "type": "string",
+ "description": "Controls how the image is rendered. The value of this field supersedes the pixelated field.",
+ "enum": ["auto", "pixelated", "crisp-edges"],
+ "default": "auto"
+ },
+ "appearance": {
+ "type": "string",
+ "description": "Controls the appearance of the image. The \"monochrome\" value will mask the opaque parts of the image using the current text color.",
+ "enum": ["auto", "monochrome"],
+ "default": "auto"
+ },
+ "background": {
+ "type": "boolean",
+ "description": "Whether or not a background color is displayed behind the image.",
+ "default": true
+ },
+ "collapsed": {
+ "type": "boolean",
+ "description": "Whether or not the image is collapsed by default.",
+ "default": false
+ },
+ "collapsible": {
+ "type": "boolean",
+ "description": "Whether or not the image can be collapsed.",
+ "default": false
+ },
+ "verticalAlign": {
+ "type": "string",
+ "description": "The vertical alignment of the image.",
+ "enum": ["baseline", "sub", "super", "text-top", "text-bottom", "middle", "top", "bottom"]
+ },
+ "sizeUnits": {
+ "type": "string",
+ "description": "The units for the width and height.",
+ "enum": ["px", "em"]
+ }
+ }
+ },
+ {
+ "type": "object",
+ "description": "Link tag.",
+ "required": [
+ "tag",
+ "href"
+ ],
+ "additionalProperties": false,
+ "properties": {
+ "tag": {
+ "type": "string",
+ "const": "a"
+ },
+ "content": {
+ "$ref": "#/definitions/structuredContent"
+ },
+ "href": {
+ "type": "string",
+ "description": "The URL for the link. URLs starting with a ? are treated as internal links to other dictionary content.",
+ "pattern": "^(?:https?:|\\?)[\\w\\W]*"
+ },
+ "lang": {
+ "type": "string",
+ "description": "Defines the language of an element in the format defined by RFC 5646."
+ }
+ }
+ }
+ ]
+ }
+ ]
+ },
+ "structuredContentData": {
+ "type": "object",
+ "description": "Generic data attributes that should be added to the element.",
+ "additionalProperties": {
+ "type": "string"
+ }
+ },
+ "structuredContentStyle": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "fontStyle": {
+ "type": "string",
+ "enum": ["normal", "italic"],
+ "default": "normal"
+ },
+ "fontWeight": {
+ "type": "string",
+ "enum": ["normal", "bold"],
+ "default": "normal"
+ },
+ "fontSize": {
+ "type": "string",
+ "default": "medium"
+ },
+ "textDecorationLine": {
+ "oneOf": [
+ {
+ "type": "string",
+ "enum": ["none", "underline", "overline", "line-through"],
+ "default": "none"
+ },
+ {
+ "type": "array",
+ "items": {
+ "type": "string",
+ "enum": ["underline", "overline", "line-through"],
+ "default": "none"
+ }
+ }
+ ]
+ },
+ "verticalAlign": {
+ "type": "string",
+ "enum": ["baseline", "sub", "super", "text-top", "text-bottom", "middle", "top", "bottom"],
+ "default": "baseline"
+ },
+ "textAlign": {
+ "type": "string",
+ "enum": ["start", "end", "left", "right", "center", "justify", "justify-all", "match-parent"],
+ "default": "start"
+ },
+ "marginTop": {
+ "type": "number",
+ "default": 0
+ },
+ "marginLeft": {
+ "type": "number",
+ "default": 0
+ },
+ "marginRight": {
+ "type": "number",
+ "default": 0
+ },
+ "marginBottom": {
+ "type": "number",
+ "default": 0
+ },
+ "listStyleType": {
+ "type": "string",
+ "default": "disc"
+ }
+ }
+ }
+ },
+ "type": "array",
+ "description": "Data file containing term information.",
+ "items": {
+ "type": "array",
+ "description": "Information about a single term.",
+ "minItems": 8,
+ "additionalItems": false,
+ "items": [
+ {
+ "type": "string",
+ "description": "The text for the term."
+ },
+ {
+ "type": "string",
+ "description": "Reading of the term, or an empty string if the reading is the same as the term."
+ },
+ {
+ "type": ["string", "null"],
+ "description": "String of space-separated tags for the definition. An empty string is treated as no tags."
+ },
+ {
+ "type": "string",
+ "description": "String of space-separated rule identifiers for the definition which is used to validate delinflection. Valid rule identifiers are: v1: ichidan verb; v5: godan verb; vs: suru verb; vk: kuru verb; adj-i: i-adjective. An empty string corresponds to words which aren't inflected, such as nouns."
+ },
+ {
+ "type": "number",
+ "description": "Score used to determine popularity. Negative values are more rare and positive values are more frequent. This score is also used to sort search results."
+ },
+ {
+ "type": "array",
+ "description": "Array of definitions for the term.",
+ "items": {
+ "oneOf": [
+ {
+ "type": "string",
+ "description": "Single definition for the term."
+ },
+ {
+ "type": "object",
+ "description": "Single detailed definition for the term.",
+ "required": [
+ "type"
+ ],
+ "properties": {
+ "type": {
+ "type": "string",
+ "description": "The type of the data for this definition.",
+ "enum": ["text", "image", "structured-content"]
+ }
+ },
+ "oneOf": [
+ {
+ "required": [
+ "type",
+ "text"
+ ],
+ "additionalProperties": false,
+ "properties": {
+ "type": {
+ "type": "string",
+ "const": "text"
+ },
+ "text": {
+ "type": "string",
+ "description": "Single definition for the term."
+ }
+ }
+ },
+ {
+ "required": [
+ "type",
+ "content"
+ ],
+ "additionalProperties": false,
+ "properties": {
+ "type": {
+ "type": "string",
+ "const": "structured-content"
+ },
+ "content": {
+ "$ref": "#/definitions/structuredContent",
+ "description": "Single definition for the term using a structured content object."
+ }
+ }
+ },
+ {
+ "required": [
+ "type",
+ "path"
+ ],
+ "additionalProperties": false,
+ "properties": {
+ "type": {
+ "type": "string",
+ "const": "image"
+ },
+ "path": {
+ "type": "string",
+ "description": "Path to the image file in the archive."
+ },
+ "width": {
+ "type": "integer",
+ "description": "Preferred width of the image.",
+ "minimum": 1
+ },
+ "height": {
+ "type": "integer",
+ "description": "Preferred width of the image.",
+ "minimum": 1
+ },
+ "title": {
+ "type": "string",
+ "description": "Hover text for the image."
+ },
+ "description": {
+ "type": "string",
+ "description": "Description of the image."
+ },
+ "pixelated": {
+ "type": "boolean",
+ "description": "Whether or not the image should appear pixelated at sizes larger than the image's native resolution.",
+ "default": false
+ },
+ "imageRendering": {
+ "type": "string",
+ "description": "Controls how the image is rendered. The value of this field supersedes the pixelated field.",
+ "enum": ["auto", "pixelated", "crisp-edges"],
+ "default": "auto"
+ },
+ "appearance": {
+ "type": "string",
+ "description": "Controls the appearance of the image. The \"monochrome\" value will mask the opaque parts of the image using the current text color.",
+ "enum": ["auto", "monochrome"],
+ "default": "auto"
+ },
+ "background": {
+ "type": "boolean",
+ "description": "Whether or not a background color is displayed behind the image.",
+ "default": true
+ },
+ "collapsed": {
+ "type": "boolean",
+ "description": "Whether or not the image is collapsed by default.",
+ "default": false
+ },
+ "collapsible": {
+ "type": "boolean",
+ "description": "Whether or not the image can be collapsed.",
+ "default": true
+ }
+ }
+ }
+ ]
+ }
+ ]
+ }
+ },
+ {
+ "type": "integer",
+ "description": "Sequence number for the term. Terms with the same sequence number can be shown together when the \"resultOutputMode\" option is set to \"merge\"."
+ },
+ {
+ "type": "string",
+ "description": "String of space-separated tags for the term. An empty string is treated as no tags."
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/data/yomichan/index.json b/data/yomichan/index.json
index 3fa8cb4..45e2dc6 100644
--- a/data/yomichan/index.json
+++ b/data/yomichan/index.json
@@ -56,5 +56,16 @@
["子", "name", 0, "子項目", 0],
["句", "expression", 0, "句項目", 0]
]
+ },
+ "sankoku8": {
+ "index": {
+ "title": "三省堂国語辞典 第八版",
+ "sequenced": true,
+ "format": 3
+ },
+ "tags": [
+ ["子", "name", 0, "子項目", 0],
+ ["句", "expression", 0, "句項目", 0]
+ ]
}
}
diff --git a/data/yomichan/inflection_categories.json b/data/yomichan/inflection_categories.json
index 396ddb6..a36c589 100644
--- a/data/yomichan/inflection_categories.json
+++ b/data/yomichan/inflection_categories.json
@@ -25,5 +25,13 @@
"keiyoushi": ["形"],
"kahen": ["カ変"],
"sudachi": ["助動", "接尾", "枕詞", "連体", "連語"]
+ },
+ "sankoku8": {
+ "sahen": ["サ", "サ型"],
+ "godan": ["上二", "下二", "下二型", "四","四型", "五", "五型", "特殊型", "マス","マス型"],
+ "ichidan": ["上一", "下一", "下一型"],
+ "keiyoushi": ["形", "形型"],
+ "kahen": ["カ"],
+ "sudachi": []
}
}
diff --git a/data/yomichan/name_conversion/sankoku8.json b/data/yomichan/name_conversion/sankoku8.json
new file mode 100644
index 0000000..f9323ac
--- /dev/null
+++ b/data/yomichan/name_conversion/sankoku8.json
@@ -0,0 +1,495 @@
+{
+ "a": {},
+ "br": {},
+ "img": {},
+ "div": {},
+ "span": {},
+ "ruby": {},
+ "rt": {},
+ "small": {
+ "name": "span",
+ "style": "vertical-align: super; font-size: 0.65em; font-weight: normal; margin-right: 0.25em;",
+ "procedures": [
+ {
+ "procedure_name": "wrap",
+ "parameters": {
+ "l_wrap": "(",
+ "r_wrap": ")"
+ }
+ }
+ ]
+ },
+ "sup": {
+ "name": "span",
+ "style": "vertical-align: super; font-size: 0.65em;"
+ },
+ "sub": {
+ "name": "span",
+ "style": "vertical-align: sub; font-size: 0.65em;"
+ },
+ "表外字": {
+ "name": "ruby"
+ },
+ "表外字マーク": {
+ "name": "rt"
+ },
+ "表外音訓": {
+ "name": "ruby"
+ },
+ "表外音訓マーク": {
+ "name": "rt"
+ },
+ "語構成": {
+ "name": "span",
+ "style": "margin-right: 0.5em;"
+ },
+ "分書": {
+ "name": "span",
+ "style": "margin-right: 0.5em;"
+ },
+ "見出仮名": {
+ "name": "span",
+ "style": "font-weight: bold;"
+ },
+ "解説部": {
+ "name": "div"
+ },
+ "子解説部": {
+ "name": "div"
+ },
+ "句解説部": {
+ "name": "div"
+ },
+ "大語義": {
+ "name": "div"
+ },
+ "語義": {
+ "name": "div"
+ },
+ "副義": {
+ "name": "div",
+ "style": "margin-left: 1.0em;"
+ },
+ "注記語義": {
+ "name": "span",
+ "style": "margin-left: 0.5em;"
+ },
+ "用例G": {
+ "name": "div",
+ "procedures": [
+ {
+ "procedure_name": "has_parent",
+ "parameters": {
+ "parent_name": "百科",
+ "key": "name",
+ "value": "span"
+ }
+ },
+ {
+ "procedure_name": "has_parent",
+ "parameters": {
+ "parent_name": "注記",
+ "key": "name",
+ "value": "span"
+ }
+ },
+ {
+ "procedure_name": "has_parent",
+ "parameters": {
+ "parent_name": "名詞形G",
+ "key": "name",
+ "value": "span"
+ }
+ },
+ {
+ "procedure_name": "has_parent",
+ "parameters": {
+ "parent_name": "動詞形G",
+ "key": "name",
+ "value": "span"
+ }
+ },
+ {
+ "procedure_name": "has_parent",
+ "parameters": {
+ "parent_name": "自動詞形G",
+ "key": "name",
+ "value": "span"
+ }
+ },
+ {
+ "procedure_name": "has_parent",
+ "parameters": {
+ "parent_name": "他動詞形G",
+ "key": "name",
+ "value": "span"
+ }
+ },
+ {
+ "procedure_name": "has_parent",
+ "parameters": {
+ "parent_name": "可能形G",
+ "key": "name",
+ "value": "span"
+ }
+ },
+ {
+ "procedure_name": "has_parent",
+ "parameters": {
+ "parent_name": "人G",
+ "key": "name",
+ "value": "span"
+ }
+ }
+ ]
+ },
+ "見出相当部": {
+ "name": "span",
+ "style": "margin-left: 0.125em; margin-right: 0.125em;"
+ },
+ "ルビG": {
+ "name": "span",
+ "style": "vertical-align: super; font-size: 0.65em; font-weight: normal;"
+ },
+ "名詞人形G": {
+ "name": "div"
+ },
+ "名詞形G": {
+ "name": "div",
+ "procedures": [
+ {
+ "procedure_name": "has_parent",
+ "parameters": {
+ "parent_name": "語義",
+ "key": "name",
+ "value": "span"
+ }
+ },
+ {
+ "procedure_name": "has_parent",
+ "parameters": {
+ "parent_name": "副義",
+ "key": "name",
+ "value": "span"
+ }
+ },
+ {
+ "procedure_name": "has_parent",
+ "parameters": {
+ "parent_name": "注記",
+ "key": "name",
+ "value": "span"
+ }
+ },
+ {
+ "procedure_name": "has_parent",
+ "parameters": {
+ "parent_name": "共通",
+ "key": "name",
+ "value": "span"
+ }
+ }
+ ]
+ },
+ "動詞形G": {
+ "name": "div",
+ "procedures": [
+ {
+ "procedure_name": "has_parent",
+ "parameters": {
+ "parent_name": "語義",
+ "key": "name",
+ "value": "span"
+ }
+ },
+ {
+ "procedure_name": "has_parent",
+ "parameters": {
+ "parent_name": "副義",
+ "key": "name",
+ "value": "span"
+ }
+ },
+ {
+ "procedure_name": "has_parent",
+ "parameters": {
+ "parent_name": "注記",
+ "key": "name",
+ "value": "span"
+ }
+ },
+ {
+ "procedure_name": "has_parent",
+ "parameters": {
+ "parent_name": "共通",
+ "key": "name",
+ "value": "span"
+ }
+ }
+ ]
+ },
+ "自動詞形G": {
+ "name": "div",
+ "procedures": [
+ {
+ "procedure_name": "has_parent",
+ "parameters": {
+ "parent_name": "語義",
+ "key": "name",
+ "value": "span"
+ }
+ },
+ {
+ "procedure_name": "has_parent",
+ "parameters": {
+ "parent_name": "副義",
+ "key": "name",
+ "value": "span"
+ }
+ },
+ {
+ "procedure_name": "has_parent",
+ "parameters": {
+ "parent_name": "注記",
+ "key": "name",
+ "value": "span"
+ }
+ },
+ {
+ "procedure_name": "has_parent",
+ "parameters": {
+ "parent_name": "共通",
+ "key": "name",
+ "value": "span"
+ }
+ }
+ ]
+ },
+ "他動詞形G": {
+ "name": "div",
+ "procedures": [
+ {
+ "procedure_name": "has_parent",
+ "parameters": {
+ "parent_name": "語義",
+ "key": "name",
+ "value": "span"
+ }
+ },
+ {
+ "procedure_name": "has_parent",
+ "parameters": {
+ "parent_name": "副義",
+ "key": "name",
+ "value": "span"
+ }
+ },
+ {
+ "procedure_name": "has_parent",
+ "parameters": {
+ "parent_name": "注記",
+ "key": "name",
+ "value": "span"
+ }
+ },
+ {
+ "procedure_name": "has_parent",
+ "parameters": {
+ "parent_name": "共通",
+ "key": "name",
+ "value": "span"
+ }
+ }
+ ]
+ },
+ "可能形G": {
+ "name": "div",
+ "procedures": [
+ {
+ "procedure_name": "has_parent",
+ "parameters": {
+ "parent_name": "語義",
+ "key": "name",
+ "value": "span"
+ }
+ },
+ {
+ "procedure_name": "has_parent",
+ "parameters": {
+ "parent_name": "副義",
+ "key": "name",
+ "value": "span"
+ }
+ },
+ {
+ "procedure_name": "has_parent",
+ "parameters": {
+ "parent_name": "注記",
+ "key": "name",
+ "value": "span"
+ }
+ },
+ {
+ "procedure_name": "has_parent",
+ "parameters": {
+ "parent_name": "共通",
+ "key": "name",
+ "value": "span"
+ }
+ }
+ ]
+ },
+ "人G": {
+ "name": "div",
+ "procedures": [
+ {
+ "procedure_name": "has_parent",
+ "parameters": {
+ "parent_name": "語義",
+ "key": "name",
+ "value": "span"
+ }
+ },
+ {
+ "procedure_name": "has_parent",
+ "parameters": {
+ "parent_name": "副義",
+ "key": "name",
+ "value": "span"
+ }
+ },
+ {
+ "procedure_name": "has_parent",
+ "parameters": {
+ "parent_name": "注記",
+ "key": "name",
+ "value": "span"
+ }
+ },
+ {
+ "procedure_name": "has_parent",
+ "parameters": {
+ "parent_name": "共通",
+ "key": "name",
+ "value": "span"
+ }
+ }
+ ]
+ },
+ "参照矢印": {
+ "name": "span",
+ "style": "margin-right: 0.25em;"
+ },
+ "子見出仮名": {
+ "name": "span",
+ "style": "font-weight: bold;"
+ },
+ "句表記": {
+ "name": "span",
+ "style": "font-weight: bold;"
+ },
+ "派生語G": {
+ "name": "div"
+ },
+ "謙譲形G": {
+ "name": "div"
+ },
+ "共通": {
+ "name": "div"
+ },
+ "イタリック": {
+ "name": "span",
+ "style": "font-style: italic;"
+ },
+ "ボールド": {
+ "name": "span",
+ "style": "font-weight: bold;"
+ },
+ "アクセント表記": {
+ "name": "span",
+ "style": "font-weight: bold; font-size: 0.85em;"
+ },
+ "i": {
+ "name": "span",
+ "style": "font-style: italic;"
+ },
+ "sub": {
+ "name": "span",
+ "style": "font-size: 0.7em; vertical-align: sub;",
+ "procedures": [
+ {
+ "procedure_name": "has_parent",
+ "parameters": {
+ "parent_name": "横",
+ "key": "style",
+ "value": "font-size: 0.7em; vertical-align: super;"
+ }
+ }
+ ]
+ },
+ "kanbun": {
+ "name": "span",
+ "style": "font-size: 0.5em; vertical-align: sub;"
+ },
+ "ロゴ": {
+ "name": "span",
+ "style": "margin-right: 0.25em"
+ },
+ "尊敬形G": {
+ "name": "div"
+ },
+ "謙譲形G": {
+ "name": "div"
+ },
+ "丁寧形G": {
+ "name": "div"
+ },
+ "百科": {
+ "name": "div"
+ },
+ "由来": {
+ "name": "div"
+ },
+ "区別": {
+ "name": "div"
+ },
+ "アクセント注記": {
+ "name": "div"
+ },
+ "表記情報": {
+ "name": "div"
+ },
+ "別見出": {
+ "name": "span",
+ "style": "font-weight: bold;"
+ },
+ "読み": {
+ "name": "span",
+ "style": "font-size: 0.7em;"
+ },
+ "歴史仮名": {
+ "name": "span",
+ "style": "vertical-align: super; font-size: 0.65em; font-weight: normal;",
+ "procedures": [
+ {
+ "procedure_name": "wrap",
+ "parameters": {
+ "l_wrap": "(",
+ "r_wrap": ")"
+ }
+ }
+ ]
+ },
+ "ルビ": {
+ "name": "span",
+ "procedures": [
+ {
+ "procedure_name": "wrap",
+ "parameters": {
+ "l_wrap": "(",
+ "r_wrap": ")"
+ }
+ }
+ ]
+ }
+}
diff --git a/jitenbot.py b/jitenbot.py
index e988df9..da44905 100644
--- a/jitenbot.py
+++ b/jitenbot.py
@@ -68,14 +68,19 @@ def parse_args(target_names):
help="path to icon file to be used with MDict",
type=filename,
)
+ parser.add_argument(
+ "--no-mdict-export",
+ help="skip export of dictionary data to MDict format",
+ action='store_true',
+ )
parser.add_argument(
"--no-yomichan-export",
help="skip export of dictionary data to Yomichan format",
action='store_true',
)
parser.add_argument(
- "--no-mdict-export",
- help="skip export of dictionary data to MDict format",
+ "--validate-yomichan-terms",
+ help="validate JSON structure of exported Yomichan dictionary terms",
action='store_true',
)
args = parser.parse_args()
@@ -108,9 +113,11 @@ def main():
crawler.collect_pages(args.page_dir)
crawler.read_pages()
if not args.no_yomichan_export:
- crawler.make_yomichan_dictionary(args.media_dir)
+ crawler.make_yomichan_dictionary(
+ args.media_dir, args.validate_yomichan_terms)
if not args.no_mdict_export:
- crawler.make_mdict_dictionary(args.media_dir, args.mdict_icon)
+ crawler.make_mdict_dictionary(
+ args.media_dir, args.mdict_icon)
if __name__ == "__main__":
diff --git a/requirements.txt b/requirements.txt
index 8802356..b19e14b 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -1,15 +1,20 @@
+attrs==23.1.0
beautifulsoup4==4.12.2
bs4==0.0.1
certifi==2022.12.7
charset-normalizer==3.1.0
css-parser==1.0.8
+fastjsonschema==2.17.1
html5lib==1.1
idna==3.4
+jsonschema-specifications==2023.6.1
lxml==4.9.2
mdict-utils==1.3.12
Pillow==9.5.0
platformdirs==3.5.0
+referencing==0.29.1
requests==2.29.0
+rpds-py==0.8.10
six==1.16.0
soupsieve==2.4.1
SudachiDict-full==20230110
diff --git a/run_all.sh b/run_all.sh
old mode 100644
new mode 100755
index 2bdd31e..706a911
--- a/run_all.sh
+++ b/run_all.sh
@@ -1,3 +1,7 @@
+#!/bin/sh
+
+python -m unittest discover -s tests
+
python jitenbot.py jitenon-kokugo
python jitenbot.py jitenon-yoji
python jitenbot.py jitenon-kotowaza
@@ -11,3 +15,8 @@ python jitenbot.py daijirin2 \
--media-dir monokakido/DAIJIRIN2/media \
--page-dir monokakido/DAIJIRIN2/pages \
--mdict-icon monokakido/DAIJIRIN2/DAIJIRIN2-76@3x.png
+
+python jitenbot.py sankoku8 \
+ --media-dir monokakido/SANKOKU8/media \
+ --page-dir monokakido/SANKOKU8/pages \
+ --mdict-icon monokakido/SANKOKU8/SANKOKU8-76@3x.png
diff --git a/tests/test_sankoku_phrases.py b/tests/test_sankoku_phrases.py
new file mode 100644
index 0000000..85f42fa
--- /dev/null
+++ b/tests/test_sankoku_phrases.py
@@ -0,0 +1,47 @@
+import unittest
+from bot.entries.sankoku8 import parse_hyouki_pattern
+from bs4 import BeautifulSoup
+
+
+class TestSankokuPhrases(unittest.TestCase):
+ def test_sankoku_phrases1(self):
+ pattern = '耳にたこ(ができる)'
+ exps = parse_hyouki_pattern(pattern)
+ self.assertEqual(len(exps), 2)
+ self.assertIn("耳にたこ", exps)
+ self.assertIn("耳にたこができる", exps)
+
+ def test_sankoku_phrases2(self):
+ pattern = '一斑を〈見て/もって〉全豹を〈卜す/推す〉'
+ exps = parse_hyouki_pattern(pattern)
+ self.assertEqual(len(exps), 4)
+ self.assertIn("一斑を見て全豹を卜す", exps)
+ self.assertIn("一斑を見て全豹を推す", exps)
+ self.assertIn("一斑をもって全豹を卜す", exps)
+ self.assertIn("一斑をもって全豹を推す", exps)
+
+ def test_sankoku_phrases3(self):
+ pattern = '{かじ・舵}を切る'
+ exps = parse_hyouki_pattern(pattern)
+ self.assertEqual(len(exps), 2)
+ self.assertIn("かじを切る", exps)
+ self.assertIn("舵を切る", exps)
+
+ def test_sankoku_phrases4(self):
+ pattern = '重箱の隅を(⦅ようじ\楊枝⦆で)〈つつく/ほじくる〉'
+ exps = parse_hyouki_pattern(pattern)
+ self.assertEqual(len(exps), 6)
+ self.assertIn("重箱の隅をつつく", exps)
+ self.assertIn("重箱の隅をようじでつつく", exps)
+ self.assertIn("重箱の隅を楊枝でつつく", exps)
+ self.assertIn("重箱の隅をほじくる", exps)
+ self.assertIn("重箱の隅をようじでほじくる", exps)
+ self.assertIn("重箱の隅を楊枝でほじくる", exps)
+
+ def test_sankoku_phrases5(self):
+ pattern = '群盲象を〈{な・撫}でる/評する〉'
+ exps = parse_hyouki_pattern(pattern)
+ self.assertEqual(len(exps), 3)
+ self.assertIn("群盲象をなでる", exps)
+ self.assertIn("群盲象を撫でる", exps)
+ self.assertIn("群盲象を評する", exps)