{"slug":"vi-sao-parser-khang-hy-kho-hon-parser-html-reverse-engineering","title":"Vì sao Parser Khang Hy Tự Điển khó hơn Parser HTML? Hành trình Reverse Engineering một bộ từ điển hơn 300 năm tuổi","summary":"Khang Hy không có grammar chính thức: khảo sát→pattern→classifier (AB切某聲 tone override, 讀若, 叶韻); reverse engineering từ hàng chục nghìn mục — parser là nền móng engine.","excerpt":"Khang Hy không có grammar chính thức: khảo sát→pattern→classifier (AB切某聲 tone override, 讀若, 叶韻); reverse engineering từ hàng chục nghìn mục — parser là nền móng engine.","markdown":"Series 2 · Bài 10 — Parser Khang Hy vs HTML / Reverse Engineering. [Bài 9](https://wiki.quizzman.com/wiki/vi-sao-mot-chu-han-co-nhieu-phan-thiet-van-thu-co)\n\n# Vì sao Parser Khang Hy Tự Điển khó hơn Parser HTML? Hành trình Reverse Engineering một bộ từ điển hơn 300 năm tuổi\nKhi nghe đến \"parser\", nhiều lập trình viên sẽ nghĩ ngay đến HTML, XML, JSON hay Markdown. Đây đều là những định dạng có cú pháp (grammar) được định nghĩa rất rõ ràng. Chỉ cần đọc tài liệu đặc tả là có thể xây dựng parser. Thế nhưng, Quizzman Fanqie Engine lại phải giải quyết một bài toán hoàn toàn khác: **làm thế nào để máy tính hiểu được Khang Hy Tự Điển (康熙字典)** – một bộ từ điển được biên soạn từ đầu thế kỷ XVIII bằng văn ngôn Hán cổ, không có grammar chính thức, không có tài liệu kỹ thuật và chứa vô số cách ghi chú ngữ âm khác nhau. Đây cũng là một trong những phần nghiên cứu tốn nhiều thời gian nhất trong quá trình phát triển Fanqie Engine.\n# Parser HTML có một lợi thế rất lớn\nNếu cần xây dựng một HTML Parser, công việc tương đối rõ ràng.\n\nHTML có:\n\nđặc tả (Specification);\ncú pháp chính thức;\nquy tắc lồng thẻ;\nquy tắc đóng mở;\nquy tắc xử lý lỗi.\nVí dụ:\n\n<div class=\"card\">\n<h1>Hello</h1>\n</div>\nParser biết rất rõ:\n\nđâu là thẻ mở;\nđâu là thẻ đóng;\nđâu là thuộc tính;\nđâu là nội dung.\nToàn bộ grammar đều được công bố công khai.\n\nNhiệm vụ của lập trình viên chỉ là hiện thực lại grammar đó.\n\n# Nhưng Khang Hy không có grammar\nKhang Hy Tự Điển hoàn toàn khác.\n\nKhông có bất kỳ tài liệu nào nói rằng:\n\nNếu gặp chuỗi này thì hãy hiểu như thế này.\nKhông có BNF.\n\nKhông có EBNF.\n\nKhông có RFC.\n\nKhông có chuẩn Unicode dành riêng cho phản thiết.\n\nMỗi mục từ là kết quả của cách biên soạn học thuật cách đây hơn ba trăm năm.\n\nMuốn parser được, trước hết phải trả lời một câu hỏi khó hơn nhiều:\n\n**Người xưa đã viết theo những quy luật nào?**\n# Không thể viết parser ngay\nMột sai lầm rất dễ mắc phải là:\n\nMở Khang Hy ra.\n\nViết Regex.\n\nVí dụ.\n\n(.)(.)切\nTưởng như vậy là đủ.\n\nThực tế chỉ sau vài trăm mục từ đầu tiên, parser sẽ bắt đầu thất bại.\n\nBởi vì dữ liệu không hề thống nhất.\n\nVí dụ.\n\nAB切\nAB切某聲\nAB切又音\nAB切讀若……\n讀若……\n叶某韻\n俗音……\n又作……\n古作……\nNếu coi tất cả đều là phản thiết.\n\nToàn bộ dữ liệu sẽ bị phân tích sai.\n\n# Bước đầu tiên là khảo sát, không phải lập trình\nThay vì viết parser ngay.\n\nQuizzman thực hiện một công việc giống nghiên cứu ngôn ngữ học hơn.\n\nĐó là khảo sát hàng chục nghìn mục từ để tìm xem:\n\nnhững mẫu nào xuất hiện thường xuyên;\nnhững ghi chú nào mang ý nghĩa ngữ âm;\nnhững ghi chú nào chỉ là chú thích.\nCó thể hình dung quy trình như sau.\n\nKhang Hy\n\n↓\n\nQuan sát\n\n↓\n\nThống kê\n\n↓\n\nPattern\n\n↓\n\nGrammar\n\n↓\n\nParser\nParser chỉ xuất hiện ở bước cuối cùng.\n\n# Mục tiêu đầu tiên là nhận diện nguồn\nMột mục trong Khang Hy thường không chỉ có một phản thiết.\n\nNó còn trích dẫn rất nhiều vận thư.\n\nVí dụ.\n\n廣韻\n\n↓\n\n...\n\n集韻\n\n↓\n\n...\n\n唐韻\n\n↓\n\n...\nĐối với con người.\n\nĐây chỉ là phần chú thích.\n\nĐối với Quizzman.\n\nĐây là metadata cực kỳ quan trọng.\n\nParser phải biết:\n\nphản thiết này lấy từ đâu;\nnguồn nào đang được trích dẫn;\nđâu là phản thiết chính;\nđâu chỉ là tham khảo.\nNếu không nhận diện đúng nguồn.\n\nCandidate Ranking sẽ mất toàn bộ cơ sở để đánh giá.\n\n# Không phải mọi \"切\" đều giống nhau\nĐiểm khó tiếp theo nằm ở chính phản thiết.\n\nNhiều người nghĩ chỉ cần gặp chữ:\n\n切\nlà có thể lấy hai chữ phía trước.\n\nNhưng thực tế.\n\nSau khi khảo sát Khang Hy, Quizzman phát hiện rất nhiều pattern khác nhau.\n\nVí dụ.\n\nAB切\nĐây là phản thiết chuẩn.\n\nNhưng còn có:\n\nAB切某聲\nAB切又音\nAB切音某\nAB切讀若……\nMặc dù đều chứa chữ \"切\".\n\nÝ nghĩa của chúng hoàn toàn khác nhau.\n\n# Khó nhất là dạng \"AB切某聲\"\nĐây là một trong những phát hiện quan trọng nhất khi xây dựng parser.\n\nThoạt nhìn.\n\nAB切某聲\ngiống như:\n\nAB切\nkèm thêm vài chữ giải thích.\n\nNhưng sau khi khảo sát nhiều mục từ.\n\nQuizzman nhận thấy điều đó không đúng.\n\nTrong rất nhiều trường hợp.\n\nPhần:\n\n某聲\nkhông phải chú thích.\n\nNó thay đổi chính hồ sơ ngữ âm.\n\nNói cách khác.\n\nParser phải hiểu rằng:\n\nthanh mẫu vẫn lấy theo phản thiết;\nvận vẫn lấy theo phản thiết;\nnhưng thanh điệu phải được ghi đè theo ghi chú phía sau.\nNếu parser bỏ qua chi tiết này.\n\nMiddle Chinese Reconstruction sẽ sai ngay từ đầu.\n\n# \"讀若\" không phải phản thiết\nMột nhóm khác cũng dễ gây nhầm lẫn là:\n\n讀若……\nNếu dịch sát.\n\nĐây chỉ là:\n\nđọc giống như...\nNó không mô tả đầy đủ:\n\nthanh mẫu;\nvận;\nthanh.\nDo đó.\n\nĐây không phải dữ liệu thích hợp để phục dựng Middle Chinese.\n\nParser phải nhận diện:\n\n讀若\n\n↓\n\nPhonetic Hint\nchứ không phải:\n\n讀若\n\n↓\n\nFanqie\n# \"叶韻\" cũng không phải phát âm chuẩn\nMột trường hợp khác là:\n\n叶韻\nhay:\n\n協韻\nNhững ghi chú này xuất hiện chủ yếu trong thơ ca.\n\nChúng mô tả:\n\ncách đọc để hiệp vần;\nhoặc một biến thể phục vụ thi ca.\nNếu parser coi đây là phát âm chuẩn.\n\nEngine sẽ đưa rất nhiều dữ liệu sai vào hệ thống.\n\nDo đó.\n\nQuizzman phân loại riêng:\n\n叶韻\n\n↓\n\nRhyme Annotation\nkhông đi vào pipeline suy diễn Hán Việt.\n\n# Parser thực chất là một Grammar Classifier\nSau nhiều lần điều chỉnh.\n\nQuizzman không còn coi parser là một bộ Regex.\n\nThay vào đó.\n\nParser hoạt động giống một bộ phân loại ngữ pháp.\n\nVí dụ.\n\nBảng: Pattern | Loại\n\nAB切 | Fanqie\nAB切某聲 | Fanqie + Tone Override\n讀若 | Phonetic Hint\n叶韻 | Rhyme Annotation\n又音 | Alternate Reading\n古音 | Historical Reading\n俗音 | Colloquial Reading\nChỉ sau khi xác định đúng loại.\n\nEngine mới quyết định cách xử lý.\n\n# Reverse Engineering thay vì Parsing\nĐiểm đặc biệt của Quizzman là:\n\nNhóm phát triển không có grammar chính thức để tham khảo.\n\nGrammar được xây dựng theo chiều ngược lại.\n\nHàng chục nghìn mục từ\n\n↓\n\nQuan sát\n\n↓\n\nThống kê\n\n↓\n\nTìm quy luật\n\n↓\n\nMô hình hóa\n\n↓\n\nGrammar\n\n↓\n\nParser\nTrong khoa học máy tính.\n\nQuá trình này thường được gọi là **Reverse Engineering**.\n\nKhông phải hiện thực hóa một đặc tả đã có.\n\nMà là **khôi phục lại đặc tả từ chính dữ liệu**.\n\n# Parser quyết định chất lượng của toàn bộ Fanqie Engine\nRất nhiều người cho rằng phần khó nhất của Quizzman Fanqie Engine là thuật toán suy diễn Hán Việt.\n\nThực tế, mọi thuật toán phía sau đều bắt đầu từ parser.\n\nNếu parser hiểu sai một mục từ trong Khang Hy:\n\nphản thiết sẽ sai;\nhồ sơ Middle Chinese sẽ sai;\nthanh điệu sẽ sai;\nCandidate Ranking cũng sẽ sai.\nVì vậy, parser không đơn thuần là bước \"đọc dữ liệu\", mà là nền móng của toàn bộ hệ thống.\n\nĐiều khiến Quizzman Fanqie Engine khác biệt không chỉ là khả năng xử lý phản thiết, mà còn là quá trình **reverse engineering** cách biên soạn của Khang Hy Tự Điển để biến những ghi chép học thuật hơn ba thế kỷ trước thành một hệ thống dữ liệu có cấu trúc, đủ chính xác để máy tính có thể tiếp tục suy luận và giải thích bằng các thuật toán âm vận học.\n","html":"<nav class=\"series-nav\" aria-label=\"Chuỗi Fanqie Series 2\"><p><strong>Series 2 · Nền tảng học thuật</strong> — Bài 10</p><ul><li>← Bài 1: <a href=\"https://wiki.quizzman.com/wiki/nen-tang-hoc-thuat-quizzman-fanqie-engine-tu-quang-van-den-nguyen-tai-can\">Quảng Vận → Nguyễn Tài Cẩn</a></li><li>← Bài 2: <a href=\"https://wiki.quizzman.com/wiki/vi-sao-phuc-dung-middle-chinese-khong-phai-la-doan\">Phục dựng MC không phải đoán</a></li><li>← Bài 3: <a href=\"https://wiki.quizzman.com/wiki/vuong-luc-va-triet-ly-quizzman-fanqie-engine-am-he-khong-lay-tuc-doc\">Vương Lực · Âm hệ</a></li><li>← Bài 4: <a href=\"https://wiki.quizzman.com/wiki/tu-khang-hy-tu-dien-den-thuat-toan-parser-quizzman-fanqie\">Parser Khang Hy (tổng quan)</a></li><li>← Bài 5: <a href=\"https://wiki.quizzman.com/wiki/vi-sao-quizzman-fanqie-engine-khong-hardcode-hon-50000-chu-han\">Không hardcode 50.000 chữ</a></li><li>← Bài 6: <a href=\"https://wiki.quizzman.com/wiki/tu-hon-200-quy-luat-am-van-den-quizzman-fanqie-engine\">Hơn 200 quy luật</a></li><li>← Bài 7: <a href=\"https://wiki.quizzman.com/wiki/vi-sao-thuat-toan-khong-the-suy-ra-100-am-han-viet-pure-projection-lexical\">Pure Projection &amp; Lexical</a></li><li>← Bài 8: <a href=\"https://wiki.quizzman.com/wiki/candidate-ranking-quizzman-fanqie-engine-nhieu-phan-thiet\">Candidate Ranking</a></li><li>← Bài 9: <a href=\"https://wiki.quizzman.com/wiki/vi-sao-mot-chu-han-co-nhieu-phan-thiet-van-thu-co\">Nhiều phản thiết &amp; vận thư</a></li><li>Chuyên mục: <a href=\"https://wiki.quizzman.com/category/phien-thiet\">Phiên thiết</a></li></ul></nav>\n<blockquote class=\"ai-answer\"><p>Khi nghe đến &quot;parser&quot;, nhiều lập trình viên sẽ nghĩ ngay đến HTML, XML, JSON hay Markdown. Đây đều là những định dạng có cú pháp (grammar) được định nghĩa rất rõ ràng. Chỉ cần đọc tài liệu đặc tả là có thể xây dựng parser. Thế nhưng, Quizzman Fanqie Engine lại phải giải quyết một bài toán hoàn toàn khác: <strong>làm thế nào để máy tính hiểu được Khang Hy Tự Điển (康熙字典)</strong> – một bộ từ điển được biên soạn từ đầu thế kỷ XVIII bằng văn ngôn Hán cổ, không có grammar chính thức, không có tài liệu kỹ thuật và chứa vô số cách ghi chú ngữ âm khác nhau. Đây cũng là một trong những phần nghiên cứu tốn nhiều thời gian nhất trong quá trình phát triển Fanqie Engine.</p></blockquote>\n<h2>Parser HTML có một lợi thế rất lớn</h2>\n<p>Nếu cần xây dựng một HTML Parser, công việc tương đối rõ ràng.</p>\n<p>HTML có:</p>\n<ul>\n<li>đặc tả (Specification);</li>\n<li>cú pháp chính thức;</li>\n<li>quy tắc lồng thẻ;</li>\n<li>quy tắc đóng mở;</li>\n<li>quy tắc xử lý lỗi.</li>\n</ul>\n<p>Ví dụ:</p>\n<pre><code>&lt;div class=&quot;card&quot;&gt;\n    &lt;h1&gt;Hello&lt;/h1&gt;\n&lt;/div&gt;</code></pre>\n<p>Parser biết rất rõ:</p>\n<ul>\n<li>đâu là thẻ mở;</li>\n<li>đâu là thẻ đóng;</li>\n<li>đâu là thuộc tính;</li>\n<li>đâu là nội dung.</li>\n</ul>\n<p>Toàn bộ grammar đều được công bố công khai.</p>\n<p>Nhiệm vụ của lập trình viên chỉ là hiện thực lại grammar đó.</p>\n<h2>Nhưng Khang Hy không có grammar</h2>\n<p>Khang Hy Tự Điển hoàn toàn khác.</p>\n<p>Không có bất kỳ tài liệu nào nói rằng:</p>\n<blockquote class=\"ai-answer\"><p>Nếu gặp chuỗi này thì hãy hiểu như thế này.</p></blockquote>\n<p>Không có BNF.</p>\n<p>Không có EBNF.</p>\n<p>Không có RFC.</p>\n<p>Không có chuẩn Unicode dành riêng cho phản thiết.</p>\n<p>Mỗi mục từ là kết quả của cách biên soạn học thuật cách đây hơn ba trăm năm.</p>\n<p>Muốn parser được, trước hết phải trả lời một câu hỏi khó hơn nhiều:</p>\n<blockquote class=\"ai-answer\"><p><strong>Người xưa đã viết theo những quy luật nào?</strong></p></blockquote>\n<h2>Không thể viết parser ngay</h2>\n<p>Một sai lầm rất dễ mắc phải là:</p>\n<p>Mở Khang Hy ra.</p>\n<p>Viết Regex.</p>\n<p>Ví dụ.</p>\n<pre><code>(.)(.)切</code></pre>\n<p>Tưởng như vậy là đủ.</p>\n<p>Thực tế chỉ sau vài trăm mục từ đầu tiên, parser sẽ bắt đầu thất bại.</p>\n<p>Bởi vì dữ liệu không hề thống nhất.</p>\n<p>Ví dụ.</p>\n<pre><code>AB切</code></pre>\n<pre><code>AB切某聲</code></pre>\n<pre><code>AB切又音</code></pre>\n<pre><code>AB切讀若……</code></pre>\n<pre><code>讀若……</code></pre>\n<pre><code>叶某韻</code></pre>\n<pre><code>俗音……</code></pre>\n<pre><code>又作……</code></pre>\n<pre><code>古作……</code></pre>\n<p>Nếu coi tất cả đều là phản thiết.</p>\n<p>Toàn bộ dữ liệu sẽ bị phân tích sai.</p>\n<h2>Bước đầu tiên là khảo sát, không phải lập trình</h2>\n<p>Thay vì viết parser ngay.</p>\n<p>Quizzman thực hiện một công việc giống nghiên cứu ngôn ngữ học hơn.</p>\n<p>Đó là khảo sát hàng chục nghìn mục từ để tìm xem:</p>\n<ul>\n<li>những mẫu nào xuất hiện thường xuyên;</li>\n<li>những ghi chú nào mang ý nghĩa ngữ âm;</li>\n<li>những ghi chú nào chỉ là chú thích.</li>\n</ul>\n<p>Có thể hình dung quy trình như sau.</p>\n<pre><code>Khang Hy\n\n↓\n\nQuan sát\n\n↓\n\nThống kê\n\n↓\n\nPattern\n\n↓\n\nGrammar\n\n↓\n\nParser</code></pre>\n<p>Parser chỉ xuất hiện ở bước cuối cùng.</p>\n<h2>Mục tiêu đầu tiên là nhận diện nguồn</h2>\n<p>Một mục trong Khang Hy thường không chỉ có một phản thiết.</p>\n<p>Nó còn trích dẫn rất nhiều vận thư.</p>\n<p>Ví dụ.</p>\n<pre><code>廣韻\n\n↓\n\n...\n\n集韻\n\n↓\n\n...\n\n唐韻\n\n↓\n\n...</code></pre>\n<p>Đối với con người.</p>\n<p>Đây chỉ là phần chú thích.</p>\n<p>Đối với Quizzman.</p>\n<p>Đây là metadata cực kỳ quan trọng.</p>\n<p>Parser phải biết:</p>\n<ul>\n<li>phản thiết này lấy từ đâu;</li>\n<li>nguồn nào đang được trích dẫn;</li>\n<li>đâu là phản thiết chính;</li>\n<li>đâu chỉ là tham khảo.</li>\n</ul>\n<p>Nếu không nhận diện đúng nguồn.</p>\n<p>Candidate Ranking sẽ mất toàn bộ cơ sở để đánh giá.</p>\n<h2>Không phải mọi &quot;切&quot; đều giống nhau</h2>\n<p>Điểm khó tiếp theo nằm ở chính phản thiết.</p>\n<p>Nhiều người nghĩ chỉ cần gặp chữ:</p>\n<pre><code>切</code></pre>\n<p>là có thể lấy hai chữ phía trước.</p>\n<p>Nhưng thực tế.</p>\n<p>Sau khi khảo sát Khang Hy, Quizzman phát hiện rất nhiều pattern khác nhau.</p>\n<p>Ví dụ.</p>\n<pre><code>AB切</code></pre>\n<p>Đây là phản thiết chuẩn.</p>\n<p>Nhưng còn có:</p>\n<pre><code>AB切某聲</code></pre>\n<pre><code>AB切又音</code></pre>\n<pre><code>AB切音某</code></pre>\n<pre><code>AB切讀若……</code></pre>\n<p>Mặc dù đều chứa chữ &quot;切&quot;.</p>\n<p>Ý nghĩa của chúng hoàn toàn khác nhau.</p>\n<h2>Khó nhất là dạng &quot;AB切某聲&quot;</h2>\n<p>Đây là một trong những phát hiện quan trọng nhất khi xây dựng parser.</p>\n<p>Thoạt nhìn.</p>\n<pre><code>AB切某聲</code></pre>\n<p>giống như:</p>\n<pre><code>AB切</code></pre>\n<p>kèm thêm vài chữ giải thích.</p>\n<p>Nhưng sau khi khảo sát nhiều mục từ.</p>\n<p>Quizzman nhận thấy điều đó không đúng.</p>\n<p>Trong rất nhiều trường hợp.</p>\n<p>Phần:</p>\n<pre><code>某聲</code></pre>\n<p>không phải chú thích.</p>\n<p>Nó thay đổi chính hồ sơ ngữ âm.</p>\n<p>Nói cách khác.</p>\n<p>Parser phải hiểu rằng:</p>\n<ul>\n<li>thanh mẫu vẫn lấy theo phản thiết;</li>\n<li>vận vẫn lấy theo phản thiết;</li>\n<li>nhưng thanh điệu phải được ghi đè theo ghi chú phía sau.</li>\n</ul>\n<p>Nếu parser bỏ qua chi tiết này.</p>\n<p>Middle Chinese Reconstruction sẽ sai ngay từ đầu.</p>\n<h2>&quot;讀若&quot; không phải phản thiết</h2>\n<p>Một nhóm khác cũng dễ gây nhầm lẫn là:</p>\n<pre><code>讀若……</code></pre>\n<p>Nếu dịch sát.</p>\n<p>Đây chỉ là:</p>\n<blockquote><p>đọc giống như...</p></blockquote>\n<p>Nó không mô tả đầy đủ:</p>\n<ul>\n<li>thanh mẫu;</li>\n<li>vận;</li>\n<li>thanh.</li>\n</ul>\n<p>Do đó.</p>\n<p>Đây không phải dữ liệu thích hợp để phục dựng Middle Chinese.</p>\n<p>Parser phải nhận diện:</p>\n<pre><code>讀若\n\n↓\n\nPhonetic Hint</code></pre>\n<p>chứ không phải:</p>\n<pre><code>讀若\n\n↓\n\nFanqie</code></pre>\n<h2>&quot;叶韻&quot; cũng không phải phát âm chuẩn</h2>\n<p>Một trường hợp khác là:</p>\n<pre><code>叶韻</code></pre>\n<p>hay:</p>\n<pre><code>協韻</code></pre>\n<p>Những ghi chú này xuất hiện chủ yếu trong thơ ca.</p>\n<p>Chúng mô tả:</p>\n<ul>\n<li>cách đọc để hiệp vần;</li>\n<li>hoặc một biến thể phục vụ thi ca.</li>\n</ul>\n<p>Nếu parser coi đây là phát âm chuẩn.</p>\n<p>Engine sẽ đưa rất nhiều dữ liệu sai vào hệ thống.</p>\n<p>Do đó.</p>\n<p>Quizzman phân loại riêng:</p>\n<pre><code>叶韻\n\n↓\n\nRhyme Annotation</code></pre>\n<p>không đi vào pipeline suy diễn Hán Việt.</p>\n<h2>Parser thực chất là một Grammar Classifier</h2>\n<p>Sau nhiều lần điều chỉnh.</p>\n<p>Quizzman không còn coi parser là một bộ Regex.</p>\n<p>Thay vào đó.</p>\n<p>Parser hoạt động giống một bộ phân loại ngữ pháp.</p>\n<p>Ví dụ.</p>\n<div class=\"table-wrap\"><table><thead><tr><th>Pattern</th><th>Loại</th></tr></thead><tbody><tr><td>AB切</td><td>Fanqie</td></tr><tr><td>AB切某聲</td><td>Fanqie + Tone Override</td></tr><tr><td>讀若</td><td>Phonetic Hint</td></tr><tr><td>叶韻</td><td>Rhyme Annotation</td></tr><tr><td>又音</td><td>Alternate Reading</td></tr><tr><td>古音</td><td>Historical Reading</td></tr><tr><td>俗音</td><td>Colloquial Reading</td></tr></tbody></table></div>\n<p>Chỉ sau khi xác định đúng loại.</p>\n<p>Engine mới quyết định cách xử lý.</p>\n<h2>Reverse Engineering thay vì Parsing</h2>\n<p>Điểm đặc biệt của Quizzman là:</p>\n<p>Nhóm phát triển không có grammar chính thức để tham khảo.</p>\n<p>Grammar được xây dựng theo chiều ngược lại.</p>\n<pre><code>Hàng chục nghìn mục từ\n\n↓\n\nQuan sát\n\n↓\n\nThống kê\n\n↓\n\nTìm quy luật\n\n↓\n\nMô hình hóa\n\n↓\n\nGrammar\n\n↓\n\nParser</code></pre>\n<p>Trong khoa học máy tính.</p>\n<p>Quá trình này thường được gọi là <strong>Reverse Engineering</strong>.</p>\n<p>Không phải hiện thực hóa một đặc tả đã có.</p>\n<p>Mà là <strong>khôi phục lại đặc tả từ chính dữ liệu</strong>.</p>\n<h2>Parser quyết định chất lượng của toàn bộ Fanqie Engine</h2>\n<p>Rất nhiều người cho rằng phần khó nhất của Quizzman Fanqie Engine là thuật toán suy diễn Hán Việt.</p>\n<p>Thực tế, mọi thuật toán phía sau đều bắt đầu từ parser.</p>\n<p>Nếu parser hiểu sai một mục từ trong Khang Hy:</p>\n<ul>\n<li>phản thiết sẽ sai;</li>\n<li>hồ sơ Middle Chinese sẽ sai;</li>\n<li>thanh điệu sẽ sai;</li>\n<li>Candidate Ranking cũng sẽ sai.</li>\n</ul>\n<p>Vì vậy, parser không đơn thuần là bước &quot;đọc dữ liệu&quot;, mà là nền móng của toàn bộ hệ thống.</p>\n<p>Điều khiến Quizzman Fanqie Engine khác biệt không chỉ là khả năng xử lý phản thiết, mà còn là quá trình <strong>reverse engineering</strong> cách biên soạn của Khang Hy Tự Điển để biến những ghi chép học thuật hơn ba thế kỷ trước thành một hệ thống dữ liệu có cấu trúc, đủ chính xác để máy tính có thể tiếp tục suy luận và giải thích bằng các thuật toán âm vận học.</p><p class=\"series-next\">→ Series 2 · Bài 11: <a href=\"https://wiki.quizzman.com/wiki/vi-sao-quizzman-khong-dung-ai-tu-hoc-quy-luat-am-van\">Vì sao Quizzman không dùng AI để tự học quy luật âm vận?</a></p>","tags":["Chữ Hán","Lập trình","Ngôn ngữ","Phiên thiết","Thuật toán"],"author":"System Legacy","publishedAt":"2026-07-15T09:02:17.560Z","updatedAt":"2026-07-17T02:28:40.088Z","published_at":"2026-07-15T09:02:17.560Z","updated_at":"2026-07-17T02:28:40.088Z","view_count":7,"canonical":"https://wiki.quizzman.com/wiki/vi-sao-parser-khang-hy-kho-hon-parser-html-reverse-engineering","url":"https://wiki.quizzman.com/wiki/vi-sao-parser-khang-hy-kho-hon-parser-html-reverse-engineering","markdownUrl":"https://wiki.quizzman.com/api/articles/vi-sao-parser-khang-hy-kho-hon-parser-html-reverse-engineering.md","apiUrl":"https://wiki.quizzman.com/api/articles/vi-sao-parser-khang-hy-kho-hon-parser-html-reverse-engineering"}