soc-ratchakitcha · Dataset Card
soc-ratchakitcha: Dataset Card
Written by Open Law Data Thailand, published under cc-by-4.0, revision 260b52d0a06a, read 2026-09-25. Shown as written; SAVRN's own facts about this dataset are on its page.
Royal Gazette Thailand (Ratchakitcha) Dataset
ชุดข้อมูลราชกิจจานุเบกษา (แบบ Machine Readable)
โครงการ Open Law Data Thailand ร่วมกับคณะกรรมาธิการการพาณิชย์และการอุตสาหกรรม วุฒิสภา ได้รับความอนุเคราะห์ข้อมูลจาก สำนักเลขาธิการคณะรัฐมนตรี (สลค.) เพื่อเผยแพร่ข้อมูลกฎหมายไทยสู่สาธารณะในรูปแบบที่ประมวลผลได้ด้วยคอมพิวเตอร์ (Machine Readable) เพื่อส่งเสริมนวัตกรรม Legal Tech และ AI ของประเทศไทย
Dataset Description
ชุดข้อมูลนี้รวบรวมรายการประกาศในราชกิจจานุเบกษา ประกอบด้วยชื่อเรื่อง เล่ม ตอน วันที่ประกาศ และลิงก์ไปยังต้นฉบับ PDF เหมาะสำหรับการทำ RAG (Retrieval-Augmented Generation), การสืบค้นกฎหมาย, และการวิเคราะห์ข้อมูลภาครัฐ
- Source: สำนักเลขาธิการคณะรัฐมนตรี (The Secretariat of the Cabinet)
- Official Collaboration Reference: หนังสือด่วนที่สุด ที่ นร ๐๕๐๓/๑๘๗๓๙ (29 ก.ค. 2568)
- Homepage: Open Law Data Thailand
ย้ายโฟลเดอร์ (2026-09-13): ชั้นข้อความของ OpenLawData อยู่ที่
ocr/openlawdata-ocr/(ตั้งชื่อคู่กับtaxonomy/openlawdata-taxonomy/) · path เดิมocr/openlawdata/ถูกลบออกแล้วเมื่อ 2026-09-14 — โค้ดที่ยังชี้ path เดิมต้องเปลี่ยนเป็นocr/openlawdata-ocr/(ไฟล์รายเดือนชื่อเดิมทุกไฟล์ และมี<year>/index.ndjsonบอกตำแหน่งไบต์ของแต่ละฉบับเพิ่มมาให้)
Usage Instruction
ท่านสามารถเลือกดาวน์โหลดข้อมูลได้หลายรูปแบบผ่าน Library datasets ของ Hugging Face โดยระบุชื่อ name ในพารามิเตอร์ (Config)
1. สำหรับงาน AI / NLP (แนะนำ)
หากต้องการข้อความ (Text) เพื่อนำไปเทรนโมเดล หรือทำ Search Engine ท่านสามารถเลือกโหลดข้อมูลแยกเป็น "รายทศวรรษ" (Decade Subsets) ได้ ซึ่งจะได้ทั้งไฟล์ OCR และ Metadata ควบคู่กัน
ตัวอย่างการ Download สำหรับปี 2024
hf download open-law-data-thailand/soc-ratchakitcha --repo-type dataset --include "meta/2024/*" --local-dir "downloads"
hf download open-law-data-thailand/soc-ratchakitcha --repo-type dataset --include "ocr/*/2024/*" --local-dir "downloads"
ตัวอย่างการ Download สำหรับ 2020s (2020-2029)
hf download open-law-data-thailand/soc-ratchakitcha --repo-type dataset --include "meta/202?/*" --local-dir "downloads"
hf download open-law-data-thailand/soc-ratchakitcha --repo-type dataset --include "ocr/*/202?/*" --local-dir "downloads"
1.1 โหลดด้วย datasets (สะดวกที่สุด)
ชุดข้อมูลแบ่งเป็น 3 config — เลือกได้ตามงาน ไม่ต้องดาวน์โหลดทั้ง repo
from datasets import load_dataset
R = "open-law-data-thailand/soc-ratchakitcha"
ds = load_dataset(R, "meta", split="train") # metadata อย่างเดียว (ค่าเริ่มต้น, เบาสุด)
ds = load_dataset(R, "openlawdata", split="train") # ข้อความเต็ม + metadata แยกวิเคราะห์ 2005-2026
ds = load_dataset(R, "iapp", split="train") # OCR รายหน้า 2011-2025
metaเป็น config เริ่มต้นเพราะเบาที่สุด ทำให้ตัวอย่างข้อมูลบนหน้าเว็บโหลดได้เร็ว — ถ้าต้องการตัวข้อความให้เลือกopenlawdata
ชุดข้อมูลมีขนาดใหญ่ (~9.6 GB สำหรับ openlawdata) หากไม่ต้องการโหลดทั้งหมดลงเครื่อง
ให้ใช้ streaming=True
ds = load_dataset("open-law-data-thailand/soc-ratchakitcha", "openlawdata",
split="train", streaming=True)
for row in ds.take(5):
print(row["publish_date"], row["doc_type"], row["title"])
หรือถ้าต้องการเลือกเฉพาะบางปี ให้ดาวน์โหลดเป็นไฟล์ตามหัวข้อถัดไป
2. สำหรับการวิเคราะห์ข้อมูล
หากต้องการวิเคราะห์สถิติ เช่น จำนวนกฎหมายในแต่ละปี หรือค้นหาชื่อเรื่อง โดยไม่ต้องการเนื้อหา Text
โหลดเฉพาะ Metadata ทั้งหมด (--include "meta/*/*"; meta/year/year-month-files)
hf download open-law-data-thailand/soc-ratchakitcha --repo-type dataset --include "meta/*/*" --local-dir "downloads"
โหลดเฉพาะ OCR ทั้งหมด (--include "ocr/*/*/*"; ocr/engine/year/year-month-files)
hf download open-law-data-thailand/soc-ratchakitcha --repo-type dataset --include "ocr/*/*/*" --local-dir "downloads"
โหลดเฉพาะ engine เดียว (ดูหัวข้อ OCR Engines ประกอบ)
hf download open-law-data-thailand/soc-ratchakitcha --repo-type dataset --include "ocr/openlawdata-ocr/*/*" --local-dir "downloads"
hf download open-law-data-thailand/soc-ratchakitcha --repo-type dataset --include "ocr/iapp/*/*" --local-dir "downloads"
3. สำหรับการดึงไฟล์ต้นฉบับ (PDF)
ชุดข้อมูลนี้จัดเก็บไฟล์ PDF แบบ Hot/Cold Storage เพื่อประสิทธิภาพ:
pdf: ไฟล์ PDF รายฉบับ เฉพาะ 3 เดือนล่าสุด (Hot Data) (--include "pdf/*/*/*", pdf/year/year-month/files)
hf download open-law-data-thailand/soc-ratchakitcha --repo-type dataset --include "pdf/*/*/*" --local-dir "downloads"
zip: ไฟล์ PDF ย้อนหลังตั้งแต่ปี 1884 ที่ถูกบีบอัดเป็น ZIP รายเดือน (Cold Data) (--include "zip/*/*", pdf/year/year-month-files)
hf download open-law-data-thailand/soc-ratchakitcha --repo-type dataset --include "zip/*/*" --local-dir "downloads"
OCR Engines (ocr/<engine>/<year>/<year-month>.jsonl)
ชุดข้อมูลนี้มีข้อความจากหลาย engine เก็บแยกโฟลเดอร์กัน ทุก engine ใช้รูปแบบเดียวกันคือ
1 บรรทัด = 1 เอกสาร และเชื่อมกับไฟล์อื่นด้วยฟิลด์ pdf_file — เลือกใช้ตามความเหมาะสม
หรือนำมาเทียบกันได้
| Engine | ช่วงปีที่มี | ลักษณะ |
|---|---|---|
iapp |
2011–2025 | ข้อความจาก OCR ล้วน แยกรายหน้า (markdown_output) ไม่มี metadata |
openlawdata |
2005–2026 | ข้อความทั้งฉบับ + metadata ที่แยกวิเคราะห์แล้ว (ประเภท ผู้ลงนาม เล่ม ตอน วันที่) พร้อมสัญญาณคุณภาพ |
openlawdata สกัดข้อความจากชั้นข้อความ (text layer) ของ PDF โดยตรงเมื่อทำได้ ซึ่งได้ผลตรงตาม
ต้นฉบับ (lossless) และใช้ OCR เฉพาะหน้าที่เป็นภาพสแกน จึงครอบคลุมช่วงปีที่ iapp ยังไม่มี
ความครอบคลุมของ openlawdata (รุ่นปัจจุบัน): ปี 2005–2026 — เอกสารทุกฉบับในช่วงนี้
ประมวลผลครบแล้ว 100% โดยกว่า 99% อ่านได้จากชั้นข้อความของ PDF โดยตรง
เอกสารก่อนปี 2005 ส่วนใหญ่เป็นภาพสแกนที่ต้องใช้ OCR ซึ่งกำลังทยอยดำเนินการ และจะเพิ่มเข้ามา
ในรุ่นถัดไป (ช่วงปี 2011–2025 สามารถใช้ engine iapp ควบคู่กันได้)
หมายเหตุ: เอกสารที่ยังสกัดข้อความไม่ได้ (หน้าเป็นภาพสแกน รอ OCR) จะไม่ปรากฏในไฟล์
openlawdata แต่ metadata ยังอยู่ใน meta/ ครบ ดังนั้นจำนวนบรรทัดต่อเดือนอาจน้อยกว่า meta/
Data Fields
meta/<year>/<year-month>.jsonl
พาร์ทิชันคือปีของรหัส ไม่ใช่ปีที่ประกาศ — ไฟล์ meta/<year>/<year-month>.jsonl และ taxonomy/.../<year>/<year-month>.jsonl จัดตามรหัสเอกสาร (pdf_file) ซึ่งคงที่และถูกอ้างอิงไปแล้ว เอกสารที่พบว่าวันที่ต้นทางผิดและแก้จากหัวกระดาษ (ดู publishDate_source) จึงยังอยู่ในไฟล์เดิม ให้ใช้ publishDate เป็นวันประกาศเสมอ ไม่ใช่ชื่อไฟล์ · เอกสารเก่าที่ต้นทางเพิ่งนำขึ้นเว็บจะมี added_date บอกวันที่ต้นทางให้มา และ repaired_fields บอกว่า pipeline แก้ field ใดบ้าง
| Field Name | Description (TH) | Description (EN) |
|---|---|---|
no |
ลำดับที่เอกสาร | Document ID / Number |
doctitle |
ชื่อเรื่องหรือหัวข้อของเอกสาร | Title or topic of the document |
bookNo |
เล่มของราชกิจจานุเบกษา | Book number |
section |
ตอนของราชกิจจานุเบกษา | Section number |
category |
ประเภท (เช่น ก, ข, ง) | Category (e.g., A, B, D) |
publishDate |
วันที่ประกาศในราชกิจจานุเบกษา | Publication date |
pageNo |
หมายเลขหน้า | Page number |
pdf_file |
ชื่อไฟล์ PDF ต้นฉบับ | Filename of the source PDF |
source_url |
ลิงก์ PDF ต้นฉบับบน ratchakitcha.soc.go.th (null เมื่อยืนยันลิงก์ไม่ได้) |
Source PDF URL at ratchakitcha.soc.go.th (null when it could not be verified) |
publishDate_source |
ที่มาของ publishDate: source (ต้นทาง) · header (แก้จากวันที่ในหัวกระดาษ เมื่อวันที่ต้นทางขัดกับเล่ม) · source-contradicts-volume (ขัดกับเล่มแต่ไม่มีหัวกระดาษให้แก้) |
Where publishDate came from |
is_test |
true = เป็น record ทดสอบระบบของต้นทางเอง ("ทดสอบระบบ"/"ทดลองระบบ") ควรกรองออก |
Source's own test record |
id |
รหัสเอกสารของต้นทาง (มีตั้งแต่ปลาย 2024; null ในรุ่นเก่า) |
Source document id (null for legacy records) |
หมายเหตุ publishDate ที่ต้นทางให้มาเป็น 1970-01-01 (ค่าแทนวันที่ว่าง) ถูกแปลงเป็น null; section ว่างในปีก่อน 1950 เป็นปกติ (ราชกิจจาฯ ยุคแรกยังไม่มี "ตอน" ให้ค้นด้วย เล่ม+หน้า แทน)
ocr/openlawdata-ocr/<year>/<year-month>.jsonl
ดัชนีตำแหน่งไบต์ — ocr/openlawdata-ocr/<year>/index.ndjson หนึ่งบรรทัดต่อเอกสาร {"doc_id", "file", "offset", "length"} (ไบต์ในไฟล์รายเดือน) ใช้ดึงเอกสารเดียวด้วย HTTP Range request ครั้งเดียวโดยไม่ต้องโหลดทั้งเดือน (นามสกุล .ndjson เพื่อไม่ให้ถูกนับเป็นส่วนของ config openlawdata)
| Field Name | Description (TH) | Description (EN) |
|---|---|---|
pdf_file |
ชื่อไฟล์ PDF ต้นฉบับ (ใช้เชื่อมกับ meta/) |
Source PDF filename — the join key |
doc_id |
รหัสเอกสาร | Document id |
text |
ข้อความเต็มทั้งฉบับ (รวมหัวกระดาษ เล่ม/ตอน/หน้า/วันที่) | Full document text |
n_pages / ocr_pages |
จำนวนหน้าทั้งหมด / จำนวนหน้าที่ต้องใช้ OCR | Total pages / pages needing OCR |
method |
วิธีที่ได้ข้อความมา: direct, font, redecode (สามอย่างนี้ lossless ไม่ผ่าน OCR), typhoon, tesseract |
How the text was obtained |
is_valid / score |
ผลตรวจความสมบูรณ์ และคะแนน 0–1 | Validation flag and score |
doc_type |
ประเภทเอกสาร (ประกาศ, ระเบียบ, กฎกระทรวง ฯลฯ) | Document type |
issuer / issuing_authority |
ผู้ออก / หน่วยงาน | Issuer / authority |
title / subject |
ชื่อเรื่อง | Title / subject |
volume / volume_thai |
เล่ม (เลขอารบิก / เลขไทย) | Volume |
part / part_number / part_class / is_special |
ตอน, เลขตอน, ประเภทตอน (ก/ข/ง), เป็นฉบับพิเศษหรือไม่ | Part, number, class, special flag |
page |
เลขหน้าในราชกิจจานุเบกษา | Page number in the gazette |
publish_date / publish_date_thai |
วันที่ประกาศ (ISO / ไทย) | Publication date |
announcement_date / announcement_date_thai |
วันที่ลงนาม (ISO / ไทย) | Signing date |
signatories |
รายชื่อผู้ลงนาม [{name, position}] |
Signatories |
reference_numbers |
เลขอ้างอิงที่พบในเอกสาร | Reference numbers found in the text |
doctitle |
ชื่อเรื่องทางการจากต้นทาง (join จาก meta/) — มีครบเกือบทุกฉบับ ต่างจาก title ที่แกะจากหน้ากระดาษและว่างราว 4% |
Official title from the source catalogue |
meta_book_no |
เล่มที่ต้นทางระบุไว้สำหรับเอกสารนี้ — ถ้าต่างจาก volume เกิน 2 แปลว่าไฟล์ PDF ไม่ตรงกับรหัสเอกสาร (ดู ข้อจำกัด) |
Source-declared volume; a gap > 2 from volume means a mismatched PDF |
นำเข้า BigQuery
ไฟล์ openlawdata เป็น newline-delimited JSON (NDJSON) แบบไม่บีบอัด จึงโหลดเข้า BigQuery
ได้โดยตรงและโหลดแบบขนานได้เต็มที่ (ต่างจากไฟล์ .gz ที่ต้องแตกไฟล์แบบ single-thread)
# โหลดทั้งปี 2026 เข้าตารางเดียว (สร้าง schema อัตโนมัติ)
bq load --source_format=NEWLINE_DELIMITED_JSON --autodetect \
my_dataset.ratchakitcha 'downloads/ocr/openlawdata-ocr/2026/*.jsonl'
โครงสร้างที่ได้: signatories เป็น RECORD REPEATED (name, position),
reference_numbers เป็น STRING REPEATED, ฟิลด์วันที่เป็นสตริงรูปแบบ YYYY-MM-DD
ทุกฟิลด์มีชนิดข้อมูลคงที่ทั้งชุด จึงไม่ทำให้ autodetect ล้มเหลว
ตัวอย่างคิวรี — เลือกเฉพาะเอกสารที่อ่านจากชั้นข้อความโดยตรง (แม่นที่สุด ไม่ผ่าน OCR)
SELECT publish_date, doc_type, issuer, title, text
FROM my_dataset.ratchakitcha
WHERE is_valid AND method IN ('direct','font','redecode')
วิธีเลือกข้อมูลให้ตรงกับงาน
method บอกว่าข้อความมาจากไหน — เป็นตัวกรองคุณภาพที่สำคัญที่สุด
method |
ที่มา | ความแม่น |
|---|---|---|
direct |
อ่านจากชั้นข้อความของ PDF ตรงๆ | ตรงต้นฉบับ (lossless) |
font |
ชั้นข้อความเพี้ยน แต่ถอดกลับได้จาก glyph ของฟอนต์ | ตรงต้นฉบับ (lossless) |
redecode |
ชั้นข้อความถูก encode ผิด ถอดกลับได้ | ตรงต้นฉบับ (lossless) |
typhoon |
OCR จากภาพ (Typhoon VLM) | ~97% อาจมีอักขระเพี้ยน |
tesseract |
OCR จากภาพ (Tesseract) | ~94% |
-- ชุดที่แม่นที่สุด: ไม่ผ่าน OCR เลย + ผ่าน validation
WHERE is_valid AND method IN ('direct','font','redecode')
ในช่วง 2005–2026 เอกสาร 99.1% อยู่ในกลุ่ม lossless และ 99.8% ผ่าน validation
ข้อจำกัดที่ควรทราบ
- ใช้
meta/เป็นหลักสำหรับ เล่ม/ตอน/หน้า/วันที่ — ข้อมูลในmeta/มาจากระบบต้นทางของ ราชการโดยตรง ส่วนค่าเดียวกันในopenlawdataแยกวิเคราะห์มาจากตัวข้อความ จึงอาจคลาดเคลื่อนได้ ในเอกสารที่จัดหน้าผิดปกติ - หัวกระดาษบางฉบับวรรณยุกต์ตก (เช่น
หนาแทนหน้า,เลมแทนเล่ม) พบราว 18% ของเอกสาร ที่สกัดแบบdirectตั้งแต่ปี 2010 — เกิดจากตำแหน่งวรรณยุกต์ในชั้นข้อความของ PDF ไม่ใช่ OCR ผิด กระทบเฉพาะบรรทัดหัวกระดาษ ไม่กระทบเนื้อความ - เลขไทย/อารบิกปะปนกัน — ชั้นข้อความอาจให้
45/2562ขณะที่หน้าเอกสารจริงพิมพ์๔๕/๒๕๖๒ - สระ/วรรณยุกต์สลับตำแหน่งในเอกสารคุณภาพต่ำ พบราว 0.3% ของเอกสาร (เช่น
เกณฑก์ ารที่ควรเป็นเกณฑ์การ) เกิดจากลำดับอักขระในชั้นข้อความของ PDF ต้นฉบับเอง เราเลือกไม่แก้อัตโนมัติ เพราะการเดารวมอักขระอาจทำให้ข้อความผิดเพี้ยนกว่าเดิม — เอกสารกลุ่มนี้ยังอ่านได้ แต่ถ้าต้องการ ความแม่นสูงสุดควรตรวจกับ PDF ต้นฉบับ - เอกสารตารางมีสัดส่วนอักษรไทยต่ำโดยธรรมชาติ (ตารางโควตา ผังเมือง ตารางทับศัพท์ภาษาต่างประเทศ) ไม่ใช่ข้อมูลเสีย
textรวมหัวกระดาษไว้ด้วย (บรรทัดหน้า .. เล่ม .. ราชกิจจานุเบกษา .. วันที่) หากต้องการเฉพาะเนื้อความ ให้ตัดบรรทัดแรกๆ ออกเอง- เอกสารที่ยังไม่มีข้อความจะไม่ปรากฏในไฟล์ จำนวนบรรทัดต่อเดือนจึงอาจน้อยกว่าใน
meta/ -
มีเอกสาร 1 ฉบับ (ปี 1930) ที่ไฟล์ PDF ต้นทางเสียหายตั้งแต่ต้นทาง จึงไม่มีข้อความ
-
รหัสเอกสารกับไฟล์ PDF ถูกจัดให้ตรงกันแล้วทุกปี (แก้ 12–13 ก.ย. 2569) — รหัสเอกสารรุ่นเก่า (
2014-006904) คือลำดับที่ในผลค้นหาของระบบต้นทาง ไม่ใช่เลขประจำเอกสาร การดึงย้อนหลังเมื่อ ก.ค.–ส.ค. 2568 ดึง PDF กับmeta/จากลิสต์สองรอบที่ลำดับต่างกัน ทำให้รหัสเดียวถือmeta/ของเอกสารหนึ่งแต่ PDF ของอีกเอกสาร · ปี 2002–2022 อ่าน เล่ม/ตอน/หน้า จากหัวกระดาษของทุกไฟล์แล้วย้ายไฟล์ไปยังรหัสที่meta/ระบุ (376,867 ฉบับใน 2005–2022; 2004 เลื่อน +1/+3 เกือบทั้งปี, 2003 เลื่อน +28) แล้ว build ข้อความและ zip ใหม่ · ปี 1884–2001 (ภาพสแกน ไม่มีข้อความให้อ่านหัวกระดาษ) เทียบขนาดไฟล์กับไฟล์ที่ต้นทางเสิร์ฟให้เอกสารนั้นวันนี้ แล้วดาวน์โหลดฉบับที่ถูกมาแทน (27 ปี แทนที่ 194,262 ฉบับ ในจำนวนนี้เป็นช่องที่ไม่มีไฟล์มาก่อน 2,260 ฉบับ) ·meta/ไม่เปลี่ยน (เป็นนิยามของรหัส) · ตรวจซ้ำหลังแก้: สุ่ม 200 รหัส/ปี ทุกปี 2005–2026 พิกัดในข้อความตรงmeta/4,310/4,322 ที่เทียบได้ ผิดฉบับ 0 · ไฟล์ที่ย้ายออก/แทนที่ทุกฉบับมี journal ย้อนกลับได้ในraw/_refile/<ปี>/(ไม่เผยแพร่) - ชั้น
ocr/iappคัดแล้ว (14 ก.ย. 2569) — ข้อความ iapp ถูก OCR จากไฟล์ก่อนจัดรหัสใหม่ และมี record ว่างเปล่าหรือเป็น ข้อความ error ของบริการ OCR ปนอยู่ จึงคัดให้เหลือเฉพาะ record ที่ (1) มีข้อความจริง และ (2) ชื่อเรื่องหรือหัวกระดาษในข้อความ ยืนยันรหัสเอกสารได้ — เหลือ 165,983 จาก 416,922 record (ปี 2021 ไม่เหลือเลย จึงไม่มีโฟลเดอร์) ที่เหลือนี้ join กับmeta//ocr/openlawdata-ocrด้วยpdf_fileได้ตามปกติ · record ที่ย้ายรหัสมีฟิลด์data.rekeyed_fromบอกรหัสเดิม -
ปี ≤2001 มีเฉพาะ PDF (
zip/) และmeta/— เป็นภาพสแกน ข้อความกำลังทยอย OCR ด้วย Typhoon และจะเผยแพร่ในocr/openlawdataเมื่อครอบคลุมพอ · รหัสที่meta/ของต้นทางไม่ระบุ เล่ม/ตอน/หน้า (ราว 2,400 ฉบับ) ถูกเติมพิกัดจากต้นทางแล้วส่วนใหญ่ ที่เหลือยังไม่มีในชั้นข้อความ -
เอกสารที่ไม่มีในชั้นข้อความ ให้ดูที่
taxonomy.has_text— ไม่ต้องเทียบindex.ndjsonกับmeta/เอง ชั้นtaxonomyมีทุกฉบับที่meta/มี และฟิลด์has_textบอกตรงๆ ว่าฉบับนั้นมีข้อความในocr/openlawdata-ocrหรือไม่ · เอกสารที่has_text: falseไม่ได้หายไป — ป้ายหมวดหมู่ของมัน วิเคราะห์จากชื่อเรื่องในmeta/อย่างเดียว ซึ่งเป็นหลักฐานที่น้อยกว่า - เหตุผลที่ไม่มีข้อความ มี 3 แบบ ไม่ใช่แบบเดียว (สำรวจครบทุกฉบับ 15 ก.ย. 2569): · 10,912 ฉบับ — กันไว้โดยเจตนา ไม่ใช่ build ตกหล่น ไฟล์ PDF อยู่ครบและสกัดข้อความได้ แต่พิสูจน์ไม่ได้ว่าไฟล์นั้นเป็นเอกสารของรหัสนี้จริง จึงไม่เผยแพร่ข้อความของมัน การเผยแพร่ข้อความที่อาจเป็นของเอกสารอื่นภายใต้รหัสหนึ่ง แย่กว่าการไม่มีข้อความ (ทดลอง build โดยไม่กันออกเมื่อ 15 ก.ย. 2569 → ด่านตรวจพบทันทีว่าปี 2003 มี 290 ฉบับที่หัวกระดาษ เป็นของรหัสอื่น เลื่อนกันเป็น block ละ 28 ตำแหน่ง จึงย้อนกลับทั้งหมด) · 7,263 ฉบับ — เป็นภาพสแกนจริง ไม่มีชั้นข้อความใน PDF (ส่วนใหญ่ปี 2002–2004) กำลังทยอย OCR ด้วย Typhoon และจะเข้าชั้นข้อความเมื่อทำถึง · 2,977 ฉบับ — ไม่มีไฟล์ PDF บนดิสก์ เป็นคนละปัญหา อยู่ระหว่างดึงไฟล์กลับมา
index.ndjsonรับประกันตัวเองแล้ว — ตั้งแต่ 15 ก.ย. 2569 ตัว build จะตรวจและ exit non-zero ถ้าอย่างใดอย่างหนึ่งไม่จริง: รายการแรกของทุกเดือนเริ่มที่ไบต์ 0 ·offset + lengthของทุก record เท่ากับoffsetของรายการถัดไปพอดี · รายการสุดท้ายจบตรงขนาดไฟล์ · จำนวน entry เท่ากับจำนวน record แปลว่า "ไม่มีใน index" = "ไม่มีในไฟล์" เชื่อถือได้โดยไม่ต้องพิสูจน์เองsource_urlของปี 2002 จะไม่ครบ และไม่ใช่ข้อบกพร่องฝั่งเรา — 5,844 ฉบับไม่มีลิงก์เพราะ ระบบค้นหาของต้นทางเองไม่มีเอกสารเหล่านั้นอยู่ในดัชนี (เช่น เล่ม 119 ตอน 79 ง คืนเฉพาะหน้า 1, 7, 9, 11, 14, 26, 28, 47 ขณะที่เอกสารจริงมีถึงหน้า 130 กว่า) · พิกัดของเราถูก ไม่ใช่ของเขา: หน้าที่พิมพ์บนเอกสารตรงกับmeta/298 จาก 300 ฉบับที่สุ่มตรวจ PDF ปี 2002 ที่เรามีถูกต้อง ขาดเพียงลิงก์กลับไปต้นทางidของเอกสารก่อนปี 2024 เป็นค่าที่สร้างขึ้นใหม่ ไม่ใช่สตริงที่ต้นทางเคยออกให้ — ประกอบจากpublishDate+ เลขเอกสารในsource_urlเติมศูนย์ให้ครบ 8 หลัก ซึ่งเป็นสูตรเดียวกับที่ต้นทางใช้ ในปี 2024–2026 (ตรงกัน 82,481 จาก 82,481 ฉบับ ไม่มีข้อยกเว้น) · ทุกฉบับที่สร้างค่าใหม่มีidอยู่ในrepaired_fields· ฉบับที่ไม่มีsource_urlยังคงเป็น null
การจัดทำข้อมูล
สกัดข้อความแบบ 3 ชั้น โดยพยายามอ่านจากชั้นข้อความของ PDF ก่อนเสมอ และใช้ OCR เฉพาะหน้าที่เป็น
ภาพสแกนจริงๆ ทุกฉบับผ่านการตรวจสอบอัตโนมัติ (ความครบของฟิลด์ วันที่ถอดได้ สัดส่วนอักษรไทย
การปนเปื้อนของอักขระเสีย) แล้วบันทึกผลไว้ในฟิลด์ is_valid และ score
ก่อนเผยแพร่ทุกครั้ง ไฟล์ทั้งชุดจะถูกตรวจซ้ำว่า: ทุกบรรทัดเป็น JSON ที่ถูกต้อง, ไม่มี path
ภายในหลุดออกมา, ไม่มีร่องรอยการสกัดผิดพลาดหลงเหลือ, pdf_file ไม่ซ้ำ และทุกฟิลด์มีชนิดข้อมูล
คงที่ทั้งชุด (เพื่อให้ bq load --autodetect ทำงานได้)
ชั้นหมวดหมู่ / taxonomy (taxonomy/openlawdata-taxonomy/<year>/<year-month>.jsonl)
ป้ายกำกับเชิงโครงสร้างของทุกเอกสารในชั้น openlawdata (faceted taxonomy: ต้นไม้หัวข้อ + 2 vocabulary แบน —
ไม่เรียก ontology เพราะยังไม่มี entity/relation) — 1 บรรทัด = 1 เอกสาร เชื่อมกับ
ocr/openlawdata และ meta/ ด้วย pdf_file เหมือนชั้นอื่น ตั้งใจแยกโฟลเดอร์ เพราะ rule จะปรับเรื่อยๆ
โดยไม่ต้องเผยแพร่ข้อความใหม่ทุกครั้ง (ดู sieve_version) · taxonomy/ เป็นโฟลเดอร์รวมสำหรับชุดหมวดหมู่จากหลายผู้จัดทำ
ชุดนี้คือ openlawdata-taxonomy
สามแกนที่เป็นอิสระต่อกัน — เอกสารหนึ่งฉบับเป็นได้ทั้ง "แต่งตั้ง" และ "การต่างประเทศ" พร้อมกัน:
| แกน | field | ค่า | ความหมาย |
|---|---|---|---|
| เรื่องอะไร | topic |
76 หมวด มีลำดับชั้น (taxonomy.json) |
เช่น pollution_air ⊂ pollution ⊂ environment |
| ทำอะไร | action |
10 แบบ | rulemaking appointment registration court_order decoration … |
| ใครออก | govlevel |
8 ระดับ | central local provincial judiciary parliament … |
ฟิลด์อื่น: agency / agency_type / province — ชื่อผู้ออกที่ normalize แล้ว (ตัวสะกดแปรผันของหน่วยงาน
เดียวกันยุบเป็นชื่อเดียว ชื่อที่ถูกตัดกลางบรรทัดในหัวเอกสารถูกเติมเป็นชื่อเต็ม แยกจังหวัดออกจากชื่อหน่วยงานตามรายชื่อ 77 จังหวัด) เหมาะใช้เป็น facet/index;
issuing_authority ดิบตามหน้ากระดาษยังอยู่ในชั้น ocr · labels = ป้ายทุกอัน (ทั้งสามแกน รวมหมวดแม่ที่
roll up มา) แต่ละอันมี weight, matched_by (หลักฐาน: auth title head dtype partclass) และ
corroborated · extracted = ข้อมูลสกัดเฉพาะหมวด (คดีล้มละลาย: stage case_number case_book court debtor_type = juristic/natural และ debtor_name เฉพาะนิติบุคคล — ชั้นนี้ไม่เก็บชื่อบุคคลธรรมดา)
ป้ายที่เชื่อได้ — topic_corroborated / action_corroborated / govlevel_corroborated บอกว่าป้ายหลัก
ยืนอยู่บนหลักฐานเชิงโครงสร้าง (ผู้ออก ประเภทเอกสาร ตอนของราชกิจจา) หรือสองฟิลด์อิสระ อ่านตรวจด้วยคน
450 ฉบับ: สุ่มทั่วคลัง ป้ายที่ยืนยันถูก 100% [98.6–100] และมีป้ายยืนยัน 95.5% ของเอกสาร · หมวดที่ประชาชน
ค้นบ่อย 15 หมวด 97.9% · ป้ายที่ corroborated: false แม่นราว 61% — เก็บไว้เพื่อ recall ให้กรองเอง
-- BigQuery: กฎ/ระเบียบเรื่องขยะที่ท้องถิ่นออกใน 5 ปี พร้อมข้อความ
SELECT o.pdf_file, o.agency, o.province, t.title, t.publish_date
FROM taxonomy o JOIN ocr t USING (pdf_file)
WHERE o.topic_corroborated AND o.topic = 'pollution_waste'
AND o.govlevel = 'local' AND t.publish_date >= '2021-01-01'
taxonomy.json = รายการ slug → ชื่อไทย/หมวดแม่/แกน ใช้ roll up ได้เอง · เป็น rule-based ล้วน (ไม่มี ML)
ไม่มีข้อมูลส่วนบุคคลในชั้นนี้ · ยังไม่มีปี 2000–2001 (ชั้น ocr ของปีนั้นรอ OCR ภาพสแกน)
Legal & License
ข้อมูลนี้ได้รับการสนับสนุนจาก สำนักเลขาธิการคณะรัฐมนตรี ตามหนังสือตอบข้อหารือ "ด่วนที่สุด ที่ นร ๐๕๐๓/๑๘๗๓๙" ลงวันที่ 29 กรกฎาคม 2568 เพื่อประโยชน์สาธารณะและการพัฒนาเทคโนโลยีปัญญาประดิษฐ์ (AI)
Disclaimer: ข้อมูลนี้จัดทำขึ้นเพื่อความสะดวกในการเข้าถึงและวิเคราะห์ข้อมูลเท่านั้น การอ้างอิงทางกฎหมายอย่างเป็นทางการควรตรวจสอบกับต้นฉบับ PDF จากเว็บไซต์ ratchakitcha.soc.go.th โดยตรง
Contact
- Project: Open Law Data Thailand
- Website: https://www.openlawdatathailand.org/