Skip to main content

บันทึกการเปลี่ยนแปลง

การเปลี่ยนแปลงสำคัญทุกรายการของ kham ตาม Keep a Changelog และ Semantic Versioning

v0.8.2 2026-05-03 Release ↗

เพิ่มเติม — ข้อมูล kham-core

  • ขยาย NE gazetteer — 36,668 → 38,950 รายการ (+2,280 จาก pythainlp/thainer-corpus-v2, CC0): +403 PERSON, +793 PLACE, +1,084 ORG
  • ขยายตาราง POS — 8,993 → 11,404 รายการ (+2,407 จาก UD_Thai-PUD, CC-BY-SA-3.0): +884 PROPN, +665 VERB, +662 NOUN, +134 ADJ และอื่นๆ ผ่านการแม็ป UPOS สู่ระบบ 13 หมวดของ kham
  • wiki_freq.tsv — ไฟล์ความถี่คำเสริม (CC-BY-SA-4.0) จาก 500 บทความ Thai Wikipedia; 19,890 รายการ แยกเก็บจาก CC0 tnc_freq.txt; ยังไม่ได้โหลดใน FreqMap
v0.8.1 2026-05-03 Release ↗

แก้ไข

  • Docker Hub image tags — แก้ไข tag ให้ใช้รูปแบบที่มีคำนำหน้า v (เช่น v0.8.1); เอกสารก่อนหน้านี้แสดง tag โดยไม่มีคำนำหน้า v
v0.8.0 2026-05-02 Release ↗

เพิ่มเติม — kham-core

  • Token::confidence: f32 — คะแนนความมั่นใจในการตัดคำสำหรับทุก token; 0.0 สำหรับ Unknown tokens, 1.0 สำหรับคำที่อยู่ในพจนานุกรมอย่างชัดเจน; ค่ากลางสะท้อนความถี่ TNC และความคลุมเครือของขอบเขต ถ่ายทอดไปยัง FtsToken::confidence และ binding ทั้งหมด
  • TokenStream / Tokenizer::segment_stream(text) — streaming iterator พร้อม next_word(), next_known() และ next_above_confidence(f32)
  • SpellChecker::did_you_mean(word) — คืน None หากคำอยู่ในพจนานุกรม, Some(best_match) หากไม่พบ
  • SpellChecker::correct_text(text) — ตัดคำ input แล้วแทนที่ Unknown token (≥ 2 อักขระ) ทุกตัวด้วยการแก้ไขคำสะกดที่ดีที่สุด; token ที่รู้จักผ่านไปตามเดิม
  • RomanizationMap::romanize_sentence(text) — ตัดคำและแปลง RTGS ทุก token ภาษาไทย/Named; token ที่ไม่ใช่ภาษาไทย (ตัวเลข, Latin, เครื่องหมายวรรคตอน, ช่องว่าง) ผ่านไปตามเดิม
  • KeyExtractor::extract_phrases(text, max_n) — วลีสำคัญแบบ bigram และ trigram จาก content token ที่อยู่ติดกัน คะแนน TF × average-IDF; เสริมการสกัดคำเดี่ยวด้วย extract()

เพิ่มเติม — bindings (Python / WASM / C FFI)

  • spell_did_you_mean / kham_spell_did_you_mean — ตรวจสอบการแก้ไขคำเดี่ยว เปิดใช้งานใน binding ทั้งสาม
  • spell_correct_text / kham_spell_correct_text — แก้ไขคำสะกดทั้งข้อความ เปิดใช้งานใน binding ทั้งสาม
  • romanize_sentence / kham_romanize_sentence — แปลง RTGS ระดับประโยค เปิดใช้งานใน binding ทั้งสาม
  • extract_phrases / kham_extract_phrases — สกัดวลีสำคัญ เปิดใช้งานใน binding ทั้งสาม
  • segment_above_confidence(text, min_confidence) (Python / WASM) — filter สะดวกที่คืนเฉพาะ token ที่มี confidence ≥ threshold ผ่าน segment_stream
  • field confidence บน Token — เปิดใช้งานใน Python, WASM และ C FFI (KhamToken) เป็น float / f32

เพิ่มเติม — kham-cli

  • --confidence — แสดง conf=X.XX ต่อ token ในโหมด text output
  • --min-confidence <MIN> — กรอง output เฉพาะ token ที่มี confidence ≥ MIN ผ่าน segment_stream
  • --format text|json|csv — output แบบ structured สำหรับทั้งโหมด basic และ FTS
  • --romanize — ตัดคำและแปลง Thai เป็น RTGS Latin; token ที่ไม่ใช่ภาษาไทยผ่านไปตามเดิม
  • --spell — โหมดตรวจสอบคำสะกด: แสดง suggestions ที่จัดอันดับสำหรับคำ input โดยใช้ Levenshtein + phonetic re-ranking
  • --keywords — โหมด keyword: แสดงคำสำคัญและวลีสำคัญจากข้อความพร้อมคะแนน TF × IDF
  • --top-n <N> — จำนวนผลลัพธ์สูงสุดใน --spell หรือ --keywords (ค่าเริ่มต้น: 10)
v0.7.0 2026-05-02 Release ↗

เพิ่มเติม — kham-pg

  • การกรอง stopword — คำไวยากรณ์ภาษาไทย (กับ, ใน, ของ, …) จะถูกกรองออกจาก tsvector โดยอัตโนมัติผ่าน kham_fts_dict ลด noise ใน index โดยไม่ต้องตั้งค่าเพิ่มเติม
  • การแปลงตัวเลขไทย — ตัวเลขไทย (๑๒๓) จะถูก index พร้อมกับรูป ASCII (123) ในตำแหน่งเดียวกัน ทำให้ค้นหาด้วย plainto_tsquery('kham', '123') แล้วเจอเอกสารที่มี ๑๒๓ ได้ทันที
  • การขยาย POS lexeme — token ที่รู้ชนิดคำพูดจะมี lexeme pos_<tag> เพิ่ม (เช่น pos_noun, pos_verb) กรองตามชนิดคำด้วย 'pos_verb'::tsquery
  • kham_fts_dict_udom83 และ kham_fts_dict_metasound — dictionary variants สองแบบที่ใช้อัลกอริทึม udom83 และ MetaSound สำหรับการจับเสียงที่ละเอียดกว่า
  • kham_tsvector(text) และ kham_tsquery(text) — SQL STABLE helper ย่อ; ใช้แทน to_tsvector('kham', …) และ plainto_tsquery('kham', …) เพื่อลดความซ้ำซ้อนของชื่อ configuration
  • StopwordSet::builtin_with_extra(extra) (kham-core) — รวม built-in stopword 1 029 คำกับคำเพิ่มเติมของผู้ใช้ในครั้งเดียว
  • FtsTokenizer::segment_stream(text) (kham-core) — คืน FtsTokenStream iterator พร้อม next_index_token() สำหรับข้าม stopword อัตโนมัติ

เปลี่ยนแปลง — kham-pg

  • การ mapping token ตัวเลข — configuration kham เปลี่ยน token ชนิด number ให้ผ่าน kham_fts_dict แทน kham_dict รัน ALTER EXTENSION kham_pg UPDATE เพื่อ upgrade ฐานข้อมูลที่มีอยู่
v0.6.0 2026-05-01 Release ↗

เพิ่มเติม — kham-core

  • SpellCheckerSpellChecker::builtin().suggestions(word, n) คืนค่า candidates ที่จัดอันดับแล้ว (Levenshtein ≤ 2, lk82 soundex match, คะแนนความถี่ TNC)
  • KeyExtractorKeyExtractor::builtin().extract(text, n) คืนคำสำคัญ top-N โดยคะแนน TF × IDF-proxy ตัด stopword ออกอัตโนมัติ
  • FtsTokenizerBuilder::dict_merge() — method builder ใหม่สำหรับเพิ่มคำพิเศษตอนสร้าง FtsTokenizer (fast overlay ไม่ rebuild trie)

เพิ่มเติม — bindings (WASM / Python / C FFI)

  • spell_suggestions / kham_spell_suggestions — เปิดใช้งานใน kham-wasm, kham-python และ kham-capi พร้อม result type SpellSuggestion / KhamSpellList
  • extract_keywords / kham_keywords — เปิดใช้งานในทุก binding พร้อม Keyword / KhamKeywordList
  • Live demo — แท็บ Spell & Keywords — demo แบบ interactive ในเบราว์เซอร์สำหรับตรวจสอบคำสะกดและสกัดคำสำคัญ ขับเคลื่อนด้วย WASM

เพิ่มเติม — kham-sqlite

  • Custom synonym map — argument synonyms '<path>' โหลดไฟล์ TSV คำพ้องความหมายตอนสร้างตาราง ส่ง synonym เป็น FTS5_TOKEN_COLOCATED
  • Custom dictionary overlay — argument dict '<path>' เพิ่มคำเฉพาะทางไว้บนพจนานุกรมในตัว โดยไม่ต้อง rebuild trie ใหม่
  • Integration test suite — 31 tests ครอบคลุม MATCH พื้นฐาน, RTGS, lk82 soundex, snippet/highlight, stopword, mixed script, NE, config ทั้งหมด
  • รองรับ Windowsbuild.rs ตรวจจับ Windows และค้นหา SQLite headers ผ่าน vcpkg (VCPKG_ROOT) หรือ SQLITE_INCLUDE_DIR มี kham_sqlite.dll สำเร็จรูปใน release assets
  • Android NDK build — CI release workflow คอมไพล์ libkham_sqlite.so สำหรับ 4 ABI (arm64-v8a, armeabi-v7a, x86_64, x86) ผ่าน Android NDK ต้องใช้ sqlite-android หรือ SQLCipher (SQLite ในตัวระบบปิด load_extension)

แก้ไข — kham-sqlite

  • Trigrams ไม่ถูกส่งออกFtsToken::trigrams สำหรับ Unknown token ถูก populate โดย FTS pipeline แต่ไม่ได้ส่งไปยัง SQLite เป็น colocated token การค้นหา OOV n-gram จึงใช้งานได้ถูกต้องแล้ว
v0.5.1 2026-04-27 Release ↗

แก้ไข

  • WASM number overflow — แก้ปัญหา u32 overflow สำหรับตัวเลขขนาดใหญ่ใน kham-wasm
  • แก้ไข NE tagประเทศไทย เปลี่ยน tag จาก PERSON → PLACE
v0.5.0 2026-04-26 Release ↗

เพิ่มเติม — kham-pg

  • kham_fts_dict — custom dictionary template ขยาย token ภาษาไทย/Named แต่ละตัวเป็น lexeme สูงสุด 6 รายการ: คำ normalized, รหัส lk82 Soundex และ RTGS romanization รองรับการค้นหาแบบ phonetic-fuzzy และ Latin-script
  • รองรับ ts_headline — callback kham_headline ลงทะเบียนเป็น HEADLINE function มี 5 regress tests
  • Named entity token typeTokenKind::Named(_) → 7 ลงทะเบียนใน kham_lextypes

แก้ไข — kham-pg

  • PG 16+ lexize calling convention — arg3 ใน kham_dict_lexize เป็น List* บน PG 16+ ไม่ใช่ bool เดิมทำให้ทุก token ถูก discard เป็น stopword ส่งผลให้ tsvector ว่างเปล่า
v0.4.0 2026-04-25 Release ↗

เพิ่มเติม

  • Thai phonetic encoding — โมดูล soundex: lk82, udom83, metasound, thai_english_soundex
  • CLI --soundex — รหัส phonetic ปรากฏใน field syn= ของ FTS output
  • Accuracy benchmarkkham-bench-accuracy: P/R/F1 ระดับขอบเขตคำ, --threshold CI gate
  • ขยายข้อมูล — NE gazetteer +17,240 รายการ Wikipedia + +8,980 นามสกุลไทย → 36,600 รายการ POS table +8,691 รายการ ORCHID → ~9,000 รายการ
  • ลดขนาด binary — บีบอัด tnc_freq.txt, ne_th.tsv, pos_th.tsv ด้วย zlib ตอน compile time

เปลี่ยนแปลง — breaking

  • Compound-first DP scoring — เปลี่ยนลำดับ priority ใน DpScore: ลด token count มี priority 2 (เหนือกว่าการเพิ่ม dict match) แก้ปัญหา over-segmentation คำประสม Micro F1: 0.418 → 0.975, ประโยคที่ตรงกับ PyThaiNLP newmm: 1/39 → 37/39 (94.9%)
v0.3.0 2026-04-25 Release ↗

เพิ่มเติม

  • โมดูล abbrevAbbrevMap พร้อม TSV ในตัว 118 รายการ (เดือน, ยศ, หน่วยงาน, เขตกรุงเทพฯ) ขยายคำย่อก่อนตัดคำแบบ greedy longest-first
  • โมดูล date — normalize วันที่ภาษาไทย: 7 รูปแบบ input, พ.ศ./ค.ศ., output เป็น ISO 8601
  • โมดูล sentence — ตัดประโยคภาษาไทย: ตัวจบประโยคไทย, ไปยาลน้อย, เครื่องหมายสากล, กฎจุดคำนึงถึงทศนิยม/คำย่อ
v0.2.0 2026-04-24 Release ↗

เพิ่มเติม

  • Named Entity RecognitionNeTagger: gazetteer-based, greedy longest-match, 5 token พร้อมกัน NE gazetteer 10,488 รายการ Person / Place / Org
  • POS TaggingPosTagger: lookup-based, 338 รายการ, 13 หมวดหมู่จาก ORCHID
  • RTGS RomanizationRomanizationMap: ตาราง Thai → Roman 415 รายการ
  • Number normalization — แปลงตัวเลขและข้อความตัวเลขภาษาไทย รวมถึงจำนวนเงินบาท
  • SQLite FTS5 extensionkham-sqlite: pipeline NLP ครบชุด, byte-accurate offsets สำหรับ highlight() และ snippet()
  • FTS pipelineFtsTokenizer builder รวม POS, NE, romanization, stopwords, synonym expansion ในรอบเดียว
v0.1.0 – v0.1.3 2026-04-18 – 2026-04-19
v0.1.3 — ชุด pg_regress สำหรับ PostgreSQL: 67 tests ใน 4 suite (kham_fts, kham_thai, kham_operators, kham_ranking)
v0.1.2 — PostgreSQL FTS extension (kham-pg): parser สำหรับ PG 17, 6 token types, make install + Docker regress โมดูล FTS: stopwords, synonyms, ngrams
v0.1.1 — ใบอนุญาต MIT OR Apache-2.0 dual license, pyproject.toml สำหรับ maturin
v0.1.0 — เวอร์ชันแรก: อัลกอริทึม DAG-based newmm, DARTS dictionary, TCC boundary detection, Unicode pre-tokenizer, zero-copy Token, Python (PyO3), WASM (wasm-bindgen), C FFI (cbindgen), CLI, criterion benchmarks