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
83 changed files with 0 additions and 0 deletions
55
apps/learn/halkyon_learn_curator/Dockerfile
Normal file
55
apps/learn/halkyon_learn_curator/Dockerfile
Normal file
|
|
@ -0,0 +1,55 @@
|
|||
# The dictionaries' image: the curator, keeping a server's dictionary files current
|
||||
# from EDRDG's files of the day (`curate update`, the README). Built from the
|
||||
# repository root (the build context), where the workspace's root pubspec and lockfile
|
||||
# live:
|
||||
#
|
||||
# docker build -f halkyon_learn_curator/Dockerfile .
|
||||
#
|
||||
# A container of its own beside the server (deploy/compose.yaml, decided 2026-10-09):
|
||||
# the curator (AGPL) never enters the server's image or process, and a conversion
|
||||
# that fails can't touch the server. They share only the folder of files.
|
||||
|
||||
# ── Build stage: compile the curator to a native executable ───────────────────────
|
||||
FROM dart:3.13.4 AS build
|
||||
WORKDIR /app
|
||||
COPY pubspec.yaml pubspec.lock ./
|
||||
COPY halkyon_learn_curator halkyon_learn_curator
|
||||
|
||||
# The workspace root with only the curator package, as the server's Dockerfile does it
|
||||
# with the server's. The check fails the build loudly if the member list changes shape.
|
||||
RUN sed -i -e '/^ - halkyon_learn_client$/d' -e '/^ - halkyon_learn_flutter$/d' \
|
||||
-e '/^ - halkyon_learn_server$/d' pubspec.yaml \
|
||||
&& grep -q '^ - halkyon_learn_curator$' pubspec.yaml \
|
||||
&& ! grep -q -e 'halkyon_learn_client' -e 'halkyon_learn_flutter' \
|
||||
-e 'halkyon_learn_server' pubspec.yaml
|
||||
RUN dart pub get
|
||||
WORKDIR /app/halkyon_learn_curator
|
||||
RUN dart build cli --target bin/curate.dart --output build
|
||||
|
||||
# ── Runtime stage ─────────────────────────────────────────────────────────────────
|
||||
# Ubuntu 24.04 as the server's, with CA certificates for EDRDG's HTTPS, and MeCab's
|
||||
# IPADIC, which the package compiles as it is installed: the curator packs it for the
|
||||
# app's devices (ADR 0012). Its sources go once it is compiled.
|
||||
FROM ubuntu:24.04
|
||||
RUN apt-get update \
|
||||
&& DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
|
||||
ca-certificates mecab-ipadic-utf8 \
|
||||
&& test -s /var/lib/mecab/dic/ipadic-utf8/sys.dic \
|
||||
&& rm -rf /usr/share/mecab/dic/ipadic /var/lib/apt/lists/*
|
||||
WORKDIR /app
|
||||
|
||||
COPY --from=build /app/halkyon_learn_curator/build/bundle/ ./
|
||||
COPY --from=build /app/halkyon_learn_curator/data/ data/
|
||||
|
||||
# An unprivileged user of its own: user ID 10001, shared with neither the containers
|
||||
# of PostgreSQL and the server (999) nor the CI runner on the host (61000). The folder
|
||||
# it writes into belongs to it, which a new volume mounted there takes over.
|
||||
RUN useradd --system --uid 10001 --no-create-home --shell /usr/sbin/nologin curator \
|
||||
&& mkdir /dictionaries \
|
||||
&& chown curator /dictionaries
|
||||
USER curator
|
||||
|
||||
# Updates the files whenever they are a week old (EDRDG's licence asks at least
|
||||
# monthly), and sleeps in between.
|
||||
ENTRYPOINT ["./bin/curate", "update", "--into", "/dictionaries", "--data", "data"]
|
||||
CMD ["--every", "7"]
|
||||
661
apps/learn/halkyon_learn_curator/LICENSE
Normal file
661
apps/learn/halkyon_learn_curator/LICENSE
Normal file
|
|
@ -0,0 +1,661 @@
|
|||
GNU AFFERO GENERAL PUBLIC LICENSE
|
||||
Version 3, 19 November 2007
|
||||
|
||||
Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
Preamble
|
||||
|
||||
The GNU Affero General Public License is a free, copyleft license for
|
||||
software and other kinds of works, specifically designed to ensure
|
||||
cooperation with the community in the case of network server software.
|
||||
|
||||
The licenses for most software and other practical works are designed
|
||||
to take away your freedom to share and change the works. By contrast,
|
||||
our General Public Licenses are intended to guarantee your freedom to
|
||||
share and change all versions of a program--to make sure it remains free
|
||||
software for all its users.
|
||||
|
||||
When we speak of free software, we are referring to freedom, not
|
||||
price. Our General Public Licenses are designed to make sure that you
|
||||
have the freedom to distribute copies of free software (and charge for
|
||||
them if you wish), that you receive source code or can get it if you
|
||||
want it, that you can change the software or use pieces of it in new
|
||||
free programs, and that you know you can do these things.
|
||||
|
||||
Developers that use our General Public Licenses protect your rights
|
||||
with two steps: (1) assert copyright on the software, and (2) offer
|
||||
you this License which gives you legal permission to copy, distribute
|
||||
and/or modify the software.
|
||||
|
||||
A secondary benefit of defending all users' freedom is that
|
||||
improvements made in alternate versions of the program, if they
|
||||
receive widespread use, become available for other developers to
|
||||
incorporate. Many developers of free software are heartened and
|
||||
encouraged by the resulting cooperation. However, in the case of
|
||||
software used on network servers, this result may fail to come about.
|
||||
The GNU General Public License permits making a modified version and
|
||||
letting the public access it on a server without ever releasing its
|
||||
source code to the public.
|
||||
|
||||
The GNU Affero General Public License is designed specifically to
|
||||
ensure that, in such cases, the modified source code becomes available
|
||||
to the community. It requires the operator of a network server to
|
||||
provide the source code of the modified version running there to the
|
||||
users of that server. Therefore, public use of a modified version, on
|
||||
a publicly accessible server, gives the public access to the source
|
||||
code of the modified version.
|
||||
|
||||
An older license, called the Affero General Public License and
|
||||
published by Affero, was designed to accomplish similar goals. This is
|
||||
a different license, not a version of the Affero GPL, but Affero has
|
||||
released a new version of the Affero GPL which permits relicensing under
|
||||
this license.
|
||||
|
||||
The precise terms and conditions for copying, distribution and
|
||||
modification follow.
|
||||
|
||||
TERMS AND CONDITIONS
|
||||
|
||||
0. Definitions.
|
||||
|
||||
"This License" refers to version 3 of the GNU Affero General Public License.
|
||||
|
||||
"Copyright" also means copyright-like laws that apply to other kinds of
|
||||
works, such as semiconductor masks.
|
||||
|
||||
"The Program" refers to any copyrightable work licensed under this
|
||||
License. Each licensee is addressed as "you". "Licensees" and
|
||||
"recipients" may be individuals or organizations.
|
||||
|
||||
To "modify" a work means to copy from or adapt all or part of the work
|
||||
in a fashion requiring copyright permission, other than the making of an
|
||||
exact copy. The resulting work is called a "modified version" of the
|
||||
earlier work or a work "based on" the earlier work.
|
||||
|
||||
A "covered work" means either the unmodified Program or a work based
|
||||
on the Program.
|
||||
|
||||
To "propagate" a work means to do anything with it that, without
|
||||
permission, would make you directly or secondarily liable for
|
||||
infringement under applicable copyright law, except executing it on a
|
||||
computer or modifying a private copy. Propagation includes copying,
|
||||
distribution (with or without modification), making available to the
|
||||
public, and in some countries other activities as well.
|
||||
|
||||
To "convey" a work means any kind of propagation that enables other
|
||||
parties to make or receive copies. Mere interaction with a user through
|
||||
a computer network, with no transfer of a copy, is not conveying.
|
||||
|
||||
An interactive user interface displays "Appropriate Legal Notices"
|
||||
to the extent that it includes a convenient and prominently visible
|
||||
feature that (1) displays an appropriate copyright notice, and (2)
|
||||
tells the user that there is no warranty for the work (except to the
|
||||
extent that warranties are provided), that licensees may convey the
|
||||
work under this License, and how to view a copy of this License. If
|
||||
the interface presents a list of user commands or options, such as a
|
||||
menu, a prominent item in the list meets this criterion.
|
||||
|
||||
1. Source Code.
|
||||
|
||||
The "source code" for a work means the preferred form of the work
|
||||
for making modifications to it. "Object code" means any non-source
|
||||
form of a work.
|
||||
|
||||
A "Standard Interface" means an interface that either is an official
|
||||
standard defined by a recognized standards body, or, in the case of
|
||||
interfaces specified for a particular programming language, one that
|
||||
is widely used among developers working in that language.
|
||||
|
||||
The "System Libraries" of an executable work include anything, other
|
||||
than the work as a whole, that (a) is included in the normal form of
|
||||
packaging a Major Component, but which is not part of that Major
|
||||
Component, and (b) serves only to enable use of the work with that
|
||||
Major Component, or to implement a Standard Interface for which an
|
||||
implementation is available to the public in source code form. A
|
||||
"Major Component", in this context, means a major essential component
|
||||
(kernel, window system, and so on) of the specific operating system
|
||||
(if any) on which the executable work runs, or a compiler used to
|
||||
produce the work, or an object code interpreter used to run it.
|
||||
|
||||
The "Corresponding Source" for a work in object code form means all
|
||||
the source code needed to generate, install, and (for an executable
|
||||
work) run the object code and to modify the work, including scripts to
|
||||
control those activities. However, it does not include the work's
|
||||
System Libraries, or general-purpose tools or generally available free
|
||||
programs which are used unmodified in performing those activities but
|
||||
which are not part of the work. For example, Corresponding Source
|
||||
includes interface definition files associated with source files for
|
||||
the work, and the source code for shared libraries and dynamically
|
||||
linked subprograms that the work is specifically designed to require,
|
||||
such as by intimate data communication or control flow between those
|
||||
subprograms and other parts of the work.
|
||||
|
||||
The Corresponding Source need not include anything that users
|
||||
can regenerate automatically from other parts of the Corresponding
|
||||
Source.
|
||||
|
||||
The Corresponding Source for a work in source code form is that
|
||||
same work.
|
||||
|
||||
2. Basic Permissions.
|
||||
|
||||
All rights granted under this License are granted for the term of
|
||||
copyright on the Program, and are irrevocable provided the stated
|
||||
conditions are met. This License explicitly affirms your unlimited
|
||||
permission to run the unmodified Program. The output from running a
|
||||
covered work is covered by this License only if the output, given its
|
||||
content, constitutes a covered work. This License acknowledges your
|
||||
rights of fair use or other equivalent, as provided by copyright law.
|
||||
|
||||
You may make, run and propagate covered works that you do not
|
||||
convey, without conditions so long as your license otherwise remains
|
||||
in force. You may convey covered works to others for the sole purpose
|
||||
of having them make modifications exclusively for you, or provide you
|
||||
with facilities for running those works, provided that you comply with
|
||||
the terms of this License in conveying all material for which you do
|
||||
not control copyright. Those thus making or running the covered works
|
||||
for you must do so exclusively on your behalf, under your direction
|
||||
and control, on terms that prohibit them from making any copies of
|
||||
your copyrighted material outside their relationship with you.
|
||||
|
||||
Conveying under any other circumstances is permitted solely under
|
||||
the conditions stated below. Sublicensing is not allowed; section 10
|
||||
makes it unnecessary.
|
||||
|
||||
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
|
||||
|
||||
No covered work shall be deemed part of an effective technological
|
||||
measure under any applicable law fulfilling obligations under article
|
||||
11 of the WIPO copyright treaty adopted on 20 December 1996, or
|
||||
similar laws prohibiting or restricting circumvention of such
|
||||
measures.
|
||||
|
||||
When you convey a covered work, you waive any legal power to forbid
|
||||
circumvention of technological measures to the extent such circumvention
|
||||
is effected by exercising rights under this License with respect to
|
||||
the covered work, and you disclaim any intention to limit operation or
|
||||
modification of the work as a means of enforcing, against the work's
|
||||
users, your or third parties' legal rights to forbid circumvention of
|
||||
technological measures.
|
||||
|
||||
4. Conveying Verbatim Copies.
|
||||
|
||||
You may convey verbatim copies of the Program's source code as you
|
||||
receive it, in any medium, provided that you conspicuously and
|
||||
appropriately publish on each copy an appropriate copyright notice;
|
||||
keep intact all notices stating that this License and any
|
||||
non-permissive terms added in accord with section 7 apply to the code;
|
||||
keep intact all notices of the absence of any warranty; and give all
|
||||
recipients a copy of this License along with the Program.
|
||||
|
||||
You may charge any price or no price for each copy that you convey,
|
||||
and you may offer support or warranty protection for a fee.
|
||||
|
||||
5. Conveying Modified Source Versions.
|
||||
|
||||
You may convey a work based on the Program, or the modifications to
|
||||
produce it from the Program, in the form of source code under the
|
||||
terms of section 4, provided that you also meet all of these conditions:
|
||||
|
||||
a) The work must carry prominent notices stating that you modified
|
||||
it, and giving a relevant date.
|
||||
|
||||
b) The work must carry prominent notices stating that it is
|
||||
released under this License and any conditions added under section
|
||||
7. This requirement modifies the requirement in section 4 to
|
||||
"keep intact all notices".
|
||||
|
||||
c) You must license the entire work, as a whole, under this
|
||||
License to anyone who comes into possession of a copy. This
|
||||
License will therefore apply, along with any applicable section 7
|
||||
additional terms, to the whole of the work, and all its parts,
|
||||
regardless of how they are packaged. This License gives no
|
||||
permission to license the work in any other way, but it does not
|
||||
invalidate such permission if you have separately received it.
|
||||
|
||||
d) If the work has interactive user interfaces, each must display
|
||||
Appropriate Legal Notices; however, if the Program has interactive
|
||||
interfaces that do not display Appropriate Legal Notices, your
|
||||
work need not make them do so.
|
||||
|
||||
A compilation of a covered work with other separate and independent
|
||||
works, which are not by their nature extensions of the covered work,
|
||||
and which are not combined with it such as to form a larger program,
|
||||
in or on a volume of a storage or distribution medium, is called an
|
||||
"aggregate" if the compilation and its resulting copyright are not
|
||||
used to limit the access or legal rights of the compilation's users
|
||||
beyond what the individual works permit. Inclusion of a covered work
|
||||
in an aggregate does not cause this License to apply to the other
|
||||
parts of the aggregate.
|
||||
|
||||
6. Conveying Non-Source Forms.
|
||||
|
||||
You may convey a covered work in object code form under the terms
|
||||
of sections 4 and 5, provided that you also convey the
|
||||
machine-readable Corresponding Source under the terms of this License,
|
||||
in one of these ways:
|
||||
|
||||
a) Convey the object code in, or embodied in, a physical product
|
||||
(including a physical distribution medium), accompanied by the
|
||||
Corresponding Source fixed on a durable physical medium
|
||||
customarily used for software interchange.
|
||||
|
||||
b) Convey the object code in, or embodied in, a physical product
|
||||
(including a physical distribution medium), accompanied by a
|
||||
written offer, valid for at least three years and valid for as
|
||||
long as you offer spare parts or customer support for that product
|
||||
model, to give anyone who possesses the object code either (1) a
|
||||
copy of the Corresponding Source for all the software in the
|
||||
product that is covered by this License, on a durable physical
|
||||
medium customarily used for software interchange, for a price no
|
||||
more than your reasonable cost of physically performing this
|
||||
conveying of source, or (2) access to copy the
|
||||
Corresponding Source from a network server at no charge.
|
||||
|
||||
c) Convey individual copies of the object code with a copy of the
|
||||
written offer to provide the Corresponding Source. This
|
||||
alternative is allowed only occasionally and noncommercially, and
|
||||
only if you received the object code with such an offer, in accord
|
||||
with subsection 6b.
|
||||
|
||||
d) Convey the object code by offering access from a designated
|
||||
place (gratis or for a charge), and offer equivalent access to the
|
||||
Corresponding Source in the same way through the same place at no
|
||||
further charge. You need not require recipients to copy the
|
||||
Corresponding Source along with the object code. If the place to
|
||||
copy the object code is a network server, the Corresponding Source
|
||||
may be on a different server (operated by you or a third party)
|
||||
that supports equivalent copying facilities, provided you maintain
|
||||
clear directions next to the object code saying where to find the
|
||||
Corresponding Source. Regardless of what server hosts the
|
||||
Corresponding Source, you remain obligated to ensure that it is
|
||||
available for as long as needed to satisfy these requirements.
|
||||
|
||||
e) Convey the object code using peer-to-peer transmission, provided
|
||||
you inform other peers where the object code and Corresponding
|
||||
Source of the work are being offered to the general public at no
|
||||
charge under subsection 6d.
|
||||
|
||||
A separable portion of the object code, whose source code is excluded
|
||||
from the Corresponding Source as a System Library, need not be
|
||||
included in conveying the object code work.
|
||||
|
||||
A "User Product" is either (1) a "consumer product", which means any
|
||||
tangible personal property which is normally used for personal, family,
|
||||
or household purposes, or (2) anything designed or sold for incorporation
|
||||
into a dwelling. In determining whether a product is a consumer product,
|
||||
doubtful cases shall be resolved in favor of coverage. For a particular
|
||||
product received by a particular user, "normally used" refers to a
|
||||
typical or common use of that class of product, regardless of the status
|
||||
of the particular user or of the way in which the particular user
|
||||
actually uses, or expects or is expected to use, the product. A product
|
||||
is a consumer product regardless of whether the product has substantial
|
||||
commercial, industrial or non-consumer uses, unless such uses represent
|
||||
the only significant mode of use of the product.
|
||||
|
||||
"Installation Information" for a User Product means any methods,
|
||||
procedures, authorization keys, or other information required to install
|
||||
and execute modified versions of a covered work in that User Product from
|
||||
a modified version of its Corresponding Source. The information must
|
||||
suffice to ensure that the continued functioning of the modified object
|
||||
code is in no case prevented or interfered with solely because
|
||||
modification has been made.
|
||||
|
||||
If you convey an object code work under this section in, or with, or
|
||||
specifically for use in, a User Product, and the conveying occurs as
|
||||
part of a transaction in which the right of possession and use of the
|
||||
User Product is transferred to the recipient in perpetuity or for a
|
||||
fixed term (regardless of how the transaction is characterized), the
|
||||
Corresponding Source conveyed under this section must be accompanied
|
||||
by the Installation Information. But this requirement does not apply
|
||||
if neither you nor any third party retains the ability to install
|
||||
modified object code on the User Product (for example, the work has
|
||||
been installed in ROM).
|
||||
|
||||
The requirement to provide Installation Information does not include a
|
||||
requirement to continue to provide support service, warranty, or updates
|
||||
for a work that has been modified or installed by the recipient, or for
|
||||
the User Product in which it has been modified or installed. Access to a
|
||||
network may be denied when the modification itself materially and
|
||||
adversely affects the operation of the network or violates the rules and
|
||||
protocols for communication across the network.
|
||||
|
||||
Corresponding Source conveyed, and Installation Information provided,
|
||||
in accord with this section must be in a format that is publicly
|
||||
documented (and with an implementation available to the public in
|
||||
source code form), and must require no special password or key for
|
||||
unpacking, reading or copying.
|
||||
|
||||
7. Additional Terms.
|
||||
|
||||
"Additional permissions" are terms that supplement the terms of this
|
||||
License by making exceptions from one or more of its conditions.
|
||||
Additional permissions that are applicable to the entire Program shall
|
||||
be treated as though they were included in this License, to the extent
|
||||
that they are valid under applicable law. If additional permissions
|
||||
apply only to part of the Program, that part may be used separately
|
||||
under those permissions, but the entire Program remains governed by
|
||||
this License without regard to the additional permissions.
|
||||
|
||||
When you convey a copy of a covered work, you may at your option
|
||||
remove any additional permissions from that copy, or from any part of
|
||||
it. (Additional permissions may be written to require their own
|
||||
removal in certain cases when you modify the work.) You may place
|
||||
additional permissions on material, added by you to a covered work,
|
||||
for which you have or can give appropriate copyright permission.
|
||||
|
||||
Notwithstanding any other provision of this License, for material you
|
||||
add to a covered work, you may (if authorized by the copyright holders of
|
||||
that material) supplement the terms of this License with terms:
|
||||
|
||||
a) Disclaiming warranty or limiting liability differently from the
|
||||
terms of sections 15 and 16 of this License; or
|
||||
|
||||
b) Requiring preservation of specified reasonable legal notices or
|
||||
author attributions in that material or in the Appropriate Legal
|
||||
Notices displayed by works containing it; or
|
||||
|
||||
c) Prohibiting misrepresentation of the origin of that material, or
|
||||
requiring that modified versions of such material be marked in
|
||||
reasonable ways as different from the original version; or
|
||||
|
||||
d) Limiting the use for publicity purposes of names of licensors or
|
||||
authors of the material; or
|
||||
|
||||
e) Declining to grant rights under trademark law for use of some
|
||||
trade names, trademarks, or service marks; or
|
||||
|
||||
f) Requiring indemnification of licensors and authors of that
|
||||
material by anyone who conveys the material (or modified versions of
|
||||
it) with contractual assumptions of liability to the recipient, for
|
||||
any liability that these contractual assumptions directly impose on
|
||||
those licensors and authors.
|
||||
|
||||
All other non-permissive additional terms are considered "further
|
||||
restrictions" within the meaning of section 10. If the Program as you
|
||||
received it, or any part of it, contains a notice stating that it is
|
||||
governed by this License along with a term that is a further
|
||||
restriction, you may remove that term. If a license document contains
|
||||
a further restriction but permits relicensing or conveying under this
|
||||
License, you may add to a covered work material governed by the terms
|
||||
of that license document, provided that the further restriction does
|
||||
not survive such relicensing or conveying.
|
||||
|
||||
If you add terms to a covered work in accord with this section, you
|
||||
must place, in the relevant source files, a statement of the
|
||||
additional terms that apply to those files, or a notice indicating
|
||||
where to find the applicable terms.
|
||||
|
||||
Additional terms, permissive or non-permissive, may be stated in the
|
||||
form of a separately written license, or stated as exceptions;
|
||||
the above requirements apply either way.
|
||||
|
||||
8. Termination.
|
||||
|
||||
You may not propagate or modify a covered work except as expressly
|
||||
provided under this License. Any attempt otherwise to propagate or
|
||||
modify it is void, and will automatically terminate your rights under
|
||||
this License (including any patent licenses granted under the third
|
||||
paragraph of section 11).
|
||||
|
||||
However, if you cease all violation of this License, then your
|
||||
license from a particular copyright holder is reinstated (a)
|
||||
provisionally, unless and until the copyright holder explicitly and
|
||||
finally terminates your license, and (b) permanently, if the copyright
|
||||
holder fails to notify you of the violation by some reasonable means
|
||||
prior to 60 days after the cessation.
|
||||
|
||||
Moreover, your license from a particular copyright holder is
|
||||
reinstated permanently if the copyright holder notifies you of the
|
||||
violation by some reasonable means, this is the first time you have
|
||||
received notice of violation of this License (for any work) from that
|
||||
copyright holder, and you cure the violation prior to 30 days after
|
||||
your receipt of the notice.
|
||||
|
||||
Termination of your rights under this section does not terminate the
|
||||
licenses of parties who have received copies or rights from you under
|
||||
this License. If your rights have been terminated and not permanently
|
||||
reinstated, you do not qualify to receive new licenses for the same
|
||||
material under section 10.
|
||||
|
||||
9. Acceptance Not Required for Having Copies.
|
||||
|
||||
You are not required to accept this License in order to receive or
|
||||
run a copy of the Program. Ancillary propagation of a covered work
|
||||
occurring solely as a consequence of using peer-to-peer transmission
|
||||
to receive a copy likewise does not require acceptance. However,
|
||||
nothing other than this License grants you permission to propagate or
|
||||
modify any covered work. These actions infringe copyright if you do
|
||||
not accept this License. Therefore, by modifying or propagating a
|
||||
covered work, you indicate your acceptance of this License to do so.
|
||||
|
||||
10. Automatic Licensing of Downstream Recipients.
|
||||
|
||||
Each time you convey a covered work, the recipient automatically
|
||||
receives a license from the original licensors, to run, modify and
|
||||
propagate that work, subject to this License. You are not responsible
|
||||
for enforcing compliance by third parties with this License.
|
||||
|
||||
An "entity transaction" is a transaction transferring control of an
|
||||
organization, or substantially all assets of one, or subdividing an
|
||||
organization, or merging organizations. If propagation of a covered
|
||||
work results from an entity transaction, each party to that
|
||||
transaction who receives a copy of the work also receives whatever
|
||||
licenses to the work the party's predecessor in interest had or could
|
||||
give under the previous paragraph, plus a right to possession of the
|
||||
Corresponding Source of the work from the predecessor in interest, if
|
||||
the predecessor has it or can get it with reasonable efforts.
|
||||
|
||||
You may not impose any further restrictions on the exercise of the
|
||||
rights granted or affirmed under this License. For example, you may
|
||||
not impose a license fee, royalty, or other charge for exercise of
|
||||
rights granted under this License, and you may not initiate litigation
|
||||
(including a cross-claim or counterclaim in a lawsuit) alleging that
|
||||
any patent claim is infringed by making, using, selling, offering for
|
||||
sale, or importing the Program or any portion of it.
|
||||
|
||||
11. Patents.
|
||||
|
||||
A "contributor" is a copyright holder who authorizes use under this
|
||||
License of the Program or a work on which the Program is based. The
|
||||
work thus licensed is called the contributor's "contributor version".
|
||||
|
||||
A contributor's "essential patent claims" are all patent claims
|
||||
owned or controlled by the contributor, whether already acquired or
|
||||
hereafter acquired, that would be infringed by some manner, permitted
|
||||
by this License, of making, using, or selling its contributor version,
|
||||
but do not include claims that would be infringed only as a
|
||||
consequence of further modification of the contributor version. For
|
||||
purposes of this definition, "control" includes the right to grant
|
||||
patent sublicenses in a manner consistent with the requirements of
|
||||
this License.
|
||||
|
||||
Each contributor grants you a non-exclusive, worldwide, royalty-free
|
||||
patent license under the contributor's essential patent claims, to
|
||||
make, use, sell, offer for sale, import and otherwise run, modify and
|
||||
propagate the contents of its contributor version.
|
||||
|
||||
In the following three paragraphs, a "patent license" is any express
|
||||
agreement or commitment, however denominated, not to enforce a patent
|
||||
(such as an express permission to practice a patent or covenant not to
|
||||
sue for patent infringement). To "grant" such a patent license to a
|
||||
party means to make such an agreement or commitment not to enforce a
|
||||
patent against the party.
|
||||
|
||||
If you convey a covered work, knowingly relying on a patent license,
|
||||
and the Corresponding Source of the work is not available for anyone
|
||||
to copy, free of charge and under the terms of this License, through a
|
||||
publicly available network server or other readily accessible means,
|
||||
then you must either (1) cause the Corresponding Source to be so
|
||||
available, or (2) arrange to deprive yourself of the benefit of the
|
||||
patent license for this particular work, or (3) arrange, in a manner
|
||||
consistent with the requirements of this License, to extend the patent
|
||||
license to downstream recipients. "Knowingly relying" means you have
|
||||
actual knowledge that, but for the patent license, your conveying the
|
||||
covered work in a country, or your recipient's use of the covered work
|
||||
in a country, would infringe one or more identifiable patents in that
|
||||
country that you have reason to believe are valid.
|
||||
|
||||
If, pursuant to or in connection with a single transaction or
|
||||
arrangement, you convey, or propagate by procuring conveyance of, a
|
||||
covered work, and grant a patent license to some of the parties
|
||||
receiving the covered work authorizing them to use, propagate, modify
|
||||
or convey a specific copy of the covered work, then the patent license
|
||||
you grant is automatically extended to all recipients of the covered
|
||||
work and works based on it.
|
||||
|
||||
A patent license is "discriminatory" if it does not include within
|
||||
the scope of its coverage, prohibits the exercise of, or is
|
||||
conditioned on the non-exercise of one or more of the rights that are
|
||||
specifically granted under this License. You may not convey a covered
|
||||
work if you are a party to an arrangement with a third party that is
|
||||
in the business of distributing software, under which you make payment
|
||||
to the third party based on the extent of your activity of conveying
|
||||
the work, and under which the third party grants, to any of the
|
||||
parties who would receive the covered work from you, a discriminatory
|
||||
patent license (a) in connection with copies of the covered work
|
||||
conveyed by you (or copies made from those copies), or (b) primarily
|
||||
for and in connection with specific products or compilations that
|
||||
contain the covered work, unless you entered into that arrangement,
|
||||
or that patent license was granted, prior to 28 March 2007.
|
||||
|
||||
Nothing in this License shall be construed as excluding or limiting
|
||||
any implied license or other defenses to infringement that may
|
||||
otherwise be available to you under applicable patent law.
|
||||
|
||||
12. No Surrender of Others' Freedom.
|
||||
|
||||
If conditions are imposed on you (whether by court order, agreement or
|
||||
otherwise) that contradict the conditions of this License, they do not
|
||||
excuse you from the conditions of this License. If you cannot convey a
|
||||
covered work so as to satisfy simultaneously your obligations under this
|
||||
License and any other pertinent obligations, then as a consequence you may
|
||||
not convey it at all. For example, if you agree to terms that obligate you
|
||||
to collect a royalty for further conveying from those to whom you convey
|
||||
the Program, the only way you could satisfy both those terms and this
|
||||
License would be to refrain entirely from conveying the Program.
|
||||
|
||||
13. Remote Network Interaction; Use with the GNU General Public License.
|
||||
|
||||
Notwithstanding any other provision of this License, if you modify the
|
||||
Program, your modified version must prominently offer all users
|
||||
interacting with it remotely through a computer network (if your version
|
||||
supports such interaction) an opportunity to receive the Corresponding
|
||||
Source of your version by providing access to the Corresponding Source
|
||||
from a network server at no charge, through some standard or customary
|
||||
means of facilitating copying of software. This Corresponding Source
|
||||
shall include the Corresponding Source for any work covered by version 3
|
||||
of the GNU General Public License that is incorporated pursuant to the
|
||||
following paragraph.
|
||||
|
||||
Notwithstanding any other provision of this License, you have
|
||||
permission to link or combine any covered work with a work licensed
|
||||
under version 3 of the GNU General Public License into a single
|
||||
combined work, and to convey the resulting work. The terms of this
|
||||
License will continue to apply to the part which is the covered work,
|
||||
but the work with which it is combined will remain governed by version
|
||||
3 of the GNU General Public License.
|
||||
|
||||
14. Revised Versions of this License.
|
||||
|
||||
The Free Software Foundation may publish revised and/or new versions of
|
||||
the GNU Affero General Public License from time to time. Such new versions
|
||||
will be similar in spirit to the present version, but may differ in detail to
|
||||
address new problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the
|
||||
Program specifies that a certain numbered version of the GNU Affero General
|
||||
Public License "or any later version" applies to it, you have the
|
||||
option of following the terms and conditions either of that numbered
|
||||
version or of any later version published by the Free Software
|
||||
Foundation. If the Program does not specify a version number of the
|
||||
GNU Affero General Public License, you may choose any version ever published
|
||||
by the Free Software Foundation.
|
||||
|
||||
If the Program specifies that a proxy can decide which future
|
||||
versions of the GNU Affero General Public License can be used, that proxy's
|
||||
public statement of acceptance of a version permanently authorizes you
|
||||
to choose that version for the Program.
|
||||
|
||||
Later license versions may give you additional or different
|
||||
permissions. However, no additional obligations are imposed on any
|
||||
author or copyright holder as a result of your choosing to follow a
|
||||
later version.
|
||||
|
||||
15. Disclaimer of Warranty.
|
||||
|
||||
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
|
||||
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
|
||||
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
|
||||
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
|
||||
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
|
||||
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
|
||||
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
|
||||
|
||||
16. Limitation of Liability.
|
||||
|
||||
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
|
||||
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
|
||||
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
|
||||
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
|
||||
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
|
||||
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
|
||||
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
|
||||
SUCH DAMAGES.
|
||||
|
||||
17. Interpretation of Sections 15 and 16.
|
||||
|
||||
If the disclaimer of warranty and limitation of liability provided
|
||||
above cannot be given local legal effect according to their terms,
|
||||
reviewing courts shall apply local law that most closely approximates
|
||||
an absolute waiver of all civil liability in connection with the
|
||||
Program, unless a warranty or assumption of liability accompanies a
|
||||
copy of the Program in return for a fee.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
How to Apply These Terms to Your New Programs
|
||||
|
||||
If you develop a new program, and you want it to be of the greatest
|
||||
possible use to the public, the best way to achieve this is to make it
|
||||
free software which everyone can redistribute and change under these terms.
|
||||
|
||||
To do so, attach the following notices to the program. It is safest
|
||||
to attach them to the start of each source file to most effectively
|
||||
state the exclusion of warranty; and each file should have at least
|
||||
the "copyright" line and a pointer to where the full notice is found.
|
||||
|
||||
<one line to give the program's name and a brief idea of what it does.>
|
||||
Copyright (C) <year> <name of author>
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Affero General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Affero General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Affero General Public License
|
||||
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
Also add information on how to contact you by electronic and paper mail.
|
||||
|
||||
If your software can interact with users remotely through a computer
|
||||
network, you should also make sure that it provides a way for users to
|
||||
get its source. For example, if your program is a web application, its
|
||||
interface could display a "Source" link that leads users to an archive
|
||||
of the code. There are many ways you could offer source, and different
|
||||
solutions will be better for different programs; see section 13 for the
|
||||
specific requirements.
|
||||
|
||||
You should also get your employer (if you work as a programmer) or school,
|
||||
if any, to sign a "copyright disclaimer" for the program, if necessary.
|
||||
For more information on this, and how to apply and follow the GNU AGPL, see
|
||||
<https://www.gnu.org/licenses/>.
|
||||
346
apps/learn/halkyon_learn_curator/README.md
Normal file
346
apps/learn/halkyon_learn_curator/README.md
Normal file
|
|
@ -0,0 +1,346 @@
|
|||
# halkyon_learn_curator
|
||||
|
||||
Turns dictionary downloads into the dictionary files a Halkyon Learn server
|
||||
loads. It reads each source with an adapter of its own and writes one format
|
||||
for all of them, so a new source or language needs a new adapter, never a
|
||||
change to the server or the app. It doesn't depend on Serverpod or the server.
|
||||
It also makes the stroke files the app writes characters with (below).
|
||||
|
||||
## Making a dictionary file
|
||||
|
||||
JMdict in English, with the JLPT levels and example sentences on top:
|
||||
|
||||
1. Download `JMdict_e_examp.gz` from
|
||||
[EDRDG](https://www.edrdg.org/pub/Nihongo/JMdict_e_examp.gz), which makes
|
||||
it anew every day: JMdict with Tatoeba's sentences (CC BY 2.0 FR) on the
|
||||
meanings they show. `JMdict_e.gz` works too, without them, and so does
|
||||
jmdict-simplified's JSON (`jmdict-examples-eng-<version>.json`, from
|
||||
[its releases](https://github.com/scriptin/jmdict-simplified/releases)).
|
||||
2. Download `original_data/n1.csv` … `n5.csv` from
|
||||
[yomitan-jlpt-vocab](https://github.com/stephenmk/yomitan-jlpt-vocab) into a
|
||||
folder.
|
||||
3. Convert, in this package:
|
||||
|
||||
```sh
|
||||
dart run halkyon_learn_curator:curate jmdict \
|
||||
--input JMdict_e_examp.gz --jlpt jlpt/ \
|
||||
--output jmdict-en.jsonl.gz
|
||||
```
|
||||
|
||||
The whole of JMdict (about 219,000 entries) takes some 30 seconds and
|
||||
300 MB of memory: entries are read one at a time. A file whose name
|
||||
holds `.json` is read as jmdict-simplified's JSON, any other as EDRDG's
|
||||
XML.
|
||||
|
||||
KANJIDIC2 in English, with the JLPT levels of its kanji, and the kana:
|
||||
|
||||
1. Download `kanjidic2.xml.gz` from
|
||||
[the EDRDG](https://www.edrdg.org/wiki/index.php/KANJIDIC_Project).
|
||||
2. Download `kanji.json` from
|
||||
[kanji-data](https://github.com/davidluzgouveia/kanji-data): Jonathan
|
||||
Waller's JLPT levels by kanji (`jlpt_new`; nothing else is read).
|
||||
3. Convert, in this package:
|
||||
|
||||
```sh
|
||||
dart run halkyon_learn_curator:curate kanjidic \
|
||||
--input kanjidic2.xml.gz --jlpt kanji.json \
|
||||
--output kanjidic-en.jsonl.gz
|
||||
```
|
||||
|
||||
About 12,800 characters, in some 5 seconds.
|
||||
|
||||
Wiktionary, for the words of German, Greek and English (decided 2026-10-14),
|
||||
and for Korean the forms of its words and the native readings of its Hanja:
|
||||
|
||||
1. Download `raw-wiktextract-data.jsonl.gz` from
|
||||
[kaikki.org](https://kaikki.org/dictionary/rawdata.html): the English
|
||||
Wiktionary as Wiktextract reads it, every language in one file (some 3 GB,
|
||||
24 GB unpacked; kaikki.org's files of single languages are being withdrawn).
|
||||
2. Convert, in this package, naming the languages:
|
||||
|
||||
```sh
|
||||
dart run halkyon_learn_curator:curate wiktionary \
|
||||
--input raw-wiktextract-data.jsonl.gz --languages de,el,en \
|
||||
--version 2026-10-03 --output ../halkyon_learn_server/dictionaries
|
||||
```
|
||||
|
||||
Each language but English becomes its words with Wiktionary's English
|
||||
meanings (`wiktionary-de-en.jsonl.gz`, source `wiktionary-de`); English
|
||||
becomes its words with what their translation tables give in German
|
||||
(`wiktionary-en-de.jsonl.gz`), German being the app's other language. An
|
||||
inflected form, and an entry Wiktionary has for one alone ("Häusern: dative
|
||||
plural of Haus"), finds its word rather than being an entry of its own;
|
||||
names and affixes are left out. Word frequencies from `data/wordfreq/` rank
|
||||
the words and say which are `common` (the 15,000 most used). Reading the
|
||||
whole dump takes a while; it is read once, streamed, keeping in memory only
|
||||
which forms belong to which word.
|
||||
|
||||
Chinese from CC-CEDICT (decided 2026-10-14: a dictionary of its own, made for
|
||||
learners of Chinese, where Wiktionary's Chinese entries sit at their traditional
|
||||
forms):
|
||||
|
||||
1. Download `cedict_1_0_ts_utf-8_mdbg.txt.gz` from
|
||||
[MDBG](https://www.mdbg.net/chinese/dictionary?page=cc-cedict), which makes it
|
||||
anew every day.
|
||||
2. Convert, in this package:
|
||||
|
||||
```sh
|
||||
dart run halkyon_learn_curator:curate cedict \
|
||||
--input cedict_1_0_ts_utf-8_mdbg.txt.gz \
|
||||
--output ../halkyon_learn_server/dictionaries
|
||||
```
|
||||
|
||||
It writes two dictionaries of the same entries, `cc-cedict-hans-en`
|
||||
(`zh-Hans`, headwords in simplified characters) and `cc-cedict-hant-en`
|
||||
(`zh-Hant`, in traditional ones), so a studyset finds its words as it writes
|
||||
them; each finds a word by either script, by its pinyin with or without tones
|
||||
(`xuéxí`, `xuexi`, `xue2xi2`) and by its meanings. Readings are pinyin with
|
||||
tone marks, a syllable to a character (`xué xí`). The HSK levels of the 2025
|
||||
examination syllabus (`data/hsk/`) label the words `hsk:1` … `hsk:6`, and
|
||||
`hsk:7` for the advanced levels 7 to 9, which the syllabus doesn't tell
|
||||
apart, each given to the entry read as the syllabus reads the word (的 *de*,
|
||||
not 的 *dì*), and rank them, HSK 1 first; wordfreq ranks the rest.
|
||||
|
||||
Chinese characters and Korean Hanja from Unihan, the Unicode Consortium's
|
||||
database of Han characters (decided 2026-10-14, for parity with KANJIDIC2;
|
||||
Unicode License v3):
|
||||
|
||||
1. Download `Unihan.zip` from
|
||||
[unicode.org](https://www.unicode.org/Public/UCD/latest/ucd/Unihan.zip)
|
||||
(8 MB, a new one with each version of Unicode), and CC-CEDICT as above.
|
||||
2. Convert, naming the languages:
|
||||
|
||||
```sh
|
||||
dart run halkyon_learn_curator:curate unihan --input Unihan.zip \
|
||||
--languages ko,zh --cedict cedict_1_0_ts_utf-8_mdbg.txt.gz \
|
||||
[--korean .wiktionary-ko.json.gz] \
|
||||
--output ../halkyon_learn_server/dictionaries
|
||||
```
|
||||
|
||||
For Chinese, two dictionaries of characters as for the words: the 8,105
|
||||
General Standard Chinese Characters of 2013 (`unihan-hans-en`, `zh-Hans`),
|
||||
and the traditional characters in use (`unihan-hant-en`, `zh-Hant`): each of
|
||||
them as Taiwan and Hong Kong write it, where it is a form of its own or a
|
||||
word of CC-CEDICT writes it so (Unihan calls 这 its own traditional variant,
|
||||
but no word is written with it), with those Hong Kong's primary schools
|
||||
teach. Each with its pinyin (the usual reading first: the mainland's in
|
||||
simplified, Taiwan's in traditional characters), meanings, stroke count and
|
||||
other script's forms; labelled by its HSK level (`hsk:1` … `hsk:7`, from the
|
||||
syllabus's characters in `data/hsk/`), the 3,500 standard characters in
|
||||
common use (`common`), a Hong Kong grade (`grade:1` … `grade:6`) and its
|
||||
Kangxi radical (`radical:N`), and ranked by HSK level, then by the most used
|
||||
word of CC-CEDICT written with it (wordfreq), so 後 ranks as the 后 of 以后
|
||||
and 后, the queen, by 皇后. For Korean, the 7,800 Hanja with a Korean reading
|
||||
(`unihan-ko-en`): their sounds (음, the one taught first), their native
|
||||
meanings with their sounds as Wiktionary gives them (훈, `물 수` for 水; from
|
||||
the Wiktionary update's `.wiktionary-ko.json.gz`), meanings and strokes,
|
||||
labelled `education` for the 1,800 taught in schools; and the 40 Hangul
|
||||
letters (jamo) as the kana are in KANJIDIC2's, with their sound and name,
|
||||
labelled `hangul`. Some 3 seconds.
|
||||
|
||||
The Greek alphabet, written by the curator itself (`greek-alphabet-en`, `el`,
|
||||
CC0): each letter with its capital, its Greek and English names, its
|
||||
transliteration (ELOT 743) and its sound, labelled `greek`, for a characters
|
||||
tab as kana have.
|
||||
|
||||
Korean words from KRDict, the National Institute of Korean Language's Basic
|
||||
Korean Dictionary for learners (decided 2026-10-14: levels, pronunciation and
|
||||
Hanja, which Wiktionary lacks; CC BY-SA 2.0 KR, later versions allowed):
|
||||
|
||||
1. Download its JSON export from
|
||||
[its page](https://krdict.korean.go.kr/download/downloadPopup) (Json 전체
|
||||
내려받기; no account needed; some 84 MB, a gigabyte unpacked, renewed about
|
||||
monthly).
|
||||
2. Convert:
|
||||
|
||||
```sh
|
||||
dart run halkyon_learn_curator:curate krdict \
|
||||
--input krdict_json_20260919.zip [--korean .wiktionary-ko.json.gz] \
|
||||
--output ../halkyon_learn_server/dictionaries
|
||||
```
|
||||
|
||||
`krdict-ko-en.jsonl.gz` holds its 54,870 words, idioms and proverbs, each
|
||||
with its part of speech, its pronunciation as its reading where it differs
|
||||
from the spelling (같이 [가치]), its Hanja, the few forms KRDict gives and
|
||||
its senses (KRDict's English words, its English definition as `info`);
|
||||
labelled by its learners' level (`level:beginner`, `level:intermediate`,
|
||||
`level:advanced`) and ranked by it, then by wordfreq (a verb, rarely written
|
||||
as the dictionary writes it, by its most used form). With the Wiktionary
|
||||
update's file, every form Wiktionary's tables give (가다's 99) finds a word in
|
||||
running text too. An idiom or proverb carries the id of the word it is filed
|
||||
under, so its own id adds itself (`27500:가는 날이 장날`). Read an entry at a
|
||||
time, some 25 seconds and 600 MB.
|
||||
|
||||
Example sentences from Tatoeba for those dictionaries (JMdict brings its own),
|
||||
as hints on the cards made from them:
|
||||
|
||||
```sh
|
||||
dart run halkyon_learn_curator:curate tatoeba \
|
||||
--input wiktionary-de-en.jsonl.gz --sentences deu_sentences.tsv.bz2 \
|
||||
--translations eng_sentences.tsv.bz2 --links deu-eng_links.tsv.bz2 \
|
||||
--output wiktionary-de-en.jsonl.gz
|
||||
```
|
||||
|
||||
from [Tatoeba's weekly exports](https://downloads.tatoeba.org/exports/per_language/)
|
||||
of the dictionary's language, of its meaning language and of the links between
|
||||
them (CC BY 2.0 FR). Each sentence with a translation goes to the entries its
|
||||
words find by their text keys, as the app finds words in a line of subtitles,
|
||||
up to three for each: those using the word as its headword writes it first, then
|
||||
those nearest seven words long, the shortest then; they come first in an entry's
|
||||
first sense, the word as it stands there beside. Some ten seconds for German.
|
||||
|
||||
Put the files into the server's `dictionaries` folder. The server loads each on
|
||||
its next start, and again whenever it changes (see the server's README).
|
||||
|
||||
## Keeping a server's dictionaries current
|
||||
|
||||
|
||||
EDRDG's licence asks of a server showing its dictionaries that it update them
|
||||
at least once a month. `curate update` does it from the sources alone:
|
||||
|
||||
```sh
|
||||
dart run halkyon_learn_curator:curate update \
|
||||
--into ../halkyon_learn_server/dictionaries [--every 7]
|
||||
```
|
||||
|
||||
It downloads EDRDG's files of the day (`JMdict_e_examp.gz`, `kanjidic2.xml.gz`),
|
||||
converts them with the JLPT levels in `data/` (static lists, see
|
||||
`data/README.md`), and writes `jmdict-en.jsonl.gz` and `kanjidic-en.jsonl.gz`
|
||||
into the folder, each beside its place first and then renamed over it, so a
|
||||
server never reads half a file; should anything fail, the files stay as they
|
||||
were. Some 50 seconds and 400 MB. With `--every 7` it keeps running and updates
|
||||
whenever the files are a week old, as their dates say (a restart doesn't
|
||||
download again), and tries again six hours after a failure. An instance runs it
|
||||
so in a container of its own (the server's README). Beside the files,
|
||||
`.conversion` says how the curator converted them (`conversion` in
|
||||
`lib/src/update.dart`): raise it whenever the curator writes something else
|
||||
from the same download (a label, a field), and an instance converts again as
|
||||
soon as the new curator runs, not a week later.
|
||||
|
||||
With `--languages de,el,en,ko,zh` it also keeps those languages current, each
|
||||
file of words with Tatoeba's sentences of the week as examples (a dictionary
|
||||
whose sentences can't be had keeps its words without them), in this order:
|
||||
Chinese from MDBG's CC-CEDICT of the day as often as EDRDG's files; the words of
|
||||
the rest from Wiktionary: each time it wakes it asks kaikki.org when its dump
|
||||
last changed (`Last-Modified`, without downloading it), and converts it again
|
||||
only when it is newer than the files' (about monthly), when the languages named
|
||||
changed, or when `wiktionaryConversion` in `lib/src/update.dart` was raised;
|
||||
`.wiktionary` beside the files says which (for Korean it keeps
|
||||
`.wiktionary-ko.json.gz`, the forms and Hanja readings). The dump is converted
|
||||
as it downloads, never stored. Korean's words from KRDict: each time it wakes
|
||||
it reads KRDict's page, and converts again only when it offers another export,
|
||||
when Wiktionary's Korean file changed, or when `krdictConversion` was raised
|
||||
(`.krdict`). Then the characters (Unihan for Chinese and Korean, with
|
||||
CC-CEDICT's words; the Greek alphabet) as often as EDRDG's files, and at once
|
||||
when Wiktionary's Korean file is newer than the Hanja's. Files the curator wrote
|
||||
for a language no longer named, or for a source replaced (Korean's words from
|
||||
Wiktionary, before KRDict), are removed, and the server unloads them.
|
||||
|
||||
Each run also packs MeCab's IPADIC, where the image installed it (Ubuntu's
|
||||
`mecab-ipadic-utf8`, which the Dockerfile installs), into `mecab-ipadic.tar.gz`
|
||||
beside the files: the dictionary the app's devices download from their instance
|
||||
to cut Japanese into words themselves (ADR 0012). The same dictionary always
|
||||
packs to the same bytes, and a pack whose content is unchanged is left as it is
|
||||
(`.mecab-ipadic.tar.gz.sha256` keeps its hash), so devices download it again only
|
||||
when it changed. The server loads no file but dictionary files, so it leaves the
|
||||
pack be, and serves it. By hand, from any compiled IPADIC:
|
||||
|
||||
```sh
|
||||
dart run halkyon_learn_curator:curate ipadic \
|
||||
[--input /var/lib/mecab/dic/ipadic-utf8] \
|
||||
--output ../halkyon_learn_server/dictionaries
|
||||
```
|
||||
|
||||
## The format (`halkyon-dictionary`, version 1)
|
||||
|
||||
[JSON Lines](https://jsonlines.org/), gzipped when the name ends in `.gz`.
|
||||
|
||||
The **first line** says what the file holds:
|
||||
|
||||
| Field | |
|
||||
|---|---|
|
||||
| `format`, `formatVersion` | `"halkyon-dictionary"`, `1` |
|
||||
| `kind` | `words` (a dictionary of words, JMdict) or `characters` (of the characters words are written in, KANJIDIC2). The app shows them apart. |
|
||||
| `source`, `sourceVersion` | The source's name (`jmdict`) and version (`3.6.2 (2026-10-05)`). An instance holds one version of a source for each meaning language. |
|
||||
| `language`, `glossLanguage` | BCP 47 tags: the words' language (`ja`) and the meanings' (`en`). |
|
||||
| `license` | The data's licence, an SPDX identifier (`CC-BY-SA-4.0`). |
|
||||
| `credits` | Everything it is drawn from: `name`, `by`, `license`, `url`. The app lists them where it credits its data sources. |
|
||||
|
||||
**Every further line** is an entry:
|
||||
|
||||
| Field | |
|
||||
|---|---|
|
||||
| `id` | Its id in the source; with the source and meaning language, it names the entry for good. |
|
||||
| `headword`, `reading` | How the word is shown, and how it is read; no `reading` when the headword is its own (a word written in kana). |
|
||||
| `labels` | What it can be picked by: `common` (JMdict's own; for Wiktionary, CC-CEDICT and KRDict the 15,000 words wordfreq finds most used; for Chinese characters the 3,500 standard ones in common use), `jlpt:n5` … `jlpt:n1`, `hsk:1` … `hsk:7`, KRDict's learners' levels (`level:beginner`, `level:intermediate`, `level:advanced`); for characters also the school grade (`grade:1` … `grade:6`, `grade:secondary` for the rest of the Jōyō kanji; Hong Kong's for traditional Chinese), Korea's 1,800 Hanja of education (`education`), a character's Kangxi radical (`radical:1` … `radical:214`, KANJIDIC2's classical one, Unihan's `kRSUnicode`) and the script (`hiragana`, `katakana`, `hangul`, `greek`). |
|
||||
| `rank` | Its order among the source's entries, lower first; JMdict: N5 to N1 in their lists' order, then other common words, then the rest; KANJIDIC2: hiragana and katakana in the kana table's order, then kanji by JLPT level, then by school grade, then the rest, each by frequency. |
|
||||
| `keys` | What a search matches, lower case: written forms, readings in their own script and romanised, meanings. Everything specific to a language happens here, so the server's search knows no language. |
|
||||
| `looseKeys` | What a search matches after every `keys` match: spellings people type that aren't quite right (romaji with long vowels typed once, `sushi` for すうし; a word without its accents or umlauts, `strasse`, `haeuser`, `spiti`). Left out when empty. |
|
||||
| `textKeys` | What finds the entry in running text (subtitles, lyrics): its own forms, lower case (`haus`, `häuser`, `häusern`), never its meanings, which would match words of the meaning language in a text. Left out: every key without a space finds it, as for JMdict, whose keys in Japanese script never meet a meaning's. |
|
||||
| `entry` | The entry itself, as cards take it: `forms` and `readings` (`text`, `common`, the source's `tags`; for a reading the `forms` it belongs to), `senses` (`glosses`; the source's codes in `pos`, `misc`, `field`, `dialect`; `info`; the `forms` and `readings` a sense is limited to; `examples`, sentences using the word in that sense: `text`, the form it takes there, `ja`, the sentence, `en`, its translation, and the source's id, e.g. `tatoeba`). Lists are left out when empty. A character's: `meanings`; `on` and `kun`, its readings as KANJIDIC2 writes them (a kun reading's okurigana after a `.`, a dash where it attaches to others); `grade`, `strokes`, `frequency` (its place among the 2,500 most used in newspapers) and `jlpt` where it has them. A kana's: `romaji` and `script`. A Wiktionary word's: `pos` (Wiktionary's part of speech for the whole entry: `noun`, `verb`, `adj`), `genders` (`m`, `f`, `n` of a German or Greek noun), `romanization` (Greek's), `ipa`, `inflections` (the forms on the word's own line: a noun's genitive and plural, a verb's principal parts; `text` and Wiktionary's `tags`), and `senses` with `glosses`, `tags` (how and where a sense is used: `colloquial`, `Austria`), `info` (for English with German translations, the English meaning a translation is of) and `examples` keyed by language as JMdict's (`de`, the sentence; `en`, its translation; `text`, the word as it stands there). A CC-CEDICT word's: `forms` (the word in the other script), `readings` (pinyin with tone marks), `senses` (each of CC-CEDICT's meanings, its glosses split at `;`) and `classifiers` (its measure words, `个 gè`). A KRDict word's: `pos`, `hanja`, `inflections` (`text`) and `senses` (`glosses`, its English definition as `info`). A Chinese character's: `meanings`, `pinyin` (the usual reading first), `strokes`, `traditional` or `simplified` (its forms in the other script), `hsk` and `frequency` (the place of the most used word written with it). A Hanja's: `meanings`, `eum` (its sounds in Hangul, the one taught first), `hun` and `eumhun` (its native meanings, and each with its sound, `물 수`) and `strokes`. A Hangul letter's: `romaji` (its sound, `g, k`), `script` and `name` (`기역`). A Greek letter's: `romaji` (its transliteration), `script`, `name`, `englishName` and `sound` (IPA). |
|
||||
|
||||
## The app's stroke files
|
||||
|
||||
How every kanji and kana is written comes from
|
||||
[KanjiVG](https://kanjivg.tagaini.net) and is bundled with the app, so writing
|
||||
works without a server. To update it, download `kanjivg-<date>.xml.gz` from
|
||||
[KanjiVG's releases](https://github.com/KanjiVG/kanjivg/releases) and, in this
|
||||
package:
|
||||
|
||||
```sh
|
||||
dart run halkyon_learn_curator:curate kanjivg \
|
||||
--input kanjivg-20260714.xml.gz \
|
||||
--output ../halkyon_learn_flutter/assets/kanjivg
|
||||
```
|
||||
|
||||
It writes one gzipped JSON file for every 256 code points that have any,
|
||||
named by the code point's upper bits in hexadecimal (食, U+98DF, is in
|
||||
`098.json.gz`; 94 files, 2.7 MB), so the app reads only the part it needs.
|
||||
Each maps a character to its strokes (`s`, SVG paths in KanjiVG's 109 × 109
|
||||
box, in the order they're written) and the components KanjiVG first splits it
|
||||
into (`c`, when it has any). Then update the release named in the folder's
|
||||
`ATTRIBUTION.md`.
|
||||
|
||||
Chinese characters are written as Make Me a Hanzi draws them
|
||||
([skishore/makemeahanzi](https://github.com/skishore/makemeahanzi), decided
|
||||
2026-10-14 for parity with KanjiVG: its own shapes and the mainland's stroke
|
||||
order, 9,574 characters of both scripts; the strokes under the Arphic Public
|
||||
License, the components under the LGPL). Download its `graphics.txt` and
|
||||
`dictionary.txt`, then:
|
||||
|
||||
```sh
|
||||
dart run halkyon_learn_curator:curate makemeahanzi \
|
||||
--input graphics.txt --dictionary dictionary.txt \
|
||||
--output ../halkyon_learn_flutter/assets/makemeahanzi
|
||||
```
|
||||
|
||||
It writes the same files as for KanjiVG (99 files, 2.7 MB): each stroke is the
|
||||
line Make Me a Hanzi draws through the middle of its outline (its median),
|
||||
scaled from its 1024 square, whose y axis points up from 124 below the bottom,
|
||||
into KanjiVG's 109 square, y pointing down; the outlines are left out, as the
|
||||
app draws and checks strokes along their middle. A character's components are
|
||||
the first split of its decomposition (海: 氵, 每). Each file says how and when it
|
||||
was changed (`notice`), as the Arphic Public License asks of a changed file.
|
||||
They stay a data file beside the app, never in cards (the folder's
|
||||
`ATTRIBUTION.md`).
|
||||
|
||||
The Hangul letters are drawn by the curator itself (CC0), as no openly
|
||||
licensed data draws them with their strokes:
|
||||
|
||||
```sh
|
||||
dart run halkyon_learn_curator:curate hangul \
|
||||
--output ../halkyon_learn_flutter/assets/hangul
|
||||
```
|
||||
|
||||
writes `031.json.gz`: the 40 letters in the order Korean schools teach their
|
||||
strokes (`lib/src/sources/hangul_strokes.dart`), and the pairs of consonants
|
||||
(ㄲ, and the clusters closing syllables, 닭's ㄺ) as their two letters side by
|
||||
side, so a Korean word is written letter by letter.
|
||||
|
||||
## Adding a source
|
||||
|
||||
Write an adapter in `lib/src/sources/` that turns the source into the lines
|
||||
above, with its credits and a sample of real data in `test/fixtures/` (and
|
||||
where that comes from in `test/fixtures/README.md`); give it a command in
|
||||
`bin/curate.dart`. Check the source's licence first, and that the instance may
|
||||
pass its data on to the people using it.
|
||||
2
apps/learn/halkyon_learn_curator/analysis_options.yaml
Normal file
2
apps/learn/halkyon_learn_curator/analysis_options.yaml
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
# The workspace's lint rules (see ../analysis_options.yaml).
|
||||
include: ../analysis_options.yaml
|
||||
699
apps/learn/halkyon_learn_curator/bin/curate.dart
Normal file
699
apps/learn/halkyon_learn_curator/bin/curate.dart
Normal file
|
|
@ -0,0 +1,699 @@
|
|||
import 'dart:convert';
|
||||
import 'dart:io';
|
||||
|
||||
import 'package:archive/archive.dart';
|
||||
import 'package:args/args.dart';
|
||||
import 'package:halkyon_learn_curator/src/mecab.dart';
|
||||
import 'package:halkyon_learn_curator/src/sources/cedict.dart';
|
||||
import 'package:halkyon_learn_curator/src/sources/hangul_strokes.dart';
|
||||
import 'package:halkyon_learn_curator/src/sources/jlpt.dart';
|
||||
import 'package:halkyon_learn_curator/src/sources/jmdict.dart';
|
||||
import 'package:halkyon_learn_curator/src/sources/jmdict_xml.dart';
|
||||
import 'package:halkyon_learn_curator/src/sources/kanjidic.dart';
|
||||
import 'package:halkyon_learn_curator/src/sources/kanjivg.dart';
|
||||
import 'package:halkyon_learn_curator/src/sources/krdict.dart';
|
||||
import 'package:halkyon_learn_curator/src/sources/makemeahanzi.dart';
|
||||
import 'package:halkyon_learn_curator/src/sources/tatoeba.dart';
|
||||
import 'package:halkyon_learn_curator/src/sources/unihan.dart';
|
||||
import 'package:halkyon_learn_curator/src/sources/wiktionary.dart';
|
||||
import 'package:halkyon_learn_curator/src/update.dart';
|
||||
import 'package:halkyon_learn_curator/src/wordfreq.dart';
|
||||
|
||||
/// Turns a dictionary download into a dictionary file for the server's
|
||||
/// `dictionaries` folder, or KanjiVG into the app's stroke files
|
||||
/// (README.md):
|
||||
///
|
||||
/// dart run halkyon_learn_curator:curate jmdict \
|
||||
/// --input JMdict_e_examp.gz --jlpt original_data \
|
||||
/// --output jmdict-en.jsonl.gz
|
||||
/// dart run halkyon_learn_curator:curate kanjidic \
|
||||
/// --input kanjidic2.xml.gz --jlpt kanji.json \
|
||||
/// --output kanjidic-en.jsonl.gz
|
||||
/// dart run halkyon_learn_curator:curate kanjivg \
|
||||
/// --input kanjivg-20260714.xml.gz \
|
||||
/// --output ../halkyon_learn_flutter/assets/kanjivg
|
||||
///
|
||||
/// The Hangul letters' strokes, the curator's own, into the app's stroke
|
||||
/// files:
|
||||
///
|
||||
/// dart run halkyon_learn_curator:curate hangul \
|
||||
/// --output ../halkyon_learn_flutter/assets/hangul
|
||||
///
|
||||
/// Make Me a Hanzi into the app's stroke files of Chinese characters:
|
||||
///
|
||||
/// dart run halkyon_learn_curator:curate makemeahanzi \
|
||||
/// --input graphics.txt --dictionary dictionary.txt \
|
||||
/// --output ../halkyon_learn_flutter/assets/makemeahanzi
|
||||
///
|
||||
/// Wiktionary, as kaikki.org's dump of it, into dictionary files of the
|
||||
/// languages named (German and Greek with English meanings, English with
|
||||
/// German ones):
|
||||
///
|
||||
/// dart run halkyon_learn_curator:curate wiktionary \
|
||||
/// --input raw-wiktextract-data.jsonl.gz --languages de,el,en \
|
||||
/// --output ../halkyon_learn_server/dictionaries
|
||||
///
|
||||
/// MeCab's compiled IPADIC into the pack the app's devices download (ADR
|
||||
/// 0012), from Ubuntu's `mecab-ipadic-utf8` unless another folder is given
|
||||
/// (`update` packs it too, where that package is installed):
|
||||
///
|
||||
/// dart run halkyon_learn_curator:curate ipadic \
|
||||
/// [--input /var/lib/mecab/dic/ipadic-utf8] \
|
||||
/// --output ../halkyon_learn_server/dictionaries
|
||||
///
|
||||
/// CC-CEDICT into its two dictionary files, simplified and traditional:
|
||||
///
|
||||
/// dart run halkyon_learn_curator:curate cedict \
|
||||
/// --input cedict_1_0_ts_utf-8_mdbg.txt.gz \
|
||||
/// --output ../halkyon_learn_server/dictionaries
|
||||
///
|
||||
/// Unihan into dictionary files of Chinese characters (simplified and
|
||||
/// traditional) and of Korean Hanja, for the languages named, the Hanja's
|
||||
/// native readings from a Wiktionary update's `.wiktionary-ko.json.gz`:
|
||||
///
|
||||
/// dart run halkyon_learn_curator:curate unihan \
|
||||
/// --input Unihan.zip --languages ko,zh [--cedict <file>] \
|
||||
/// [--korean <file>] \
|
||||
/// --output ../halkyon_learn_server/dictionaries
|
||||
///
|
||||
/// KRDict's JSON export into the dictionary file of Korean words, with
|
||||
/// the forms of each a Wiktionary update kept (`.wiktionary-ko.json.gz`):
|
||||
///
|
||||
/// dart run halkyon_learn_curator:curate krdict \
|
||||
/// --input krdict_json_20260919.zip [--korean <file>] \
|
||||
/// --output ../halkyon_learn_server/dictionaries
|
||||
///
|
||||
/// Tatoeba's sentences as examples into a dictionary file of words (its
|
||||
/// exports of the dictionary's language, of its meaning language, and of
|
||||
/// the links between them, bzip2 or not):
|
||||
///
|
||||
/// dart run halkyon_learn_curator:curate tatoeba \
|
||||
/// --input wiktionary-de-en.jsonl.gz --sentences deu_sentences.tsv.bz2 \
|
||||
/// --translations eng_sentences.tsv.bz2 --links deu-eng_links.tsv.bz2 \
|
||||
/// --output wiktionary-de-en.jsonl.gz
|
||||
///
|
||||
/// Or brings a server's dictionaries up to date from EDRDG's files of the
|
||||
/// day and, for the languages named, Wiktionary's latest dump and MDBG's
|
||||
/// CC-CEDICT of the day (Chinese), once or every so many days:
|
||||
///
|
||||
/// dart run halkyon_learn_curator:curate update \
|
||||
/// --into ../halkyon_learn_server/dictionaries [--every 7] \
|
||||
/// [--languages de,el,en,zh]
|
||||
Future<void> main(List<String> args) async {
|
||||
final parser = ArgParser()
|
||||
..addOption(
|
||||
'input',
|
||||
abbr: 'i',
|
||||
help: 'The source file, unpacked or gzipped (.gz).',
|
||||
)
|
||||
..addOption(
|
||||
'jlpt',
|
||||
help:
|
||||
"jmdict: yomitan-jlpt-vocab's original_data folder (n1.csv … "
|
||||
"n5.csv); kanjidic: kanji-data's kanji.json.",
|
||||
)
|
||||
..addFlag(
|
||||
'examples',
|
||||
help:
|
||||
"The input is JMdict's examples edition (EDRDG's "
|
||||
"JMdict_e_examp.gz, jmdict-simplified's jmdict-examples-eng-*.json): "
|
||||
'credit Tatoeba for its sentences. On by default for a file named '
|
||||
'so.',
|
||||
defaultsTo: null,
|
||||
)
|
||||
..addOption(
|
||||
'output',
|
||||
abbr: 'o',
|
||||
help:
|
||||
'The dictionary file to write, gzipped when it ends in .gz; for '
|
||||
'kanjivg the folder to write the stroke files into.',
|
||||
)
|
||||
..addOption('into', help: 'update: the folder of the dictionary files.')
|
||||
..addOption(
|
||||
'data',
|
||||
help: "update: the curator's data folder (the JLPT lists).",
|
||||
defaultsTo: 'data',
|
||||
)
|
||||
..addOption(
|
||||
'every',
|
||||
help:
|
||||
'update: keep running, and update once the files are this many '
|
||||
'days old.',
|
||||
)
|
||||
..addOption(
|
||||
'languages',
|
||||
help:
|
||||
'wiktionary: the languages to write dictionaries of, by their '
|
||||
'BCP 47 tags (de,el,en); update: the languages besides Japanese '
|
||||
'to keep current (de,el,en,zh; Chinese from CC-CEDICT, the rest '
|
||||
"from Wiktionary's dump), none without.",
|
||||
)
|
||||
..addOption(
|
||||
'sentences',
|
||||
help: "tatoeba: Tatoeba's sentences in the dictionary's language.",
|
||||
)
|
||||
..addOption(
|
||||
'translations',
|
||||
help: "tatoeba: Tatoeba's sentences in the meaning language.",
|
||||
)
|
||||
..addOption(
|
||||
'links',
|
||||
help: "tatoeba: Tatoeba's links between the two languages.",
|
||||
)
|
||||
..addOption(
|
||||
'cedict',
|
||||
help:
|
||||
'unihan: CC-CEDICT, whose words tell traditional characters in use '
|
||||
'and rank the characters.',
|
||||
)
|
||||
..addOption(
|
||||
'dictionary',
|
||||
help: "makemeahanzi: its dictionary.txt, for the characters' components.",
|
||||
)
|
||||
..addOption(
|
||||
'korean',
|
||||
help:
|
||||
'unihan, krdict: what a Wiktionary update kept for Korean '
|
||||
"(.wiktionary-ko.json.gz: the Hanja's native readings, the "
|
||||
"words' forms).",
|
||||
)
|
||||
..addOption(
|
||||
'version',
|
||||
help:
|
||||
"wiktionary: the dump's date (2026-10-03); the input file's date "
|
||||
'without.',
|
||||
);
|
||||
final ArgResults options;
|
||||
try {
|
||||
options = parser.parse(args);
|
||||
} on FormatException catch (error) {
|
||||
_fail('${error.message}\n${parser.usage}');
|
||||
}
|
||||
final [source, ...] = options.rest.isEmpty ? [''] : options.rest;
|
||||
if (source == 'update') {
|
||||
final into = options.option('into');
|
||||
final every = options.option('every');
|
||||
final days = every == null ? null : int.tryParse(every);
|
||||
if (into == null || (every != null && (days == null || days < 1))) {
|
||||
_fail(
|
||||
'Usage: curate update --into <folder> [--data <folder>] '
|
||||
'[--every <days>] [--languages <languages>]\n${parser.usage}',
|
||||
);
|
||||
}
|
||||
await _update(
|
||||
Directory(into),
|
||||
Directory(options.option('data')!),
|
||||
days,
|
||||
languages: _languages(options.option('languages')),
|
||||
// Without --languages, the files of other languages are left as
|
||||
// they are: an operator may keep them up to date otherwise.
|
||||
removesOthers: options.option('languages') != null,
|
||||
);
|
||||
return;
|
||||
}
|
||||
if (source == 'ipadic') {
|
||||
final output = options.option('output');
|
||||
if (output == null) {
|
||||
_fail(
|
||||
'Usage: curate ipadic [--input <compiled IPADIC>] --output <folder>'
|
||||
'\n${parser.usage}',
|
||||
);
|
||||
}
|
||||
final packed = await packIpadic(
|
||||
Directory(options.option('input') ?? systemIpadic),
|
||||
Directory(output),
|
||||
licence: File(systemIpadicLicence),
|
||||
);
|
||||
stdout.writeln(
|
||||
packed == null
|
||||
? '$ipadicFile in $output is up to date.'
|
||||
: 'Wrote ${packed.path}.',
|
||||
);
|
||||
return;
|
||||
}
|
||||
if (source == 'tatoeba') {
|
||||
final input = options.option('input');
|
||||
final output = options.option('output');
|
||||
final files = [
|
||||
for (final name in ['sentences', 'translations', 'links'])
|
||||
options.option(name),
|
||||
];
|
||||
if (input == null || output == null || files.contains(null)) {
|
||||
_fail(
|
||||
'Usage: curate tatoeba --input <dictionary> --sentences <file> '
|
||||
'--translations <file> --links <file> --output <dictionary>'
|
||||
'\n${parser.usage}',
|
||||
);
|
||||
}
|
||||
Stream<String> lines(String path) {
|
||||
final bytes = path.endsWith('.bz2')
|
||||
? Stream.value(
|
||||
BZip2Decoder().decodeBytes(File(path).readAsBytesSync()),
|
||||
)
|
||||
: File(path).openRead();
|
||||
return bytes.transform(utf8.decoder).transform(const LineSplitter());
|
||||
}
|
||||
|
||||
final links = await readTatoebaLinks(lines(files[2]!));
|
||||
final sentences = await readTatoebaSentences(
|
||||
lines(files[0]!),
|
||||
wanted: links.containsKey,
|
||||
);
|
||||
final linked = {for (final ids in links.values) ...ids};
|
||||
final translations = await readTatoebaSentences(
|
||||
lines(files[1]!),
|
||||
wanted: linked.contains,
|
||||
);
|
||||
final written = File('$output.part');
|
||||
final bytes = withTatoebaExamples(
|
||||
File(input),
|
||||
sentences: sentences,
|
||||
translations: translations,
|
||||
links: links,
|
||||
).transform(utf8.encoder);
|
||||
await (output.endsWith('.gz') ? bytes.transform(gzip.encoder) : bytes).pipe(
|
||||
written.openWrite(),
|
||||
);
|
||||
await written.rename(output);
|
||||
stdout.writeln(
|
||||
'Wrote $output with ${sentences.length} sentences of Tatoeba to '
|
||||
'choose from.',
|
||||
);
|
||||
return;
|
||||
}
|
||||
if (source == 'cedict') {
|
||||
final input = options.option('input');
|
||||
final output = options.option('output');
|
||||
if (input == null || output == null) {
|
||||
_fail(
|
||||
'Usage: curate cedict --input <file> --output <folder> '
|
||||
'[--data <folder>]\n${parser.usage}',
|
||||
);
|
||||
}
|
||||
final read = File(input).openRead();
|
||||
final text =
|
||||
await (input.endsWith('.gz') ? read.transform(gzip.decoder) : read)
|
||||
.transform(utf8.decoder)
|
||||
.join();
|
||||
final data = options.option('data')!;
|
||||
final hsk = await readHskLevels(hskFile(Directory(data)));
|
||||
final frequencies = File('$data/wordfreq/small_zh.msgpack.gz');
|
||||
final words = frequencies.existsSync()
|
||||
? await WordFrequencies.read(frequencies)
|
||||
: WordFrequencies.none;
|
||||
final folder = await Directory(output).create(recursive: true);
|
||||
for (final traditional in [false, true]) {
|
||||
await Stream.fromIterable(
|
||||
cedictDictionary(
|
||||
text,
|
||||
traditional: traditional,
|
||||
hsk: hsk,
|
||||
frequencies: words,
|
||||
),
|
||||
)
|
||||
.transform(utf8.encoder)
|
||||
.transform(gzip.encoder)
|
||||
.pipe(
|
||||
File('${folder.path}/${cedictFileName(traditional: traditional)}')
|
||||
.openWrite(),
|
||||
);
|
||||
}
|
||||
stdout.writeln(
|
||||
'Wrote ${cedictFileName(traditional: false)} and '
|
||||
'${cedictFileName(traditional: true)} to $output.',
|
||||
);
|
||||
return;
|
||||
}
|
||||
if (source == 'krdict') {
|
||||
final input = options.option('input');
|
||||
final output = options.option('output');
|
||||
if (input == null || output == null) {
|
||||
_fail(
|
||||
'Usage: curate krdict --input <zip> --output <folder> '
|
||||
'[--korean <file>] [--data <folder>]\n${parser.usage}',
|
||||
);
|
||||
}
|
||||
final korean = options.option('korean');
|
||||
final frequencies = File(
|
||||
'${options.option('data')}/wordfreq/small_ko.msgpack.gz',
|
||||
);
|
||||
final folder = await Directory(output).create(recursive: true);
|
||||
final (:version, :entries) = krdictExport(await File(input).readAsBytes());
|
||||
await krdictDictionary(
|
||||
entries,
|
||||
sourceVersion: version,
|
||||
frequencies: frequencies.existsSync()
|
||||
? await WordFrequencies.read(frequencies)
|
||||
: null,
|
||||
korean: korean == null
|
||||
? null
|
||||
: WiktionaryKorean.fromJson(
|
||||
utf8.decode(gzip.decode(await File(korean).readAsBytes())),
|
||||
),
|
||||
)
|
||||
.transform(utf8.encoder)
|
||||
.transform(gzip.encoder)
|
||||
.pipe(File('${folder.path}/$krdictFileName').openWrite());
|
||||
stdout.writeln('Wrote $krdictFileName to $output.');
|
||||
return;
|
||||
}
|
||||
if (source == 'unihan') {
|
||||
final input = options.option('input');
|
||||
final output = options.option('output');
|
||||
final languages = _languages(options.option('languages'));
|
||||
if (input == null || output == null || languages.isEmpty) {
|
||||
_fail(
|
||||
'Usage: curate unihan --input <Unihan.zip> --languages <languages> '
|
||||
'--output <folder> [--cedict <file>] [--korean <file>] '
|
||||
'[--data <folder>]'
|
||||
'\n${parser.usage}',
|
||||
);
|
||||
}
|
||||
final korean = options.option('korean');
|
||||
final cedict = options.option('cedict');
|
||||
final written = await unihanDictionaries(
|
||||
await File(input).readAsBytes(),
|
||||
into: await Directory(output).create(recursive: true),
|
||||
languages: languages,
|
||||
data: Directory(options.option('data')!),
|
||||
cedict: cedict == null
|
||||
? null
|
||||
: await (cedict.endsWith('.gz')
|
||||
? File(cedict).openRead().transform(gzip.decoder)
|
||||
: File(cedict).openRead())
|
||||
.transform(utf8.decoder)
|
||||
.join(),
|
||||
eumhun: korean == null
|
||||
? const {}
|
||||
: WiktionaryKorean.fromJson(
|
||||
utf8.decode(gzip.decode(await File(korean).readAsBytes())),
|
||||
).hanja,
|
||||
);
|
||||
stdout.writeln(
|
||||
'Wrote ${[for (final file in written) file.uri.pathSegments.last].join(', ')} '
|
||||
'to $output.',
|
||||
);
|
||||
return;
|
||||
}
|
||||
if (source == 'wiktionary') {
|
||||
final input = options.option('input');
|
||||
final output = options.option('output');
|
||||
final languages = _languages(options.option('languages'));
|
||||
if (input == null || output == null || languages.isEmpty) {
|
||||
_fail(
|
||||
'Usage: curate wiktionary --input <file> --languages <languages> '
|
||||
'--output <folder> [--version <date>] [--data <folder>]'
|
||||
'\n${parser.usage}',
|
||||
);
|
||||
}
|
||||
final read = File(input).openRead();
|
||||
final outputs = wiktionaryOutputs(languages);
|
||||
final data = options.option('data')!;
|
||||
final written = await wiktionaryDictionaries(
|
||||
(input.endsWith('.gz') ? read.transform(gzip.decoder) : read)
|
||||
.transform(utf8.decoder)
|
||||
.transform(const LineSplitter()),
|
||||
into: Directory(output),
|
||||
sourceVersion:
|
||||
options.option('version') ??
|
||||
File(input).lastModifiedSync().toIso8601String().substring(0, 10),
|
||||
languages: outputs.languages,
|
||||
translatedInto: outputs.translatedInto,
|
||||
frequencies: {
|
||||
for (final language in {...languages, 'en'})
|
||||
if (File('$data/wordfreq/small_$language.msgpack.gz') case final file
|
||||
when file.existsSync())
|
||||
language: await WordFrequencies.read(file),
|
||||
},
|
||||
);
|
||||
stdout.writeln(
|
||||
'Wrote ${[for (final file in written) file.uri.pathSegments.last].join(', ')} '
|
||||
'to $output.',
|
||||
);
|
||||
return;
|
||||
}
|
||||
if (source == 'hangul') {
|
||||
final output = options.option('output');
|
||||
if (output == null) {
|
||||
_fail('Usage: curate hangul --output <folder>\n${parser.usage}');
|
||||
}
|
||||
final strokes = hangulStrokes();
|
||||
final folder = await Directory(output).create(recursive: true);
|
||||
final files = strokeFiles(strokes);
|
||||
for (final MapEntry(key: name, value: characters) in files.entries) {
|
||||
await File('${folder.path}/$name.json.gz')
|
||||
.writeAsBytes(gzip.encode(utf8.encode(jsonEncode(characters))));
|
||||
}
|
||||
stdout.writeln(
|
||||
'Wrote the strokes of ${strokes.length} Hangul letters to $output.',
|
||||
);
|
||||
return;
|
||||
}
|
||||
if (source == 'makemeahanzi') {
|
||||
final input = options.option('input');
|
||||
final dictionary = options.option('dictionary');
|
||||
final output = options.option('output');
|
||||
if (input == null || output == null) {
|
||||
_fail(
|
||||
'Usage: curate makemeahanzi --input graphics.txt '
|
||||
'[--dictionary dictionary.txt] --output <folder>\n${parser.usage}',
|
||||
);
|
||||
}
|
||||
final strokes = makemeahanziStrokes(
|
||||
await File(input).readAsLines(),
|
||||
dictionary: dictionary == null
|
||||
? const []
|
||||
: await File(dictionary).readAsLines(),
|
||||
);
|
||||
final folder = await Directory(output).create(recursive: true);
|
||||
final files = strokeFiles(
|
||||
strokes,
|
||||
notice: makemeahanziNotice(
|
||||
DateTime.now().toUtc().toIso8601String().substring(0, 10),
|
||||
),
|
||||
);
|
||||
for (final MapEntry(key: name, value: characters) in files.entries) {
|
||||
await File('${folder.path}/$name.json.gz')
|
||||
.writeAsBytes(gzip.encode(utf8.encode(jsonEncode(characters))));
|
||||
}
|
||||
stdout.writeln(
|
||||
'Wrote the strokes of ${strokes.length} characters to '
|
||||
'${files.length} files in $output.',
|
||||
);
|
||||
return;
|
||||
}
|
||||
final input = options.option('input');
|
||||
final output = options.option('output');
|
||||
if (!['jmdict', 'kanjidic', 'kanjivg'].contains(source) ||
|
||||
input == null ||
|
||||
output == null) {
|
||||
_fail(
|
||||
'Usage: curate jmdict|kanjidic|kanjivg --input <file> [--jlpt <path>] '
|
||||
'--output <path>\n${parser.usage}',
|
||||
);
|
||||
}
|
||||
final read = File(input).openRead();
|
||||
final text = (input.endsWith('.gz') ? read.transform(gzip.decoder) : read)
|
||||
.transform(utf8.decoder);
|
||||
final jlptPath = options.option('jlpt');
|
||||
|
||||
if (source == 'kanjivg') {
|
||||
final strokes = kanjivgStrokes(await text.join());
|
||||
final folder = await Directory(output).create(recursive: true);
|
||||
final files = strokeFiles(strokes);
|
||||
for (final MapEntry(key: name, value: characters) in files.entries) {
|
||||
await File('${folder.path}/$name.json.gz')
|
||||
.writeAsBytes(gzip.encode(utf8.encode(jsonEncode(characters))));
|
||||
}
|
||||
stdout.writeln(
|
||||
'Wrote the strokes of ${strokes.length} characters to '
|
||||
'${files.length} files in $output.',
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
final Stream<String> lines;
|
||||
final int withLevel;
|
||||
if (source == 'kanjidic') {
|
||||
final jlpt = jlptPath == null
|
||||
? const <String, int>{}
|
||||
: await readKanjiJlpt(File(jlptPath));
|
||||
lines = Stream.fromIterable(
|
||||
kanjidicDictionary(await text.join(), jlpt: jlpt),
|
||||
);
|
||||
withLevel = jlpt.length;
|
||||
} else {
|
||||
final jlpt = jlptPath == null
|
||||
? const <String, JlptLevel>{}
|
||||
: await readJlptLevels(Directory(jlptPath));
|
||||
final name = File(input).uri.pathSegments.last;
|
||||
final examples = options.wasParsed('examples')
|
||||
? options.flag('examples')
|
||||
: name.contains('examp');
|
||||
// jmdict-simplified's JSON (`jmdict-eng-….json`), else EDRDG's XML.
|
||||
lines = name.contains('.json')
|
||||
? jmdictDictionary(text, jlpt: jlpt, examples: examples)
|
||||
: jmdictXmlDictionary(text, jlpt: jlpt, examples: examples);
|
||||
withLevel = jlpt.length;
|
||||
}
|
||||
var entries = -1;
|
||||
final bytes = lines
|
||||
.map((line) {
|
||||
entries++;
|
||||
return line;
|
||||
})
|
||||
.transform(utf8.encoder);
|
||||
await (output.endsWith('.gz') ? bytes.transform(gzip.encoder) : bytes).pipe(
|
||||
File(output).openWrite(),
|
||||
);
|
||||
stdout.writeln(
|
||||
'Wrote $entries entries to $output'
|
||||
'${withLevel == 0 ? '' : ' ($withLevel with a JLPT level)'}.',
|
||||
);
|
||||
}
|
||||
|
||||
/// Updates the dictionaries in [into]; with [every], keeps running and
|
||||
/// updates them whenever they are that many days old (as the files' dates
|
||||
/// say, so a restart doesn't download them again), trying again after six
|
||||
/// hours when an update fails. Of [languages], Chinese comes from
|
||||
/// CC-CEDICT as often as EDRDG's files, and its characters from Unihan;
|
||||
/// Korean from KRDict, looked at each time it wakes and converted again
|
||||
/// only when it offers another export, and its Hanja from Unihan; the rest
|
||||
/// from Wiktionary, looked at each time it wakes and converted again only
|
||||
/// when the dump is newer (Korean's forms and the Hanja's readings come
|
||||
/// from it too); Greek's alphabet with the characters. Files of languages
|
||||
/// no longer kept go.
|
||||
Future<void> _update(
|
||||
Directory into,
|
||||
Directory data,
|
||||
int? every, {
|
||||
Set<String> languages = const {},
|
||||
bool removesOthers = true,
|
||||
}) async {
|
||||
final (:wiktionary, :chinese, :korean, :greek) = dictionarySources(languages);
|
||||
void say(String message) =>
|
||||
stdout.writeln('${DateTime.now().toUtc().toIso8601String()} $message');
|
||||
void written(List<File> files) {
|
||||
if (files.isNotEmpty) {
|
||||
say(
|
||||
'Updated ${[for (final file in files) file.uri.pathSegments.last].join(', ')}.',
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/// Runs [step], saying what it wrote; false when it failed.
|
||||
Future<bool> attempt(String name, Future<List<File>> Function() step) async {
|
||||
try {
|
||||
written(await step());
|
||||
return true;
|
||||
} on Object catch (error) {
|
||||
say('Updating $name failed: $error');
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
Future<bool> once() => attempt(
|
||||
'the dictionaries',
|
||||
() => updateDictionaries(into: into, data: data),
|
||||
);
|
||||
|
||||
// Files as old as EDRDG's may be: CC-CEDICT's, and the characters'.
|
||||
bool due(DateTime? updated) =>
|
||||
updated == null ||
|
||||
DateTime.now().difference(updated) >= Duration(days: every ?? 1);
|
||||
Future<bool> chineseOnce() async =>
|
||||
!chinese ||
|
||||
!due(cedictUpdated(into)) ||
|
||||
await attempt('CC-CEDICT', () => updateCedict(into: into, data: data));
|
||||
Future<bool> wiktionaryOnce() => attempt(
|
||||
'Wiktionary',
|
||||
() => updateWiktionary(
|
||||
into: into,
|
||||
data: data,
|
||||
languages: wiktionary,
|
||||
korean: korean,
|
||||
),
|
||||
);
|
||||
Future<bool> koreanOnce() async =>
|
||||
!korean ||
|
||||
await attempt('KRDict', () => updateKrdict(into: into, data: data));
|
||||
Future<bool> charactersOnce() async =>
|
||||
!due(
|
||||
charactersUpdated(into, chinese: chinese, korean: korean, greek: greek),
|
||||
) ||
|
||||
await attempt(
|
||||
'the characters',
|
||||
() => updateCharacters(
|
||||
into: into,
|
||||
data: data,
|
||||
chinese: chinese,
|
||||
korean: korean,
|
||||
greek: greek,
|
||||
),
|
||||
);
|
||||
// MeCab's IPADIC for the devices, where the image installed it; packed
|
||||
// again only when it changed.
|
||||
Future<bool> ipadicOnce() async =>
|
||||
!Directory(systemIpadic).existsSync() ||
|
||||
await attempt('IPADIC', () async {
|
||||
final packed = await packIpadic(
|
||||
Directory(systemIpadic),
|
||||
into,
|
||||
licence: File(systemIpadicLicence),
|
||||
);
|
||||
return [?packed];
|
||||
});
|
||||
// In this order: Korean's words and Hanja take what Wiktionary kept.
|
||||
// What is no longer wanted goes last, once what replaces it is there.
|
||||
Future<bool> languagesOnce() async {
|
||||
final done =
|
||||
!(!await chineseOnce() |
|
||||
!await wiktionaryOnce() |
|
||||
!await koreanOnce() |
|
||||
!await charactersOnce() |
|
||||
!await ipadicOnce());
|
||||
final removed = removesOthers
|
||||
? removeUnwanted(into, languages)
|
||||
: const <File>[];
|
||||
if (removed.isNotEmpty) {
|
||||
say(
|
||||
'Removed ${[for (final file in removed) file.uri.pathSegments.last].join(', ')}.',
|
||||
);
|
||||
}
|
||||
return done;
|
||||
}
|
||||
|
||||
if (every == null) {
|
||||
if (!await once() || !await languagesOnce()) {
|
||||
exit(1);
|
||||
}
|
||||
return;
|
||||
}
|
||||
for (;;) {
|
||||
final due = lastUpdated(into)?.add(Duration(days: every));
|
||||
final now = DateTime.now();
|
||||
if (due == null || !now.isBefore(due)) {
|
||||
if (!await once()) {
|
||||
await Future<void>.delayed(const Duration(hours: 6));
|
||||
}
|
||||
continue;
|
||||
}
|
||||
final retry = !await languagesOnce();
|
||||
final next = retry && due.difference(now) > const Duration(hours: 6)
|
||||
? DateTime.now().add(const Duration(hours: 6))
|
||||
: due;
|
||||
say('Up to date; the next look ${next.toUtc().toIso8601String()}.');
|
||||
await Future<void>.delayed(next.difference(DateTime.now()));
|
||||
}
|
||||
}
|
||||
|
||||
/// The languages a comma-separated list names (`de,el,en`).
|
||||
Set<String> _languages(String? list) => {
|
||||
for (final language in (list ?? '').split(','))
|
||||
if (language.trim().isNotEmpty) language.trim(),
|
||||
};
|
||||
|
||||
Never _fail(String message) {
|
||||
stderr.writeln(message);
|
||||
exit(64);
|
||||
}
|
||||
46
apps/learn/halkyon_learn_curator/data/README.md
Normal file
46
apps/learn/halkyon_learn_curator/data/README.md
Normal file
|
|
@ -0,0 +1,46 @@
|
|||
# Data the curator brings along
|
||||
|
||||
What the dictionaries draw on besides their sources, and never changes, so
|
||||
`curate update` needs only EDRDG's files of the day, MDBG's CC-CEDICT and
|
||||
Wiktionary's dump.
|
||||
|
||||
`jlpt/n1.csv` … `n5.csv` are the JLPT vocabulary lists of
|
||||
[yomitan-jlpt-vocab](https://github.com/stephenmk/yomitan-jlpt-vocab)
|
||||
(`original_data`, as of 2026-10-09), CC BY-SA 4.0 (`jlpt/LICENSE.txt`): Jonathan
|
||||
Waller's lists ([tanos.co.uk](http://www.tanos.co.uk/jlpt/), CC BY) with each
|
||||
word's JMdict entry and its most common spelling, by stephenmk.
|
||||
|
||||
`kanji-jlpt.json` maps each kanji on Jonathan Waller's JLPT kanji lists
|
||||
([tanos.co.uk](http://www.tanos.co.uk/jlpt/), CC BY) to its level, 5 for N5 to 1
|
||||
for N1: the `jlpt_new` of
|
||||
[kanji-data](https://github.com/davidluzgouveia/kanji-data)'s `kanji.json`
|
||||
(MIT, as of 2026-10-09), nothing else of it.
|
||||
|
||||
The lists are over ten years old and won't change; replace them only for a list
|
||||
of the same shape.
|
||||
|
||||
`wordfreq/small_<language>.msgpack.gz` are wordfreq's lists of how often words
|
||||
are used ([wordfreq](https://github.com/rspeer/wordfreq) v3.0, as of 2021-03-29,
|
||||
the last change to its data), unchanged: CC BY-SA 4.0, by Robyn Speer, drawn from
|
||||
SUBTLEX (Marc Brysbaert et al., whose authors wordfreq's licence asks to be
|
||||
credited, and who made SUBTLEX freely available), OpenSubtitles, Wikipedia,
|
||||
Google Books Ngrams and others, as wordfreq's README lists them. The Wiktionary
|
||||
dictionaries take their ranks and their `common` label from them and credit
|
||||
both. wordfreq's data won't change: it was sunset in 2024.
|
||||
|
||||
`hsk/syllabus2025_words.tsv` lists the 10,896 words of the HSK examination
|
||||
syllabus published in November 2025 by the Center for Language Education and
|
||||
Cooperation (中外语言交流合作中心), the one HSK 3.0's examination follows since
|
||||
July 2026, each with its level (1 to 6, 7 for 7 to 9), the level of a homograph
|
||||
graded twice, its pinyin and its part of speech: as extracted from the
|
||||
syllabus's PDF by Alvaro Serrano's [hsk30](https://github.com/harukicoder/hsk30)
|
||||
(`corpus/syllabus2025/`, as of 2026-09-06), MIT (`hsk/LICENSE.txt`), unchanged.
|
||||
Only each word's level reaches the dictionaries (`hsk:N`), with the pinyin to
|
||||
tell CC-CEDICT's readings of one word apart; the curator credits both. The
|
||||
Ministry claims copyright on the standard's documents; a word's level is a fact
|
||||
about it, which the dictionaries keep with attribution (decided 2026-10-14).
|
||||
`hsk/syllabus2025_chars.tsv` lists the syllabus's 3,088 characters to recognise
|
||||
(认读字) with their levels (246, 125, 284, 441, 431 and 413 for levels 1 to 6,
|
||||
1,148 for 7 to 9), from the same repository and commit (`corpus/syllabus2025/`),
|
||||
MIT, unchanged; they label the Chinese characters (`hsk:N`) as the words' label
|
||||
the words.
|
||||
21
apps/learn/halkyon_learn_curator/data/hsk/LICENSE.txt
Normal file
21
apps/learn/halkyon_learn_curator/data/hsk/LICENSE.txt
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
MIT License
|
||||
|
||||
Copyright (c) 2026 Alvaro Serrano
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
3089
apps/learn/halkyon_learn_curator/data/hsk/syllabus2025_chars.tsv
Normal file
3089
apps/learn/halkyon_learn_curator/data/hsk/syllabus2025_chars.tsv
Normal file
File diff suppressed because it is too large
Load diff
10897
apps/learn/halkyon_learn_curator/data/hsk/syllabus2025_words.tsv
Normal file
10897
apps/learn/halkyon_learn_curator/data/hsk/syllabus2025_words.tsv
Normal file
File diff suppressed because it is too large
Load diff
427
apps/learn/halkyon_learn_curator/data/jlpt/LICENSE.txt
Normal file
427
apps/learn/halkyon_learn_curator/data/jlpt/LICENSE.txt
Normal file
|
|
@ -0,0 +1,427 @@
|
|||
Attribution-ShareAlike 4.0 International
|
||||
|
||||
=======================================================================
|
||||
|
||||
Creative Commons Corporation ("Creative Commons") is not a law firm and
|
||||
does not provide legal services or legal advice. Distribution of
|
||||
Creative Commons public licenses does not create a lawyer-client or
|
||||
other relationship. Creative Commons makes its licenses and related
|
||||
information available on an "as-is" basis. Creative Commons gives no
|
||||
warranties regarding its licenses, any material licensed under their
|
||||
terms and conditions, or any related information. Creative Commons
|
||||
disclaims all liability for damages resulting from their use to the
|
||||
fullest extent possible.
|
||||
|
||||
Using Creative Commons Public Licenses
|
||||
|
||||
Creative Commons public licenses provide a standard set of terms and
|
||||
conditions that creators and other rights holders may use to share
|
||||
original works of authorship and other material subject to copyright
|
||||
and certain other rights specified in the public license below. The
|
||||
following considerations are for informational purposes only, are not
|
||||
exhaustive, and do not form part of our licenses.
|
||||
|
||||
Considerations for licensors: Our public licenses are
|
||||
intended for use by those authorized to give the public
|
||||
permission to use material in ways otherwise restricted by
|
||||
copyright and certain other rights. Our licenses are
|
||||
irrevocable. Licensors should read and understand the terms
|
||||
and conditions of the license they choose before applying it.
|
||||
Licensors should also secure all rights necessary before
|
||||
applying our licenses so that the public can reuse the
|
||||
material as expected. Licensors should clearly mark any
|
||||
material not subject to the license. This includes other CC-
|
||||
licensed material, or material used under an exception or
|
||||
limitation to copyright. More considerations for licensors:
|
||||
wiki.creativecommons.org/Considerations_for_licensors
|
||||
|
||||
Considerations for the public: By using one of our public
|
||||
licenses, a licensor grants the public permission to use the
|
||||
licensed material under specified terms and conditions. If
|
||||
the licensor's permission is not necessary for any reason--for
|
||||
example, because of any applicable exception or limitation to
|
||||
copyright--then that use is not regulated by the license. Our
|
||||
licenses grant only permissions under copyright and certain
|
||||
other rights that a licensor has authority to grant. Use of
|
||||
the licensed material may still be restricted for other
|
||||
reasons, including because others have copyright or other
|
||||
rights in the material. A licensor may make special requests,
|
||||
such as asking that all changes be marked or described.
|
||||
Although not required by our licenses, you are encouraged to
|
||||
respect those requests where reasonable. More_considerations
|
||||
for the public:
|
||||
wiki.creativecommons.org/Considerations_for_licensees
|
||||
|
||||
=======================================================================
|
||||
|
||||
Creative Commons Attribution-ShareAlike 4.0 International Public
|
||||
License
|
||||
|
||||
By exercising the Licensed Rights (defined below), You accept and agree
|
||||
to be bound by the terms and conditions of this Creative Commons
|
||||
Attribution-ShareAlike 4.0 International Public License ("Public
|
||||
License"). To the extent this Public License may be interpreted as a
|
||||
contract, You are granted the Licensed Rights in consideration of Your
|
||||
acceptance of these terms and conditions, and the Licensor grants You
|
||||
such rights in consideration of benefits the Licensor receives from
|
||||
making the Licensed Material available under these terms and
|
||||
conditions.
|
||||
|
||||
|
||||
Section 1 -- Definitions.
|
||||
|
||||
a. Adapted Material means material subject to Copyright and Similar
|
||||
Rights that is derived from or based upon the Licensed Material
|
||||
and in which the Licensed Material is translated, altered,
|
||||
arranged, transformed, or otherwise modified in a manner requiring
|
||||
permission under the Copyright and Similar Rights held by the
|
||||
Licensor. For purposes of this Public License, where the Licensed
|
||||
Material is a musical work, performance, or sound recording,
|
||||
Adapted Material is always produced where the Licensed Material is
|
||||
synched in timed relation with a moving image.
|
||||
|
||||
b. Adapter's License means the license You apply to Your Copyright
|
||||
and Similar Rights in Your contributions to Adapted Material in
|
||||
accordance with the terms and conditions of this Public License.
|
||||
|
||||
c. BY-SA Compatible License means a license listed at
|
||||
creativecommons.org/compatiblelicenses, approved by Creative
|
||||
Commons as essentially the equivalent of this Public License.
|
||||
|
||||
d. Copyright and Similar Rights means copyright and/or similar rights
|
||||
closely related to copyright including, without limitation,
|
||||
performance, broadcast, sound recording, and Sui Generis Database
|
||||
Rights, without regard to how the rights are labeled or
|
||||
categorized. For purposes of this Public License, the rights
|
||||
specified in Section 2(b)(1)-(2) are not Copyright and Similar
|
||||
Rights.
|
||||
|
||||
e. Effective Technological Measures means those measures that, in the
|
||||
absence of proper authority, may not be circumvented under laws
|
||||
fulfilling obligations under Article 11 of the WIPO Copyright
|
||||
Treaty adopted on December 20, 1996, and/or similar international
|
||||
agreements.
|
||||
|
||||
f. Exceptions and Limitations means fair use, fair dealing, and/or
|
||||
any other exception or limitation to Copyright and Similar Rights
|
||||
that applies to Your use of the Licensed Material.
|
||||
|
||||
g. License Elements means the license attributes listed in the name
|
||||
of a Creative Commons Public License. The License Elements of this
|
||||
Public License are Attribution and ShareAlike.
|
||||
|
||||
h. Licensed Material means the artistic or literary work, database,
|
||||
or other material to which the Licensor applied this Public
|
||||
License.
|
||||
|
||||
i. Licensed Rights means the rights granted to You subject to the
|
||||
terms and conditions of this Public License, which are limited to
|
||||
all Copyright and Similar Rights that apply to Your use of the
|
||||
Licensed Material and that the Licensor has authority to license.
|
||||
|
||||
j. Licensor means the individual(s) or entity(ies) granting rights
|
||||
under this Public License.
|
||||
|
||||
k. Share means to provide material to the public by any means or
|
||||
process that requires permission under the Licensed Rights, such
|
||||
as reproduction, public display, public performance, distribution,
|
||||
dissemination, communication, or importation, and to make material
|
||||
available to the public including in ways that members of the
|
||||
public may access the material from a place and at a time
|
||||
individually chosen by them.
|
||||
|
||||
l. Sui Generis Database Rights means rights other than copyright
|
||||
resulting from Directive 96/9/EC of the European Parliament and of
|
||||
the Council of 11 March 1996 on the legal protection of databases,
|
||||
as amended and/or succeeded, as well as other essentially
|
||||
equivalent rights anywhere in the world.
|
||||
|
||||
m. You means the individual or entity exercising the Licensed Rights
|
||||
under this Public License. Your has a corresponding meaning.
|
||||
|
||||
|
||||
Section 2 -- Scope.
|
||||
|
||||
a. License grant.
|
||||
|
||||
1. Subject to the terms and conditions of this Public License,
|
||||
the Licensor hereby grants You a worldwide, royalty-free,
|
||||
non-sublicensable, non-exclusive, irrevocable license to
|
||||
exercise the Licensed Rights in the Licensed Material to:
|
||||
|
||||
a. reproduce and Share the Licensed Material, in whole or
|
||||
in part; and
|
||||
|
||||
b. produce, reproduce, and Share Adapted Material.
|
||||
|
||||
2. Exceptions and Limitations. For the avoidance of doubt, where
|
||||
Exceptions and Limitations apply to Your use, this Public
|
||||
License does not apply, and You do not need to comply with
|
||||
its terms and conditions.
|
||||
|
||||
3. Term. The term of this Public License is specified in Section
|
||||
6(a).
|
||||
|
||||
4. Media and formats; technical modifications allowed. The
|
||||
Licensor authorizes You to exercise the Licensed Rights in
|
||||
all media and formats whether now known or hereafter created,
|
||||
and to make technical modifications necessary to do so. The
|
||||
Licensor waives and/or agrees not to assert any right or
|
||||
authority to forbid You from making technical modifications
|
||||
necessary to exercise the Licensed Rights, including
|
||||
technical modifications necessary to circumvent Effective
|
||||
Technological Measures. For purposes of this Public License,
|
||||
simply making modifications authorized by this Section 2(a)
|
||||
(4) never produces Adapted Material.
|
||||
|
||||
5. Downstream recipients.
|
||||
|
||||
a. Offer from the Licensor -- Licensed Material. Every
|
||||
recipient of the Licensed Material automatically
|
||||
receives an offer from the Licensor to exercise the
|
||||
Licensed Rights under the terms and conditions of this
|
||||
Public License.
|
||||
|
||||
b. Additional offer from the Licensor -- Adapted Material.
|
||||
Every recipient of Adapted Material from You
|
||||
automatically receives an offer from the Licensor to
|
||||
exercise the Licensed Rights in the Adapted Material
|
||||
under the conditions of the Adapter's License You apply.
|
||||
|
||||
c. No downstream restrictions. You may not offer or impose
|
||||
any additional or different terms or conditions on, or
|
||||
apply any Effective Technological Measures to, the
|
||||
Licensed Material if doing so restricts exercise of the
|
||||
Licensed Rights by any recipient of the Licensed
|
||||
Material.
|
||||
|
||||
6. No endorsement. Nothing in this Public License constitutes or
|
||||
may be construed as permission to assert or imply that You
|
||||
are, or that Your use of the Licensed Material is, connected
|
||||
with, or sponsored, endorsed, or granted official status by,
|
||||
the Licensor or others designated to receive attribution as
|
||||
provided in Section 3(a)(1)(A)(i).
|
||||
|
||||
b. Other rights.
|
||||
|
||||
1. Moral rights, such as the right of integrity, are not
|
||||
licensed under this Public License, nor are publicity,
|
||||
privacy, and/or other similar personality rights; however, to
|
||||
the extent possible, the Licensor waives and/or agrees not to
|
||||
assert any such rights held by the Licensor to the limited
|
||||
extent necessary to allow You to exercise the Licensed
|
||||
Rights, but not otherwise.
|
||||
|
||||
2. Patent and trademark rights are not licensed under this
|
||||
Public License.
|
||||
|
||||
3. To the extent possible, the Licensor waives any right to
|
||||
collect royalties from You for the exercise of the Licensed
|
||||
Rights, whether directly or through a collecting society
|
||||
under any voluntary or waivable statutory or compulsory
|
||||
licensing scheme. In all other cases the Licensor expressly
|
||||
reserves any right to collect such royalties.
|
||||
|
||||
|
||||
Section 3 -- License Conditions.
|
||||
|
||||
Your exercise of the Licensed Rights is expressly made subject to the
|
||||
following conditions.
|
||||
|
||||
a. Attribution.
|
||||
|
||||
1. If You Share the Licensed Material (including in modified
|
||||
form), You must:
|
||||
|
||||
a. retain the following if it is supplied by the Licensor
|
||||
with the Licensed Material:
|
||||
|
||||
i. identification of the creator(s) of the Licensed
|
||||
Material and any others designated to receive
|
||||
attribution, in any reasonable manner requested by
|
||||
the Licensor (including by pseudonym if
|
||||
designated);
|
||||
|
||||
ii. a copyright notice;
|
||||
|
||||
iii. a notice that refers to this Public License;
|
||||
|
||||
iv. a notice that refers to the disclaimer of
|
||||
warranties;
|
||||
|
||||
v. a URI or hyperlink to the Licensed Material to the
|
||||
extent reasonably practicable;
|
||||
|
||||
b. indicate if You modified the Licensed Material and
|
||||
retain an indication of any previous modifications; and
|
||||
|
||||
c. indicate the Licensed Material is licensed under this
|
||||
Public License, and include the text of, or the URI or
|
||||
hyperlink to, this Public License.
|
||||
|
||||
2. You may satisfy the conditions in Section 3(a)(1) in any
|
||||
reasonable manner based on the medium, means, and context in
|
||||
which You Share the Licensed Material. For example, it may be
|
||||
reasonable to satisfy the conditions by providing a URI or
|
||||
hyperlink to a resource that includes the required
|
||||
information.
|
||||
|
||||
3. If requested by the Licensor, You must remove any of the
|
||||
information required by Section 3(a)(1)(A) to the extent
|
||||
reasonably practicable.
|
||||
|
||||
b. ShareAlike.
|
||||
|
||||
In addition to the conditions in Section 3(a), if You Share
|
||||
Adapted Material You produce, the following conditions also apply.
|
||||
|
||||
1. The Adapter's License You apply must be a Creative Commons
|
||||
license with the same License Elements, this version or
|
||||
later, or a BY-SA Compatible License.
|
||||
|
||||
2. You must include the text of, or the URI or hyperlink to, the
|
||||
Adapter's License You apply. You may satisfy this condition
|
||||
in any reasonable manner based on the medium, means, and
|
||||
context in which You Share Adapted Material.
|
||||
|
||||
3. You may not offer or impose any additional or different terms
|
||||
or conditions on, or apply any Effective Technological
|
||||
Measures to, Adapted Material that restrict exercise of the
|
||||
rights granted under the Adapter's License You apply.
|
||||
|
||||
|
||||
Section 4 -- Sui Generis Database Rights.
|
||||
|
||||
Where the Licensed Rights include Sui Generis Database Rights that
|
||||
apply to Your use of the Licensed Material:
|
||||
|
||||
a. for the avoidance of doubt, Section 2(a)(1) grants You the right
|
||||
to extract, reuse, reproduce, and Share all or a substantial
|
||||
portion of the contents of the database;
|
||||
|
||||
b. if You include all or a substantial portion of the database
|
||||
contents in a database in which You have Sui Generis Database
|
||||
Rights, then the database in which You have Sui Generis Database
|
||||
Rights (but not its individual contents) is Adapted Material,
|
||||
|
||||
including for purposes of Section 3(b); and
|
||||
c. You must comply with the conditions in Section 3(a) if You Share
|
||||
all or a substantial portion of the contents of the database.
|
||||
|
||||
For the avoidance of doubt, this Section 4 supplements and does not
|
||||
replace Your obligations under this Public License where the Licensed
|
||||
Rights include other Copyright and Similar Rights.
|
||||
|
||||
|
||||
Section 5 -- Disclaimer of Warranties and Limitation of Liability.
|
||||
|
||||
a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE
|
||||
EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS
|
||||
AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF
|
||||
ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS,
|
||||
IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION,
|
||||
WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR
|
||||
PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS,
|
||||
ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT
|
||||
KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT
|
||||
ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU.
|
||||
|
||||
b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE
|
||||
TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION,
|
||||
NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT,
|
||||
INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES,
|
||||
COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR
|
||||
USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN
|
||||
ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR
|
||||
DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR
|
||||
IN PART, THIS LIMITATION MAY NOT APPLY TO YOU.
|
||||
|
||||
c. The disclaimer of warranties and limitation of liability provided
|
||||
above shall be interpreted in a manner that, to the extent
|
||||
possible, most closely approximates an absolute disclaimer and
|
||||
waiver of all liability.
|
||||
|
||||
|
||||
Section 6 -- Term and Termination.
|
||||
|
||||
a. This Public License applies for the term of the Copyright and
|
||||
Similar Rights licensed here. However, if You fail to comply with
|
||||
this Public License, then Your rights under this Public License
|
||||
terminate automatically.
|
||||
|
||||
b. Where Your right to use the Licensed Material has terminated under
|
||||
Section 6(a), it reinstates:
|
||||
|
||||
1. automatically as of the date the violation is cured, provided
|
||||
it is cured within 30 days of Your discovery of the
|
||||
violation; or
|
||||
|
||||
2. upon express reinstatement by the Licensor.
|
||||
|
||||
For the avoidance of doubt, this Section 6(b) does not affect any
|
||||
right the Licensor may have to seek remedies for Your violations
|
||||
of this Public License.
|
||||
|
||||
c. For the avoidance of doubt, the Licensor may also offer the
|
||||
Licensed Material under separate terms or conditions or stop
|
||||
distributing the Licensed Material at any time; however, doing so
|
||||
will not terminate this Public License.
|
||||
|
||||
d. Sections 1, 5, 6, 7, and 8 survive termination of this Public
|
||||
License.
|
||||
|
||||
|
||||
Section 7 -- Other Terms and Conditions.
|
||||
|
||||
a. The Licensor shall not be bound by any additional or different
|
||||
terms or conditions communicated by You unless expressly agreed.
|
||||
|
||||
b. Any arrangements, understandings, or agreements regarding the
|
||||
Licensed Material not stated herein are separate from and
|
||||
independent of the terms and conditions of this Public License.
|
||||
|
||||
|
||||
Section 8 -- Interpretation.
|
||||
|
||||
a. For the avoidance of doubt, this Public License does not, and
|
||||
shall not be interpreted to, reduce, limit, restrict, or impose
|
||||
conditions on any use of the Licensed Material that could lawfully
|
||||
be made without permission under this Public License.
|
||||
|
||||
b. To the extent possible, if any provision of this Public License is
|
||||
deemed unenforceable, it shall be automatically reformed to the
|
||||
minimum extent necessary to make it enforceable. If the provision
|
||||
cannot be reformed, it shall be severed from this Public License
|
||||
without affecting the enforceability of the remaining terms and
|
||||
conditions.
|
||||
|
||||
c. No term or condition of this Public License will be waived and no
|
||||
failure to comply consented to unless expressly agreed to by the
|
||||
Licensor.
|
||||
|
||||
d. Nothing in this Public License constitutes or may be interpreted
|
||||
as a limitation upon, or waiver of, any privileges and immunities
|
||||
that apply to the Licensor or You, including from the legal
|
||||
processes of any jurisdiction or authority.
|
||||
|
||||
|
||||
=======================================================================
|
||||
|
||||
Creative Commons is not a party to its public
|
||||
licenses. Notwithstanding, Creative Commons may elect to apply one of
|
||||
its public licenses to material it publishes and in those instances
|
||||
will be considered the “Licensor.” The text of the Creative Commons
|
||||
public licenses is dedicated to the public domain under the CC0 Public
|
||||
Domain Dedication. Except for the limited purpose of indicating that
|
||||
material is shared under a Creative Commons public license or as
|
||||
otherwise permitted by the Creative Commons policies published at
|
||||
creativecommons.org/policies, Creative Commons does not authorize the
|
||||
use of the trademark "Creative Commons" or any other trademark or logo
|
||||
of Creative Commons without its prior written consent including,
|
||||
without limitation, in connection with any unauthorized modifications
|
||||
to any of its public licenses or any other arrangements,
|
||||
understandings, or agreements concerning use of licensed material. For
|
||||
the avoidance of doubt, this paragraph does not form part of the
|
||||
public licenses.
|
||||
|
||||
Creative Commons may be contacted at creativecommons.org.
|
||||
3428
apps/learn/halkyon_learn_curator/data/jlpt/n1.csv
Normal file
3428
apps/learn/halkyon_learn_curator/data/jlpt/n1.csv
Normal file
File diff suppressed because it is too large
Load diff
1813
apps/learn/halkyon_learn_curator/data/jlpt/n2.csv
Normal file
1813
apps/learn/halkyon_learn_curator/data/jlpt/n2.csv
Normal file
File diff suppressed because it is too large
Load diff
1731
apps/learn/halkyon_learn_curator/data/jlpt/n3.csv
Normal file
1731
apps/learn/halkyon_learn_curator/data/jlpt/n3.csv
Normal file
File diff suppressed because it is too large
Load diff
641
apps/learn/halkyon_learn_curator/data/jlpt/n4.csv
Normal file
641
apps/learn/halkyon_learn_curator/data/jlpt/n4.csv
Normal file
|
|
@ -0,0 +1,641 @@
|
|||
jmdict_seq,kana,kanji,waller_definition
|
||||
2394370,あ,,Ah
|
||||
2085080,ああ,,like that
|
||||
1151120,あいさつ,,to greet
|
||||
1215230,あいだ,間,a space
|
||||
1284430,あう,合う,to match
|
||||
1383260,あかちゃん,,infant
|
||||
1352290,あがる,上る,to rise
|
||||
1383310,あかんぼう,赤ん坊,baby
|
||||
1586270,あく,空く,"to open, to become empty"
|
||||
1015220,アクセサリー,,accessory
|
||||
1352320,あげる,,to give
|
||||
1390800,あさい,浅い,"shallow,superficial"
|
||||
1526960,あじ,味,flavour
|
||||
1015840,アジア,,Asia
|
||||
1584660,あす,明日,tomorrow
|
||||
1542070,あそび,遊び,play
|
||||
1333550,あつまる,集る,to gather
|
||||
1333560,あつめる,集める,to collect something
|
||||
1017330,アナウンサー,,announcer
|
||||
1929050,アフリカ,,Africa
|
||||
1149830,アメリカ,,America
|
||||
1323010,あやまる,謝る,to apologize
|
||||
1019280,アルコール,,alcohol
|
||||
1019420,アルバイト,,part-time job
|
||||
1153890,あんしん,安心,relief
|
||||
1153930,あんぜん,安全,safety
|
||||
1000590,あんな,,such
|
||||
1154860,あんない,案内,to guide
|
||||
1155060,いか,以下,less than
|
||||
1155090,いがい,以外,with the exception of
|
||||
1159810,いがく,医学,medical science
|
||||
1378520,いきる,生きる,to live
|
||||
1156530,いけん,意見,opinion
|
||||
1382440,いし,石,stone
|
||||
1195140,いじめる,,to tease
|
||||
1155120,いじょう,以上,"more than,this is all"
|
||||
1228650,いそぐ,急ぐ,to hurry
|
||||
1421900,いたす,致す,(humble) to do
|
||||
1587290,いただく,,(humble) to receive
|
||||
1576250,いちど,一度,once
|
||||
1164010,いっしょうけんめい,一生懸命,with utmost effort
|
||||
1165670,いっぱい,一杯,full
|
||||
1311450,いと,糸,thread
|
||||
1155180,いない,以内,within
|
||||
1442750,いなか,田舎,countryside
|
||||
1222770,いのる,祈る,to pray
|
||||
1000940,いらっしゃる,,"(respectful) to be,to come or to go"
|
||||
1357250,うえる,植える,"to plant,to grow"
|
||||
1305700,うかがう,伺う,to visit
|
||||
1588060,うけつけ,受付,receipt
|
||||
1329590,うける,受ける,to take a lesson or test
|
||||
1451210,うごく,動く,to move
|
||||
1172400,うそ,嘘,a lie
|
||||
1457730,うち,内,within
|
||||
1408810,うつ,打つ,to hit
|
||||
1486360,うつくしい,美しい,beautiful
|
||||
1588320,うつす,写す,to copy or photograph
|
||||
1158210,うつる,移る,to move house or transfer
|
||||
1562850,うで,腕,arm
|
||||
1310460,うまい,上手い,delicious
|
||||
1550190,うら,裏,reverse side
|
||||
1588550,うりば,売り場,place where things are sold
|
||||
1219510,うれしい,,glad
|
||||
1001090,うん,,(informal) yes
|
||||
1172830,うんてん,運転,to drive
|
||||
1172870,うんてんしゅ,運転手,driver
|
||||
1172910,うんどう,運動,to exercise
|
||||
1028580,エスカレーター,,escalator
|
||||
1310530,えだ,枝,"branch, twig"
|
||||
1588730,えらぶ,選ぶ,to choose
|
||||
1178450,えんりょ,遠慮,"to be reserved, to be restrained"
|
||||
1001180,おいでになる,,(respectful) to be
|
||||
1612770,おいわい,お祝い,congratulation
|
||||
1032030,オートバイ,,motorcycle
|
||||
1001640,おかげ,,owing to
|
||||
1190860,おかしい,,strange or funny
|
||||
1182620,おく,億,one hundred million
|
||||
1182710,おくじょう,屋上,rooftop
|
||||
1589030,おくりもの,贈り物,gift
|
||||
1402730,おくる,送る,to send
|
||||
1589040,おくれる,遅れる,to be late
|
||||
1223660,おこす,起す,to wake
|
||||
1589060,おこなう,行う,to do
|
||||
1445690,おこる,怒る,"to get angry,to be angry"
|
||||
1589110,おしいれ,押し入れ,closet
|
||||
1002170,おじょうさん,お嬢さん,young lady
|
||||
1002400,おたく,お宅,(polite) your house
|
||||
1548550,おちる,落る,to fall or drop
|
||||
1238840,おっしゃる,,(respectful) to say
|
||||
1496480,おっと,夫,husband
|
||||
1270550,おつり,,"change from purchase, balance"
|
||||
1576900,おと,音,"sound,note"
|
||||
1589260,おとす,落す,to drop
|
||||
1546880,おどり,踊り,a dance
|
||||
1538440,おどる,踊る,to dance
|
||||
1238680,おどろく,驚く,to be surprised
|
||||
1604135,おまつり,お祭り,festival
|
||||
1001870,おみまい,お見舞い,"calling on someone who is ill,enquiry"
|
||||
1002500,おみやげ,お土産,souvenir
|
||||
1309260,おもいだす,思い出す,to remember
|
||||
1589350,おもう,思う,"to think,to feel"
|
||||
1217070,おもちゃ,,toy
|
||||
1489340,おもて,表,the front
|
||||
1365040,おや,親,parents
|
||||
1589500,おりる,下りる,to get off
|
||||
1385910,おる,折る,to break or to fold
|
||||
1270810,おれい,お礼,expression of gratitude
|
||||
1385920,おれる,折れる,to break or be folded
|
||||
1589590,おわり,終わり,the end
|
||||
1036290,カーテン,,curtain
|
||||
1201280,かいがん,海岸,coast
|
||||
1198360,かいぎ,会議,meeting
|
||||
1198380,かいぎしつ,会議室,meeting room
|
||||
1198660,かいじょう,会場,assembly hall or meeting place
|
||||
1198880,かいわ,会話,conversation
|
||||
1221250,かえり,帰り,return
|
||||
1510650,かえる,変える,to change
|
||||
1192700,かがく,科学,science
|
||||
1238550,かがみ,鏡,mirror
|
||||
1357210,かざる,飾る,to decorate
|
||||
1193950,かじ,火事,fire
|
||||
1040060,ガス,,petrol
|
||||
1040250,ガソリン,,petrol
|
||||
1040260,ガソリンスタンド,,petrol station
|
||||
1257110,かたい,堅い,hard
|
||||
1257110,かたい,硬い,hard
|
||||
1257110,かたい,固い,hard
|
||||
1250220,かたち,形,shape
|
||||
1511790,かたづける,片付ける,to tidy up
|
||||
1195840,かちょう,課長,section manager
|
||||
1346150,かつ,勝つ,to win
|
||||
1590480,かっこう,格好,appearance
|
||||
1192420,かない,家内,housewife
|
||||
1483190,かなしい,悲しい,sad
|
||||
1487400,かならず,必ず,"certainly,necessarily"
|
||||
2429350,おかねもち,お金持ち,rich man
|
||||
1242970,かねもち,金持ち,rich man
|
||||
1483150,かのじょ,彼女,"she,girlfriend"
|
||||
1509290,かべ,壁,wall
|
||||
1279680,かまう,,to mind
|
||||
1477950,かみ,髪,hair
|
||||
1209240,かむ,噛む,"to bite,to chew"
|
||||
1432850,かよう,通う,to commute
|
||||
1040380,ガラス,,a glass pane
|
||||
1483070,かれ,彼,"he,boyfriend"
|
||||
1483090,かれら,彼ら,they
|
||||
1209650,かわく,乾く,to get dry
|
||||
1590770,かわり,代わり,"substitute,alternate"
|
||||
1510790,かわる,変わる,to change
|
||||
1281020,かんがえる,考える,to consider
|
||||
1215810,かんけい,関係,relationship
|
||||
1213870,かんごふ,看護婦,female nurse
|
||||
1214330,かんたん,簡単,simple
|
||||
1221520,き,気,"spirit,mood"
|
||||
1220800,きかい,機会,opportunity
|
||||
1218560,きけん,危険,danger
|
||||
1591150,きこえる,聞こえる,to be heard
|
||||
1222700,きしゃ,汽車,steam train
|
||||
1225130,ぎじゅつ,技術,"art,technology,skill"
|
||||
1222840,きせつ,季節,season
|
||||
1223021,きそく,規則,regulations
|
||||
1003430,きっと,,surely
|
||||
1258710,きぬ,絹,silk
|
||||
1262530,きびしい,厳しい,strict
|
||||
1222590,きぶん,気分,mood
|
||||
1591420,きまる,決る,to be decided
|
||||
1247250,きみ,君,(informal) You (used by men towards women)
|
||||
1254180,きめる,決める,to decide
|
||||
1591430,きもち,気持ち,"feeling,mood"
|
||||
1423240,きもの,着物,kimono
|
||||
1226630,きゃく,客,"guest,customer"
|
||||
1228560,きゅう,急,"urgent, steep"
|
||||
1228690,きゅうこう,急行,"speedy, express"
|
||||
1236950,きょういく,教育,education
|
||||
1237030,きょうかい,教会,church
|
||||
1234140,きょうそう,競争,competition
|
||||
1238410,きょうみ,興味,an interest
|
||||
1242350,きんじょ,近所,neighbourhood
|
||||
1592500,ぐあい,具合,"condition,health"
|
||||
1245470,くうき,空気,"air,atmosphere"
|
||||
1245570,くうこう,空港,airport
|
||||
1401910,くさ,草,grass
|
||||
1184280,くださる,,(respectful) to give
|
||||
1592270,くび,首,neck
|
||||
1173100,くも,雲,cloud
|
||||
1483540,くらべる,比べる,to compare
|
||||
1269130,くれる,呉れる,to give
|
||||
1514960,くれる,暮れる,"to get dark,to come to an end"
|
||||
1247260,くん,君,suffix for familiar young male
|
||||
1533820,け,毛,hair or fur
|
||||
1252090,けいかく,計画,to plan
|
||||
1251270,けいけん,経験,to experience
|
||||
1251320,けいざい,経済,"finance,economy"
|
||||
1252390,けいさつ,警察,police
|
||||
1047860,ケーキ,,cake
|
||||
1200220,けが,怪我,to injure
|
||||
1250870,けしき,景色,"scene,landscape"
|
||||
1350080,けしゴム,消しゴム,eraser
|
||||
1185290,げしゅく,下宿,lodging
|
||||
1254130,けっして,決して,never
|
||||
2853889,けれど,,however
|
||||
2853889,けれども,,however
|
||||
1261190,げんいん,原因,"cause,source"
|
||||
1257040,けんか,喧嘩,to quarrel
|
||||
1258520,けんきゅう,研究,research
|
||||
1258570,けんきゅうしつ,研究室,"study room,laboratory"
|
||||
1260000,けんぶつ,見物,sightseeing
|
||||
1307770,こ,子,child
|
||||
1004310,こう,斯う,this way
|
||||
1282490,こうがい,郊外,outskirts
|
||||
1282260,こうぎ,講義,lecture
|
||||
1278040,こうぎょう,工業,the manufacturing industry
|
||||
1283500,こうこう,高校,high school
|
||||
1283510,こうこうせい,高校生,high school student
|
||||
1578700,こうじょう,工場,factory
|
||||
1279590,こうちょう,校長,headmaster
|
||||
1272280,こうつう,交通,"traffic,transportation"
|
||||
1282340,こうどう,講堂,auditorium
|
||||
1283860,こうとうがっこう,高等学校,high school
|
||||
1274820,こうむいん,公務員,government worker
|
||||
1286400,こくさい,国際,international
|
||||
1360480,こころ,心,"core,heart"
|
||||
1270390,ごしゅじん,御主人,(honorable) your husband
|
||||
1267180,こしょう,故障,to break-down
|
||||
1593570,ごぞんじ,ご存じ,"knowing,acquaintance"
|
||||
1449530,こたえ,答,response
|
||||
1593590,ごちそう,,a feast
|
||||
2524270,こと,,"thing,matter"
|
||||
1348530,ことり,小鳥,small bird
|
||||
1004690,このあいだ,,"the other day,recently"
|
||||
1004710,このごろ,,"these days,nowadays"
|
||||
1295530,こまかい,細かい,"small, fine"
|
||||
1369900,ごみ,塵,rubbish
|
||||
1593410,こむ,込む,to be crowded
|
||||
1508750,こめ,米,uncooked rice
|
||||
2217040,ごらんになる,,(respectful) to see
|
||||
1004790,これから,,after this
|
||||
1593480,こわい,怖い,frightening
|
||||
1199890,こわす,壊す,to break
|
||||
1199900,こわれる,壊れる,to be broken
|
||||
1051970,コンサート,,concert
|
||||
1289370,こんど,今度,"now,next time"
|
||||
1053350,コンピュータ,,computer
|
||||
1053350,コンピューター,,computer
|
||||
1289520,こんや,今夜,tonight
|
||||
1293780,さいきん,最近,"latest,nowadays"
|
||||
1293810,さいご,最後,"last,end"
|
||||
1293990,さいしょ,最初,"beginning,first"
|
||||
1297110,さか,坂,"slope,hill"
|
||||
1593670,さがす,探す,to look for
|
||||
1184160,さがる,下る,"to get down,to descend"
|
||||
1379750,さかん,盛ん,"popularity,prosperous"
|
||||
1184170,さげる,下げる,"to hang,to lower,to move back"
|
||||
1291270,さしあげる,差し上げる,(polite) to give
|
||||
1005180,さっき,先,some time ago
|
||||
1579720,さびしい,寂しい,lonely
|
||||
1293640,さらいげつ,さ来月,the month after next
|
||||
1293650,さらいしゅう,さ来週,the week after next
|
||||
1057850,サラダ,,salad
|
||||
1403040,さわぐ,騒ぐ,"to make noise,to be excited"
|
||||
1357980,さわる,触る,to touch
|
||||
1303770,さんぎょう,産業,industry
|
||||
1058480,サンダル,,sandal
|
||||
1058580,サンドイッチ,,sandwich
|
||||
1304680,ざんねん,残念,disappointment
|
||||
1308090,し,市,city
|
||||
1315130,じ,字,character
|
||||
1312420,しあい,試合,"match,game"
|
||||
1594110,しかた,仕方,method
|
||||
1394730,しかる,然る,a particular
|
||||
1312350,しけん,試験,examination
|
||||
1313850,じこ,事故,accident
|
||||
1421210,じしん,地震,earthquake
|
||||
1316300,じだい,時代,era
|
||||
1185930,したぎ,下着,underwear
|
||||
1310260,したく,支度,to prepare
|
||||
1594400,しっかり,,"firmly,steadily"
|
||||
1320140,しっぱい,失敗,"failure,mistake"
|
||||
1595270,じてん,辞典,dictionary
|
||||
1490670,しなもの,品物,goods
|
||||
1304420,しばらく,,little while
|
||||
1446760,しま,島,island
|
||||
1308690,しみん,市民,citizen
|
||||
1314400,じむしょ,事務所,office
|
||||
1322700,しゃかい,社会,"society,public"
|
||||
1322920,しゃちょう,社長,company president
|
||||
1323500,じゃま,,"hindrance,intrusion"
|
||||
1065680,ジャム,,jam
|
||||
1318720,じゆう,自由,freedom
|
||||
1333090,しゅうかん,習慣,"custom,manners"
|
||||
1334080,じゅうしょ,住所,"an address,a residence"
|
||||
1335440,じゅうどう,柔道,judo
|
||||
1335080,じゅうぶん,十分,enough
|
||||
1339460,しゅっせき,出席,to attend
|
||||
1340000,しゅっぱつ,出発,to depart
|
||||
1329000,しゅみ,趣味,hobby
|
||||
1341670,じゅんび,準備,to prepare
|
||||
1351430,しょうかい,紹介,introduction
|
||||
1347870,しょうがっこう,小学校,elementary school
|
||||
1348430,しょうせつ,小説,novel
|
||||
1349610,しょうたい,招待,to invite
|
||||
1349480,しょうち,承知,to consent
|
||||
1347710,しょうらい,将来,"future,prospects"
|
||||
1358490,しょくじ,食事,to have a meal
|
||||
1358680,しょくりょうひん,食料品,groceries
|
||||
1345250,じょせい,女性,woman
|
||||
1420410,しらせる,知らせる,to notify
|
||||
1429060,しらべる,調べる,to investigate
|
||||
1367300,じんこう,人口,population
|
||||
1364670,じんじゃ,神社,Shinto shrine
|
||||
1365250,しんせつ,親切,kindness
|
||||
1360930,しんぱい,心配,to worry
|
||||
1362400,しんぶんしゃ,新聞社,newspaper company
|
||||
1371320,すいえい,水泳,swimming
|
||||
1371920,すいどう,水道,water supply
|
||||
1372800,ずいぶん,,extremely
|
||||
1372980,すうがく,数学,"mathematics,arithmetic"
|
||||
1066680,スーツ,,suit
|
||||
1066690,スーツケース,,suitcase
|
||||
1195970,すぎる,過ぎる,to exceed
|
||||
1586265,すく,空く,to become empty
|
||||
1068550,スクリーン,,screen
|
||||
1374550,すごい,凄い,terrific
|
||||
1365980,すすむ,進む,to make progress
|
||||
1006110,すっかり,,completely
|
||||
1006140,すっと,,"straight,all of a sudden"
|
||||
1070280,ステーキ,,steak
|
||||
1322320,すてる,捨てる,to throw away
|
||||
1070650,ステレオ,,stereo
|
||||
1291500,すな,砂,sand
|
||||
1397300,すばらしい,,wonderful
|
||||
1208640,すべる,滑る,"to slide,to slip"
|
||||
1246440,すみ,隅,"corner,nook"
|
||||
1295070,すむ,済む,to finish
|
||||
1567450,すり,掏摸,pickpocket
|
||||
1006280,すると,,then
|
||||
1378860,せいかつ,生活,to live
|
||||
1378990,せいさん,生産,to produce
|
||||
1375970,せいじ,政治,"politics,government"
|
||||
1381100,せいよう,西洋,western countries
|
||||
1373860,せかい,世界,the world
|
||||
1382250,せき,席,seat
|
||||
1386460,せつめい,説明,explanation
|
||||
1472800,せなか,背中,back of the body
|
||||
1374530,ぜひ,,without fail
|
||||
1374300,せわ,世話,to look after
|
||||
1391780,せん,線,line
|
||||
1395620,ぜんぜん,全然,not entirely (used in a negative sentence)
|
||||
1390360,せんそう,戦争,war
|
||||
1388410,せんぱい,先輩,senior
|
||||
1006610,そう,,really
|
||||
1401210,そうだん,相談,to discuss
|
||||
1160570,そだてる,育てる,"to rear,to bring up"
|
||||
1405890,そつぎょう,卒業,graduation
|
||||
1396840,そふ,祖父,grandfather
|
||||
1075500,ソフト,,soft
|
||||
1396860,そぼ,祖母,grandmother
|
||||
1007000,それで,,because of that
|
||||
1007040,それに,,moreover
|
||||
1007060,それほど,,to that extent
|
||||
1345605,そろそろ,,"gradually,soon"
|
||||
1007130,そんな,,that sort of
|
||||
2008740,そんなに,,"so much,like that"
|
||||
1411300,たいいん,退院,to leave hospital
|
||||
1413260,だいがくせい,大学生,university student
|
||||
1413940,だいじ,大事,"important,valuable,serious matter"
|
||||
1414470,だいたい,大体,generally
|
||||
1414580,たいてい,大抵,usually
|
||||
1075940,タイプ,,"type,style"
|
||||
1414920,だいぶ,大分,greatly
|
||||
1596780,たいふう,台風,typhoon
|
||||
1445790,たおれる,倒れる,to break down
|
||||
1007310,だから,,"so,therefore"
|
||||
1596930,たしか,確か,definite
|
||||
1404700,たす,足す,to add a number
|
||||
1518070,たずねる,訪ねる,to visit
|
||||
1369940,たずねる,尋ねる,to ask
|
||||
1376600,ただしい,正しい,correct
|
||||
1356750,たたみ,畳,Japanese straw mat
|
||||
1551530,たてる,立てる,to stand something up
|
||||
1257330,たてる,建てる,to build
|
||||
1556370,たとえば,例えば,for example
|
||||
1416700,たな,棚,shelves
|
||||
1207250,たのしみ,楽しみ,joy
|
||||
1207270,たのしむ,楽む,to enjoy oneself
|
||||
1634500,たまに,,occasionally
|
||||
1157080,ため,為,in order to
|
||||
1409110,だめ,,no good
|
||||
1404740,たりる,足りる,to be enough
|
||||
1420160,だんせい,男性,male
|
||||
1419860,だんぼう,暖房,heating
|
||||
1255060,ち,血,blood
|
||||
1077550,チェック,,to check
|
||||
1554820,ちから,力,"strength,power"
|
||||
1007560,ちっとも,,not at all (used with a negative verb)
|
||||
1007660,ちゃん,,suffix for familiar female person
|
||||
1426530,ちゅうい,注意,caution
|
||||
1423650,ちゅうがっこう,中学校,"junior high school,middle school"
|
||||
1426590,ちゅうしゃ,注射,injection
|
||||
1426920,ちゅうしゃじょう,駐車場,parking lot
|
||||
1421540,ちり,地理,geography
|
||||
1597780,つかまえる,捕まえる,to seize
|
||||
1255430,つき,月,moon
|
||||
1495740,つく,付く,to be attached
|
||||
1433680,つける,漬ける,"to soak,to pickle"
|
||||
1444980,つごう,都合,"circumstances,convenience"
|
||||
1441870,つたえる,伝える,to report
|
||||
1405790,つづく,続く,to be continued
|
||||
1405800,つづける,続ける,to continue
|
||||
1584060,つつむ,包む,to wrap
|
||||
1294330,つま,妻,(humble) wife
|
||||
1382980,つもり,積もり,intention
|
||||
1434120,つる,釣る,to fish
|
||||
1559290,つれる,連れる,to lead
|
||||
1427360,ていねい,丁寧,polite
|
||||
1079290,テキスト,,"text,text book"
|
||||
1437450,てきとう,適当,suitability
|
||||
1340460,できるだけ,,as much as possible
|
||||
1328190,てつだう,手伝う,to assist
|
||||
1080000,テニス,,tennis
|
||||
1328090,てぶくろ,手袋,glove
|
||||
1315240,てら,寺,temple
|
||||
1441390,てん,点,"point,dot"
|
||||
1440670,てんいん,店員,shop assistant
|
||||
1438770,てんきよほう,天気予報,weather forecast
|
||||
1443660,でんとう,電灯,electric light
|
||||
1443760,でんぽう,電報,telegram
|
||||
1440660,てんらんかい,展覧会,exhibition
|
||||
1621470,と,都,metropolitan
|
||||
1454180,どうぐ,道具,"tool,means"
|
||||
1449890,とうとう,到頭,"finally, after all"
|
||||
1451490,どうぶつえん,動物園,zoo
|
||||
1177820,とおく,遠く,distant
|
||||
1433030,とおる,通る,to go through
|
||||
1454670,とくに,特に,"particularly,especially"
|
||||
1455280,とくべつ,特別,special
|
||||
1349410,とこや,,barber
|
||||
1582200,とちゅう,途中,on the way
|
||||
1454750,とっきゅう,特急,limited express train (faster than an express train)
|
||||
1457210,とどける,届ける,to reach
|
||||
1474850,とまる,泊まる,to lodge at
|
||||
1310670,とめる,止める,to stop something
|
||||
1326830,とりかえる,取り替える,to exchange
|
||||
1599340,どろぼう,泥棒,thief
|
||||
1009320,どんどん,,more and more
|
||||
1599390,なおす,直す,"to fix,to repair"
|
||||
2846390,なおる,直る,"to be fixed,to be repaired"
|
||||
1599400,なおる,治る,"to be cured,to heal"
|
||||
1599420,なかなか,中々,considerably
|
||||
1229840,なく,泣く,to weep
|
||||
1529550,なくなる,無くなる,"to disappear,to get lost"
|
||||
1518540,なくなる,亡くなる,to die
|
||||
1447000,なげる,投げる,to throw or cast away
|
||||
1157090,なさる,,(respectful) to do
|
||||
1532910,なる,鳴る,to sound
|
||||
1375620,なるべく,,as much as possible
|
||||
1375820,なるほど,,now I understand
|
||||
1212670,なれる,慣れる,to grow accustomed to
|
||||
1599760,におい,,a smell
|
||||
1244310,にがい,苦い,bitter
|
||||
1599800,にかいだて,二階建て,two storied
|
||||
1450330,にげる,逃げる,to escape
|
||||
1463930,にっき,日記,journal
|
||||
1465720,にゅういん,入院,to hospitalise
|
||||
1465850,にゅうがく,入学,to enter school or university
|
||||
1314600,にる,似る,to be similar
|
||||
1367120,にんぎょう,人形,"doll, figure"
|
||||
1448440,ぬすむ,盗む,to steal
|
||||
1444270,ぬる,塗る,"to paint,to plaster"
|
||||
1467620,ぬれる,,to get wet
|
||||
1600160,ねだん,,price
|
||||
1467710,ねつ,熱,fever
|
||||
1467910,ねっしん,,enthusiasm
|
||||
1360320,ねぼう,寝坊,sleeping in late
|
||||
1529330,ねむい,眠い,sleepy
|
||||
1529390,ねむる,眠る,to sleep
|
||||
1304510,のこる,残る,to remain
|
||||
1600280,のど,喉,throat
|
||||
1600470,のりかえる,乗り換える,to change between buses or trains
|
||||
1600530,のりもの,乗り物,vehicle
|
||||
1546550,は,葉,leaf
|
||||
1355810,ばあい,場合,situation
|
||||
1100810,パート,,part time
|
||||
1473230,ばい,倍,double
|
||||
1472270,はいけん,拝見,(humble) to look at
|
||||
1313080,はいしゃ,歯医者,dentist
|
||||
1172660,はこぶ,運ぶ,to transport
|
||||
1307550,はじめる,始める,to begin
|
||||
1355850,ばしょ,場所,location
|
||||
1476430,はず,筈,it should be so
|
||||
1421630,はずかしい,恥ずかしい,embarrassed
|
||||
1101570,パソコン,,personal computer
|
||||
1477170,はつおん,発音,pronunciation
|
||||
1010150,はっきり,,clearly
|
||||
1194660,はなみ,花見,cherry-blossom viewing
|
||||
1555440,はやし,林,"woods,forester"
|
||||
1501620,はらう,払う,to pay
|
||||
1482340,ばんぐみ,番組,television or radio program
|
||||
1480670,はんたい,反対,opposition
|
||||
1096770,ハンドバッグ,,handbag
|
||||
1463770,ひ,日,"day, sun"
|
||||
1193610,ひ,火,fire
|
||||
1106400,ピアノ,,piano
|
||||
1556630,ひえる,冷える,to grow cold
|
||||
1272780,ひかり,光,light
|
||||
1272820,ひかる,光る,"to shine,to glitter"
|
||||
1601650,ひきだし,引き出し,"drawer,drawing out"
|
||||
1601660,ひきだす,引き出す,to withdraw
|
||||
1601810,ひげ,髭,beard
|
||||
1485520,ひこうじょう,飛行場,airport
|
||||
1227370,ひさしぶり,久しぶり,after a long time
|
||||
1486460,びじゅつかん,美術館,art gallery
|
||||
1484930,ひじょうに,非常に,extremely
|
||||
1226360,びっくり,,to be surprised
|
||||
1169340,ひっこす,引っ越す,to move house
|
||||
1487660,ひつよう,必要,necessary
|
||||
1602060,ひどい,,awful
|
||||
1202440,ひらく,開く,to open an event
|
||||
1106010,ビル,,building or bill
|
||||
1581710,ひるま,昼間,"daytime,during the day"
|
||||
1426290,ひるやすみ,昼休み,noon break
|
||||
1332570,ひろう,拾う,"to pick up,to gather"
|
||||
1108180,ファックス,,fax
|
||||
1602440,ふえる,増える,to increase
|
||||
1362640,ふかい,深い,deep
|
||||
1501350,ふくざつ,複雑,"complexity,complication"
|
||||
1500800,ふくしゅう,復習,revision
|
||||
1499460,ぶちょう,部長,head of a section
|
||||
1497190,ふつう,普通,"usually, or a train that stops at every station"
|
||||
1499230,ぶどう,葡萄,grapes
|
||||
1408220,ふとる,太る,to become fat
|
||||
1496890,ふとん,布団,"Japanese bedding, futon"
|
||||
1602800,ふね,舟,ship
|
||||
1494860,ふべん,不便,inconvenience
|
||||
1450270,ふむ,踏む,to step on
|
||||
1282770,ふりだす,降り出す,to start to rain
|
||||
1116840,プレゼント,,present
|
||||
1505120,ぶんか,文化,culture
|
||||
1505190,ぶんがく,文学,literature
|
||||
1505600,ぶんぽう,文法,grammar
|
||||
1509430,べつ,別,different
|
||||
1120010,ベル,,bell
|
||||
1510640,へん,変,strange
|
||||
1512220,へんじ,返事,reply
|
||||
1520120,ぼうえき,貿易,trade
|
||||
1516750,ほうそう,放送,to broadcast
|
||||
1517480,ほうりつ,法律,law
|
||||
1521400,ぼく,僕,I (used by males)
|
||||
1376310,ほし,星,star
|
||||
1436510,ほど,程,extent
|
||||
1522050,ほとんど,,mostly
|
||||
1603550,ほめる,,to praise
|
||||
1523400,ほんやく,翻訳,translation
|
||||
1302070,まいる,参る,"(humble) to go,to come"
|
||||
1497980,まける,負ける,to lose
|
||||
1364360,まじめ,,serious
|
||||
1387240,まず,先ず,first of all
|
||||
1524990,または,,"or,otherwise"
|
||||
1215330,まちがえる,間違える,to make a mistake
|
||||
1215260,まにあう,間に合う,to be in time for
|
||||
1604290,まわり,周り,surroundings
|
||||
1604300,まわる,回る,to go around
|
||||
1526920,まんが,漫画,comic
|
||||
1604350,まんなか,真ん中,middle
|
||||
1259140,みえる,見える,to be in sight
|
||||
1267280,みずうみ,湖,lake
|
||||
1527040,みそ,味噌,bean paste
|
||||
1604550,みつかる,見つかる,to be discovered
|
||||
1604570,みつける,見つける,to discover
|
||||
1202150,みな,皆,everybody
|
||||
1279990,みなと,港,harbour
|
||||
1604800,むかう,向かう,to face
|
||||
1253190,むかえる,迎える,to go out to meet
|
||||
1382370,むかし,昔,"olden days, former"
|
||||
1426680,むし,虫,insect
|
||||
1404390,むすこ,息子,(humble) son
|
||||
1531190,むすめ,娘,(humble) daughter
|
||||
1530970,むり,無理,impossible
|
||||
1346370,めしあがる,召し上がる,(polite) to eat
|
||||
1431850,めずらしい,珍しい,rare
|
||||
1362950,もうしあげる,申し上げる,"(humble) to say,to tell"
|
||||
1363090,もうす,申す,"(humble) to be called,to say"
|
||||
2015610,もうすぐ,,soon
|
||||
2607730,もし,,if
|
||||
1535780,もちろん,,of course
|
||||
1293700,もっとも,最も,extremely
|
||||
1535880,もどる,戻る,to turn back
|
||||
1534870,もめん,木綿,cotton
|
||||
1535910,もらう,,to receive
|
||||
1362490,もり,森,forest
|
||||
1350600,やく,焼く,"to bake,to grill"
|
||||
1538130,やくそく,約束,promise
|
||||
1537980,やくにたつ,役に立つ,to be helpful
|
||||
1350610,やける,焼ける,"to burn,to be roasted"
|
||||
1539040,やさしい,優しい,kind
|
||||
1605510,やせる,痩せる,to become thin
|
||||
1012800,やっと,,at last
|
||||
2772770,やはり,,"as I thought,absolutely"
|
||||
1012810,やっぱり,,"as I thought,absolutely"
|
||||
1310640,やむ,止む,to stop
|
||||
1310680,やめる,止める,to stop
|
||||
1605630,やわらかい,柔らかい,soft
|
||||
1448580,ゆ,湯,hot water
|
||||
1538820,ゆしゅつ,輸出,to export
|
||||
1538870,ゆにゅう,輸入,to import
|
||||
1309650,ゆび,指,finger
|
||||
1310050,ゆびわ,指輪,finger ring
|
||||
1529410,ゆめ,夢,dream
|
||||
1545710,ゆれる,揺れる,"to shake,to sway"
|
||||
1546200,よう,用,use
|
||||
1546220,ようい,用意,preparation
|
||||
1546300,ようじ,用事,things to do
|
||||
1179005,よごれる,汚れる,to get dirty
|
||||
1543070,よしゅう,予習,preparation for a lesson
|
||||
1543240,よてい,予定,arrangement
|
||||
1543750,よやく,予約,reservation
|
||||
1219680,よる,寄る,to visit
|
||||
1218760,よろこぶ,喜ぶ,to be delighted
|
||||
1224880,よろしい,,"(respectful) OK,all right"
|
||||
1550140,りゆう,理由,reason
|
||||
1549660,りよう,利用,utilization
|
||||
1554010,りょうほう,両方,both sides
|
||||
1553130,りょかん,旅館,Japanese hotel
|
||||
1552760,るす,留守,absence
|
||||
1557290,れいぼう,冷房,air conditioning
|
||||
1558050,れきし,歴史,history
|
||||
1145130,レジ,,register
|
||||
1145990,レポート,,report
|
||||
1145990,リポート,,report
|
||||
1559900,れんらく,連絡,contact
|
||||
1148520,ワープロ,,word processor
|
||||
1501660,わかす,沸かす,"to boil,to heat"
|
||||
1606590,わかれる,別れる,to separate
|
||||
1606680,わく,沸く,"to boil, to grow hot,to get excited"
|
||||
1538330,わけ,訳,"meaning,reason"
|
||||
1519230,わすれもの,忘れ物,lost article
|
||||
1351360,わらう,笑う,"to laugh,to smile"
|
||||
1606810,わりあい,割合,"rate,ratio,percentage"
|
||||
1208020,われる,割れる,to break
|
||||
2005990,およぎかた,泳ぎ方,way of swimming
|
||||
|
685
apps/learn/halkyon_learn_curator/data/jlpt/n5.csv
Normal file
685
apps/learn/halkyon_learn_curator/data/jlpt/n5.csv
Normal file
|
|
@ -0,0 +1,685 @@
|
|||
jmdict_seq,kana,kanji,waller_definition
|
||||
1198180,あう,会う,to meet
|
||||
1381380,あお,青,blue
|
||||
1381390,あおい,青い,blue
|
||||
2013900,あか,赤,red
|
||||
1383240,あかい,赤い,red
|
||||
1532350,あかるい,明い,bright
|
||||
1332650,あき,秋,autumn
|
||||
1586270,あく,開く,"to open, to become open"
|
||||
1202450,あける,開ける,to open
|
||||
1352320,あげる,上げる,to give
|
||||
1428280,あさ,朝,morning
|
||||
1586330,あさごはん,朝御飯,breakfast
|
||||
1584640,あさって,,day after tomorrow
|
||||
1404630,あし,足,"foot, leg"
|
||||
1584660,あした,明日,tomorrow
|
||||
1000320,あそこ,,over there
|
||||
1542160,あそぶ,遊ぶ,"to play, to make a visit"
|
||||
1586420,あたたかい,暖かい,warm
|
||||
1582310,あたま,頭,head
|
||||
1361490,あたらしい,新しい,new
|
||||
1483185,あちら,,there
|
||||
1343460,あつい,暑い,hot
|
||||
1467720,あつい,熱い,hot to the touch
|
||||
1275320,あつい,厚い,"kind, deep, thick"
|
||||
1483185,あっち,,over there
|
||||
1269320,あと,後,afterwards
|
||||
1223615,あなた,貴方,you
|
||||
1249900,あに,兄,(humble) older brother
|
||||
1307630,あね,姉,(humble) older sister
|
||||
1000430,あの,,um...
|
||||
1017760,アパート,,apartment
|
||||
1547450,あびる,,"to bathe, to shower"
|
||||
1218380,あぶない,危ない,dangerous
|
||||
1213400,あまい,甘い,sweet
|
||||
1584930,あまり,,not very
|
||||
1171900,あめ,雨,rain
|
||||
1153520,あめ,飴,candy
|
||||
1390930,あらう,洗う,to wash
|
||||
1296400,ある,有る,"to be,to have (used for inanimate objects)"
|
||||
1514320,あるく,歩く,to walk
|
||||
2847612,あれ,,that
|
||||
2820690,いい,,good
|
||||
1605820,よい,良い,good
|
||||
1583250,いいえ,,no
|
||||
1587040,いう,言う,to say
|
||||
1191730,いえ,家,house
|
||||
2845606,いかが,,how
|
||||
1578850,いく,行く,to go
|
||||
1219960,いくつ,,"how many?,how old?"
|
||||
1219980,いくら,,how much?
|
||||
1421700,いけ,池,pond
|
||||
1159980,いしゃ,医者,medical doctor
|
||||
1157070,いす,,chair
|
||||
1519290,いそがしい,忙しい,"busy, irritated"
|
||||
1432680,いたい,痛い,painful
|
||||
1160790,いち,一,one
|
||||
1576260,いちにち,一日,first of the month
|
||||
1165970,いちばん,,"best, first"
|
||||
1188760,いつ,何時,when
|
||||
1268570,いつか,五日,"five days, fifth day"
|
||||
1163400,いっしょ,一緒,together
|
||||
1268070,いつつ,五つ,five
|
||||
1188890,いつも,,always
|
||||
1258330,いぬ,犬,dog
|
||||
1288850,いま,今,now
|
||||
1156800,いみ,意味,meaning
|
||||
1524590,いもうと,妹,(humble) younger sister
|
||||
1587610,いや,嫌,unpleasant
|
||||
1582820,いりぐち,入口,entrance
|
||||
1577980,いる,居る,"to be, to have (used for people and animals)"
|
||||
1546640,いる,要る,to need
|
||||
1465610,いれる,入れる,to put in
|
||||
1357600,いろ,色,colour
|
||||
1587850,いろいろ,,various
|
||||
1352130,うえ,上,on top of
|
||||
1269410,うしろ,後ろ,behind
|
||||
1475480,うすい,薄い,"thin,weak"
|
||||
1193180,うた,歌,song
|
||||
1588120,うたう,歌う,to sing
|
||||
1378690,うまれる,生まれる,to be born
|
||||
1201190,うみ,海,sea
|
||||
1473950,うる,売る,to sell
|
||||
1481920,うるさい,煩い,"noisy, annoying"
|
||||
1580340,うわぎ,上着,jacket
|
||||
1202270,え,絵,picture
|
||||
1173720,えいが,映画,movie
|
||||
1173750,えいがかん,映画館,cinema
|
||||
1174420,えいご,英語,English language
|
||||
1001140,ええ,,yes
|
||||
1175140,えき,駅,station
|
||||
1030630,エレベーター,,elevator
|
||||
1178590,えんぴつ,鉛筆,pencil
|
||||
1486650,おいしい,,delicious
|
||||
1407460,おおい,多い,many
|
||||
1588880,おおきい,大きい,big
|
||||
1412890,おおきな,大きな,big
|
||||
1414220,おおぜい,大勢,great number of people
|
||||
1002650,おかあさん,お母さん,(honorable) mother
|
||||
1001710,おかし,お菓子,"sweets, candy"
|
||||
1001820,おかね,お金,money
|
||||
1223640,おきる,起きる,to get up
|
||||
1421850,おく,置く,to put
|
||||
1179330,おくさん,奥さん,(honorable) wife
|
||||
1329015,おさけ,お酒,"alcohol, rice wine"
|
||||
1299685,おさら,お皿,"plate, dish"
|
||||
1002320,おじいさん,,"grandfather, male senior citizen"
|
||||
1236900,おしえる,教える,"to teach, to tell"
|
||||
2261490,おじさん,,"uncle, middle aged gentleman"
|
||||
1180470,おす,押す,"to push, to stamp something"
|
||||
1421970,おそい,遅い,"late, slow"
|
||||
1002430,おちゃ,お茶,green tea
|
||||
1002100,おてあらい,お手洗い,bathroom
|
||||
1002590,おとうさん,お父さん,(honorable) father
|
||||
1581930,おとうと,弟,younger brother
|
||||
1419990,おとこ,男,Man
|
||||
1420010,おとこのこ,男の子,Boy
|
||||
1576050,おととい,一昨日,day before yesterday
|
||||
1576060,おととし,一昨年,year before last
|
||||
1414170,おとな,大人,Adult
|
||||
1002610,おなか,,stomach
|
||||
1451750,おなじ,同じ,same
|
||||
1001830,おにいさん,お兄さん,(honorable) older brother
|
||||
1001990,おねえさん,お姉さん,(honorable) older sister
|
||||
1002330,おばあさん,,"grandmother, female senior-citizen"
|
||||
2261500,おばさん,伯母さん,Aunt
|
||||
2220600,おふろ,お風呂,Bath
|
||||
1513065,おべんとう,お弁当,boxed lunch
|
||||
1206050,おぼえる,覚える,to remember
|
||||
1002120,おまわりさん,,friendly term for policeman
|
||||
1335750,おもい,重い,Heavy
|
||||
1533580,おもしろい,,Interesting
|
||||
1174340,およぐ,泳ぐ,to swim
|
||||
1589500,おりる,降りる,"to get off, to descend"
|
||||
1589600,おわる,終る,to finish
|
||||
1183720,おんがく,音楽,Music
|
||||
1344930,おんな,女,Woman
|
||||
1344970,おんなのこ,女の子,Girl
|
||||
1203620,がいこく,外国,foreign country
|
||||
1203650,がいこくじん,外国人,Foreigner
|
||||
1198550,かいしゃ,会社,Company
|
||||
1203090,かいだん,階段,Stairs
|
||||
1589730,かいもの,買い物,Shopping
|
||||
1473740,かう,買う,to buy
|
||||
1512130,かえす,返す,to return something
|
||||
1221270,かえる,帰る,to go back
|
||||
1207590,かかる,掛かる,to take time or money
|
||||
1260490,かぎ,鍵,Key
|
||||
1343950,かく,書く,to write
|
||||
1206900,がくせい,学生,Student
|
||||
1207610,かける,掛ける,to call by phone
|
||||
1301940,かさ,傘,Umbrella
|
||||
1411160,かす,貸す,to lend
|
||||
1499720,かぜ,風,Wind
|
||||
1583720,かぜ,風邪,a cold
|
||||
1192150,かぞく,家族,Family
|
||||
1516925,かた,方,"person, way of doing"
|
||||
1206730,がっこう,学校,School
|
||||
1037670,カップ,,Cup
|
||||
1192280,かてい,家庭,Household
|
||||
1206110,かど,角,a corner
|
||||
1208910,かばん,鞄,"bag, basket"
|
||||
1194870,かびん,花瓶,a vase
|
||||
1311530,かみ,紙,paper
|
||||
1038350,カメラ,,camera
|
||||
1194290,かようび,火曜日,Tuesday
|
||||
1365850,からい,辛い,Spicy
|
||||
1409140,からだ,体,Body
|
||||
1323560,かりる,借りる,to borrow
|
||||
1252560,かるい,軽い,Light
|
||||
1039140,カレー,,Curry
|
||||
1039220,カレンダー,,calendar
|
||||
1390020,かわ,川,River
|
||||
1390020,かわ,河,River
|
||||
1577200,かわいい,,Cute
|
||||
1213170,かんじ,漢字,Chinese character
|
||||
1534520,き,木,"tree, wood"
|
||||
1576760,きいろ,黄色,yellow
|
||||
1182030,きいろい,黄色い,yellow
|
||||
1350040,きえる,消える,to disappear
|
||||
1591110,きく,聞く,"to hear, to listen to, to ask"
|
||||
1520670,きた,北,North
|
||||
1042820,ギター,,Guitar
|
||||
1178940,きたない,汚い,Dirty
|
||||
1226440,きっさてん,喫茶店,coffee lounge
|
||||
1385070,きって,切手,postage stamp
|
||||
1385170,きっぷ,切符,Ticket
|
||||
1579260,きのう,昨日,Yesterday
|
||||
1578150,きゅう,九,Nine
|
||||
1578150,く,九,Nine
|
||||
1231580,ぎゅうにく,牛肉,Beef
|
||||
1231590,ぎゅうにゅう,牛乳,Milk
|
||||
1579110,きょう,今日,Today
|
||||
1237150,きょうしつ,教室,Classroom
|
||||
1249960,きょうだい,兄弟,(humble) siblings
|
||||
1231690,きょねん,去年,last year
|
||||
1257240,きらい,嫌い,Hate
|
||||
1384830,きる,切る,to cut
|
||||
1423000,きる,着る,to put on from the shoulders down
|
||||
1591900,きれい,,"pretty, clean"
|
||||
1042610,キロ,,Kilogram
|
||||
1042620,キログラム,,Kilogram
|
||||
1042650,キロメートル,,Kilometer
|
||||
1243490,ぎんこう,銀行,Bank
|
||||
1243320,きんようび,金曜日,Friday
|
||||
1538160,くすり,薬,medicine
|
||||
1184270,ください,,Please
|
||||
1193060,くだもの,果物,Fruit
|
||||
1275640,くち,口,"mouth, opening"
|
||||
1246700,くつ,靴,Shoes
|
||||
1246740,くつした,靴下,Socks
|
||||
1592250,くに,国,Country
|
||||
1592340,くもり,曇り,cloudy weather
|
||||
1457560,くもる,曇る,"to become cloudy, to become dim"
|
||||
1154330,くらい,暗い,Gloomy
|
||||
1044070,クラス,,Class
|
||||
1046810,グラム,,Gram
|
||||
1547720,くる,来る,to come
|
||||
1323080,くるま,車,"car, vehicle"
|
||||
1287410,くろ,黒,Black
|
||||
1287420,くろい,黒い,black
|
||||
1252330,けいかん,警官,policeman
|
||||
1579100,けさ,今朝,this morning
|
||||
1350110,けす,消す,"to erase, to turn off power"
|
||||
1254760,けっこう,結構,"splendid, enough"
|
||||
1254790,けっこん,結婚,Marriage
|
||||
1255890,げつようび,月曜日,Monday
|
||||
1263400,げんかん,玄関,entry hall
|
||||
1260720,げんき,元気,"health, vitality"
|
||||
1268060,ご,五,Five
|
||||
1273270,こうえん,公園,Park
|
||||
1592970,こうさてん,交差点,intersection
|
||||
1280770,こうちゃ,紅茶,black tea
|
||||
1272500,こうばん,交番,police box
|
||||
1380440,こえ,声,Voice
|
||||
1049000,コート,,"coat, tennis court"
|
||||
1049180,コーヒー,,Coffee
|
||||
1288810,ここ,此処,Here
|
||||
1268990,ごご,午後,afternoon
|
||||
1243850,ここのか,九日,"nine days, ninth day"
|
||||
1243600,ここのつ,九つ,Nine
|
||||
1269060,ごぜん,午前,morning
|
||||
1449540,こたえる,答える,to answer
|
||||
1004500,こちら,,this person or way
|
||||
1004500,こっち,此方,this person or way
|
||||
2846389,コップ,,a glass
|
||||
1579130,ことし,今年,this year
|
||||
1264540,ことば,言葉,"word, language"
|
||||
1307850,こども,子供,Child
|
||||
1582920,この,此の,This
|
||||
1270590,ごはん,御飯,"cooked rice, meal"
|
||||
1050590,コピー,,to copy
|
||||
1289590,こまる,困る,to be worried
|
||||
2216120,これ,,This
|
||||
1289100,こんげつ,今月,this month
|
||||
1289220,こんしゅう,今週,this week
|
||||
1004880,こんな,,Such
|
||||
1289470,こんばん,今晩,this evening
|
||||
1005110,さあ,,well…
|
||||
1296970,さいふ,財布,Wallet
|
||||
1578010,さかな,魚,Fish
|
||||
1387210,さき,先,"the future, previous"
|
||||
1297210,さく,咲く,to bloom
|
||||
1297960,さくぶん,作文,"composition, writing"
|
||||
1291330,さす,差す,"to stretch out hands, to raise an umbrella"
|
||||
1299400,ざっし,雑誌,Magazine
|
||||
1291600,さとう,砂糖,Sugar
|
||||
1210360,さむい,寒い,Cold
|
||||
1293660,さらいねん,さ来年,year after next
|
||||
1579350,さん,三,Three
|
||||
1303620,さんぽ,散歩,to stroll
|
||||
1579470,し,四,Four
|
||||
1579470,よん,四,Four
|
||||
1576630,しお,塩,Salt
|
||||
1505990,しかし,然し,However
|
||||
1315920,じかん,時間,Time
|
||||
1304970,しごと,仕事,Job
|
||||
1318970,じしょ,辞書,Dictionary
|
||||
1381820,しずか,静か,Quiet
|
||||
1184140,した,下,Below
|
||||
1319210,しち,七,Seven
|
||||
1319210,なな,七,Seven
|
||||
1320760,しつもん,質問,Question
|
||||
1318290,じてんしゃ,自転車,Bicycle
|
||||
1318400,じどうしゃ,自動車,Automobile
|
||||
1310730,しぬ,死ぬ,to die
|
||||
1315140,じびき,字引,Dictionary
|
||||
1318610,じぶん,自分,Oneself
|
||||
1436560,しまる,閉まる,"to close, to be closed"
|
||||
1508590,しめる,閉める,to close something
|
||||
1436570,しめる,締める,to tie
|
||||
1005900,じゃ,,well then…
|
||||
1005900,じゃあ,,well then…
|
||||
1321900,しゃしん,写真,photograph
|
||||
1061520,シャツ,,Shirt
|
||||
1061820,シャワー,,Shower
|
||||
1579840,じゅう,十,Ten
|
||||
1579840,とお,十,Ten
|
||||
1330290,じゅぎょう,授業,"lesson, class work"
|
||||
1337270,しゅくだい,宿題,homework
|
||||
1353320,じょうず,上手,Skillful
|
||||
1580480,じょうぶ,丈夫,"strong, durable"
|
||||
1595020,しょうゆ,,soy sauce
|
||||
1358550,しょくどう,食堂,dining hall
|
||||
1420470,しる,知る,to know
|
||||
1474900,しろ,白,White
|
||||
1474910,しろい,白い,White
|
||||
1362360,しんぶん,新聞,newspaper
|
||||
1372190,すいようび,水曜日,Wednesday
|
||||
1228260,すう,吸う,"to smoke, to suck"
|
||||
1067470,スカート,,Skirt
|
||||
1277450,すき,好き,Likeable
|
||||
1348910,すくない,少ない,a few
|
||||
1430620,すぐに,,Instantly
|
||||
1348870,すこし,少し,Few
|
||||
1554370,すずしい,涼しい,Refreshing
|
||||
1070790,ストーブ,,Heater
|
||||
1072590,スプーン,,Spoon
|
||||
1073210,スポーツ,,Sport
|
||||
1074260,ズボン,,Trousers
|
||||
1334040,すむ,住む,to live in
|
||||
1073900,スリッパ,,Slippers
|
||||
1157170,する,為る,to do
|
||||
1291800,すわる,座る,to sit
|
||||
2147990,せ,背,"height, stature"
|
||||
1379380,せいと,生徒,Pupil
|
||||
1074270,セーター,,"sweater, jumper"
|
||||
1382590,せっけん,,soap
|
||||
1472740,せびろ,背広,business suit
|
||||
1237680,せまい,狭い,Narrow
|
||||
2839962,ゼロ,,Zero
|
||||
1388740,せん,千,Thousand
|
||||
1387500,せんげつ,先月,last month
|
||||
1387870,せんしゅう,先週,last week
|
||||
1387990,せんせい,先生,"teacher, doctor"
|
||||
1390980,せんたく,洗濯,Washing
|
||||
1396130,ぜんぶ,全部,All
|
||||
1399790,そうじ,掃除,"to clean, to sweep"
|
||||
1612860,そうして,,And
|
||||
1006730,そして,,And
|
||||
1006670,そこ,其処,that place
|
||||
1006780,そちら,,over there
|
||||
1006780,そっち,,over there
|
||||
1203250,そと,外,Outside
|
||||
1006830,その,其の,That
|
||||
1403830,そば,側,"near, beside"
|
||||
1245290,そら,空,Sky
|
||||
2216210,それ,,that
|
||||
1006980,それから,,after that
|
||||
1406050,それでは,,in that situation
|
||||
1413240,だいがく,大学,university
|
||||
1413890,たいしかん,大使館,embassy
|
||||
1414150,だいじょうぶ,大丈夫,all right
|
||||
1413660,だいすき,大好き,to be very likeable
|
||||
1414340,たいせつ,大切,important
|
||||
1412640,だいどころ,台所,kitchen
|
||||
1415000,たいへん,大変,difficult situation
|
||||
1283190,たかい,高い,"tall, expensive"
|
||||
1415870,たくさん,,many
|
||||
1076190,タクシー,,taxi
|
||||
1338180,だす,出す,to put out
|
||||
1597040,たつ,立つ,to stand
|
||||
1335640,たて,縦,"length,height"
|
||||
1257540,たてもの,建物,building
|
||||
1207240,たのしい,楽しい,enjoyable
|
||||
1548370,たのむ,頼む,to ask
|
||||
1597150,たばこ,,"tobacco,cigarettes"
|
||||
1407980,たぶん,多分,probably
|
||||
1358340,たべもの,食べ物,food
|
||||
1358280,たべる,食べる,to eat
|
||||
1549140,たまご,卵,egg
|
||||
1416830,だれ,誰,who
|
||||
1416840,だれか,誰か,somebody
|
||||
1419110,たんじょうび,誕生日,birthday
|
||||
2546180,だんだん,,gradually
|
||||
1347750,ちいさい,小さい,little
|
||||
2136180,ちいさな,小さな,little
|
||||
1242130,ちかい,近い,near
|
||||
1158880,ちがう,違う,to differ
|
||||
1242160,ちかく,近く,near
|
||||
1420900,ちかてつ,地下鉄,underground train
|
||||
1421290,ちず,地図,map
|
||||
1422720,ちゃいろ,茶色,brown
|
||||
1597530,ちゃわん,,rice bowl
|
||||
1427340,ちょうど,丁度,exactly
|
||||
1163940,ちょっと,,somewhat
|
||||
2225040,ついたち,一日,first of month
|
||||
1305990,つかう,使う,to use
|
||||
1483740,つかれる,疲れる,to get tired
|
||||
1316380,つぎ,次,next
|
||||
1422970,つく,着く,to arrive at
|
||||
1220210,つくえ,机,desk
|
||||
1597890,つくる,作る,to make
|
||||
1495770,つける,付ける,to turn on
|
||||
1240825,つとめる,勤める,to work for someone
|
||||
1008190,つまらない,,boring
|
||||
1556730,つめたい,冷たい,cold to the touch
|
||||
1236070,つよい,強い,powerful
|
||||
1327190,て,手,hand
|
||||
1078750,テープ,,tape
|
||||
1078630,テーブル,,table
|
||||
1078810,テープレコーダー,,tape recorder
|
||||
1598550,でかける,出かける,to go out
|
||||
1327720,てがみ,手紙,letter
|
||||
1340450,できる,出来る,to be able to
|
||||
1338850,でぐち,出口,exit
|
||||
1079760,テスト,,test
|
||||
1008450,では,,with that...
|
||||
1083590,デパート,,department store
|
||||
1008460,でも,,but
|
||||
1338240,でる,出る,"to appear,to leave"
|
||||
1080510,テレビ,,television
|
||||
1438690,てんき,天気,weather
|
||||
1443000,でんき,電気,"electricity,electric light"
|
||||
1443530,でんしゃ,電車,electric train
|
||||
1443840,でんわ,電話,telephone
|
||||
1266970,と,戸,Japanese style door
|
||||
1087820,ドア,,Western style door
|
||||
1084810,トイレ,,toilet
|
||||
1008910,どう,如何,"how,in what way"
|
||||
1466940,どうして,,for what reason
|
||||
1189130,どうぞ,,please
|
||||
1451470,どうぶつ,動物,animal
|
||||
1009000,どうも,,thanks
|
||||
1177800,とおい,遠い,far
|
||||
1335000,とおか,十日,"ten days,the tenth day"
|
||||
1598680,ときどき,時々,sometimes
|
||||
1316140,とけい,時計,"watch,clock"
|
||||
1577140,どこ,,where
|
||||
1343100,ところ,所,place
|
||||
1468060,とし,年,year
|
||||
1370420,としょかん,図書館,library
|
||||
1189360,どちら,,which of two
|
||||
1189360,どっち,,which
|
||||
1008630,とても,,very
|
||||
1189370,どなた,,who
|
||||
1555830,となり,隣,next door to
|
||||
1920240,どの,何の,which
|
||||
1429700,とぶ,飛ぶ,"to fly,to hop"
|
||||
1310620,とまる,止まる,to come to a halt
|
||||
1540170,ともだち,友達,friend
|
||||
1445590,どようび,土曜日,Saturday
|
||||
1430250,とり,鳥,bird
|
||||
1253020,とりにく,とり肉,chicken meat
|
||||
1326980,とる,取る,to take something
|
||||
1298790,とる,撮る,to take a photo or record a film
|
||||
1009290,どれ,,which (of three or more)
|
||||
1089890,ナイフ,,knife
|
||||
1423310,なか,中,middle
|
||||
1429750,ながい,長い,long
|
||||
1532870,なく,鳴く,"animal noise. to chirp, roar or croak etc."
|
||||
1529530,なくす,無くす,to lose something
|
||||
1577120,なぜ,,why
|
||||
1191320,なつ,夏,summer
|
||||
1191420,なつやすみ,夏休み,summer holiday
|
||||
1582300,など,,et cetera
|
||||
1319220,ななつ,七つ,seven
|
||||
1579630,なのか,七日,"seven days,the seventh day"
|
||||
1531710,なまえ,名前,name
|
||||
1333070,ならう,習う,to learn
|
||||
1508380,ならぶ,並ぶ,"to line up,to stand in a line"
|
||||
1508390,ならべる,並べる,"to line up,to set up"
|
||||
1375610,なる,,to become
|
||||
2846738,なん,何,what
|
||||
1577100,なに,何,what
|
||||
1461140,に,二,two
|
||||
1463480,にぎやか,賑やか,"bustling,busy"
|
||||
1463520,にく,肉,meat
|
||||
1380840,にし,西,west
|
||||
1464900,にちようび,日曜日,Sunday
|
||||
1195430,にもつ,荷物,luggage
|
||||
1091500,ニュース,,news
|
||||
1436130,にわ,庭,garden
|
||||
1416400,ぬぐ,脱ぐ,to take off clothes
|
||||
1183300,ぬるい,温い,luke warm
|
||||
1092820,ネクタイ,,"tie,necktie"
|
||||
1467640,ねこ,猫,cat
|
||||
1360010,ねる,寝る,"to go to bed,to sleep"
|
||||
1093450,ノート,,"notebook,exercise book"
|
||||
1352570,のぼる,登る,to climb
|
||||
1600430,のみもの,飲み物,a drink
|
||||
1169870,のむ,飲む,to drink
|
||||
1355120,のる,乗る,"to get on,to ride"
|
||||
1313000,は,歯,tooth
|
||||
1100760,パーティー,,party
|
||||
1010080,はい,,yes
|
||||
1201940,はいざら,灰皿,ashtray
|
||||
1465590,はいる,入る,"to enter,to contain"
|
||||
1546590,はがき,葉書,postcard
|
||||
1607260,はく,履く,"to wear,to put on trousers"
|
||||
1585650,はこ,箱,box
|
||||
1237410,はし,橋,bridge
|
||||
1476410,はし,箸,chopsticks
|
||||
1307500,はじまる,始まる,to begin
|
||||
1342540,はじめ,初め,beginning
|
||||
1342540,はじめ,始め,beginning
|
||||
1342550,はじめて,初めて,for the first time
|
||||
1402540,はしる,走る,to run
|
||||
1098390,バス,,bus
|
||||
1098620,バター,,butter
|
||||
1600790,はたち,二十歳,"20 years old,20th year"
|
||||
1451150,はたらく,働く,to work
|
||||
1583090,はち,八,eight
|
||||
1600850,はつか,二十日,"twenty days,twentieth"
|
||||
1194500,はな,花,flower
|
||||
1486720,はな,鼻,nose
|
||||
1600900,はなし,話,"talk,story"
|
||||
1562350,はなす,話す,to speak
|
||||
1404975,はやい,早い,early
|
||||
1404975,はやい,速い,quick
|
||||
1341000,はる,春,spring
|
||||
1427900,はる,貼る,to stick
|
||||
1376460,はれ,晴れ,clear weather
|
||||
1376470,はれる,晴れる,to be sunny
|
||||
1478750,はん,半,half
|
||||
1482110,ばん,晩,evening
|
||||
1103090,パン,,bread
|
||||
1096420,ハンカチ,,handkerchief
|
||||
1482290,ばんごう,番号,number
|
||||
1601340,ばんごはん,晩御飯,evening meal
|
||||
1479890,はんぶん,半分,half minute
|
||||
1447440,ひがし,東,east
|
||||
1169250,ひく,引く,to pull
|
||||
1419370,ひく,弾く,"to play an instrument with strings, including piano"
|
||||
1434180,ひくい,低い,"short,low"
|
||||
1485470,ひこうき,飛行機,aeroplane
|
||||
1290800,ひだり,左,left hand side
|
||||
1580640,ひと,人,person
|
||||
1160820,ひとつ,一つ,one
|
||||
1162130,ひとつき,一月,one month
|
||||
1576150,ひとり,一人,one person
|
||||
1577280,ひま,暇,free time
|
||||
1488000,ひゃく,百,hundred
|
||||
1490220,びょういん,病院,hospital
|
||||
1490230,びょうき,病気,illness
|
||||
1426250,ひる,昼,"noon, daytime"
|
||||
1602340,ひるごはん,昼御飯,midday meal
|
||||
1278410,ひろい,広い,"spacious,wide"
|
||||
1109380,フィルム,,roll of film
|
||||
1499690,ふうとう,封筒,envelope
|
||||
1115150,プール,,swimming pool
|
||||
1110110,フォーク,,fork
|
||||
1370760,ふく,吹く,to blow
|
||||
1500940,ふく,服,clothes
|
||||
1461160,ふたつ,二つ,two
|
||||
1457440,ぶたにく,豚肉,pork
|
||||
1582670,ふたり,二人,two people
|
||||
1462900,ふつか,二日,"two days, second day of the month"
|
||||
1408180,ふとい,太い,fat
|
||||
1446070,ふゆ,冬,winter
|
||||
1282790,ふる,降る,"to fall, e.g. rain or snow"
|
||||
1265070,ふるい,古い,old (not used for people)
|
||||
1500100,ふろ,風呂,bath
|
||||
1505470,ぶんしょう,文章,"sentence,text"
|
||||
1120410,ページ,,page
|
||||
1185200,へた,下手,unskillful
|
||||
1119650,ベッド,,bed
|
||||
1120990,ペット,,pet
|
||||
1499320,へや,部屋,room
|
||||
1512070,へん,辺,area
|
||||
1121380,ペン,,pen
|
||||
1512670,べんきょう,勉強,to study
|
||||
1512610,べんり,便利,"useful, convenient"
|
||||
1519170,ぼうし,帽子,hat
|
||||
1123590,ボールペン,,ball-point pen
|
||||
1203260,ほか,,"other, the rest"
|
||||
1124970,ポケット,,pocket
|
||||
1547330,ほしい,欲しい,want
|
||||
1125150,ポスト,,post
|
||||
1295510,ほそい,細い,thin
|
||||
1182880,ボタン,,button
|
||||
1122650,ホテル,,hotel
|
||||
1522150,ほん,本,book
|
||||
1522980,ほんだな,本棚,bookshelves
|
||||
1523060,ほんとう,本当,truth
|
||||
1524700,まいあさ,毎朝,every morning
|
||||
1584350,まいげつ,毎月,every month
|
||||
1584350,まいつき,毎月,every month
|
||||
1524690,まいしゅう,毎週,every week
|
||||
1524720,まいにち,毎日,every day
|
||||
1584360,まいねん,毎年,every year
|
||||
1584360,まいとし,毎年,every year
|
||||
1524730,まいばん,毎晩,every night
|
||||
1392580,まえ,前,before
|
||||
1239730,まがる,曲る,"to turn,to bend"
|
||||
1495000,まずい,不味い,unpleasant
|
||||
1524930,また,又,"again,and"
|
||||
1527110,まだ,,"yet,still"
|
||||
1603990,まち,町,"town,city"
|
||||
1410590,まつ,待つ,to wait
|
||||
1580600,まっすぐ,,"straight ahead,direct"
|
||||
2784220,マッチ,,match
|
||||
1401400,まど,窓,window
|
||||
1604230,まるい,丸い,"round,circular"
|
||||
1604230,まるい,円い,"round,circular"
|
||||
1584460,まん,万,ten thousand
|
||||
1526360,まんねんひつ,万年筆,fountain pen
|
||||
1523940,みがく,磨く,"to brush teeth, to polish"
|
||||
1171010,みぎ,右,right side
|
||||
1418620,みじかい,短い,short
|
||||
1371260,みず,水,water
|
||||
1582120,みせ,店,shop
|
||||
1259210,みせる,見せる,to show
|
||||
1454080,みち,道,street
|
||||
1301330,みっか,三日,"three days, third day of the month"
|
||||
1299740,みっつ,三つ,three
|
||||
1555300,みどり,緑,green
|
||||
1202170,みなさん,皆さん,everyone
|
||||
1459870,みなみ,南,south
|
||||
1317170,みみ,耳,ear
|
||||
1259290,みる,見る,"to see, to watch"
|
||||
1259290,みる,観る,"to see, to watch"
|
||||
1202150,みんな,,everyone
|
||||
1561470,むいか,六日,"six days, sixth day of the month"
|
||||
1277140,むこう,向こう,over there
|
||||
1460850,むずかしい,難しい,difficult
|
||||
1585315,むっつ,六つ,six
|
||||
1406820,むら,村,village
|
||||
1604890,め,目,eye
|
||||
1132570,メートル,,metre
|
||||
1577670,めがね,眼鏡,glasses
|
||||
1012480,もう,,already
|
||||
2005860,もういちど,もう一度,again
|
||||
1534890,もくようび,木曜日,Thursday
|
||||
1315720,もつ,持つ,to hold
|
||||
1012620,もっと,,more
|
||||
1502390,もの,物,thing
|
||||
1584800,もん,門,gate
|
||||
1536010,もんだい,問題,problem
|
||||
1476960,やおや,八百屋,greengrocer
|
||||
1537370,やさい,野菜,vegetable
|
||||
1157000,やさしい,易しい,"easy, simple"
|
||||
1153670,やすい,安い,cheap
|
||||
1227500,やすみ,休み,"rest,holiday"
|
||||
1227560,やすむ,休む,to rest
|
||||
1583095,やっつ,八つ,eight
|
||||
1302680,やま,山,mountain
|
||||
1012980,やる,遣る,to do
|
||||
1542790,ゆうがた,夕方,evening
|
||||
1584910,ゆうはん,夕飯,dinner
|
||||
1542430,ゆうびんきょく,郵便局,post office
|
||||
1542640,ゆうべ,昨夜,last night
|
||||
1541620,ゆうめい,有名,famous
|
||||
1386500,ゆき,雪,snow
|
||||
1578850,ゆく,行く,to go
|
||||
1013050,ゆっくり,,slowly
|
||||
1476920,ようか,八日,"eight days, eighth day of the month"
|
||||
1546020,ようふく,洋服,western-style clothes
|
||||
1605870,よく,良く,"often, well"
|
||||
1180570,よこ,横,"beside,side,width"
|
||||
1307320,よっか,四日,"four days, fouth day of the month"
|
||||
1307040,よっつ,四つ,four
|
||||
1266440,よぶ,呼ぶ,"to call out,to invite"
|
||||
1456360,よむ,読む,to read
|
||||
1536350,よる,夜,"evening,night"
|
||||
1324520,よわい,弱い,weak
|
||||
1547900,らいげつ,来月,next month
|
||||
1548010,らいしゅう,来週,next week
|
||||
1548220,らいねん,来年,next year
|
||||
1138860,ラジオ,,radio
|
||||
1138960,ラジカセ,,radio cassette player
|
||||
1138900,ラジオカセット,,radio cassette player
|
||||
1551790,りっぱ,立派,splendid
|
||||
1552750,りゅうがくせい,留学生,overseas student
|
||||
1602710,りょうしん,両親,both parents
|
||||
1554310,りょうり,料理,cuisine
|
||||
1553170,りょこう,旅行,travel
|
||||
1557630,れい,零,zero
|
||||
1557110,れいぞうこ,冷蔵庫,refrigerator
|
||||
1144940,レコード,,record
|
||||
1145310,レストラン,,restaurant
|
||||
1559160,れんしゅう,練習,to practice
|
||||
1560670,ろうか,廊下,corridor
|
||||
1585310,ろく,六,six
|
||||
1148640,ワイシャツ,,business shirt
|
||||
1324300,わかい,若い,young
|
||||
1606560,わかる,分かる,to be understood
|
||||
1519210,わすれる,忘れる,to forget
|
||||
2842390,わたくし,私,"(humble) I,myself"
|
||||
1311110,わたし,私,"I,myself"
|
||||
1444610,わたす,渡す,to hand over
|
||||
1444680,わたる,渡る,to go across
|
||||
1151260,わるい,悪い,bad
|
||||
1013190,より,,Used for comparison.
|
||||
1516930,ほう,方,Used for comparison.
|
||||
|
1
apps/learn/halkyon_learn_curator/data/kanji-jlpt.json
Normal file
1
apps/learn/halkyon_learn_curator/data/kanji-jlpt.json
Normal file
File diff suppressed because one or more lines are too long
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue