30/09/2018, 20:16

Database gì cho web service tra từ điển

Mình đang học Golang và định làm bài tập bằng cách viết một cái web service nhỏ nhỏ tra từ điển việt - anh, anh - việt.

Yêu cầu

  • Nhanh
  • Có thể autocomplete được

Vẫn đang phân vân là phần database kiểu gì ?

Một số lựa chọn đang có trong đầu:

  • Dump data ra thành một file rồi viết thuật toán riêng để đọc (Câu trả lời này trên SO có vẻ hợp lí http://stackoverflow.com/a/10017860/3976412)
  • NoSQL -> Redis zrangebylex (autocomplete)

Thêm nữa

  • http://www.geeksforgeeks.org/data-structure-dictionary-spell-checker/
Jo Ker viết 22:22 ngày 30/09/2018

Hình như cái này thuộc dạng big data
Theo ý kiến cá nhân mình, nếu xài database table, thì nên chia càng nhiều bảng càng tốt (Theo các tiêu chí nào đó) để giảm thời gian query.
Ví dụ, theo tiêu chí ngôn ngữ: Mỗi một ngôn ngữ là một bảng.
P/S: Mình biết có nhiêu đó.

Khoa Nguyen viết 22:30 ngày 30/09/2018

Hình như cái này thuộc dạng big data

Cũng không hẳn là Big Data. Tuy số row có thể lên đến hàng triệu nhưng mà cái này là dạng key - value đơn giản .

Mình đã tìm ra giải pháp là dùng Binary file. Mình sẽ lấy ví dụ với định dạng của MDict (từ điển nổi tiếng, cross-platform từ thời Window Phone). Định dạng từ điển của nó là close source như mà đã được reverse engine gần như đầy đủ.
Parser: chạy trên browser, Javascript: https://github.com/fengdh/mdict-js . Bạn có thể thử với 1 file mdd bất kì và sẽ thấy tốc độ ~ real time. Nên nhớ đây là browser
Parser viết ở vài ngôn ngữ khác:
C. NET: https://mdict.codeplex.com/
Python: https://bitbucket.org/xwang/mdict-analysis

Jo Ker viết 22:32 ngày 30/09/2018

Nó truy xuất trực tiếp từ file thì tất nhiên là nhanh chứ nhỉ? Vì tốc độ của một app theo client-server còn phụ thuộc vào nhiều yếu tố khác nữa.
Mà định dạng MDict này chỉ có vài ngôn ngữ đọc được nó, mình không có xài được

Bùi Đình Ngọc viết 22:22 ngày 30/09/2018

Làm chơi thì làm bằng gì cũng được . Làm thật thì ko dùng db . Mà phải viết để đọc được data của thằng khác . Ưu tiên các định dạng mở .

Khoa Nguyen viết 22:21 ngày 30/09/2018

Làm thật thì ko dùng db

ANh có biết định dạng từ điển nào mở không ? Đã đọc được định dạng của lingoes và mdict

Khoa Nguyen viết 22:27 ngày 30/09/2018

Mà định dạng MDict này chỉ có vài ngôn ngữ đọc được nó, mình không có xài được

reverse engineering nó thế nào ?

khoa-nguyen-blog

Tìm hiểu định dạng .mdd và .mdx của MDict

MDict là một phần mềm đọc tự điển cho định dạng MDD và MDX (cũng do MDict tạo ra) với khả năng tra những danh mục từ điển hàng nghìn từ một…

Nói chung là giải thích rất cặn kẽ. Đã có sẵn code cho vài ngôn ngữ, có thể dễ dàng port sang ngôn ngữ khác

Bùi Đình Ngọc viết 22:29 ngày 30/09/2018

en.m.wikipedia.org

GoldenDict

GoldenDict is an open-source dictionary program that gives translations of words and phrases for different languages. It allows the use of several popular dictionary file formats simultaneously and without conversion. The project aims to create a feature-rich dictionary search program. Compared to other similar software GoldenDict:


Mục features có kể tên vài định dạng phổ biến .

Jo Ker viết 22:31 ngày 30/09/2018

Cho em hỏi cái là sao lại không dùng db ạ?

Thành Phạm viết 22:22 ngày 30/09/2018

Sao anh không dùng dạng bgl á, từ điển vô số luôn

askubuntu.com
user1362452

Good offline dictionaries for GoldenDict

dictionary, goldendict
asked by user1362452 on 03:34PM - 02 Jun 15
Khoa Nguyen viết 22:29 ngày 30/09/2018

Tốc độ mình không kiểm soát được. Không nén được. Và tốn ram không cần thiết vì phải chạy database

Khoa Nguyen viết 22:22 ngày 30/09/2018

Ý làm em đang tìm định dạng từ điển open source đó anh. Có đầy đủ spec để tự tạo từ điển.

Jo Ker viết 22:18 ngày 30/09/2018

Tốc độ mình không kiểm soát được. Không nén được. Và tốn ram không cần thiết vì phải chạy database

Vậy cho mình hỏi thêm là định dạng nén thì muốn chỉnh sửa như thêm/bớt như thế nào? (Từ phía người dùng), rồi tạo relation đến những cái khác thì làm sao? ví dụ như tạo danh mục cho mỗi từ.

Khoa Nguyen viết 22:21 ngày 30/09/2018

muốn chỉnh sửa như thêm/bớt như thế nào

Không nằm trong mục tiêu của mình.

Bài liên quan
0