[카테고리:] 미분류

  • 사전 프로젝트

    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