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
-
.find_unknown(text, target_level: :n4) ⇒ Array<Hash>
Extract vocabulary words that exceed the learner's current level.
-
.to_anki_tsv(text, target_level: :n4) ⇒ String
Export unknown words as Anki tab-separated values (TSV).
Class Method Details
.find_unknown(text, target_level: :n4) ⇒ Array<Hash>
Extract vocabulary words that exceed the learner's current level
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)
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 |