Cụ thể mình đang làm thử 1 chương trình từ điển chạy trên file và muốn đọc dữ liệu các từ bất kì từ file mà mình đã đưa từ vào
Làm cách nào để mình đọc một dữ liệu bất kì trong 1 file trong Java
File của bạn là dạng text hay binary?
Kích thước file khoảng bao nhiêu MB?
Từ 2 thông tin trên, ta sẽ chọn giải pháp phù hợp.
mình sử dụng dạng text bạn à
MB thì mình chưa thể rõ bạn ơi vì sau này mình có thể bổ sung thêm từ bên ngoài vào nhưng lớn cx được
Định dạng file đó theo xml hay json. Học thêm cơ chế cách parse 1 trong 2 định dạng đó.
Hiện tại trên mạng có nhìu bộ từ điển free theo chuẩn . Cũng là 1 lựa chọn để làm 1 ứng dụng từ điển
thank kiu bạn nhưng mà trước mắt mình muốn thử theo kiểu text thì có cách nào giải quyết câu hỏi của mình nhỉ?
Tức là bạn muốn đọc các từ ở file ra á @@ Câu hỏi của bạn rối quá. Theo mình nghĩ thì bạn cần đọc file .txt
rồi lưu dữ liệu và Hashmap, với key là từ gốc còn value là nghĩ dịch ra.
Nếu bạn muốn đọc dữ liệu từ file thì bạn nên chọn một format cho file của bạn, có thể là các dạng file phổ biến như json hay xml, hoặc các dạng từ điển mã nguồn mở luôn public structure của file dict như GoldenDict
Dựa vào structure của file để bạn viết POJO
Dạng text thì ai cũng hiểu.
JSON cũng là text
XML cũng là text
Nhưng mà kích thước như thế nào. Nếu 1MB thì cách xử lý khác mà 50MB thì cách xử lý khác.
Nếu dữ liệu nhỏ thì đọc vào lưu trên bộ nhớ (RAM).
Nhưng lớn thì việc này tốn bộ nhớ lắm. Mỗi lần tra từ phải đọc từ tập tin. Vấn đề nữa làm tập tin lớn thì truy xuất lâu và không biết vị trí từ cần tra ở đâu nên vẫn phải đọc từ đầu tập tin. Nhất là dạng thuần văn bản.
Cách cơ bản là: Lập danh sách các từ cần dịch ở đầu tập tin (hoặc tập tin riêng biệt) kèm theo là vị trí con trỏ đọc (có thể cả độ dài dữ liệu nữa), giảm thời gian đọc cả từ và nghĩa của các từ khác, do nghĩa - đa nghĩa - ví dụ chiếm phần rất nhiều. Khi tra được từ thì nhảy con trỏ ngay đến vị trí đó và đọc nghĩa của từ.
Kết hợp với chia nhóm kí tự sẽ càng giảm thời gian truy xuất.
VD:
world -> nhóm W -> world + con trỏ -> nghĩa
Sẽ nhanh hơn tra từ đầu 0-9,a-b-c...
Nếu bạn có một tập tin từ điển sẵn rồi thì phải chuyển nó về dạng thích hợp.
Hoặc sử dụng nhiều tập tin. Bạn có 26 chữ cái, ta sẽ dùng 26 file. Nếu cảm thấy không đủ thì lại chia tiếp, chia tiếp, chia tiếp, đến khi nào một file chỉ còn không quá 2MB, nhưng phải có quy tắc để với một từ bất kỳ, ta tính được nó nằm ở file nào mà không cần tìm.
Chẳng hạn, khi bạn có từ world, bạn dùng một phép tính hoặc một quy ước nào đó, bạn biết từ world nằm ở file thứ 391. Bạn nạp cả file thứ 391 lên RAM rồi tìm trong đó.