chore: Halkyon Learn moves into apps/learn
Its server, client, app and curator, and the tools that write its assets (maps, Anki fixtures, icons), as they are; paths are fixed in the commits that follow. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
This commit is contained in:
parent
11abd9afce
commit
649499be23
40 changed files with 0 additions and 0 deletions
45
apps/learn/halkyon_learn_curator/test/alphabets_test.dart
Normal file
45
apps/learn/halkyon_learn_curator/test/alphabets_test.dart
Normal file
|
|
@ -0,0 +1,45 @@
|
|||
import 'dart:convert';
|
||||
|
||||
import 'package:halkyon_learn_curator/src/sources/alphabets.dart';
|
||||
import 'package:test/test.dart';
|
||||
|
||||
void main() {
|
||||
test('the Greek alphabet in its order, each letter with its capital, '
|
||||
'names, transliteration and sound', () {
|
||||
final [header, ...letters] = [
|
||||
for (final line in greekAlphabet())
|
||||
jsonDecode(line) as Map<String, Object?>,
|
||||
];
|
||||
|
||||
expect(header['source'], 'greek-alphabet');
|
||||
expect(header['kind'], 'characters');
|
||||
expect(header['language'], 'el');
|
||||
expect(letters, hasLength(24));
|
||||
expect(letters.first['headword'], 'Α α');
|
||||
final sigma = letters.singleWhere((letter) => letter['id'] == 'σ');
|
||||
expect(sigma['headword'], 'Σ σ ς');
|
||||
expect(sigma['keys'], containsAll(['ς', 'σίγμα', 'sigma', 's']));
|
||||
expect(letters[1]['entry'], {
|
||||
'romaji': 'v',
|
||||
'script': 'greek',
|
||||
'name': 'βήτα',
|
||||
'englishName': 'beta',
|
||||
'sound': 'v',
|
||||
});
|
||||
// Found by a name typed without its accent.
|
||||
expect(letters.last['keys'], contains('ωμεγα'));
|
||||
});
|
||||
|
||||
test('the Hangul letters in the order schools teach them, found by sound '
|
||||
'and name', () {
|
||||
final letters = hangulEntries();
|
||||
|
||||
expect(letters, hasLength(40));
|
||||
expect(letters.first.headword, 'ㄱ');
|
||||
expect(letters.first.keys, containsAll(['ㄱ', '기역', 'g', 'k']));
|
||||
// ㅇ is silent opening a syllable: no key for its sound there.
|
||||
final ieung = letters.singleWhere((letter) => letter.id == 'ㅇ');
|
||||
expect(ieung.keys, ['ㅇ', '이응', 'ng']);
|
||||
expect(letters.last.headword, 'ㅢ');
|
||||
});
|
||||
}
|
||||
148
apps/learn/halkyon_learn_curator/test/cedict_test.dart
Normal file
148
apps/learn/halkyon_learn_curator/test/cedict_test.dart
Normal file
|
|
@ -0,0 +1,148 @@
|
|||
import 'dart:convert';
|
||||
import 'dart:io';
|
||||
|
||||
import 'package:halkyon_learn_curator/src/sources/cedict.dart';
|
||||
import 'package:test/test.dart';
|
||||
|
||||
void main() {
|
||||
late String sample;
|
||||
late HskLevels hsk;
|
||||
|
||||
setUpAll(() async {
|
||||
sample = await File('test/fixtures/cedict-sample.txt').readAsString();
|
||||
hsk = await readHskLevels(File('data/hsk/syllabus2025_words.tsv'));
|
||||
});
|
||||
|
||||
List<Map<String, Object?>> linesOf({required bool traditional}) => [
|
||||
for (final line in cedictDictionary(
|
||||
sample,
|
||||
traditional: traditional,
|
||||
hsk: hsk,
|
||||
))
|
||||
jsonDecode(line) as Map<String, Object?>,
|
||||
];
|
||||
|
||||
Map<String, Object?> entryOf(String id, {bool traditional = false}) =>
|
||||
linesOf(traditional: traditional)
|
||||
.skip(1)
|
||||
.singleWhere((line) => line['id'] == id);
|
||||
|
||||
test('a file in simplified characters and one in traditional ones, each '
|
||||
'a dictionary of its own', () {
|
||||
final simplified = linesOf(traditional: false).first;
|
||||
expect(simplified['source'], 'cc-cedict-hans');
|
||||
expect(simplified['language'], 'zh-Hans');
|
||||
expect(simplified['glossLanguage'], 'en');
|
||||
expect(simplified['sourceVersion'], '2026-10-13');
|
||||
expect(
|
||||
[
|
||||
for (final credit in simplified['credits']! as List)
|
||||
(credit as Map)['name'],
|
||||
],
|
||||
['CC-CEDICT', 'HSK 3.0 vocabulary (examination syllabus, 2025)'],
|
||||
);
|
||||
final traditional = linesOf(traditional: true).first;
|
||||
expect(traditional['source'], 'cc-cedict-hant');
|
||||
expect(traditional['language'], 'zh-Hant');
|
||||
expect(cedictFileName(traditional: true), 'cc-cedict-hant-en.jsonl.gz');
|
||||
});
|
||||
|
||||
test('a word: its characters in either script, its pinyin with tone '
|
||||
'marks, found typed without tones, in text by its characters', () {
|
||||
final xuexi = entryOf('學習 学习 [xue2 xi2]');
|
||||
expect(xuexi['headword'], '学习');
|
||||
expect(xuexi['reading'], 'xué xí');
|
||||
expect(
|
||||
(xuexi['keys']! as List).cast<String>(),
|
||||
containsAll([
|
||||
'学习',
|
||||
'學習',
|
||||
'xuexi',
|
||||
'xuéxí',
|
||||
'xue2xi2',
|
||||
'to learn',
|
||||
'learn',
|
||||
'study',
|
||||
]),
|
||||
);
|
||||
expect(xuexi['textKeys'], ['学习', '學習']);
|
||||
final entry = xuexi['entry']! as Map;
|
||||
expect(entry['forms'], [
|
||||
{'text': '學習'},
|
||||
]);
|
||||
expect(entry['senses'], [
|
||||
{
|
||||
'glosses': ['to learn', 'to study'],
|
||||
},
|
||||
]);
|
||||
expect(entryOf('學習 学习 [xue2 xi2]', traditional: true)['headword'], '學習');
|
||||
});
|
||||
|
||||
test('HSK levels go to the entry read as the syllabus reads the word: 的 '
|
||||
'de, not dì; 书 shū, not the Book of Documents, Shū', () {
|
||||
expect(entryOf('的 的 [de5]')['labels'], contains('hsk:1'));
|
||||
expect(entryOf('的 的 [di4]')['labels'], isNot(contains('hsk:1')));
|
||||
// Read with its tones: 说 shuō, not shuì.
|
||||
expect(entryOf('說 说 [shuo1]')['labels'], contains('hsk:1'));
|
||||
expect(entryOf('說 说 [shui4]')['labels'], isEmpty);
|
||||
expect(entryOf('書 书 [shu1]')['labels'], contains('hsk:1'));
|
||||
expect(entryOf('書 书 [Shu1]')['labels'], isEmpty);
|
||||
expect(entryOf('中國 中国 [Zhong1 guo2]')['labels'], contains('hsk:1'));
|
||||
expect(entryOf('銀行 银行 [yin2 hang2]')['labels'], contains('hsk:3'));
|
||||
// HSK 1 before HSK 3, both before words of no level.
|
||||
expect(
|
||||
entryOf('的 的 [de5]')['rank']! as int,
|
||||
lessThan(entryOf('銀行 银行 [yin2 hang2]')['rank']! as int),
|
||||
);
|
||||
expect(
|
||||
entryOf('銀行 银行 [yin2 hang2]')['rank']! as int,
|
||||
lessThan(entryOf('的 的 [di4]')['rank']! as int),
|
||||
);
|
||||
});
|
||||
|
||||
test('an entry that is only a variant of another is no entry, but finds '
|
||||
'that one', () {
|
||||
final ids = [
|
||||
for (final line in linesOf(traditional: false).skip(1)) line['id'],
|
||||
];
|
||||
expect(ids, isNot(contains('咊 和 [he2]')));
|
||||
expect(
|
||||
(entryOf('和 和 [he2]')['textKeys']! as List).cast<String>(),
|
||||
contains('咊'),
|
||||
);
|
||||
});
|
||||
|
||||
test('measure words are a remark beside the meanings, pinyin marked', () {
|
||||
final book = entryOf('書 书 [shu1]')['entry']! as Map;
|
||||
expect(book['classifiers'], ['本 běn', '冊|册 cè', '部 bù']);
|
||||
expect(
|
||||
[
|
||||
for (final sense in book['senses']! as List)
|
||||
...(sense as Map)['glosses']! as List,
|
||||
],
|
||||
['book', 'letter', 'document', 'to write'],
|
||||
);
|
||||
});
|
||||
|
||||
group('pinyin', () {
|
||||
test('takes its tone marks where they belong', () {
|
||||
expect(pinyinWithToneMarks('xue2 xi2'), 'xué xí');
|
||||
expect(pinyinWithToneMarks('Zhong1 guo2'), 'Zhōng guó');
|
||||
expect(pinyinWithToneMarks('nu:3 er2'), 'nǚ ér');
|
||||
expect(pinyinWithToneMarks('lu:e4'), 'lüè');
|
||||
expect(
|
||||
pinyinWithToneMarks('shuo1 gui4 liu2 xiong2'),
|
||||
'shuō guì liú xióng',
|
||||
);
|
||||
expect(pinyinWithToneMarks('dou1 le5 r5'), 'dōu le r');
|
||||
expect(pinyinWithToneMarks('A A zhi4'), 'A A zhì');
|
||||
});
|
||||
|
||||
test('is typed without its tones', () {
|
||||
expect(tonelessPinyin('xué xí'), 'xuexi');
|
||||
expect(tonelessPinyin('nǚ’ér'), 'nuer');
|
||||
expect(tonelessPinyin('yìsī-bùgǒu'), 'yisibugou');
|
||||
expect(tonelessPinyin('nu:3 er2'), 'nuer');
|
||||
});
|
||||
});
|
||||
}
|
||||
80
apps/learn/halkyon_learn_curator/test/fixtures/README.md
vendored
Normal file
80
apps/learn/halkyon_learn_curator/test/fixtures/README.md
vendored
Normal file
|
|
@ -0,0 +1,80 @@
|
|||
# Test data
|
||||
|
||||
`jmdict-eng-sample.json` holds six entries of JMdict 3.6.2 (2026-10-05) as
|
||||
jmdict-simplified writes it (<https://github.com/scriptin/jmdict-simplified>):
|
||||
JMdict is © the Electronic Dictionary Research and Development Group, used under
|
||||
its licence, CC BY-SA 4.0 (<https://www.edrdg.org/edrdg/licence.html>).
|
||||
|
||||
`jlpt/` holds a few rows of the JLPT lists of yomitan-jlpt-vocab
|
||||
(<https://github.com/stephenmk/yomitan-jlpt-vocab>), CC BY-SA 4.0, from Jonathan
|
||||
Waller's lists (<http://www.tanos.co.uk/jlpt/>), CC BY; one row without an id is
|
||||
made up.
|
||||
|
||||
`kanjidic2-sample.xml` holds five characters of KANJIDIC2 (database version
|
||||
2026-282) with its header and a shortened DTD: KANJIDIC2 is © the Electronic
|
||||
Dictionary Research and Development Group, used under its licence, CC BY-SA 4.0
|
||||
(<https://www.edrdg.org/edrdg/licence.html>).
|
||||
|
||||
`kanji-data-sample.json` holds four entries of kanji-data's `kanji.json`
|
||||
(<https://github.com/davidluzgouveia/kanji-data>), cut to their numbers, from
|
||||
KANJIDIC2 and from Jonathan Waller's JLPT levels (<http://www.tanos.co.uk/jlpt/>),
|
||||
CC BY.
|
||||
|
||||
`kanjivg-sample.xml` holds four characters of KanjiVG (the release of
|
||||
2026-07-14) with its notice, among them 橅, whose entry names itself 機:
|
||||
KanjiVG is © Ulrich Apel, CC BY-SA 3.0 (<https://kanjivg.tagaini.net>).
|
||||
|
||||
`jmdict-e-examp-sample.xml` holds five entries of EDRDG's `JMdict_e_examp.gz`
|
||||
of 2026-10-09 (JMdict with Tatoeba's sentences, CC BY 2.0 FR) and the
|
||||
declarations of the entities they use: JMdict is © the Electronic Dictionary
|
||||
Research and Development Group, used under its licence, CC BY-SA 4.0
|
||||
(<https://www.edrdg.org/edrdg/licence.html>).
|
||||
|
||||
`wiktionary-sample.jsonl` holds 31 lines of kaikki.org's Wiktextract data of the
|
||||
English Wiktionary (the dump of 2026-10-03, read per word from kaikki.org): the
|
||||
German Haus, Häuser, Häusern, essen, aß, gegessen, Straße and im, the Greek σπίτι,
|
||||
σπιτιού and γράφω, the English house, houses, go and went, the French maison,
|
||||
the Korean 먹다, 집 and 학생, and the Korean entry of the Han character 水 (its readings,
|
||||
물 수), each shortened to the fields the curator reads (no categories,
|
||||
etymologies or related words; at most six senses, two examples, 40 forms, two
|
||||
sounds, and 14 translations, those into German and Greek). Wiktionary's text is
|
||||
by its contributors, CC BY-SA 4.0 (<https://en.wiktionary.org/wiki/Wiktionary:Copyrights>);
|
||||
the extraction is Tatu Ylonen's Wiktextract (<https://kaikki.org>).
|
||||
|
||||
`cedict-sample.txt` holds CC-CEDICT's header and 23 of its lines (MDBG's file of
|
||||
2026-10-13): 中国, 了, 女儿, 学习, 书, 熊猫, 略, 的, 说, 银行, 和 and 咊, an old
|
||||
variant of 和, with their readings. CC-CEDICT is by MDBG and its contributors, CC BY-SA 4.0
|
||||
(<https://www.mdbg.net/chinese/dictionary?page=cc-cedict>).
|
||||
|
||||
`tatoeba-*.tsv` hold a few lines of Tatoeba's exports of 2026-10-10
|
||||
(<https://downloads.tatoeba.org/exports/per_language/>): German, Chinese and
|
||||
Korean sentences using Haus, aß, Straße, 学习, 집에서 and 학생이 (and one of each
|
||||
without an English translation), the links to their English translations, and
|
||||
those translations. The sentences are by Tatoeba's contributors, CC BY 2.0 FR
|
||||
(<https://tatoeba.org/en/terms_of_use>).
|
||||
|
||||
`unihan-sample.txt` holds the lines of Unihan 18.0.0 (2026-07-31,
|
||||
<https://www.unicode.org/Public/UCD/latest/ucd/Unihan.zip>) the curator reads for
|
||||
水, 说, 說, 説, 這, 这, 了, 瞭, 后, 後, 行, 们, 們, 学 and 學, with a header like its
|
||||
files'. The Unihan Database is © Unicode, Inc., under the Unicode License v3
|
||||
(<https://www.unicode.org/license.txt>).
|
||||
|
||||
`cedict-characters-sample.txt` holds 17 lines of CC-CEDICT (MDBG's file of
|
||||
2026-10-14) for the words those characters write (這, 了, 瞭, 瞭解, 為了, 後, 后,
|
||||
以後, 皇后, 們, 我們, 說, 水, 行, 銀行, 學 and 學習), CC BY-SA 4.0 as above.
|
||||
|
||||
`krdict-sample.json` holds six entries of KRDict's JSON export of 2026-09-19
|
||||
(<https://krdict.korean.go.kr/download/downloadPopup>): 같이 (the adverb and the
|
||||
particle), 가다 with its proverb 가는 날이 장날, 읽다 and 학교, each cut to its first
|
||||
three senses, their English and Japanese equivalents and two examples, without
|
||||
sound files or related words. 한국어기초사전 is by the National Institute of
|
||||
Korean Language (국립국어원), CC BY-SA 2.0 KR
|
||||
(<https://krdict.korean.go.kr/kboardPolicy/copyRightTermsInfo>).
|
||||
|
||||
`makemeahanzi-graphics-sample.txt` and `makemeahanzi-dictionary-sample.txt` hold
|
||||
the lines of Make Me a Hanzi's `graphics.txt` and `dictionary.txt` (commit
|
||||
`618dbab`, 2018-10-16, <https://github.com/skishore/makemeahanzi>) for 水 and 海.
|
||||
The strokes derive from the fonts Arphic PL KaitiM GB and Arphic PL UKai, © 1999
|
||||
Arphic Technology Co., Ltd., under the Arphic Public License (its text is in the
|
||||
app's `assets/makemeahanzi/ARPHICPL.TXT`); the dictionary's lines are under the
|
||||
LGPL, version 3 or later (`assets/makemeahanzi/LGPL.txt`).
|
||||
19
apps/learn/halkyon_learn_curator/test/fixtures/cedict-characters-sample.txt
vendored
Normal file
19
apps/learn/halkyon_learn_curator/test/fixtures/cedict-characters-sample.txt
vendored
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
# CC-CEDICT
|
||||
#! date=2026-10-14T07:20:00Z
|
||||
了 了 [le5] /(completed action marker)/(modal particle indicating change of state, situation now)/(modal particle intensifying preceding clause)/
|
||||
以後 以后 [yi3 hou4] /after/later/afterwards/following/later on/in the future/
|
||||
們 们 [men5] /plural marker for pronouns, and nouns referring to individuals/
|
||||
后 后 [hou4] /empress/queen/(archaic) monarch/ruler/
|
||||
學 学 [xue2] /to learn/to study/to imitate/science/-ology/
|
||||
學習 学习 [xue2 xi2] /to learn; to study/
|
||||
後 后 [hou4] /back/behind/rear/afterwards/after/later/post-/
|
||||
我們 我们 [wo3 men5] /we; us; ourselves/
|
||||
水 水 [shui3] /water/(after a name) ... River/to swim (used mostly in 會水|会水[hui4 shui3] and 水性[shui3 xing4])/(coll.) lacking in substance; shoddy/(bound form) additional cost; extra income/classifier for washings of a garment/
|
||||
為了 为了 [wei4 le5] /for; for the purpose of; in order to/
|
||||
皇后 皇后 [huang2 hou4] /empress/imperial consort/
|
||||
瞭 了 [liao3] /(bound form) clear in one's mind; to understand clearly/
|
||||
瞭解 了解 [liao3 jie3] /variant of 了解[liao3 jie3]/
|
||||
行 行 [xing2] /(bound form) to walk; to go; to travel/(literary) trip; journey; visit/(bound form) temporary; makeshift/(bound form) current; in circulation/(bound form) to do; to perform/capable; competent/all right; OK!; will do/behavior; conduct (Taiwan pr. [xing4])/(literary) about to; soon/
|
||||
說 说 [shuo1] /to speak; to talk; to say/to explain; to comment/to scold; to tell off/(bound form) theory; doctrine/
|
||||
這 这 [zhe4] /(pronoun) this; these/(bound form) this; the (followed by a noun)/(bound form) this; these (followed by a classifier) (in this sense, commonly pr. [zhei4], esp. in Beijing)/
|
||||
銀行 银行 [yin2 hang2] /bank/CL:家[jia1],個|个[ge4]/
|
||||
53
apps/learn/halkyon_learn_curator/test/fixtures/cedict-sample.txt
vendored
Normal file
53
apps/learn/halkyon_learn_curator/test/fixtures/cedict-sample.txt
vendored
Normal file
|
|
@ -0,0 +1,53 @@
|
|||
# CC-CEDICT
|
||||
# Community maintained free Chinese-English dictionary.
|
||||
#
|
||||
# Published by MDBG
|
||||
#
|
||||
# License:
|
||||
# Creative Commons Attribution-ShareAlike 4.0 International License
|
||||
# https://creativecommons.org/licenses/by-sa/4.0/
|
||||
#
|
||||
# Referenced works:
|
||||
# CEDICT - Copyright (C) 1997, 1998 Paul Andrew Denisowski
|
||||
#
|
||||
# CC-CEDICT can be downloaded from:
|
||||
# https://www.mdbg.net/chinese/dictionary?page=cc-cedict
|
||||
#
|
||||
# Additions and corrections can be sent through:
|
||||
# https://cc-cedict.org/editor/editor.php
|
||||
#
|
||||
# For more information about CC-CEDICT see:
|
||||
# https://cc-cedict.org/wiki/
|
||||
#
|
||||
#! version=1
|
||||
#! subversion=0
|
||||
#! format=ts
|
||||
#! charset=UTF-8
|
||||
#! entries=125264
|
||||
#! publisher=MDBG
|
||||
#! license=https://creativecommons.org/licenses/by-sa/4.0/
|
||||
#! date=2026-10-13T08:59:07Z
|
||||
#! time=1791881947
|
||||
中國 中国 [Zhong1 guo2] /China/
|
||||
了 了 [le5] /(completed action marker)/(modal particle indicating change of state, situation now)/(modal particle intensifying preceding clause)/
|
||||
了 了 [liao3] /to finish/(used with 得[de2] or 不[bu4] after a verb to express (im)possibility, as in 忘不了[wang4 bu5 liao3] "cannot forget")/(literary) (usually followed by a negative such as 無|无[wu2] or 不[bu4]) completely (not); entirely (not); (not) in the least/variant of 瞭|了[liao3]/
|
||||
女兒 女儿 [nu:3 er2] /daughter/
|
||||
學習 学习 [xue2 xi2] /to learn; to study/
|
||||
書 书 [Shu1] /abbr. for 書經|书经[Shu1 jing1]/
|
||||
書 书 [shu1] /book/letter/document/CL:本[ben3],冊|册[ce4],部[bu4]/to write/
|
||||
熊貓 熊猫 [xiong2 mao1] /panda/CL:隻|只[zhi1]/
|
||||
略 略 [lu:e4] /brief; sketchy/outline; summary/to omit/(bound form before a single-character verb) a bit; somewhat; slightly/plan; strategy/to capture (territory)/
|
||||
的 的 [de5] /of; ~'s (possessive particle)/(used after an attribute when it modifies a noun)/(used at the end of a declarative sentence for emphasis)/(used after a noun, verb or adjective to form a nominal expression, as in 皮革的[pi2 ge2 de5] "one made of leather" or 跑堂兒的|跑堂儿的[pao3 tang2 r5 de5] "a waiter (literally, one who runs back and forth in a restaurant)" or 新的[xin1 de5] "new one")/also pr. [di4] or [di5] in poetry and songs/
|
||||
的 的 [di1] /(bound form) a taxi; a cab (abbr. for 的士[di1 shi4])/
|
||||
的 的 [di2] /really and truly/
|
||||
的 的 [di4] /(bound form) bull's-eye; target/
|
||||
說 说 [shui4] /to persuade/
|
||||
說 说 [shuo1] /to speak; to talk; to say/to explain; to comment/to scold; to tell off/(bound form) theory; doctrine/
|
||||
銀行 银行 [yin2 hang2] /bank/CL:家[jia1],個|个[ge4]/
|
||||
咊 和 [he2] /old variant of 和[he2]/
|
||||
和 和 [He2] /surname He/
|
||||
和 和 [he2] /(joining two nouns) and; together with; with (Taiwan pr. [han4])/(math.) sum/to make peace/(sports) to draw; to tie/(bound form) harmonious/(bound form) Japan; Japanese/
|
||||
和 和 [he4] /to compose a poem in reply (to sb's poem) using the same rhyme sequence/to join in the singing/to chime in with others/
|
||||
和 和 [hu2] /to complete a set in mahjong or playing cards/
|
||||
和 和 [huo2] /to combine a powdery substance (flour, plaster etc) with water/Taiwan pr. [huo4]/
|
||||
和 和 [huo4] /to mix (ingredients) together/to blend/classifier for rinses of clothes/classifier for boilings of medicinal herbs/
|
||||
2
apps/learn/halkyon_learn_curator/test/fixtures/jlpt/n1.csv
vendored
Normal file
2
apps/learn/halkyon_learn_curator/test/fixtures/jlpt/n1.csv
vendored
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
jmdict_seq,kana,kanji,waller_definition
|
||||
1601040,はみがき,歯磨,"dentifrice, toothpaste"
|
||||
|
2
apps/learn/halkyon_learn_curator/test/fixtures/jlpt/n2.csv
vendored
Normal file
2
apps/learn/halkyon_learn_curator/test/fixtures/jlpt/n2.csv
vendored
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
jmdict_seq,kana,kanji,waller_definition
|
||||
1601040,はみがき,歯磨き,"dentifrice,toothpaste"
|
||||
|
1
apps/learn/halkyon_learn_curator/test/fixtures/jlpt/n3.csv
vendored
Normal file
1
apps/learn/halkyon_learn_curator/test/fixtures/jlpt/n3.csv
vendored
Normal file
|
|
@ -0,0 +1 @@
|
|||
jmdict_seq,kana,kanji,waller_definition
|
||||
|
2
apps/learn/halkyon_learn_curator/test/fixtures/jlpt/n4.csv
vendored
Normal file
2
apps/learn/halkyon_learn_curator/test/fixtures/jlpt/n4.csv
vendored
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
jmdict_seq,kana,kanji,waller_definition
|
||||
,ない,,a row without an id
|
||||
|
3
apps/learn/halkyon_learn_curator/test/fixtures/jlpt/n5.csv
vendored
Normal file
3
apps/learn/halkyon_learn_curator/test/fixtures/jlpt/n5.csv
vendored
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
jmdict_seq,kana,kanji,waller_definition
|
||||
1358280,たべる,食べる,to eat
|
||||
1080510,テレビ,,television
|
||||
|
177
apps/learn/halkyon_learn_curator/test/fixtures/jmdict-e-examp-sample.xml
vendored
Normal file
177
apps/learn/halkyon_learn_curator/test/fixtures/jmdict-e-examp-sample.xml
vendored
Normal file
|
|
@ -0,0 +1,177 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE JMdict [
|
||||
<!ENTITY rK "rarely used kanji form">
|
||||
<!ENTITY sK "search-only kanji form">
|
||||
<!ENTITY abbr "abbreviation">
|
||||
<!ENTITY uk "word usually written using kana alone">
|
||||
<!ENTITY adj-pn "pre-noun adjectival (rentaishi)">
|
||||
<!ENTITY int "interjection (kandoushi)">
|
||||
<!ENTITY n "noun (common) (futsuumeishi)">
|
||||
<!ENTITY unc "unclassified">
|
||||
<!ENTITY v1 "Ichidan verb">
|
||||
<!ENTITY vt "transitive verb">
|
||||
]>
|
||||
<JMdict>
|
||||
<!-- JMdict created: 2026-10-09 -->
|
||||
<entry>
|
||||
<ent_seq>1358280</ent_seq>
|
||||
<k_ele>
|
||||
<keb>食べる</keb>
|
||||
<ke_pri>ichi1</ke_pri>
|
||||
<ke_pri>news2</ke_pri>
|
||||
<ke_pri>nf25</ke_pri>
|
||||
</k_ele>
|
||||
<k_ele>
|
||||
<keb>喰べる</keb>
|
||||
<ke_inf>&sK;</ke_inf>
|
||||
</k_ele>
|
||||
<r_ele>
|
||||
<reb>たべる</reb>
|
||||
<re_pri>ichi1</re_pri>
|
||||
<re_pri>news2</re_pri>
|
||||
<re_pri>nf25</re_pri>
|
||||
</r_ele>
|
||||
<sense>
|
||||
<pos>&v1;</pos>
|
||||
<pos>&vt;</pos>
|
||||
<gloss>to eat</gloss>
|
||||
<example>
|
||||
<ex_srce exsrc_type="tat">193344</ex_srce>
|
||||
<ex_text>食べる</ex_text>
|
||||
<ex_sent xml:lang="jpn">もっと果物を食べるべきです。</ex_sent>
|
||||
<ex_sent xml:lang="eng">You should eat more fruit.</ex_sent>
|
||||
</example>
|
||||
</sense>
|
||||
<sense>
|
||||
<pos>&v1;</pos>
|
||||
<pos>&vt;</pos>
|
||||
<gloss>to live on (e.g. a salary)</gloss>
|
||||
<gloss>to live off</gloss>
|
||||
<gloss>to subsist on</gloss>
|
||||
<example>
|
||||
<ex_srce exsrc_type="tat">81964</ex_srce>
|
||||
<ex_text>食べて</ex_text>
|
||||
<ex_sent xml:lang="jpn">僕は脚本家で食べていく決心をした。</ex_sent>
|
||||
<ex_sent xml:lang="eng">I am determined to make a living as a playwright.</ex_sent>
|
||||
</example>
|
||||
</sense>
|
||||
</entry>
|
||||
<entry>
|
||||
<ent_seq>1080510</ent_seq>
|
||||
<r_ele>
|
||||
<reb>テレビ</reb>
|
||||
<re_pri>gai1</re_pri>
|
||||
<re_pri>ichi1</re_pri>
|
||||
</r_ele>
|
||||
<sense>
|
||||
<pos>&n;</pos>
|
||||
<xref>テレビジョン</xref>
|
||||
<misc>&abbr;</misc>
|
||||
<gloss>television</gloss>
|
||||
<gloss>TV</gloss>
|
||||
<example>
|
||||
<ex_srce exsrc_type="tat">232489</ex_srce>
|
||||
<ex_text>テレビ</ex_text>
|
||||
<ex_sent xml:lang="jpn">あなたはどこでテレビを見ますか。</ex_sent>
|
||||
<ex_sent xml:lang="eng">Where do you watch television?</ex_sent>
|
||||
</example>
|
||||
</sense>
|
||||
<sense>
|
||||
<pos>&n;</pos>
|
||||
<gloss>TV program</gloss>
|
||||
<gloss>TV programme</gloss>
|
||||
<gloss>TV broadcast</gloss>
|
||||
</sense>
|
||||
</entry>
|
||||
<entry>
|
||||
<ent_seq>1006830</ent_seq>
|
||||
<k_ele>
|
||||
<keb>其の</keb>
|
||||
<ke_inf>&rK;</ke_inf>
|
||||
</k_ele>
|
||||
<r_ele>
|
||||
<reb>その</reb>
|
||||
<re_pri>spec1</re_pri>
|
||||
</r_ele>
|
||||
<r_ele>
|
||||
<reb>そん</reb>
|
||||
<re_nokanji/>
|
||||
</r_ele>
|
||||
<sense>
|
||||
<pos>&adj-pn;</pos>
|
||||
<xref>この・1</xref>
|
||||
<xref>あの</xref>
|
||||
<xref>どの</xref>
|
||||
<misc>&uk;</misc>
|
||||
<s_inf>something or someone distant from the speaker, close to the listener; actions of the listener, or ideas expressed or understood by the listener</s_inf>
|
||||
<gloss>that</gloss>
|
||||
<gloss>the</gloss>
|
||||
<example>
|
||||
<ex_srce exsrc_type="tat">81320</ex_srce>
|
||||
<ex_text>その</ex_text>
|
||||
<ex_sent xml:lang="jpn">毎日、放課後に私はその本屋で彼女を待った。</ex_sent>
|
||||
<ex_sent xml:lang="eng">Every day I waited for her at the bookstore after school.</ex_sent>
|
||||
</example>
|
||||
</sense>
|
||||
<sense>
|
||||
<pos>&adj-pn;</pos>
|
||||
<misc>&uk;</misc>
|
||||
<s_inf>preceding a number</s_inf>
|
||||
<gloss>part (as in "part two")</gloss>
|
||||
</sense>
|
||||
<sense>
|
||||
<stagr>その</stagr>
|
||||
<pos>∫</pos>
|
||||
<gloss>um ...</gloss>
|
||||
<gloss>er ...</gloss>
|
||||
<gloss>uh ...</gloss>
|
||||
</sense>
|
||||
</entry>
|
||||
<entry>
|
||||
<ent_seq>1000060</ent_seq>
|
||||
<k_ele>
|
||||
<keb>々</keb>
|
||||
</k_ele>
|
||||
<r_ele>
|
||||
<reb>のま</reb>
|
||||
</r_ele>
|
||||
<r_ele>
|
||||
<reb>ノマ</reb>
|
||||
<re_nokanji/>
|
||||
</r_ele>
|
||||
<sense>
|
||||
<pos>&unc;</pos>
|
||||
<xref>同の字点</xref>
|
||||
<gloss g_type="expl">kanji repetition mark</gloss>
|
||||
</sense>
|
||||
</entry>
|
||||
<entry>
|
||||
<ent_seq>1000110</ent_seq>
|
||||
<k_ele>
|
||||
<keb>CDプレーヤー</keb>
|
||||
<ke_pri>spec1</ke_pri>
|
||||
</k_ele>
|
||||
<k_ele>
|
||||
<keb>CDプレイヤー</keb>
|
||||
</k_ele>
|
||||
<r_ele>
|
||||
<reb>シーディープレーヤー</reb>
|
||||
<re_restr>CDプレーヤー</re_restr>
|
||||
<re_pri>spec1</re_pri>
|
||||
</r_ele>
|
||||
<r_ele>
|
||||
<reb>シーディープレイヤー</reb>
|
||||
<re_restr>CDプレイヤー</re_restr>
|
||||
</r_ele>
|
||||
<sense>
|
||||
<pos>&n;</pos>
|
||||
<gloss>CD player</gloss>
|
||||
<example>
|
||||
<ex_srce exsrc_type="tat">162365</ex_srce>
|
||||
<ex_text>CDプレイヤー</ex_text>
|
||||
<ex_sent xml:lang="jpn">私は、このCDプレイヤーをただで得ました。</ex_sent>
|
||||
<ex_sent xml:lang="eng">I got this CD player for free.</ex_sent>
|
||||
</example>
|
||||
</sense>
|
||||
</entry>
|
||||
</JMdict>
|
||||
1
apps/learn/halkyon_learn_curator/test/fixtures/jmdict-eng-sample.json
vendored
Normal file
1
apps/learn/halkyon_learn_curator/test/fixtures/jmdict-eng-sample.json
vendored
Normal file
File diff suppressed because one or more lines are too long
30
apps/learn/halkyon_learn_curator/test/fixtures/kanji-data-sample.json
vendored
Normal file
30
apps/learn/halkyon_learn_curator/test/fixtures/kanji-data-sample.json
vendored
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
{
|
||||
"一": {
|
||||
"strokes": 1,
|
||||
"grade": 1,
|
||||
"freq": 2,
|
||||
"jlpt_old": 4,
|
||||
"jlpt_new": 5
|
||||
},
|
||||
"食": {
|
||||
"strokes": 9,
|
||||
"grade": 2,
|
||||
"freq": 328,
|
||||
"jlpt_old": 4,
|
||||
"jlpt_new": 5
|
||||
},
|
||||
"亜": {
|
||||
"strokes": 7,
|
||||
"grade": 8,
|
||||
"freq": 1509,
|
||||
"jlpt_old": 1,
|
||||
"jlpt_new": 1
|
||||
},
|
||||
"唖": {
|
||||
"strokes": 10,
|
||||
"grade": null,
|
||||
"freq": null,
|
||||
"jlpt_old": null,
|
||||
"jlpt_new": null
|
||||
}
|
||||
}
|
||||
313
apps/learn/halkyon_learn_curator/test/fixtures/kanjidic2-sample.xml
vendored
Normal file
313
apps/learn/halkyon_learn_curator/test/fixtures/kanjidic2-sample.xml
vendored
Normal file
|
|
@ -0,0 +1,313 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE kanjidic2 [
|
||||
<!ELEMENT kanjidic2 (header,character*)>
|
||||
]>
|
||||
<kanjidic2>
|
||||
<header>
|
||||
<!-- KANJIDIC 2 - XML format kanji database combining the KANJIDIC
|
||||
and KANJD212 files plus the kanji from JIS X 0213.
|
||||
-->
|
||||
<file_version>4</file_version>
|
||||
<database_version>2026-282</database_version>
|
||||
<date_of_creation>2026-10-09</date_of_creation>
|
||||
</header>
|
||||
<character>
|
||||
<literal>一</literal>
|
||||
<codepoint>
|
||||
<cp_value cp_type="ucs">4e00</cp_value>
|
||||
<cp_value cp_type="jis208">1-16-76</cp_value>
|
||||
</codepoint>
|
||||
<radical>
|
||||
<rad_value rad_type="classical">1</rad_value>
|
||||
</radical>
|
||||
<misc>
|
||||
<grade>1</grade>
|
||||
<stroke_count>1</stroke_count>
|
||||
<variant var_type="jis208">1-48-01</variant>
|
||||
<freq>2</freq>
|
||||
<jlpt>4</jlpt>
|
||||
</misc>
|
||||
<dic_number>
|
||||
<dic_ref dr_type="nelson_c">1</dic_ref>
|
||||
<dic_ref dr_type="nelson_n">1</dic_ref>
|
||||
<dic_ref dr_type="halpern_njecd">3341</dic_ref>
|
||||
<dic_ref dr_type="halpern_kkd">4148</dic_ref>
|
||||
<dic_ref dr_type="halpern_kkld">2105</dic_ref>
|
||||
<dic_ref dr_type="halpern_kkld_2ed">2850</dic_ref>
|
||||
<dic_ref dr_type="heisig">1</dic_ref>
|
||||
<dic_ref dr_type="heisig6">1</dic_ref>
|
||||
<dic_ref dr_type="gakken">4</dic_ref>
|
||||
<dic_ref dr_type="oneill_names">3</dic_ref>
|
||||
<dic_ref dr_type="oneill_kk">1</dic_ref>
|
||||
<dic_ref dr_type="moro" m_vol="1" m_page="0001">1</dic_ref>
|
||||
<dic_ref dr_type="henshall">1</dic_ref>
|
||||
<dic_ref dr_type="sh_kk">2</dic_ref>
|
||||
<dic_ref dr_type="sh_kk2">2</dic_ref>
|
||||
<dic_ref dr_type="sakade">1</dic_ref>
|
||||
<dic_ref dr_type="jf_cards">1</dic_ref>
|
||||
<dic_ref dr_type="henshall3">1</dic_ref>
|
||||
<dic_ref dr_type="tutt_cards">1</dic_ref>
|
||||
<dic_ref dr_type="crowley">1</dic_ref>
|
||||
<dic_ref dr_type="kanji_in_context">1</dic_ref>
|
||||
<dic_ref dr_type="busy_people">1.A</dic_ref>
|
||||
<dic_ref dr_type="kodansha_compact">1</dic_ref>
|
||||
<dic_ref dr_type="maniette">1</dic_ref>
|
||||
</dic_number>
|
||||
<query_code>
|
||||
<q_code qc_type="skip">4-1-4</q_code>
|
||||
<q_code qc_type="sh_desc">0a1.1</q_code>
|
||||
<q_code qc_type="four_corner">1000.0</q_code>
|
||||
<q_code qc_type="deroo">3072</q_code>
|
||||
</query_code>
|
||||
<reading_meaning>
|
||||
<rmgroup>
|
||||
<reading r_type="pinyin">yi1</reading>
|
||||
<reading r_type="korean_r">il</reading>
|
||||
<reading r_type="korean_h">일</reading>
|
||||
<reading r_type="vietnam">Nhất</reading>
|
||||
<reading r_type="ja_on">イチ</reading>
|
||||
<reading r_type="ja_on">イツ</reading>
|
||||
<reading r_type="ja_kun">ひと-</reading>
|
||||
<reading r_type="ja_kun">ひと.つ</reading>
|
||||
<meaning>one</meaning>
|
||||
<meaning>one radical (no.1)</meaning>
|
||||
<meaning m_lang="fr">un</meaning>
|
||||
<meaning m_lang="fr">radical un (no. 1)</meaning>
|
||||
<meaning m_lang="es">uno</meaning>
|
||||
<meaning m_lang="es">1</meaning>
|
||||
<meaning m_lang="pt">um</meaning>
|
||||
</rmgroup>
|
||||
<nanori>かず</nanori>
|
||||
<nanori>い</nanori>
|
||||
<nanori>いっ</nanori>
|
||||
<nanori>いる</nanori>
|
||||
<nanori>かつ</nanori>
|
||||
<nanori>かづ</nanori>
|
||||
<nanori>てん</nanori>
|
||||
<nanori>はじめ</nanori>
|
||||
<nanori>ひ</nanori>
|
||||
<nanori>ひとつ</nanori>
|
||||
<nanori>まこと</nanori>
|
||||
</reading_meaning>
|
||||
</character>
|
||||
<character>
|
||||
<literal>食</literal>
|
||||
<codepoint>
|
||||
<cp_value cp_type="ucs">98df</cp_value>
|
||||
<cp_value cp_type="jis208">1-31-09</cp_value>
|
||||
</codepoint>
|
||||
<radical>
|
||||
<rad_value rad_type="classical">184</rad_value>
|
||||
</radical>
|
||||
<misc>
|
||||
<grade>2</grade>
|
||||
<stroke_count>9</stroke_count>
|
||||
<freq>328</freq>
|
||||
<jlpt>4</jlpt>
|
||||
</misc>
|
||||
<dic_number>
|
||||
<dic_ref dr_type="nelson_c">5154</dic_ref>
|
||||
<dic_ref dr_type="nelson_n">6674</dic_ref>
|
||||
<dic_ref dr_type="halpern_njecd">2075</dic_ref>
|
||||
<dic_ref dr_type="halpern_kkd">2578</dic_ref>
|
||||
<dic_ref dr_type="halpern_kkld">1316</dic_ref>
|
||||
<dic_ref dr_type="halpern_kkld_2ed">1787</dic_ref>
|
||||
<dic_ref dr_type="heisig">1472</dic_ref>
|
||||
<dic_ref dr_type="heisig6">1582</dic_ref>
|
||||
<dic_ref dr_type="gakken">269</dic_ref>
|
||||
<dic_ref dr_type="oneill_names">1159</dic_ref>
|
||||
<dic_ref dr_type="oneill_kk">283</dic_ref>
|
||||
<dic_ref dr_type="moro" m_vol="12" m_page="0371">44014</dic_ref>
|
||||
<dic_ref dr_type="henshall">146</dic_ref>
|
||||
<dic_ref dr_type="sh_kk">322</dic_ref>
|
||||
<dic_ref dr_type="sh_kk2">322</dic_ref>
|
||||
<dic_ref dr_type="sakade">253</dic_ref>
|
||||
<dic_ref dr_type="jf_cards">99</dic_ref>
|
||||
<dic_ref dr_type="henshall3">163</dic_ref>
|
||||
<dic_ref dr_type="tutt_cards">180</dic_ref>
|
||||
<dic_ref dr_type="crowley">207</dic_ref>
|
||||
<dic_ref dr_type="kanji_in_context">131</dic_ref>
|
||||
<dic_ref dr_type="busy_people">2.13</dic_ref>
|
||||
<dic_ref dr_type="kodansha_compact">1900</dic_ref>
|
||||
<dic_ref dr_type="maniette">1484</dic_ref>
|
||||
</dic_number>
|
||||
<query_code>
|
||||
<q_code qc_type="skip">2-2-7</q_code>
|
||||
<q_code qc_type="sh_desc">8b0.1</q_code>
|
||||
<q_code qc_type="four_corner">8073.2</q_code>
|
||||
<q_code qc_type="deroo">2865</q_code>
|
||||
</query_code>
|
||||
<reading_meaning>
|
||||
<rmgroup>
|
||||
<reading r_type="pinyin">shi2</reading>
|
||||
<reading r_type="pinyin">si4</reading>
|
||||
<reading r_type="korean_r">sig</reading>
|
||||
<reading r_type="korean_r">sa</reading>
|
||||
<reading r_type="korean_h">식</reading>
|
||||
<reading r_type="korean_h">사</reading>
|
||||
<reading r_type="vietnam">Thực</reading>
|
||||
<reading r_type="vietnam">Tự</reading>
|
||||
<reading r_type="ja_on">ショク</reading>
|
||||
<reading r_type="ja_on">ジキ</reading>
|
||||
<reading r_type="ja_kun">く.う</reading>
|
||||
<reading r_type="ja_kun">く.らう</reading>
|
||||
<reading r_type="ja_kun">た.べる</reading>
|
||||
<reading r_type="ja_kun">は.む</reading>
|
||||
<meaning>eat</meaning>
|
||||
<meaning>food</meaning>
|
||||
<meaning m_lang="fr">manger</meaning>
|
||||
<meaning m_lang="fr">nourriture</meaning>
|
||||
<meaning m_lang="es">alimento</meaning>
|
||||
<meaning m_lang="es">comida</meaning>
|
||||
<meaning m_lang="es">eclipse</meaning>
|
||||
<meaning m_lang="es">comer</meaning>
|
||||
<meaning m_lang="pt">comer</meaning>
|
||||
<meaning m_lang="pt">comida</meaning>
|
||||
<meaning m_lang="pt">alimento</meaning>
|
||||
</rmgroup>
|
||||
<nanori>ぐい</nanori>
|
||||
</reading_meaning>
|
||||
</character>
|
||||
<character>
|
||||
<literal>亜</literal>
|
||||
<codepoint>
|
||||
<cp_value cp_type="ucs">4e9c</cp_value>
|
||||
<cp_value cp_type="jis208">1-16-01</cp_value>
|
||||
</codepoint>
|
||||
<radical>
|
||||
<rad_value rad_type="classical">7</rad_value>
|
||||
<rad_value rad_type="nelson_c">1</rad_value>
|
||||
</radical>
|
||||
<misc>
|
||||
<grade>8</grade>
|
||||
<stroke_count>7</stroke_count>
|
||||
<variant var_type="jis208">1-48-19</variant>
|
||||
<freq>1509</freq>
|
||||
<jlpt>1</jlpt>
|
||||
</misc>
|
||||
<dic_number>
|
||||
<dic_ref dr_type="nelson_c">43</dic_ref>
|
||||
<dic_ref dr_type="nelson_n">81</dic_ref>
|
||||
<dic_ref dr_type="halpern_njecd">3540</dic_ref>
|
||||
<dic_ref dr_type="halpern_kkd">4354</dic_ref>
|
||||
<dic_ref dr_type="halpern_kkld">2204</dic_ref>
|
||||
<dic_ref dr_type="halpern_kkld_2ed">2966</dic_ref>
|
||||
<dic_ref dr_type="heisig">1809</dic_ref>
|
||||
<dic_ref dr_type="heisig6">1950</dic_ref>
|
||||
<dic_ref dr_type="gakken">1331</dic_ref>
|
||||
<dic_ref dr_type="oneill_names">525</dic_ref>
|
||||
<dic_ref dr_type="oneill_kk">1788</dic_ref>
|
||||
<dic_ref dr_type="moro" m_vol="1" m_page="0525">272</dic_ref>
|
||||
<dic_ref dr_type="henshall">997</dic_ref>
|
||||
<dic_ref dr_type="sh_kk">1616</dic_ref>
|
||||
<dic_ref dr_type="sh_kk2">1724</dic_ref>
|
||||
<dic_ref dr_type="jf_cards">1032</dic_ref>
|
||||
<dic_ref dr_type="tutt_cards">1092</dic_ref>
|
||||
<dic_ref dr_type="kanji_in_context">1818</dic_ref>
|
||||
<dic_ref dr_type="kodansha_compact">35</dic_ref>
|
||||
<dic_ref dr_type="maniette">1827</dic_ref>
|
||||
</dic_number>
|
||||
<query_code>
|
||||
<q_code qc_type="skip">4-7-1</q_code>
|
||||
<q_code qc_type="sh_desc">0a7.14</q_code>
|
||||
<q_code qc_type="four_corner">1010.6</q_code>
|
||||
<q_code qc_type="deroo">3273</q_code>
|
||||
</query_code>
|
||||
<reading_meaning>
|
||||
<rmgroup>
|
||||
<reading r_type="pinyin">ya4</reading>
|
||||
<reading r_type="korean_r">a</reading>
|
||||
<reading r_type="korean_h">아</reading>
|
||||
<reading r_type="vietnam">A</reading>
|
||||
<reading r_type="vietnam">Á</reading>
|
||||
<reading r_type="ja_on">ア</reading>
|
||||
<reading r_type="ja_kun">つ.ぐ</reading>
|
||||
<meaning>Asia</meaning>
|
||||
<meaning>rank next</meaning>
|
||||
<meaning>come after</meaning>
|
||||
<meaning>-ous</meaning>
|
||||
<meaning m_lang="fr">Asie</meaning>
|
||||
<meaning m_lang="fr">suivant</meaning>
|
||||
<meaning m_lang="fr">sub-</meaning>
|
||||
<meaning m_lang="fr">sous-</meaning>
|
||||
<meaning m_lang="es">pref. para indicar</meaning>
|
||||
<meaning m_lang="es">venir después de</meaning>
|
||||
<meaning m_lang="es">Asia</meaning>
|
||||
<meaning m_lang="pt">Ásia</meaning>
|
||||
<meaning m_lang="pt">próxima</meaning>
|
||||
<meaning m_lang="pt">o que vem depois</meaning>
|
||||
<meaning m_lang="pt">-ous</meaning>
|
||||
</rmgroup>
|
||||
<nanori>や</nanori>
|
||||
<nanori>つぎ</nanori>
|
||||
<nanori>つぐ</nanori>
|
||||
</reading_meaning>
|
||||
</character>
|
||||
<character>
|
||||
<literal>唖</literal>
|
||||
<codepoint>
|
||||
<cp_value cp_type="ucs">5516</cp_value>
|
||||
<cp_value cp_type="jis208">1-16-02</cp_value>
|
||||
</codepoint>
|
||||
<radical>
|
||||
<rad_value rad_type="classical">30</rad_value>
|
||||
</radical>
|
||||
<misc>
|
||||
<stroke_count>10</stroke_count>
|
||||
<variant var_type="jis212">1-21-64</variant>
|
||||
<variant var_type="jis212">1-45-68</variant>
|
||||
</misc>
|
||||
<dic_number>
|
||||
<dic_ref dr_type="nelson_c">939</dic_ref>
|
||||
<dic_ref dr_type="nelson_n">795</dic_ref>
|
||||
<dic_ref dr_type="heisig">2958</dic_ref>
|
||||
<dic_ref dr_type="heisig6">2964</dic_ref>
|
||||
<dic_ref dr_type="moro" m_vol="2" m_page="1066">3743</dic_ref>
|
||||
</dic_number>
|
||||
<query_code>
|
||||
<q_code qc_type="skip">1-3-7</q_code>
|
||||
<q_code qc_type="sh_desc">3d8.3</q_code>
|
||||
<q_code qc_type="four_corner">6101.7</q_code>
|
||||
</query_code>
|
||||
<reading_meaning>
|
||||
<rmgroup>
|
||||
<reading r_type="pinyin">ya1</reading>
|
||||
<reading r_type="korean_r">a</reading>
|
||||
<reading r_type="korean_h">아</reading>
|
||||
<reading r_type="vietnam">Á</reading>
|
||||
<reading r_type="vietnam">Ớ</reading>
|
||||
<reading r_type="vietnam">Ứ</reading>
|
||||
<reading r_type="ja_on">ア</reading>
|
||||
<reading r_type="ja_on">アク</reading>
|
||||
<reading r_type="ja_kun">おし</reading>
|
||||
<meaning>mute</meaning>
|
||||
<meaning>dumb</meaning>
|
||||
</rmgroup>
|
||||
</reading_meaning>
|
||||
</character>
|
||||
<character>
|
||||
<literal>僲</literal>
|
||||
<codepoint>
|
||||
<cp_value cp_type="ucs">50f2</cp_value>
|
||||
<cp_value cp_type="jis212">1-18-49</cp_value>
|
||||
<cp_value cp_type="jis213">1-14-38</cp_value>
|
||||
</codepoint>
|
||||
<radical>
|
||||
<rad_value rad_type="classical">9</rad_value>
|
||||
</radical>
|
||||
<misc>
|
||||
<stroke_count>16</stroke_count>
|
||||
</misc>
|
||||
<dic_number>
|
||||
<dic_ref dr_type="moro">0</dic_ref>
|
||||
</dic_number>
|
||||
<query_code>
|
||||
<q_code qc_type="skip">1-2-14</q_code>
|
||||
</query_code>
|
||||
<reading_meaning>
|
||||
<rmgroup>
|
||||
<reading r_type="pinyin">xian1</reading>
|
||||
</rmgroup>
|
||||
</reading_meaning>
|
||||
</character>
|
||||
</kanjidic2>
|
||||
105
apps/learn/halkyon_learn_curator/test/fixtures/kanjivg-sample.xml
vendored
Normal file
105
apps/learn/halkyon_learn_curator/test/fixtures/kanjivg-sample.xml
vendored
Normal file
|
|
@ -0,0 +1,105 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!--
|
||||
Copyright (C) 2009-2013 Ulrich Apel.
|
||||
This work is distributed under the conditions of the Creative Commons
|
||||
Attribution-Share Alike 3.0 Licence. This means you are free:
|
||||
* to Share - to copy, distribute and transmit the work
|
||||
* to Remix - to adapt the work
|
||||
|
||||
Under the following conditions:
|
||||
* Attribution. You must attribute the work by stating your use of KanjiVG in
|
||||
your own copyright header and linking to KanjiVG's website
|
||||
(http://kanjivg.tagaini.net)
|
||||
* Share Alike. If you alter, transform, or build upon this work, you may
|
||||
distribute the resulting work only under the same or similar license to this
|
||||
one.
|
||||
|
||||
See http://creativecommons.org/licenses/by-sa/3.0/ for more details.
|
||||
This file was generated on 2026-07-14 from the most recent KanjiVG data.
|
||||
-->
|
||||
<kanjivg xmlns:kvg='http://kanjivg.tagaini.net'>
|
||||
<kanji id="kvg:kanji_03042">
|
||||
<g id="kvg:03042" kvg:element="あ">
|
||||
<path id="kvg:03042-s1" d="M31.01,33c0.88,0.88,2.75,1.82,5.25,1.75c8.62-0.25,20-2.12,29.5-4.25c1.51-0.34,4.62-0.88,6.62-0.5"/>
|
||||
<path id="kvg:03042-s2" d="M49.76,17.62c0.88,1,1.82,3.26,1.38,5.25c-3.75,16.75-6.25,38.13-5.13,53.63c0.41,5.7,1.88,10.88,3.38,13.62"/>
|
||||
<path id="kvg:03042-s3" d="M65.63,44.12c0.75,1.12,1.16,4.39,0.5,6.12c-4.62,12.26-11.24,23.76-25.37,35.76c-6.86,5.83-15.88,3.75-16.25-8.38c-0.34-10.87,13.38-23.12,32.38-26.74c12.42-2.37,27,1.38,30.5,12.75c4.05,13.18-3.76,26.37-20.88,30.49"/>
|
||||
</g>
|
||||
</kanji>
|
||||
<kanji id="kvg:kanji_098df">
|
||||
<g id="kvg:098df" kvg:element="食" kvg:radical="general">
|
||||
<path id="kvg:098df-s1" kvg:type="㇒" d="M52.75,10.5c0.11,0.98-0.19,2.67-0.97,3.93C45,25.34,31.75,41.19,14,51.5"/>
|
||||
<path id="kvg:098df-s2" kvg:type="㇏" d="M52.75,16.25c5.09,4.8,25.71,19.61,33.7,24.9c2.68,1.78,5.37,2.79,8.55,3.35"/>
|
||||
<path id="kvg:098df-s3" kvg:type="㇑a" d="M52.25,29.25c1,1,1.5,2.25,1.5,3.5c0,2,0,3,0,5.5"/>
|
||||
<path id="kvg:098df-s4" kvg:type="㇕" d="M38,40c0.83,0.47,2.19,1,3.86,0.83c9.39-0.96,21.95-2.76,23.25-2.84c1.67-0.1,3.14,0.88,3.11,2.53C68.2,41.8,67,53.25,66.34,62.4c-0.07,0.94-0.13,1.36-0.13,1.99"/>
|
||||
<path id="kvg:098df-s5" kvg:type="㇐a" d="M40.83,51.73C47.25,51.25,59.5,50,66,49.75"/>
|
||||
<path id="kvg:098df-s6" kvg:type="㇐a" d="M40.69,63.9c7.04-0.52,16.55-1.62,24.6-2.04"/>
|
||||
<path id="kvg:098df-s7" kvg:type="㇙" d="M38.25,40.25c1.12,1.12,1.5,2.62,1.5,4c0,9.12,0,43.62,0,47.25c0,4,1,4.88,4.12,2.88c2.93-1.87,6.75-5.25,10.88-8.38"/>
|
||||
<path id="kvg:098df-s8" kvg:type="㇒" d="M74,64c0.25,1.25,0.09,2.57-0.75,3.5c-3.5,3.88-4.5,4.88-7.25,7.5"/>
|
||||
<path id="kvg:098df-s9" kvg:type="㇏" d="M51.5,71C55.75,71,77,90,81,92.75c2.49,1.71,4.62,2.62,7.5,3.5"/>
|
||||
</g>
|
||||
</kanji>
|
||||
<kanji id="kvg:kanji_08a9e">
|
||||
<g id="kvg:08a9e" kvg:element="語">
|
||||
<g id="kvg:08a9e-g1" kvg:element="言" kvg:position="left" kvg:radical="general">
|
||||
<path id="kvg:08a9e-s1" kvg:type="㇔" d="M26,15.25c2.82,1.41,7.29,5.8,8,8"/>
|
||||
<path id="kvg:08a9e-s2" kvg:type="㇐" d="M12.37,32.97c1.25,0.28,2.88,0.66,4.36,0.53c7.02-0.59,17.78-1.75,25.95-3c1.52-0.23,3.57-0.38,5.16,0.03"/>
|
||||
<path id="kvg:08a9e-s3" kvg:type="㇐" d="M18.73,45.76c0.38,0.18,2.71,0.2,3.1,0.18c3.97-0.21,9.79-1.19,14.46-2.31c1.67-0.4,2.71-0.38,3.86-0.08"/>
|
||||
<path id="kvg:08a9e-s4" kvg:type="㇐" d="M18.73,58.89c0.89,0.23,1.89,0.36,3.35,0.15c3.89-0.54,10.71-1.51,14.85-2.29c0.7-0.13,1.82-0.26,2.61-0.1"/>
|
||||
<g id="kvg:08a9e-g2" kvg:element="口">
|
||||
<path id="kvg:08a9e-s5" kvg:type="㇑" d="M17.14,71.9c0.63,0.62,1.12,1.65,1.23,2.57c0.63,5.03,1.51,10.28,2.23,15.59c0.14,1.03,0.27,2.02,0.41,2.93"/>
|
||||
<path id="kvg:08a9e-s6" kvg:type="㇕b" d="M19.37,73.6c5.67-0.94,15.47-2.73,20.36-3.48c1.49-0.22,2.39,1.05,2.18,2.08c-0.71,3.44-2.27,9.75-3.23,13.89"/>
|
||||
<path id="kvg:08a9e-s7" kvg:type="㇐b" d="M21.47,89.02c3.95-0.45,10.71-1.19,16.28-1.61c1.21-0.09,2.36-0.17,3.41-0.22"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="kvg:08a9e-g3" kvg:element="吾" kvg:position="right" kvg:phon="吾">
|
||||
<g id="kvg:08a9e-g4" kvg:element="五">
|
||||
<g id="kvg:08a9e-g5" kvg:element="二" kvg:part="1">
|
||||
<path id="kvg:08a9e-s8" kvg:type="㇐" d="M51.79,17.49c1.38,0.26,3.91,0.28,5.27,0.15C63.88,17,72.62,15.62,80,15.32c2.3-0.1,3.67,0.04,4.81,0.15"/>
|
||||
</g>
|
||||
<path id="kvg:08a9e-s9" kvg:type="㇑a" d="M67.75,20.25c0.37,1.25,0.5,2.38,0.23,3.75c-0.75,3.78-6.03,23.83-7.96,31.58"/>
|
||||
<path id="kvg:08a9e-s10" kvg:type="㇕c" d="M52.18,36.96c1.82,0.66,4.17,0.95,5.84,0.66c8.48-1.5,16.13-3.06,22.74-4.1c2.49-0.39,4.05,1.27,3.71,2.93c-0.6,2.93-2.48,11.43-3.74,17.86"/>
|
||||
<g id="kvg:08a9e-g6" kvg:element="二" kvg:part="2">
|
||||
<path id="kvg:08a9e-s11" kvg:type="㇐" d="M46.33,58.46c1.13,0.24,3.94,0.2,5.07,0.08c12.34-1.29,19.11-2.39,40.88-4.02c1.88-0.14,3.75-0.02,4.69,0.09"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="kvg:08a9e-g7" kvg:element="口">
|
||||
<path id="kvg:08a9e-s12" kvg:type="㇑" d="M52.5,69.88c0.93,0.93,1.42,2.28,1.54,3.31c0.71,6.06,1.42,12.65,2.06,19.3c0.15,1.5,0.28,2.44,0.4,3.75"/>
|
||||
<path id="kvg:08a9e-s13" kvg:type="㇕b" d="M54.99,71.67c9.47-1.45,23.75-3.41,28.85-3.9c2.14-0.21,3.28,0.98,2.86,2.93c-0.84,3.88-3.08,12.57-4.39,17.58"/>
|
||||
<path id="kvg:08a9e-s14" kvg:type="㇐b" d="M57.2,91.49c5.94-0.55,14.67-1.24,23.54-1.76c1.3-0.08,2.63-0.13,3.97-0.2"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</kanji>
|
||||
<kanji id="kvg:kanji_06a45">
|
||||
<g id="kvg:06a45" kvg:element="機">
|
||||
<g id="kvg:06a45-g1" kvg:element="木" kvg:position="left" kvg:radical="general">
|
||||
<path id="kvg:06a45-s1" kvg:type="㇐" d="M10.28,39.47c1.6,0.66,3.76,0.28,4.98,0.09c4.46-0.7,12.85-2.31,18.53-3.4c1.23-0.23,2.99-0.8,4.23-0.29"/>
|
||||
<path id="kvg:06a45-s2" kvg:type="㇑" d="M25.36,15c1.26,1.26,1.79,2.75,1.79,4.42c0,0.82-0.04,50.17-0.05,69.95c0,3.14,0,5.54,0,6.88"/>
|
||||
<path id="kvg:06a45-s3" kvg:type="㇒" d="M26.19,39.53c0,0.84-0.1,1.58-0.34,2.33C22,54.25,19.33,62.31,12.11,75.34"/>
|
||||
<path id="kvg:06a45-s4" kvg:type="㇔/㇏" d="M29.88,45.75c2.33,1.62,6.16,6.86,8.12,10"/>
|
||||
</g>
|
||||
<g id="kvg:06a45-g2" kvg:element="無" kvg:position="right">
|
||||
<g id="kvg:06a45-g3" kvg:position="top">
|
||||
<g id="kvg:06a45-g4" kvg:element="丿">
|
||||
<path id="kvg:06a45-s5" kvg:type="㇒" d="M54.51,12.5c0.04,0.56,0.15,1.62-0.08,2.25c-2.72,7.91-6.75,15.16-13.84,21.54"/>
|
||||
</g>
|
||||
<path id="kvg:06a45-s6" kvg:type="㇐" d="M52.83,25c0.72-0.03,2.13-0.1,3.17-0.21c8.01-0.86,23.7-3.89,29.02-4.4c1.4-0.13,2.24,0.17,2.94,0.35"/>
|
||||
<g id="kvg:06a45-g5" kvg:element="一">
|
||||
<path id="kvg:06a45-s7" kvg:type="㇐" d="M37.25,48.7c1.24,0.54,3.52,0.7,4.77,0.54C52,48,80.69,45.25,94.15,44.51c2.07-0.11,3.32,0.26,4.35,0.53"/>
|
||||
</g>
|
||||
<path id="kvg:06a45-s8" kvg:type="㇑" d="M47.09,37.25c0.89,0.5,1.43,2.25,1.6,3.25c0.18,1,0.31,15.75,0.48,27.5"/>
|
||||
<path id="kvg:06a45-s9" kvg:type="㇑" d="M58.37,30.75c0.89,0.5,1.62,2.23,1.6,3.25c-0.07,5.5,0.14,19.5,0.14,33.75"/>
|
||||
<path id="kvg:06a45-s10" kvg:type="㇑" d="M71.65,29.75c0.89,0.5,1.67,2.23,1.6,3.25c-0.47,8-0.88,17.5-1.5,33.25"/>
|
||||
<path id="kvg:06a45-s11" kvg:type="㇑" d="M85.34,30.25c0.89,0.5,1.87,2.28,1.6,4.25c-1.09,8-1.5,15.25-3.54,30.75"/>
|
||||
<path id="kvg:06a45-s12" kvg:type="㇐" d="M37.16,68.7c1.32,0.54,3.74,0.67,5.05,0.54c7.53-0.74,37.49-2.99,51.76-3.73c2.19-0.11,3.52,0.26,4.61,0.53"/>
|
||||
</g>
|
||||
<g id="kvg:06a45-g6" kvg:element="灬" kvg:variant="true" kvg:original="火" kvg:position="bottom">
|
||||
<path id="kvg:06a45-s13" kvg:type="㇔" d="M40.94,80.5c0,5.25-4.71,13-5.94,14.5"/>
|
||||
<path id="kvg:06a45-s14" kvg:type="㇔" d="M53.75,79.08c2.49,2.57,4.85,9.64,5.47,13.63"/>
|
||||
<path id="kvg:06a45-s15" kvg:type="㇔" d="M71.51,78.83c2.4,2.27,6.19,9.35,6.79,12.88"/>
|
||||
<path id="kvg:06a45-s16" kvg:type="㇔" d="M87.89,77.08c3.73,2.89,9.63,11.89,10.56,16.38"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</kanji>
|
||||
</kanjivg>
|
||||
1354
apps/learn/halkyon_learn_curator/test/fixtures/krdict-sample.json
vendored
Normal file
1354
apps/learn/halkyon_learn_curator/test/fixtures/krdict-sample.json
vendored
Normal file
File diff suppressed because it is too large
Load diff
2
apps/learn/halkyon_learn_curator/test/fixtures/makemeahanzi-dictionary-sample.txt
vendored
Normal file
2
apps/learn/halkyon_learn_curator/test/fixtures/makemeahanzi-dictionary-sample.txt
vendored
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
{"character":"水","definition":"water, liquid, lotion, juice","pinyin":["shuǐ"],"decomposition":"⿻亅?","etymology":{"type":"pictographic","hint":"A river running between two banks; compare 川"},"radical":"水","matches":[[0],null,null,null]}
|
||||
{"character":"海","definition":"sea, ocean; maritime","pinyin":["hǎi"],"decomposition":"⿰氵每","etymology":{"type":"pictophonetic","phonetic":"每","semantic":"氵","hint":"water"},"radical":"氵","matches":[[0],[0],[0],[1],[1],[1],[1],[1],[1],[1]]}
|
||||
2
apps/learn/halkyon_learn_curator/test/fixtures/makemeahanzi-graphics-sample.txt
vendored
Normal file
2
apps/learn/halkyon_learn_curator/test/fixtures/makemeahanzi-graphics-sample.txt
vendored
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
{"character":"水","strokes":["M 535 506 Q 538 699 560 762 Q 578 793 520 817 Q 486 836 465 830 Q 447 823 463 799 Q 485 771 486 736 Q 490 697 478 121 Q 477 97 463 88 Q 454 81 432 88 Q 407 94 382 99 Q 348 111 351 100 Q 352 93 373 78 Q 440 24 457 -5 Q 476 -41 493 -42 Q 508 -43 524 -7 Q 543 41 541 117 Q 531 294 534 470 L 535 506 Z","M 154 501 Q 141 501 139 492 Q 138 485 153 477 Q 199 452 227 461 Q 333 489 343 489 Q 359 486 347 456 Q 296 326 249 262 Q 201 190 114 119 Q 99 106 110 103 Q 120 102 141 113 Q 217 153 281 224 Q 342 288 419 454 Q 429 478 441 489 Q 456 501 447 511 Q 437 524 399 537 Q 378 549 336 530 Q 270 509 154 501 Z","M 590 446 Q 630 476 766 584 Q 787 603 814 615 Q 838 627 825 647 Q 809 666 779 681 Q 752 696 738 692 Q 723 691 729 675 Q 735 639 659 553 Q 620 508 577 459 C 557 436 566 428 590 446 Z","M 577 459 Q 555 484 535 506 C 515 528 516 494 534 470 Q 756 161 817 160 Q 898 169 967 175 Q 995 178 996 185 Q 997 192 964 205 Q 810 253 753 295 Q 690 346 590 446 L 577 459 Z"],"medians":[[[473,814],[500,795],[521,770],[508,455],[507,91],[485,42],[442,56],[371,91],[369,98],[358,98]],[[147,491],[209,482],[354,512],[381,505],[392,495],[384,459],[353,387],[280,261],[187,160],[113,110]],[[737,682],[750,671],[766,637],[721,583],[591,461],[590,452]],[[539,500],[550,465],[618,387],[729,271],[782,229],[820,207],[990,185]]]}
|
||||
{"character":"海","strokes":["M 246 711 Q 267 686 289 655 Q 302 639 320 636 Q 333 635 340 649 Q 349 665 343 700 Q 339 730 249 767 Q 233 773 224 771 Q 218 768 218 753 Q 219 740 246 711 Z","M 154 542 Q 191 493 228 471 Q 244 467 255 481 Q 262 494 260 512 Q 254 537 236 553 Q 188 586 150 586 Q 146 587 142 585 Q 135 584 137 570 Q 138 557 154 542 Z","M 123 190 Q 111 186 113 168 Q 131 89 165 72 Q 172 65 183 68 Q 190 69 191 95 Q 197 141 293 399 Q 300 415 299 422 Q 298 432 289 425 Q 273 415 163 232 Q 151 211 123 190 Z","M 520 686 Q 593 788 594 793 Q 593 796 593 798 Q 589 810 563 832 Q 538 848 520 849 Q 502 848 510 827 Q 525 793 458 683 Q 427 632 383 577 Q 373 567 371 561 Q 367 551 381 553 Q 420 559 500 661 L 520 686 Z","M 500 661 Q 548 640 599 650 Q 687 666 778 684 Q 820 694 826 699 Q 836 706 831 716 Q 824 728 794 736 Q 770 742 661 710 Q 579 692 520 686 C 490 683 472 672 500 661 Z","M 754 149 Q 809 139 863 120 Q 884 113 894 115 Q 904 119 898 137 Q 889 156 843 189 Q 825 205 762 196 L 694 195 Q 550 196 422 187 Q 409 186 413 196 Q 449 281 474 343 L 488 379 Q 506 428 517 460 Q 527 497 535 517 Q 538 524 538 529 C 541 538 541 538 521 557 Q 487 594 475 586 Q 468 577 467 568 Q 488 514 443 375 L 430 336 Q 388 227 345 190 Q 338 183 339 169 Q 343 151 360 132 Q 367 122 382 129 Q 419 147 493 154 Q 578 166 685 158 L 754 149 Z","M 685 158 Q 667 80 651 53 Q 641 37 619 45 Q 553 64 557 68 Q 526 80 548 50 Q 582 7 607 -37 Q 629 -68 649 -56 Q 728 -11 754 149 L 762 196 Q 775 311 780 365 L 785 413 Q 794 503 812 525 Q 831 549 819 561 Q 795 583 758 598 Q 740 607 718 599 Q 669 583 631 574 Q 589 564 521 557 C 491 554 508 528 538 529 Q 545 528 551 528 Q 572 528 688 560 Q 709 564 723 556 Q 739 544 726 405 L 722 365 Q 710 262 694 195 L 685 158 Z","M 579 484 Q 595 426 617 415 Q 630 411 641 424 Q 647 436 645 457 Q 635 488 592 507 Q 585 511 580 502 Q 576 495 579 484 Z","M 780 365 Q 859 368 941 362 Q 960 362 966 370 Q 972 380 956 395 Q 896 440 855 424 Q 822 420 785 413 L 726 405 Q 677 401 621 393 Q 557 387 488 379 L 443 375 Q 382 371 317 365 Q 296 364 311 347 Q 324 334 341 327 Q 360 321 377 325 Q 402 331 430 336 L 474 343 Q 568 362 722 365 L 780 365 Z","M 552 292 Q 567 253 590 231 Q 602 225 612 234 Q 619 243 622 256 Q 622 277 611 291 Q 599 306 571 319 Q 559 326 551 326 Q 545 326 545 316 Q 544 306 552 292 Z"],"medians":[[[229,762],[301,700],[321,656]],[[147,575],[210,530],[235,493]],[[177,78],[165,108],[161,162],[292,418]],[[519,836],[542,813],[549,793],[530,752],[463,648],[402,578],[379,561]],[[508,661],[530,670],[632,679],[754,707],[820,710]],[[480,577],[505,524],[492,462],[449,331],[385,194],[384,171],[416,164],[592,179],[775,172],[824,164],[888,126]],[[531,556],[548,544],[559,545],[715,580],[743,575],[772,543],[735,230],[710,107],[683,34],[668,14],[642,-4],[548,61]],[[590,495],[620,450],[623,432]],[[314,356],[368,346],[631,379],[883,397],[955,376]],[[554,317],[589,277],[599,247]]]}
|
||||
4
apps/learn/halkyon_learn_curator/test/fixtures/tatoeba-cmn-eng_links.tsv
vendored
Normal file
4
apps/learn/halkyon_learn_curator/test/fixtures/tatoeba-cmn-eng_links.tsv
vendored
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
750344 750342
|
||||
750344 9848192
|
||||
332662 68954
|
||||
4456365 309992
|
||||
|
4
apps/learn/halkyon_learn_curator/test/fixtures/tatoeba-cmn_sentences.tsv
vendored
Normal file
4
apps/learn/halkyon_learn_curator/test/fixtures/tatoeba-cmn_sentences.tsv
vendored
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
750344 cmn 我学习。
|
||||
332662 cmn 您学习吗?
|
||||
4456365 cmn 她学习数学
|
||||
333376 cmn 我妹妹目前不学习。
|
||||
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue