사전 프로젝트

0) 준비

# jq 없으면 설치 (Ubuntu)
sudo apt-get update && sudo apt-get install -y jq sqlite3

1) 파일 확인

FILE=enhanced_massive_dict_20250807_174621.txt   # 너의 실제 파일명으로 바꿔
jq '.metadata | {title, created_at, statistics}' "$FILE"
jq '.words | length' "$FILE"                      # 단어 개수

2) CSV/TSV로 내보내기 (엑셀/구글시트/퀴즐렛용)

# CSV (쉼표 구분)
jq -r '["word","korean","age_group","part_of_speech","example"],
       (.words[] | [ .word, .korean, .age_group, .part_of_speech, .example ] )
       | @csv' "$FILE" > vocab.csv

# TSV (탭 구분, Anki/엑셀 둘 다 편함)
jq -r '["word","korean","age_group","part_of_speech","example"],
       (.words[] | [ .word, .korean, .age_group, .part_of_speech, (.example|gsub("\t";" ")) ] )
       | @tsv' "$FILE" > vocab.tsv

3) 연령대별로 분리 저장

for g in elementary middle high adult professional; do
  jq -r --arg g "$g" '
    ["word","korean","age_group","part_of_speech","example"],
    (.words[] | select(.age_group==$g) | [ .word, .korean, .age_group, .part_of_speech, .example ])
    | @csv' "$FILE" > "vocab_${g}.csv"
done

4) 접두사/품사별 분리 예시

# 접두사 'zy'로 시작하는 단어만
jq -r '["word","korean","pos","example"],
       (.words[] | select(.prefix=="zy") | [ .word, .korean, .part_of_speech, .example ])
       | @csv' "$FILE" > vocab_prefix_zy.csv

# 품사별(명사만)
jq -r '["word","korean","pos","example"],
       (.words[] | select((.part_of_speech|ascii_downcase)=="noun") | [ .word, .korean, .part_of_speech, .example ])
       | @csv' "$FILE" > vocab_nouns.csv

5) SQLite 단어장 DB 만들기 (앱/웹서버에서 바로 쓰기 좋음)

DB=dict.db

# 5-1) 스키마 생성
sqlite3 "$DB" <<'SQL'
DROP TABLE IF EXISTS words;
CREATE TABLE words(
  id INTEGER PRIMARY KEY,
  word TEXT NOT NULL,
  korean TEXT,
  age_group TEXT,
  part_of_speech TEXT,
  example TEXT,
  prefix TEXT,
  collected_at TEXT,
  enhanced_at TEXT
);
CREATE INDEX idx_words_word ON words(word);
CREATE INDEX idx_words_age ON words(age_group);
CREATE INDEX idx_words_prefix ON words(prefix);
SQL

# 5-2) JSON → TSV → SQLite import
jq -r '
  .words[] |
  [ .word,
    (.korean//""),
    (.age_group//""),
    (.part_of_speech//""),
    ((.example//"")|gsub("\t";" ")),
    (.prefix//""),
    (.collected_at//""),
    (.enhanced_at//"")
  ] | @tsv' "$FILE" > words.tsv

sqlite3 "$DB" <<'SQL'
.mode tabs
.import words.tsv words
SQL

# 5-3) 확인
sqlite3 "$DB" 'SELECT word,korean,age_group,part_of_speech FROM words ORDER BY word LIMIT 10;'

6) Anki용 간단 카드(앞: 영어단어 / 뒤: 뜻+예문) TSV

# 기본(모든 단어)
jq -r '
  .words[] |
  [ .word,
    ([("뜻: "+(.korean//"")),
      ("품사: "+(.part_of_speech//"")),
      ("레벨: "+(.age_group//"")),
      ("예문: "+((.example//"")|gsub("\t";" "))) ]
     | join("<br>"))
  ] | @tsv' "$FILE" > anki_cards.tsv

# 연령대별 예: elementary만
jq -r '
  .words[] | select(.age_group=="elementary") |
  [ .word,
    ([(.korean//""), (.example//"")]|join("<br>"))
  ] | @tsv' "$FILE" > anki_elementary.tsv

Anki에서 “탭 구분 텍스트 가져오기”로 불러오면 바로 카드 생성돼요.

7) 터미널 미니 사전(빠른 검색)

# 단어 포함 검색 (예: 'zyz')
TERM=zyz
jq -r --arg t "$TERM" '
  .words[] | select(.word|test($t;"i")) |
  "\(.word) — \(.korean//"-") [\(.part_of_speech//"-"), \(.age_group//"-")] :: \(.example//"-")"
' "$FILE" | head -50

코멘트

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다