本文へ移動

Jisho辞書

JMdictの単語を読み、表記、英語の意味、含まれる漢字、ローマ字から引け、必要な小さなチャンクだけを取得します。初期値はセーフモードで、各語義にはJMdictの印が付き、「フィルターなし」も選べます。2,999字の漢字の学年、JLPTレベル、読み、意味、形の似た漢字の組も収め、表ごとに独立したエントリポイントがあります。

「Jisho」は「辞書」のローマ字表記です。日本語の単語と漢字を収めています。 名前について(英語)

目次

やり方

テキストを読む

日本語のテキストを最長一致で単語に分け、各語にふりがな、意味、JLPTレベル、漢字の学年を付けます。見つからなかったものを一覧にし、学習リストをCSVかTSVで取り出します。

テキストを単語に分ける

readTextはテキストを受け取り、その部分を順番どおりに返します。単語にはふりがな、読み、意味、レベルが付きます。どの単語にも当てはまらない日本語はunknown、空白、句読点、アルファベット、数字はotherです。

import {readText} from "@johnmorrisdotca/jisho/words";
const result=await readText("私は昨日、友達と学校に行きました。");
for (const token of result.tokens) console.log(token.kind,token.text,token.reading,token.level,token.meaning.slice(0,20));
console.log(result.unknown);
word 私 わたし N4 I, me
word は は null indicates sentence t
word 昨日 きのう N3 yesterday
other 、  null 
word 友達 ともだち N3 friend, companion
word と と null if, when; and, as we
word 学校 がっこう N5 school
word に に null at, in, on; to, towa
word 行きました いきました N5 to go, to move (towa
other 。  null 
[]

ReadTokenには、text(書かれたとおり)、kind(word、unknown、other)、word(辞書の単語)、form(テキストの綴りでの辞書形)、path(辞書形からどう変化したか。「行きました」は「行く」の["polite", "past"])、furigana(テキストを部分に分け、漢字の部分にかなを付けたもの)、reading(全体をひらがなで)、meaning、level、kanji、alternativesがあります。部分をつなげるとresult.textになるので、ページは各語をボタンにしてテキストを描けます。

import {readText} from "@johnmorrisdotca/jisho/words";
const result=await readText("食べなかった");
const [token]=result.tokens;
console.log(token?.furigana);
console.log(token?.form,token?.path);
console.log(token?.kanji);
[ { text: '食', reading: 'た' }, { text: 'べなかった' } ]
食べる [ 'negative', 'past' ]
[ { kanji: '食', grade: 2, level: 'N5' } ]

語の選び方

readTextは、各位置から、辞書に語がある最も長い部分(そのままの形か、語の活用形)を取ります(活用した形の単語を引くを参照)。さらに、長いほうの数候補について、その次に来る語の長さも比べるので、「今日はいい天気」は「今日」「は」「いい天気」に分かれ、「今日」「はい」「い天気」にはなりません。辞書にたくさんある珍しい語に引きずられないよう、次の3つの決まりがあります。

  • 部分が語として認められるのは、その語がよく使う語であるか、漢字を含むか、4文字以上のときです。かな1〜3文字の珍しい語は認められません。
  • カタカナ1文字は語になりません。名前の途中とみなします。
  • かなだけの文字列は、ふつうかなで書く語として読みます。「は」は助詞であり、「葉」や「歯」ではありません。

同じ長さの候補では、最もよく使う語を取り、ほかは読みとともにalternativesに入ります。漢字があって読みが複数ある語は、JMdictが順位を付けた中で最もよく使う読みになります。漢字1字の語では、これが違う読みになることがあります(「本」は「ほん」より先に「もと」)。そのときはalternativesにほかの読みがあります。

レベル

Jishoには、漢字のJLPTレベルと学年はありますが、単語にはありません。単語のlevelは、含まれる漢字のうち最も難しいレベル(N1はN5より難しい)です。漢字がない語や、Wallerのリストにどの漢字もない語はnullです。kanjiには、テキストの各漢字の学年(1〜6、中学以降は8、人名用は9と10、表に行がない漢字はnull)とレベルが入ります。

ふりがな

furiganaはルビに必要なものです。readingがある部分は漢字で、それ以外はかなです。活用した形では、2つの綴りが同じところまでは辞書形の部分をそのまま使います。「食べる」(たべる)からの「食べなかった」は、「食」(た)と「べなかった」です。「来」は語尾に合わせた読み(こない、きます、くれば)になります。furiganaOf(written, reading)とfuriganaOfSurface(surface, base, reading)は、単独でも使えます。

見つからなかったもの

どの語にも当てはまらない部分はresult.unknownに1つずつ並び、tokensでも元の位置に残ります。セーフモードでは、モードが除く語も見つからないので、その文字列も並びます。区別するにはフィルターなしで読んでください。名前、新しい語、打ち間違いが、よくある未知の語です。

学習リスト

studyList(result)は、各語を1回ずつ、出てきた順に、読み、意味、レベル、漢字の学年のうち最も高いもの、テキストに出てきた回数、最初に出てきた形とともに返します。{ kanjiOnly: true }にすると、助詞など漢字のない語を除きます。studyListText(rows, "csv")は見出し行付きで、必要なものを引用符で囲み、表計算ソフト向けです。"tsv"はタブ区切りで見出しなしなので、表計算ソフトへの貼り付けや、暗記カードのソフトへの取り込みに使えます。

import {readText,studyList,studyListText} from "@johnmorrisdotca/jisho/words";
const result=await readText("私は食べなかった。私は食べた。");
console.log(studyListText(studyList(result,{kanjiOnly:true}),"csv"));
written,reading,meaning,level,grade,count,example
私,わたし,"I, me",N4,6,2,私
食べる,たべる,"to eat; to live on (e.g. a salary), to live off",N5,2,2,食べなかった

かかる量と限界

Jisho自身のチャンク(それぞれgzip圧縮後で約25 kB)を、部分が必要とするだけ取得します。15文字の最初の文で約30個でした。取得したチャンクは(同時に64個まで)保持されるので、次のテキストでは多くが再利用されます。読むのはMAX_READ_LENGTH(5,000)文字までで、切ったときはtruncatedで分かります。文法は持たず、文の最もよい読み方ではなく最も長い語を選ぶので、珍しい長い語が選ばれることがあり、名前は見つからないか小さな語に分かれることがあります。チャンクの取得のほかは、何も保存せず、どこにも送りません。

関連

ソースを見るGitHub で編集@johnmorrisdotca/jisho 2.11.0 のソースから作成しました。

この日本語は、まだ日本語を母語とする方の確認を受けていません。訂正を歓迎します。