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
답글 남기기