Module: JLPT::Exporter

Defined in:
lib/jlpt/formatters/exporter.rb

Overview

Learner Tools and Anki Flashcard Exporter.

Identifies new / unknown vocabulary above a learner's current target level and exports flashcards in Anki TSV/CSV format.

Constant Summary collapse

LEVEL_ORDER =
{ n5: 1, n4: 2, n3: 3, n2: 4, n1: 5, non_jlpt: 6, out_of_jlpt: 6 }.freeze

Class Method Summary collapse

Class Method Details

.find_unknown(text, target_level: :n4) ⇒ Array<Hash>

Extract vocabulary words that exceed the learner's current level

Parameters:

  • text (String)

    Japanese text

  • target_level (Symbol, String) (defaults to: :n4)

    learner's mastered level (:n5, :n4, :n3, :n2)

Returns:

  • (Array<Hash>)

    array of unknown word hashes



18
19
20
21
22
23
24
25
26
# File 'lib/jlpt/formatters/exporter.rb', line 18

def find_unknown(text, target_level: :n4)
  target_val = LEVEL_ORDER[target_level.to_s.downcase.to_sym] || 2
  classified = VocabClassifier.classify(text)

  unknown = classified.flat_map do |lvl, words|
    extract_words_above_target(lvl, words, target_val)
  end
  unknown.uniq { |item| item[:word] }
end

.to_anki_tsv(text, target_level: :n4) ⇒ String

Export unknown words as Anki tab-separated values (TSV)

Parameters:

  • text (String)

    Japanese text

  • target_level (Symbol, String) (defaults to: :n4)

Returns:

  • (String)

    TSV formatted string



33
34
35
36
37
38
39
40
41
# File 'lib/jlpt/formatters/exporter.rb', line 33

def to_anki_tsv(text, target_level: :n4)
  items = find_unknown(text, target_level: target_level)
  return '' if items.empty?

  lines = items.map do |item|
    "#{item[:word]}\t#{item[:word]}[#{item[:reading]}]\t#{item[:level].to_s.upcase}"
  end
  lines.join("\n")
end