Trong phần này chúng tơi trình bày các định dạng của các tập tin được dùng trong các hệ thống mà chúng tơi triển khai. Một số tập tin có cấu trúc được công bố và sử dụng rộng rãi, đa số được chúng tôi thiết kế cục bộ cho hệ thống.
5.1.1. Tập tin âm thanh
Có rất nhiều định dạng tập tin âm thanh khác nhau, nhưng chúng tôi sử dụng tập tin WAV với định dạng PCM để lưu thông tin âm thanh. Khơng có nhiều thơng tin âm thanh được lưu trữ trong các chương trình giao diện đồ hoạ do việc huấn luyện và nhận dạng xảy ra trực tuyến. Tuy nhiên chúng tôi lưu trữ âm thanh theo định dạng tập tin như sau
Tên trường Kích thước (byte) Ý nghĩa
riff 4 Gồm bốn ký tự “RIFF” đánh dấu đây là tập tin đa phương tiện trong Windows
file_size 4 Độ dài của tập tin âm thanh. Thường là phần format cộng với data
wave 4 Gồm bốn ký tự “WAVE” xác định đây là tập tin âm thanh, không phải video
fmt 4 Gồm bốn ký tự “fmt ” xác định điểm bắt đầu của định dạng. Ta nên tìm đến (seek) khối này
fmt_size 4 Kích thước của fmt. Thơng thường là 16 hoặc 18 tuỳ vào chương trình ghi âm
fmt_tag 2 Định dạng của phần dữ liệu. Có giá trị là 1 tương ứng với định dạng PCM
CPS 2 Số kênh trên một mẫu. 1 ứng với mono, và 2 ứng với stereo.
SPS 4 Tần số lấy mẫu, hay là số mẫu trên một giây. Có giá trị 8000Hz, 16000Hz, 44100Hz ... BYTESEC
(avg_byte_sec)
4 Số ơ nhớ trên một đơn vị thời gian, tính bằng công thức BPC*CPS*SPS/8
BYTESAM (block_align)
2 Số ô nhớ dành cho một mẫu, dùng để tính số mẫu, cơng thức BPC*CPS/8
BPC 2 Số bít trên mỗi kênh, thường là 8 hoặc 16, có thể là 32
data 4 Gồm bốn ký tự “data” đánh dấu điểm bắt đầu của dữ liệu âm thanh. Nên tìm đến (seek) data_size 4 Kích thước của dữ liệu âm thanh tính ra byte.
Đổi ra số mẫu bằng cách chia cho BYTESAM data_samp data_size Các mẫu sẽ được lưu liền kề nhau. s1, s2, s3.
Nếu mẫu có hai kênh thì kênh trái lưu trước rồi phải lưu sau. Nếu mỗi kênh có 16 bít, thì 8 bít thấp lưu trước và 8 bít cao lưu sau.
Bảng 5-1. Định dạng tập tin âm thanh5.1.2. Tập tin nhãn (label file format) 5.1.2. Tập tin nhãn (label file format)
Tập tin nhãn dùng để đánh nhãn các tập tin, nghĩa là xác định một khoảng (a, b) là của từ gì, và (c, d) là của từ gì. Một tập tin nhãn là tập tin văn bản thuần tuý. Chúng tôi lưu thêm thơng số cơ sở (base) để xác định dịng cơ sở sẽ hiển thị nhãn (chỉ dùng trong hiển thị). Mỗi đoạn được lưu trên một dòng, trường đầu là tên từ, là
một chuỗi ký tự bọc trong hai dấu ngoặc kép. Trường thứ hai là điểm bắt đầu của đoạn trong tập tin âm thanh, trường thứ ba là điểm kết thúc của đoạn trong tập tin âm thanh, và trường thứ tư là dòng cơ sở để hiển thị.
“cộng” 33890 40210 51 “hoà” 48231 64791 73 “xã” 64377 82800 94 “hội” 83214 93771 71 “chủ” 98118 106398 76 “nghĩa” 106795 124614 91 “việt” 126270 133722 72 “nam” 137034 157320 88 Bảng 5-2. Ví dụ về tập tin nhãn
Chỉ số bắt đầu và kết thúc được tính bằng số mẫu. Chúng ta có thể đổi ra thời gian bằng cách chia cho tần số lấy mẫu. Quá trình đổi như vậy sẽ làm mất mát thông tin, nên thông số theo mẫu mặc dù phụ thuộc vật lý vào tập tin âm thanh tương ứng nhưng là thông số nguyên thuỷ.
5.1.3. Tập tin văn phạm (grammar file format)
Tập tin văn phạm chúng tôi dùng là dạng cải tiến của dạng BNF. Một văn phạm được lưu trong tập tin văn bản thuần tuý. Mỗi văn phạm gồm danh sách luật. Mỗi luật cách nhau bằng dấu chấm phảy. Hai luật có cùng vế trái có thể viết gộp nhau và phân cách nhau bằng dấu gạch đứng. Các dấu sao đánh dấu ký tự khởi đầu. Nếu có nhiều dấu sao thì dấu cuối cùng có hiệu lực. Các dấu cộng đánh dấu ký tự là phân loại (part of speech). Ký tự phân loại là ký tự được dùng đặc biệt trong xử lý từ mới. Các ký tự hằng được bọc trong dấu ngoặc kép, do đó ký tự hằng cùng tên với ký tự biến cũng khơng gây xung đột. Người dùng có thể sử dụng các dấu bình chú (comment) giống như ngơn ngữ C++, nghĩa là bình chú dịng và bình chú khối. Bình chú khối được chúng tôi thiết kế để bỏ đi một khối không được dùng trong luật.
//luật khởi đầu *s = n vp; /* phần ngữ danh từ */ +n = "tơi" | "nó"; /* phần ngữ động từ */ vp = v pl; +v = "đi" | "ra"; +pl = "chơi" | "chợ"; Bảng 5-3. Ví dụ về tập tin văn phạm 5.1.4. Tập tin sơ đồ tuyến tính (linear diagram)
Tập tin sơ đồ tuyến tính dùng để lưu sơ đồ chuyển trạng thái tuyến tính. Tập tin này chỉ có tác dụng gỡ rối và minh hoạ. Mỗi một dịng mơ tả một phép chuyển từ trạng thái này sang trạng thái khác, ở giữa có một ký hiệu của phép chuyển. Nếu trạng thái đích có chứa ký hiệu đầu ra, ký hiệu đó sẽ được in ngay ở dịng cuối. (0)----[t]---->(1) (0)----[d]---->(5) (0)----[c]---->(8) (1)----[o]---->(2) (2)----[i]---->(3) tơi (4)----[d]---->(5) (5)----[i]---->(6) (6)----[i]---->(7) đi (8)----[c]---->(9) (9)----[d]---->(10) chơi (9)----[e]---->(11) chợ 0 t 1 2 3 “t«i” o i 4 d d 5 i c 8 c 9 d 10 “ch¬i” e 11 “chỵ” 6 i