1. Trang chủ
  2. » Luận Văn - Báo Cáo

Luận văn: Tra từ điển Anh Việt qua camera trên điện thoại di động dùng android

98 6 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Tra Từ Điển Anh Việt Qua Camera Trên Điện Thoại Di Động Dùng Android
Tác giả Trần Văn Tri, Nguyễn Minh Trí
Người hướng dẫn ThS. Bùi Tấn Lộc, PGS. TS. Đinh Điền
Trường học Trường Đại Học Khoa Học Tự Nhiên
Chuyên ngành Công nghệ Thông tin
Thể loại Luận văn tốt nghiệp cử nhân CNTT
Năm xuất bản 2012
Thành phố TpHCM
Định dạng
Số trang 98
Dung lượng 4,01 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Cấu trúc

  • Chương 1 TỔNG QUAN (15)
    • 1.1. Bối cảnh và nhu cầu thực tế (15)
    • 1.2. Mục tiêu (0)
    • 1.3. Các đề tài liên quan (0)
    • 1.4. Nội dung khóa luận (18)
  • Chương 2 CÁC KỸ THUẬT CƠ BẢN TRÊN ANDROID (20)
    • 2.1. Sơ lược về Android (20)
      • 2.1.1. Tổng quan (20)
      • 2.1.2. Các phiên bản Android (21)
      • 2.1.3. Kiến trúc và thiết kế (22)
      • 2.1.4. Máy ảo Dalvik (24)
      • 2.1.5. Android software development kit (SDK) (25)
    • 2.2. Native development kit (NDK) (26)
      • 2.2.1. Giới thiệu chung (26)
      • 2.2.2. Các hỗ trợ của NDK (27)
      • 2.2.3. Sử dụng NDK (27)
      • 2.2.4. Nội dung của bộ NDK (28)
      • 2.2.5. Giới thiệu về JNI – Java native interface (29)
  • Chương 3 NHẬN DẠNG KÝ TỰ QUANG HỌC (32)
    • 3.1. Giới thiệu chung (32)
      • 3.1.1. Sơ lược về nhận dạng ký tự quang học – OCR (32)
      • 3.1.2. Các phương pháp áp dụng OCR trong luận văn (32)
      • 3.1.3. So sánh các thư viện / công cụ nhận dạng ký tự quang học (34)
      • 3.1.4. Kết luận (35)
    • 3.2. Giới thiệu về bộ nhận dạng ký tự quang học Tesseract (36)
      • 3.2.1. Lịch sử (36)
      • 3.2.2. Kiến trúc hoạt động (38)
      • 3.2.3. Cài đặt và sử dụng thư viện Tesseract trên Android (39)
      • 3.2.4. Huấn luyện dữ liệu trên Tesseract (43)
      • 3.2.5. Quá trình huấn luyện ngôn ngữ và font mới (44)
  • Chương 4 TRA TỪ ĐIỂN ANH-VIỆT (49)
    • 4.1. Tổng quan (49)
    • 4.2. Khôi phục từ gốc (Stemming) (51)
    • 4.3. Tìm từ gần đúng (54)
      • 4.3.1. Khoảng cách Levenstein (54)
      • 4.3.2. Thay thế các ký tự gần đúng (56)
    • 4.4. Cấu trúc dữ liệu từ điển (57)
      • 4.4.1. Tổ chức các mục từ có cùng kích thước cố định (58)
      • 4.4.2. Tổ chức các mục từ có kích thước biến động (58)
      • 4.4.3. Tổ chức dữ liệu từ điển tra cứu nhanh (59)
  • Chương 5 CÀI ĐẶT VÀ THỰC NGHIỆM ỨNG DỤNG (64)
    • 5.1. Vẽ khung và các control trên màn hình camera (64)
    • 5.2. Thu nhận ảnh từ camera điện thoại (66)
    • 5.3. Hiển thị tiếng Việt và định dạng chữ trên màn hình (69)
      • 5.3.1. Hiển thị tiếng Việt trên Android (70)
      • 5.3.2. Định dạng ngữ nghĩa từ điển (71)
    • 5.4. Mã hóa dữ liệu từ điển (75)
    • 5.5. Lưu trữ cấu hình chức năng của ứng dụng (77)
    • 5.6. Kỹ thuật phát âm từ tiếng Anh dùng API trên Android (80)
    • 5.7. Môi trường phát triển ứng dụng (82)
    • 5.8. Hướng dẫn cài đặt và sử dụng (83)
      • 5.8.1. Cài đặt chương trình (83)
      • 5.8.2. Hướng dẫn sử dụng (84)
    • 5.9. Kết quả thử nghiệm (88)
      • 5.9.1. Thử nghiệm khối nhận dạng ký tự (88)
      • 5.9.2. Thử nghiệm khối xử lý ngôn ngữ (90)
      • 5.9.3. Đánh giá kết quả (92)
      • 5.9.4. So sánh ứng dụng với các ứng dụng hiện có trên thị trường (92)
  • TÀI LIỆU THAM KHẢO (0)

Nội dung

TỔNG QUAN

Bối cảnh và nhu cầu thực tế

Trong thời đại công nghệ thông tin bùng nổ, các thiết bị điện tử như máy tính, laptop và điện thoại di động ngày càng trở nên phổ biến và mạnh mẽ Điện thoại di động đã trở thành vật dụng thiết yếu trong cuộc sống, với sự phát triển vượt bậc dẫn đến sự ra đời của smartphone Những chiếc smartphone hiện đại không chỉ nhỏ gọn mà còn tích hợp nhiều chức năng hữu ích, đáp ứng nhu cầu trao đổi thông tin và chiếm lĩnh thị trường.

Nhu cầu sử dụng từ điển trong học tập và giao tiếp ngày càng tăng, dẫn đến sự ra đời của nhiều ứng dụng từ điển trên thiết bị di động Tuy nhiên, hầu hết các ứng dụng này yêu cầu người dùng phải nhập từ trực tiếp, gây khó khăn cho những người không quen thuộc với ngôn ngữ, đặc biệt là các ngôn ngữ ký tự không phải Latinh như tiếng Trung hay tiếng Nga Điều này trở nên khó khăn hơn khi người dùng không biết nhiều về ngôn ngữ địa phương, chẳng hạn như khi du lịch Do đó, phát triển một ứng dụng từ điển cho phép tra cứu từ qua camera sẽ mang lại sự tiện lợi hơn, nhất là khi hầu hết các smartphone hiện nay đều được trang bị camera.

Hiện nay, thị trường di động chủ yếu được chi phối bởi hai nền tảng chính là iOS của Apple và Android của Google Hệ điều hành Android đang chiếm ưu thế với số lượng thiết bị phong phú từ nhiều nhà sản xuất khác nhau, tạo ra sự đa dạng về mẫu mã.

Nhằm đáp ứng nhu cầu thực tế trong việc tra từ điển bằng camera trên điện thoại, nhóm chúng em đã quyết định phát triển một ứng dụng tra từ điển Anh-Việt trực tiếp qua camera cho nền tảng Android, đang ngày càng phổ biến.

1.2 Các đề tài liên quan

Luận văn này tập trung vào việc phát triển ứng dụng tra từ điển Anh-Việt qua camera trên điện thoại Android, dựa trên nghiên cứu của luận văn thạc sĩ của Nguyễn Hoàng Giang Hiện nay, trên thị trường có nhiều phần mềm nhận diện từ qua camera, trong đó nổi bật là ứng dụng CamDictionary dành cho hệ điều hành Android.

 Đề tài “Xây dựng ứng dụng tra từ điển bằng camera trên điện thoại di động”

Đề tài "Error! Reference source not found." có nhiều điểm tương đồng với đề tài của chúng em, cả hai đều tập trung vào việc tra từ mới qua camera để nhận diện và tra cứu từ điển Cả hai đều sử dụng Tesseract làm công cụ nhận diện ký tự quang học chính Chi tiết về Tesseract sẽ được trình bày trong chương 3 của báo cáo Sự khác biệt duy nhất giữa hai đề tài là nền tảng phát triển: đề tài đầu tiên sử dụng hệ điều hành Symbian của Nokia, trong khi đề tài của chúng em sử dụng nền tảng Android của Google.

Ứng dụng CamDictionary là một phần mềm trên Android cho phép dịch từ qua camera điện thoại, tương đương với các chương trình dịch thuật hiện đại Ứng dụng này được phát triển bởi công ty Insig 1.

Mỹ cung cấp ứng dụng nhận diện ký tự quang học trên nhiều thiết bị như máy quét, điện thoại và máy tính bảng Ứng dụng CamDictionary sử dụng camera điện thoại để nhận diện ký tự hoặc đoạn câu, sau đó dịch qua Google Translate Mặc dù bộ nhận diện ngôn ngữ của CamDictionary khá chính xác, việc tra cứu và dịch từ vẫn phụ thuộc vào kết nối mạng và độ chính xác của dữ liệu từ điển Google Kết quả so sánh tính năng giữa luận án và CamDictionary sẽ được trình bày trong phần tổng kết của báo cáo.

Mục tiêu của đề tài là phát triển một ứng dụng di động sử dụng camera để quét hình ảnh và áp dụng công nghệ nhận diện ký tự quang học (OCR) nhằm trích xuất từ ngữ trong hình ảnh Những từ này sẽ được sử dụng làm dữ liệu đầu vào cho việc tra cứu từ điển Luận văn sẽ tập trung vào việc giải quyết các vấn đề cần thiết để xây dựng ứng dụng tra từ điển qua camera.

 Tìm hiểu về môi trường lập trình trên nền tảng Android

 Tìm hiểu sâu việc lập trình thu nhận ảnh từ camera của điện thoại

Bài viết này sẽ khám phá bài toán nhận dạng ký tự quang học (OCR) và hướng dẫn cách sử dụng thư viện Tesseract OCR Đồng thời, chúng tôi cũng sẽ tìm hiểu quy trình biên dịch mã nguồn của thư viện Tesseract để có thể chạy trên môi trường Android.

 Nghiên cứu xây dựng cấu trúc dữ liệu để thực hiện việc tra từ

Nghiên cứu các thuật toán xử lý ngôn ngữ giúp cải thiện độ chính xác trong việc tra cứu từ cho ứng dụng, bao gồm khôi phục từ gốc và tìm kiếm từ gần đúng, đồng thời áp dụng những thuật toán này vào chương trình.

 Xây dựng ứng dụng hoàn chỉnh với đầy đủ các chức năng đã đề ra đồng thời cải tiến thêm các tính năng mới trong chương trình

1 http://www.intsig.com/en/index.html

Chương trình bao gồm ba phần chính: thu nhận ảnh văn bản từ camera điện thoại, nhận dạng ký tự quang học, và xử lý ngôn ngữ cùng với phần tra từ.

Hình 1.1 Sơ đồ khối tổng quát của chương trình

Nội dung của luận văn bao gồm 6 chương:

Chương 1 Mở đầu: Bối cảnh và nhu cầu thực hiện đề tài, mục tiêu của đề tài và nội dung của khóa luận

Chương 2 Kỹ thuật lập trình cơ bản trên Android: sơ lược về Android, lập trình truy xuất camera, sử dụng công cụ NDK biên dịch mã nguồn trên Android

Chương 3 Nhận dạng ký tự quang học OCR: Giới thiệu chung về nhận dạng ký tự quang học, bộ nhận dạng ký tự quang học Tesseract và cách huấn luyện dữ liệu

Chương 4 Tra từ điển Anh Việt: Cấu trúc dữ liệu từ điển, khôi phục từ gốc và tra từ gần đúng

Chương 5 Cài đặt thực nghiệm: kết quả thử nghiệm và đánh giá chương trình

Kết luận: Hạn chế của luận văn và hướng phát triển trong tương lai.

Nội dung khóa luận

Nội dung của luận văn bao gồm 6 chương:

Chương 1 Mở đầu: Bối cảnh và nhu cầu thực hiện đề tài, mục tiêu của đề tài và nội dung của khóa luận

Chương 2 Kỹ thuật lập trình cơ bản trên Android: sơ lược về Android, lập trình truy xuất camera, sử dụng công cụ NDK biên dịch mã nguồn trên Android

Chương 3 Nhận dạng ký tự quang học OCR: Giới thiệu chung về nhận dạng ký tự quang học, bộ nhận dạng ký tự quang học Tesseract và cách huấn luyện dữ liệu

Chương 4 Tra từ điển Anh Việt: Cấu trúc dữ liệu từ điển, khôi phục từ gốc và tra từ gần đúng

Chương 5 Cài đặt thực nghiệm: kết quả thử nghiệm và đánh giá chương trình

Kết luận: Hạn chế của luận văn và hướng phát triển trong tương lai.

CÁC KỸ THUẬT CƠ BẢN TRÊN ANDROID

Sơ lược về Android

Android là hệ điều hành mở dựa trên nền tảng Linux, được phát triển cho các thiết bị di động như điện thoại thông minh và máy tính bảng Ban đầu, Android được phát triển bởi công ty liên hợp Android, sau đó được Google mua lại vào năm 2005, biến nó thành một hệ điều hành mở Android chính thức ra mắt vào ngày 5/11/2007 cùng với sự thành lập của liên minh thiết bị cầm tay mở OHA, bao gồm hơn 78 công ty viễn thông và phần cứng như Google, Sony Ericsson, Samsung, Nvidia, và Qualcomm Mục tiêu của OHA là phát triển các chuẩn mở chung cho thiết bị di động, với Android là sản phẩm chủ lực Mã nguồn của Android được công bố dưới dạng giấy phép Apache.

Hình 2.1 Điện thoại dùng hệ điều hành Android

Kể từ khi ra mắt, Android đã phát hành nhiều phiên bản khác nhau, mỗi phiên bản đều mang đến những nâng cấp và cải tiến đáng chú ý Dưới đây là danh sách các phiên bản Android hiện có.

 Phiên bản 1.5 (Cupkake): phiên bản chính thức dầu tiên của Android trên điện thoại

 Phiên bản 3.0 / 3.1 (Honeycomb): phiên bản dành riêng cho máy tính bảng (tablet)

 Phiên bản 4.0 / 4.0.1 / 4.0.3 (Icecream sandwich): đây là phiên bản Android mới nhất hiện nay và được dùng trên các điện thoại thông minh và cả máy tính bảng

2.1.3 Kiến trúc và thiết kế

Hình 2.2 Kiến trúc tổng thể của Android [1]

The architecture of the Android operating system is structured into several layers, including Applications, Application Framework, Libraries, Android Runtime, and the Linux Kernel The top two layers, Applications and Application Framework, are developed using the Java programming language, while the lower layers, from Libraries to the Linux Kernel, are written in C/C++, also known as native code.

Tầng Applications là tầng cao nhất trong hệ điều hành Android, bao gồm các ứng dụng được viết và cài đặt sẵn như lịch, trình duyệt web, danh bạ và camera Tất cả các ứng dụng trong tầng này đều được phát triển bằng ngôn ngữ Java.

Tầng Application Framework là nền tảng cho tất cả các ứng dụng, bao gồm các dịch vụ và hệ thống cho phép các nhà phát triển phần mềm gọi các hàm hỗ trợ qua giao diện lập trình ứng dụng API Nó bao gồm các màn hình mở rộng để xây dựng giao diện chương trình như nút bấm, danh sách, hộp thoại và text box Bộ cung cấp nội dung cho phép truy xuất và chia sẻ dữ liệu giữa các ứng dụng, trong khi quản lý tài nguyên đảm bảo truy cập đến các tập tin không phải mã nguồn như chuỗi, tập tin đồ họa và định dạng giao diện Quản lý thông báo chịu trách nhiệm hiển thị các thông báo ở thanh trạng thái, và quản lý hoạt động giám sát vòng đời và chu trình hoạt động của các ứng dụng.

Android sử dụng một hệ thống thư viện C/C++ phong phú, bao gồm các thư viện chính như System C Library, được tinh chỉnh từ các thư viện chuẩn C cho thiết bị Linux Thư viện Media hỗ trợ ghi âm và phát các định dạng nhạc, phim như MPEG4, H.264, MP3, AAC, cùng với hình ảnh JPG và PNG Surface Manager quản lý truy cập vào hệ thống hiển thị, trong khi Live Webcore là công cụ trình duyệt web Các hàm đồ họa 2 chiều được cung cấp bởi SGL, và thư viện 3D hỗ trợ đồ họa 3 chiều Freetype giúp biểu diễn font và vectơ bitmap, còn SQLite là giải pháp cho cơ sở dữ liệu.

Tầng Android Runtime bao gồm các thư viện lõi Java và máy ảo Dalvik, với máy ảo Dalvik thực thi các tập tin định dạng dex Mỗi ứng dụng hoạt động trên một tiến trình riêng biệt của máy ảo Dalvik, cho phép nhiều máy ảo Dalvik chạy hiệu quả trên cùng một thiết bị.

Tầng Linux Kernel là tầng thấp nhất trong hệ điều hành Android, được xây dựng trên nhân Linux 2.6 Tầng này chứa các trình quản lý thiết bị như bàn phím, wifi, âm thanh và quản lý điện năng, cùng với các dịch vụ hệ thống như an ninh, quản lý bộ nhớ, quản lý tiến trình và kết nối mạng Nó đóng vai trò là cầu nối giữa phần cứng và các tầng phần mềm phía trên.

Dalvik là máy ảo cho phép thực thi các ứng dụng Android chủ yếu được viết bằng Java dưới dạng tập tin dex Mặc dù có sự tương đồng với máy ảo Java trên Desktop, Dalvik khác biệt ở chỗ mã nguồn Java được chuyển đổi thành mã bytecode Công cụ "dx" trên Android sẽ chuyển đổi mã bytecode này thành tập tin dex (Dalvik Executable), cho phép máy ảo Dalvik thực thi các ứng dụng Android.

Hình 2.3 Cơ chế hoạt động của máy ảo Dalvik và Java

2.1.5 Android software development kit (SDK)

Bộ phát triển ứng dụng Android (Android SDK) hỗ trợ các nhà phát triển phần mềm trong việc lập trình, gỡ lỗi và kiểm thử ứng dụng trên nền tảng Android Bộ SDK này bao gồm nhiều công cụ cần thiết cho quá trình phát triển ứng dụng.

Thư viện lập trình Android (Android API) là phần cốt lõi của bộ phát triển Android, từ đó Google đã xây dựng nhiều ứng dụng có sẵn.

 Công cụ phát triển: cung cấp sẵn cho các nhà phát triển các công cụ để lập trình, biên dịch, sửa lỗi mã nguồn trong ứng dụng

Tài liệu này cung cấp hướng dẫn chi tiết về cách sử dụng các thư viện, lớp và hàm có sẵn trong môi trường lập trình Android, đồng thời giải thích cơ chế hoạt động của các ứng dụng trên nền tảng Android.

 Ứng dụng mẫu: Bộ Android SDK còn cung cấp các đoạn mã nguồn của chương trình có sẵn

Trình giả lập Android trong bộ Android SDK mang lại sự tiện lợi cho các nhà phát triển bằng cách mô phỏng môi trường làm việc giống như trên thiết bị thật Điều này cho phép họ chạy và sửa lỗi ứng dụng trên giả lập mà không cần thiết bị thực tế.

Hình 2.4 Minh họa trình giả lập điện thoại Android

Native development kit (NDK)

Khi phát triển ứng dụng Android bằng Java, nếu cần gọi các hàm hoặc thư viện viết bằng C/C++, chúng ta cần một giao diện chung giữa hai ngôn ngữ Giao diện này được gọi là Java Native Interface (JNI), cho phép Java truy xuất và hiểu các đoạn mã C/C++.

Native Development Kit (NDK) là bộ công cụ hỗ trợ các nhà phát triển viết hoặc nhúng mã nguồn C/C++ vào ứng dụng Android Nhờ NDK, các ứng dụng có thể gọi mã gốc (native code) và hoạt động trên máy ảo Dalvik.

2.2.2 Các hỗ trợ của NDK

Bộ công cụ NDK cung cấp các hỗ trợ sau:

 Một tập hợp các công cụ và tập tin để phát sinh ra các thư viện mã từ C/C++

 Cách thức nhúng các đoạn mã phát sinh từ C/C++ vào trong tập tin đóng gói ứng dụng (.apk) chạy được trên các thiết bị Android

Tất cả các phiên bản Android từ 1.5 trở đi sẽ được hỗ trợ một tập các header và thư viện Đặc biệt, từ phiên bản 2.3, có thêm hỗ trợ cho việc viết Native Activity.

 Các tài liệu, mã nguồn mẫu và hướng dẫn

Việc sử dụng NDK không phải lúc nào cũng mang lại lợi ích cho chương trình, vì mã gốc (native code) không nhất thiết làm tăng hiệu suất thực thi mà còn có thể làm tăng độ phức tạp cho ứng dụng Do đó, chỉ nên áp dụng mã gốc khi thật sự cần thiết để giảm bớt sự phức tạp cho chương trình.

Android Framework cung cấp 2 cách để sử dụng native code trong chương trình:

Việc phát triển ứng dụng bằng cách sử dụng Android Framework kết hợp với JNI để truy cập các hàm API trong bộ công cụ Android NDK mang lại nhiều lợi ích Kỹ thuật này cho phép chúng ta tận dụng các tính năng của Android Framework trong khi vẫn có khả năng sử dụng mã gốc khi cần thiết.

Để hiện thực cài đặt chu trình của ứng dụng bằng mã gốc, bạn cần viết một native activity Bộ công cụ Android SDK cung cấp lớp NativeActivity, giúp bạn thực hiện cài đặt vòng đời của ứng dụng thông qua các hàm như OnCreate, OnPause, và nhiều hàm khác.

2.2.4 Nội dung của bộ NDK

Bao gồm các công cụ và thư mục sau:

Công cụ phát triển bao gồm các trình biên dịch và trình liên kết để tạo mã nhị phân cho bộ vi xử lý ARM trên các nền tảng Linux, OS X và Windows (kết hợp với Cygwin) Những công cụ này cung cấp hệ thống header cho các hàm API gốc ổn định, đảm bảo hỗ trợ trong tất cả các phiên bản Android sau này.

 Libm (thư viện toán học) header

 Libz (nén và giải nén) header

 Liblog (dùng cho việc ghi log trên Android) header

 OpenGL ES 1.1 và OpenGL ES 2.0 (thư viện đồ họa ba chiều) header

 Libjnigraphics (truy cập vùng nhớ đệm trên các pixel) header

 Các header hỗ trợ cho C++

 OpenSL ES (thư viện âm thanh gốc)

 Các API hỗ trợ ứng dụng gốc trên Android

NDK cung cấp một hệ thống biên dịch mã nguồn hiệu quả mà không cần kiểm soát chi tiết các công cụ, nền tảng, vi xử lý hay ABI Người dùng chỉ cần tạo các tập tin nhỏ để hướng dẫn quá trình biên dịch mã nguồn cho chương trình Dựa vào các tập tin này, NDK sẽ biên dịch mã nguồn để tạo ra thư viện liên kết động và tích hợp trực tiếp thư viện vào dự án.

Bộ NDK bao gồm nhiều tài liệu mô tả các tính năng, cách sử dụng, viết tập tin biên dịch mã nguồn và tạo thư viện liên kết động Người dùng có thể tham khảo thêm thông tin chi tiết trong thư mục /docs.

Các ứng dụng mẫu: Cung cấp các ứng dụng được viết sẵn cho người dùng tham khảo

2.2.5 Giới thiệu về JNI – Java native interface

Để chạy mã C/C++ trên Android, chúng ta cần sử dụng JNI hoặc viết một NativeActivity Sử dụng JNI trên Android là phương pháp phổ biến hơn vì nó tương thích với nhiều loại thiết bị Trong luận văn, chúng tôi cũng áp dụng phương pháp này để thực thi mã nguồn C/C++ trên nền tảng Android.

Hình 2.5 JNI đóng vai trò trung gian trong việc giao tiếp giữa C/C++ và Java

Sau đây là nguyên tắc hoạt động và cách thức viết một JNI trong chương trình [4]:

 Các phương thức được đánh dấu là JNI sẽ thêm từ khóa native ở đầu mỗi hàm

Các hàm C/C++ sẽ được cài đặt trong thư mục JNI của dự án và được biên dịch bởi NDK thành các tệp thư viện liên kết động với định dạng so.

 Để load thư viện liên kết động này thì trong chương trình Java sẽ gọi phương thức System.LoadLibrary(…)

Khi có lời gọi hàm trong chương trình, máy ảo sẽ tìm kiếm các hàm trong thư viện liên kết động và thực thi các phương thức được cài đặt bằng C/C++.

Ví dụ về chương trình hello-jni trong Android:

Chúng tôi đã tạo tập tin hello-jni.c để cài đặt hàm trả về một chuỗi, trong đó tên phương thức được đặt theo định dạng: tên package_tên lớp_tên phương thức.

Java_com_example_hellojni_HelloJni_stringFromJNI( JNIEnv* env, jobject thiz ) { return (*env)->NewStringUTF(env, "Hello from JNI!");

} Sau đó tại thư mục JNI ta tạo tập tin Android.mk là tập tin chỉ thị để biên dịch và cấu hình mã nguồn C/C++ trong Android

Hình 2.6 Nội dung tập tin cấu hình biên dịch trong JNI

Trong tập tin cấu hình Android.mk, hai dòng quan trọng là LOCAL_MODULE và LOCAL_SRC_FILES LOCAL_MODULE chỉ định tên thư viện được tạo ra khi sử dụng NDK, trong khi LOCAL_SRC_FILES xác định các tập tin mã nguồn sẽ được biên dịch thành thư viện trong Android.

Từ Command Line gọi lệnh ndk-build để biên dịch ra thư viện liên kết động hello-jni.so

Tại chương trình chính Java, ta load thư viện lên và gọi phương thức native của hàm trong thư viện: static {

Cuối cùng sử dụng phương thức bằng cách gọi hàm bình thường.

NHẬN DẠNG KÝ TỰ QUANG HỌC

Giới thiệu chung

3.1.1 Sơ lược về nhận dạng ký tự quang học – OCR

Nhận dạng ký tự quang học (OCR) là quá trình chuyển đổi hình ảnh chữ viết hoặc ký hiệu thành văn bản có thể chỉnh sửa trên máy tính Quá trình này nhận đầu vào là tập tin hình ảnh và xuất ra các tập tin văn bản chứa nội dung chữ viết trong hình ảnh OCR được phát triển từ các lĩnh vực nhận dạng mẫu, trí tuệ nhân tạo và thị giác máy tính Hiện nay, kỹ thuật này đã được ứng dụng rộng rãi trong thực tế, đồng thời cũng được nghiên cứu để cải tiến kết quả nhận dạng.

Các hệ thống nhận dạng ký tự quang học thường được triển khai dưới dạng phần mềm trên máy tính hoặc tích hợp trong máy in, máy quét để nhận diện ký tự Một ví dụ điển hình là việc quét hình ảnh văn bản thành tài liệu số lưu trữ trên máy tính.

Hình 3.1 Quá trình thực hiện OCR

3.1.2 Các phương pháp áp dụng OCR trong luận văn

Luận văn này tập trung vào việc áp dụng kỹ thuật nhận dạng ký tự quang học (OCR) trên điện thoại Android để tra từ điển qua camera Có một số phương pháp có thể áp dụng kỹ thuật OCR, trong đó việc tự xây dựng bộ nhận dạng ký tự quang học là khó khăn và tốn thời gian, do đã có nhiều nghiên cứu và phương pháp hiện có Do đó, luận văn không chọn phương pháp này Một phương pháp khác là sử dụng bộ nhận dạng ký tự quang học trực tiếp trên web, nơi điện thoại gửi hình ảnh lên máy chủ để xử lý Phương pháp này dễ thực hiện và có độ chính xác cao, nhưng yêu cầu kết nối internet, gây bất tiện cho người dùng khi không có mạng Cuối cùng, việc sử dụng các thư viện nhận dạng ký tự quang học có sẵn là một lựa chọn khả thi hơn.

Cách này có ưu điểm là dễ thực hiện, chỉ cần cài đặt và biên dịch để chạy trên môi trường Android Nó khắc phục nhược điểm của việc phụ thuộc vào mạng, cho phép ứng dụng hoạt động độc lập Điều này tiết kiệm thời gian vì quá trình xử lý trên khối nhận dạng diễn ra hoàn toàn trên điện thoại.

Hình 3.2 Sơ đồ khối nhận diện ký tự quang học trong chương trình

3.1.3 So sánh các thư viện / công cụ nhận dạng ký tự quang học

Hiện nay, có nhiều bộ thư viện nhận dạng ký tự quang học với độ chính xác cao, giúp tiết kiệm công sức cho người dùng Dưới đây là một số bộ và phần mềm nhận dạng ký tự quang học miễn phí được sử dụng phổ biến.

 Tesseract OCR 2 : là bộ nhận dạng ký tự quang học thương mại ban đầu được phát triển tại công ty HP (Hewlett-Packard) trong khoảng 1985 –

Vào năm 1995, phần mềm nhận dạng ký tự quang học đã giành giải thưởng top 3 về độ chính xác tại hội nghị thường niên của UNLV Sau đó, bộ nhận dạng này được chuyển thành mã nguồn mở trên Google và tiếp tục được phát triển nhờ sự đóng góp của nhiều lập trình viên chuyên nghiệp Hiện tại, Ray Smith là trưởng bộ phận của dự án này.

GOCR 3 là một phần mềm nhận dạng ký tự quang học (OCR) được phát triển dưới giấy phép công cộng GNU, do Joerg Schulenberg khởi xướng vào năm 2000.

FreeOCR 4 là phần mềm nhận dạng ký tự quang học (OCR) chính xác hàng đầu, sử dụng bộ engine Tesseract của HP Ngoài ra, FreeOCR còn cung cấp dịch vụ OCR trực tuyến trên web, giúp người dùng dễ dàng truy cập và sử dụng.

JavaOCR 5 là phần mềm nhận dạng ký tự quang học được phát triển hoàn toàn bằng thư viện Java, chuyên dụng cho xử lý ảnh và nhận dạng ký tự Phần mềm này nổi bật với việc tiêu tốn ít tài nguyên bộ nhớ, dễ dàng triển khai trên các thiết bị di động có hạn chế về bộ nhớ, và hoàn toàn sử dụng ngôn ngữ Java.

Trong các thư viện nhận dạng ký tự quang học trên thì bộ nhận dạng Tesseract OCR nổi trội nhất với các ưu điểm sau:

 Có lịch sử phát triển lâu dài và mang độ chính xác cao ngay từ khi mới ra mắt

 Khả năng mở rộng và tùy biến cao đồng thời được Google tài trợ và đông đảo các nhà phát triển tham gia đóng góp cho Tesseract

Phiên bản mới được cập nhật thường xuyên, hỗ trợ nhiều ngôn ngữ hơn và có khả năng huấn luyện trên các ngôn ngữ mới cùng với nhiều loại font chữ khác nhau.

Tesseract đã trở nên phổ biến trong việc nhận dạng ký tự nhờ vào việc nhiều phần mềm OCR hiện nay sử dụng bộ nhận dạng này.

4 http://www.free-ocr.com/

5 http://sourceforge.net/projects/javaocr/ khả năng hỗ trợ trên nhiều môi trường, nền tảng khác nhau từ máy tính cho đến các thiết bị di động

Trong luận văn này, nhóm chúng em sẽ sử dụng Tesseract để thực hiện quá trình nhận dạng ký tự, nhờ vào những ưu điểm nổi bật của nó.

Giới thiệu về bộ nhận dạng ký tự quang học Tesseract

Tesseract là phần mềm mã nguồn mở, được nghiên cứu và phát triển bởi Hewlett Packard (HP) từ năm 1984 đến 1994 Năm 1995, Tesseract đã đạt được vị trí trong top ba bộ nhận dạng OCR hàng đầu về độ chính xác tại hội nghị thường niên của tổ chức UNLV.

Tesseract, ban đầu là một dự án nghiên cứu tiến sĩ tại phòng thí nghiệm HP ở Bristol, đã được tích hợp vào các máy quét phẳng của hãng dưới dạng add-on phần cứng hoặc phần mềm Tuy nhiên, dự án này đã gặp thất bại ngay từ đầu vì chỉ hoạt động hiệu quả trên các tài liệu in có chất lượng tốt.

Dự án Tesseract, hợp tác với bộ phận máy quét HP tại Colorado, đã đạt được độ chính xác cao trong nhận dạng, vượt qua nhiều bộ nhận dạng OCR thời bấy giờ Tuy nhiên, do độ cồng kềnh và phức tạp, dự án không thể trở thành sản phẩm hoàn chỉnh và được chuyển về phòng thí nghiệm của HP để nghiên cứu nén và tối ưu mã nguồn Tesseract tập trung cải thiện hiệu năng dựa trên độ chính xác đã có và hoàn tất vào cuối năm 1994 Năm 1995, Tesseract tham dự hội nghị UNLV về độ chính xác của OCR, nổi bật hơn so với các phần mềm cùng thời Mặc dù không trở thành sản phẩm thương mại, vào năm 2005, HP đã chuyển Tesseract sang mã nguồn mở với sự tài trợ của Google Đến nay, Tesseract vẫn được nhiều nhà phát triển cộng tác và phiên bản mới nhất là 3.0.1.

Bảng 3.1 So sánh phần mềm thương mại và Tesseract

Phần mềm thương mại Bộ nhận dạng Tesseract

Hỗ trợ hơn 100 ngôn ngữ Hỗ trợ trên 40 ngôn ngữ và đang tăng dần

Có giao diện đồ họa Không hỗ trợ giao diện đồ họa (dùng

Command Line để gõ lệnh)

Hầu hết chỉ hỗ trợ trên nền tảng Windows

Hỗ trợ trên các hệ điều hành Windows, Linux và Mac OS, sản phẩm này đã đạt độ chính xác cao từ năm 1995 Mặc dù chi phí sử dụng dao động từ 130$ đến 500$, nhưng cũng có lựa chọn hoàn toàn miễn phí với mã nguồn mở.

Tesseract là bộ thư viện mã nguồn mở miễn phí, đã dẫn đến sự phát triển của nhiều phần mềm nhận dạng ký tự quang học trên toàn thế giới Những phần mềm này thường có giao diện và tính năng dễ sử dụng hơn so với phiên bản Tesseract ban đầu Ví dụ, VietOCR 6 hỗ trợ nhận dạng tiếng Việt, Tessenet2 7 là bộ nhận diện Tesseract trên nền Net của Microsoft, và có cả giao diện Java (Java GUI frontend) cho Tesseract.

Bảng 3.2 Độ chính xác của Tesseract trên một số ngôn ngữ

Ngôn ngữ Tổng số ký tự

6 http://vietocr.sourceforge.net/usage_vi.html

7 http://www.pixel-technology.com/freeware/tessnet2/

3.2.2 Kiến trúc hoạt động Đầu tiên, bộ nhận diện Tesseract sẽ nhận đầu vào là ảnh màu hoặc ảnh mức xám Ảnh này sẽ được chuyển đến bộ phận phân tích ngưỡng thích ứng (adaptive thresholding) để cho ra ảnh nhị phân Vì trước kia HP cũng đã phát triển bộ phận phân tích bố cục trang nên Tesseract không cần phải có thành phần đó và được thừa hưởng từ HP Vì thế mà Tesseract nhận đầu vào là một ảnh nhị phân với các vùng đa giác tùy chọn đã được xác định

Tesseract ban đầu được phát triển để nhận diện ảnh nhị phân, nhưng sau đó đã được cải tiến để hỗ trợ cả ảnh màu và ảnh mức xám Do đó, cần có bộ phận phân tích ngưỡng thích ứng để chuyển đổi ảnh màu và ảnh mức xám sang định dạng ảnh nhị phân.

Sau đó quá trình nhận dạng sẽ được thực hiện tuần tự theo từng bước

 Bước đầu tiên là phân tích các thành phần liên thông Kết quả của bước này sẽ là tạo ra các đường bao quanh các ký tự

Bước thứ hai là xác định hàng và từ, kết quả sẽ tạo ra các vùng bao quanh các ký tự và hàng chữ trong văn bản.

Bước tiếp theo trong quá trình nhận dạng từ là thực hiện qua hai giai đoạn Giai đoạn đầu tiên tập trung vào việc nhận diện các từ theo lượt, và những từ đáp ứng yêu cầu sẽ được chuyển đến bộ phân loại thích ứng để làm dữ liệu huấn luyện Nhờ vào quá trình này, bộ phân loại sẽ cải thiện khả năng nhận diện ở giai đoạn sau Sau khi bộ phân loại đã học được thông tin hữu ích từ giai đoạn đầu, giai đoạn thứ hai sẽ quét toàn bộ trang, nhận diện lại các từ chưa chính xác Cuối cùng, bộ nhận diện sẽ tổng hợp thông tin và đưa ra kết quả nhận diện hoàn chỉnh.

Hình 3.3 Kiến trúc tổng thể của Tesseract [2]

3.2.3 Cài đặt và sử dụng thư viện Tesseract trên Android

Thư viện mã nguồn của Tesseract, được viết bằng C/C++, hoạt động trên các nền tảng Windows và Linux Để sử dụng thư viện này trên Android, cần chuyển đổi mã nguồn sang hệ điều hành Android Có hai phương pháp để thực hiện việc chuyển đổi này.

Một phương pháp là viết lại mã nguồn Tesseract bằng thư viện lập trình Java, do các ứng dụng Android thường sử dụng ngôn ngữ này Ưu điểm của phương pháp này là nếu thực hiện thành công, chương trình sẽ hoạt động hiệu quả hơn, vì mã nguồn Java tối ưu cho hệ điều hành Android Tuy nhiên, việc này có thể khó khăn cho lập trình viên, vì họ sẽ phải viết lại toàn bộ chương trình từ đầu, điều này tốn nhiều thời gian và có thể không mang lại hiệu quả cao.

Cách thứ hai để sử dụng lại các hàm thư viện C/C++ trên bộ Tesseract là thông qua JNI trên Android Phương pháp này mang lại lợi ích lớn cho lập trình viên, giúp tiết kiệm thời gian và công sức, đồng thời đảm bảo chương trình hoạt động đúng yêu cầu Tuy nhiên, nhược điểm của cách này là tốc độ thực thi có thể chậm hơn một chút do Android phải thực hiện mã C/C++ thông qua JNI.

Dựa vào các ưu nhược điểm của từng phương pháp, nhóm chúng em đã quyết định chọn cách 2 để áp dụng thư viện Tesseract trên nền tảng Android.

Quá trình chuyển mã nguồn Tesseract để thực thi được trên Android:

Để chạy mã nguồn Tesseract, trước tiên bạn cần tải về chương trình NDK, sau đó giải nén thư mục và thiết lập biến môi trường để trỏ đến đường dẫn của thư mục NDK đã giải nén.

Tải về project tesseract-android-tools 8, một công cụ mã nguồn mở từ Google, được phát triển trong trình biên dịch Eclipse Công cụ này cung cấp một bộ API và các tập tin cấu hình cần thiết để biên dịch thư viện Tesseract và thư viện xử lý ảnh Leptonica.

TRA TỪ ĐIỂN ANH-VIỆT

Tổng quan

Dữ liệu đầu vào trong khối này là kết quả từ quá trình xử lý dữ liệu ký tự quang học (OCR), và đầu ra là kết quả tra cứu từ điển, như thể hiện trong sơ đồ hình 4.1.

Nếu từ ban đầu có trong dữ liệu từ điển, ứng dụng sẽ trả về kết quả tra từ ngay lập tức Ngược lại, nếu từ không chính xác do nhận dạng sai hoặc là dạng biến thể với tiền tố, hậu tố, ứng dụng sẽ sử dụng thuật toán tìm từ gần đúng để liệt kê danh sách các từ liên quan hoặc khôi phục từ gốc để trả về nguyên mẫu Nếu từ hoàn toàn không có trong từ điển, ứng dụng sẽ thông báo không có kết quả và gợi ý các từ tương tự cho người dùng lựa chọn.

Hình 4.1 Sơ đồ thuật toán tra từ điển và xử lý ngôn ngữ tự nhiên

Khi phát triển ứng dụng từ điển trên điện thoại, hai yếu tố quan trọng cần chú ý là tốc độ xử lý và bộ nhớ Tốc độ xử lý nhanh thường yêu cầu nhiều bộ nhớ, trong khi ứng dụng cần nhiều bộ nhớ có thể làm giảm tốc độ xử lý Môi trường di động thường có giới hạn về cả bộ nhớ lẫn tốc độ, do đó cần tìm giải pháp để cân bằng hai vấn đề này nhằm đáp ứng yêu cầu của ứng dụng.

Để giải quyết vấn đề bộ nhớ trên thiết bị di động, cần tăng dung lượng thẻ nhớ Hiện nay, việc nâng cấp dung lượng thẻ nhớ không còn là khó khăn, giúp người dùng dễ dàng mở rộng không gian lưu trữ.

Để cải thiện tốc độ xử lý trên thiết bị di động, việc nâng cấp bộ vi xử lý là khó khăn Do đó, cần tổ chức cấu trúc dữ liệu từ điển nhằm tăng tốc độ tra từ Ứng dụng không chỉ giải quyết các vấn đề liên quan đến xử lý ngôn ngữ tự nhiên mà còn hỗ trợ tìm kiếm nhanh chóng thông qua cấu trúc dữ liệu từ điển.

Khôi phục từ gốc (Stemming)

Tiếng Anh là ngôn ngữ hòa kết, trong đó các hình vị thường không đứng độc lập mà đi kèm với các phụ tố Mỗi phụ tố có thể mang nhiều ý nghĩa khác nhau, và một ý nghĩa có thể được biểu diễn bằng nhiều phụ tố khác nhau Trong tiếng Anh, các phụ tố này có khả năng tạo ra các dẫn xuất và biến cách đa dạng.

Một từ trong tiếng Anh có thể có nhiều dạng ngữ pháp khác nhau nhưng vẫn mang cùng một nghĩa, ví dụ như look, looks, looking, looked Những dạng này thường là danh từ số nhiều, động từ ngôi thứ ba số ít, hoặc các dạng quá khứ Do đó, ứng dụng cần khôi phục từ gốc bằng cách loại bỏ các phụ tố như tiền tố (dis-, un-, multi-) và hậu tố (-ly, -ment, -tion, -logy) Mỗi phụ tố tạo ra các dẫn xuất hoặc biến cách khác nhau, và cách xử lý sẽ khác nhau cho từng trường hợp Tiền tố thường tạo ra từ có nghĩa khác, ví dụ như like và unlike, nên không cần khôi phục từ gốc Hậu tố có thể tạo ra dẫn xuất với nghĩa khác hoặc từ loại khác, như trong các ví dụ apply, appliance, applicability, applicably, applicant, application, và trong trường hợp này cũng không cần khôi phục từ gốc Tuy nhiên, nếu hậu tố tạo ra biến cách, thì cần phải đưa về từ gốc.

Ví dụ books, booked sẽ đưa về nguyên mẫu là book

Chúng ta chỉ áp dụng khôi phục từ gốc khi hậu tố tạo ra biến cách có cùng ngữ nghĩa Trong tình huống này, ứng dụng sử dụng thuật toán khôi phục từ gốc Porter để thực hiện quá trình khôi phục.

Thuật toán Stemming Porter, được Martin Porter giới thiệu vào năm 1980, đã được phát triển và áp dụng rộng rãi Thuật toán này có khả năng xử lý tất cả các trường hợp để đưa từ về dạng gốc nguyên mẫu Trong bài viết này, chúng tôi chỉ tập trung vào việc sử dụng thuật toán cho một số trường hợp cụ thể.

 Danh từ ở dạng số nhiều, bỏ -s hoặc –es đưa về nguyên mẫu

 Động từ chia ở ngôi thứ ba số ít bỏ –s hoặc –es đưa về nguyên mẫu

 Những từ thêm –ing hoặc –ed được đưa về nguyên mẫu

 Chuyển “i” thành “y” trong trường hợp gốc từ có nguyên âm Ví dụ: companies  compani  company

Sơ đồ hình 4.2 minh họa về thuật toán Stemming được sử dụng trong ứng dụng

Hình 4.2 trình bày sơ đồ thuật toán khôi phục từ gốc Ứng dụng cho phép người dùng tùy chỉnh cấu hình theo nhu cầu, bao gồm các tùy chọn: không sử dụng stemming, sử dụng stemming cho các trường hợp cụ thể (mặc định đã được áp dụng), và sử dụng stemming để khôi phục từ gốc.

Tìm từ gần đúng

Mặc dù bộ Tesseract đạt kết quả nhận diện từ khá cao, nhưng vẫn có một số từ bị nhận diện sai do chất lượng ảnh chụp văn bản Người dùng cần chụp lại hoặc chỉnh sửa kết quả nhận dạng Do đó, việc áp dụng bài toán tìm từ gần đúng vào chương trình sẽ tăng tính tiện dụng và khắc phục một phần vấn đề nhận diện không chính xác của Tesseract Dưới đây là các phương pháp có thể áp dụng cho bài toán tìm từ gần đúng trong luận văn.

Trong khoa học máy tính, khoảng cách Levenshtein là một chỉ số đo lường sự khác biệt giữa hai chuỗi, chuỗi nguồn s và chuỗi đích t Khoảng cách này được xác định bằng số lần biến đổi tuần tự cần thiết để chuyển đổi chuỗi s thành chuỗi t Có ba phép biến đổi chính: thêm, xóa và thay thế từng ký tự trong chuỗi s.

Ví dụ: khoảng cách Levenstein giữa 2 chuỗi kitten và sitting là 3 vì phải thực hiện tuần tự 3 phép biến đổi từ chuỗi kitten sang sitting:

 Kitten  sitten (thay thế k bằng s)

 Sitten  sittin (thay thế e bằng i)

Để tìm khoảng cách Levenshtein giữa hai chuỗi s và t có chiều dài lần lượt là m và n, ta có thể sử dụng mã giả sau: Sittin được sửa thành sitting bằng cách thêm chữ g vào cuối chuỗi.

Khởi tạo mảng 2 chiều D để tính khoảng cách Levenshtein giữa hai chuỗi s và t Mỗi phần tử D[i, j] đại diện cho khoảng cách giữa ký tự thứ i của chuỗi s và ký tự thứ j của chuỗi t Mảng D sẽ chứa tổng cộng (m+1)(n+1) giá trị, trong đó m và n lần lượt là độ dài của chuỗi s và t.

D[i,j] :=0 //Khởi tạo các giá trị trong mảng =0 Lặp từ i=1 đến m

D[i,0] :=i Lặp từ j=1 đến n D[0,j] :=j Lặp từ j=1 đến n Lặp từ i=1 đến m {

Else D[i, j] := minimum ( D[i-1,j] +1 //xóa ký tự D[i,j-1] //thêm ký tự D[i,j] //thay thế 1 ký tự ) }

Bảng 4.1 Minh họa ma trận kết quả sau khi tính khoảng cách Levenstein k i t t e n

0 1 2 3 4 5 6 s 1 1 2 3 4 5 6 i 2 2 1 2 3 4 5 t 3 3 2 1 2 3 4 t 4 4 3 2 1 2 3 i 5 5 4 3 2 2 3 n 6 6 5 4 3 3 2 g 7 7 6 5 4 4 3 Độ phức tạp của thuật toán tìm khoảng cách Leveinstein giữa 2 chuỗi là

O(m*n) với m, n là độ dài lần lượt của 2 chuỗi Để áp dụng thuật toán trên vào trong bài toán tìm từ gần đúng ta làm như sau:

 Giả sử ta được kết quả nhận diện từ là chuỗi s với độ dài xác định

Ta so sánh chuỗi s với các từ trong từ điển, chọn ra những từ có độ dài tương đương và lưu chúng vào mảng kết quả.

Sau khi tính toán khoảng cách Levenshtein giữa chuỗi s và từng từ trong mảng kết quả, chúng ta sẽ chọn những từ có khoảng cách Levenshtein bằng 1 và đưa chúng vào danh sách từ gần đúng.

 Hiển thị các từ có trong danh sách từ gần đúng

Phương pháp sử dụng khoảng cách Levenshtein giúp tìm từ gần đúng trong từ điển, mang lại ưu điểm là giải quyết hiệu quả bài toán tìm kiếm từ gần đúng và liệt kê các từ có trong danh sách.

Nhược điểm của phương pháp này là tốc độ thực thi chương trình chậm, do phải sử dụng vòng lặp để duyệt qua tất cả các từ trong từ điển, trong khi số lượng từ rất lớn, trước khi áp dụng thuật toán tính khoảng cách Levenshtein.

4.3.2 Thay thế các ký tự gần đúng

Phương pháp khoảng cách Levenshtein thường được sử dụng để đo sự khác biệt giữa hai chuỗi ký tự Tuy nhiên, khi áp dụng vào chương trình tìm từ gần đúng, phương pháp này gặp phải nhược điểm về tốc độ thực thi chậm Do đó, trong luận án, nhóm chúng em đã chọn sử dụng một thuật toán đơn giản hơn để tìm từ gần đúng trong từ điển Thuật toán này dựa trên ý tưởng thay thế từng ký tự trong bảng chữ cái Latinh (26 ký tự từ a-z) một cách tuần tự từ đầu đến cuối chuỗi Thuật toán nhận đầu vào là một chuỗi và trả về danh sách các từ gần đúng với chuỗi đầu vào.

 Khởi tạo mảng danh sách các ký tự bao gồm 26 chữ cái thường từ a-z (mặc định thuật toán chỉ làm việc trên các ký tự thường)

Lặp qua từng ký tự trong chuỗi đầu vào và thay thế chúng bằng 26 ký tự trong mảng ký tự ban đầu.

Mỗi khi thay thế từng ký tự, chúng ta sẽ tạo ra một từ mới và kiểm tra xem từ này có tồn tại trong từ điển hay không Nếu từ mới có trong dữ liệu từ điển, chúng ta sẽ thêm nó vào mảng danh sách từ.

Từ danh sách kết quả các từ gần đúng, chúng tôi hiển thị cho người dùng lựa chọn Ưu điểm của phương pháp này là thực hiện chính xác chức năng tìm kiếm và liệt kê các từ gần đúng với kết quả nhận dạng trong dữ liệu Thuật toán có tốc độ thực thi nhanh và có thể dễ dàng tích hợp vào chương trình.

Nhược điểm: Một số từ chạy không ổn định và phụ thuộc nhiều vào độ dài của từ

Tốc độ tìm từ phụ thuộc vào độ dài của từ, với từ ngắn có tốc độ nhanh hơn và từ dài mất nhiều thời gian hơn Tuy nhiên, phương pháp thay thế ký tự gần đúng cho thấy nhiều ưu điểm, đặc biệt là trong ứng dụng thực tế cho bài toán tìm từ gần đúng nhờ vào tốc độ thực thi cao hơn đáng kể.

Cấu trúc dữ liệu từ điển

Mỗi từ trong từ điển bao gồm từ gốc và nghĩa, kèm theo phiên âm và từ loại Kích thước lưu trữ của mỗi từ gốc và nghĩa có sự khác biệt Bảng 4.2 trình bày chi tiết về các trường dữ liệu này.

Bảng 4.2 Bảng mô tả các trường dữ liệu

STT Tên trường dữ liệu Ghi chú

1 Từ gốc Là từ khóa trong dữ liệu từ điển, độ dài các từ có thể khác nhau nên nó có kích thước biến động

Nội dung bao gồm phiên âm, từ loại và các nghĩa của từ, có kích thước biến động Để lưu trữ các trường dữ liệu này một cách hiệu quả và dễ dàng truy xuất, cần tổ chức cấu trúc dữ liệu hợp lý Dưới đây là một số giải pháp tổ chức mục từ.

 Tổ chức các mục từ có cùng kích thước cố định

 Tổ chức các mục từ có kích thước biến động

Ta sẽ xem xét từng phương pháp cụ thể sau đây

4.4.1 Tổ chức các mục từ có cùng kích thước cố định Để tổ chức các mục từ có kích thước cố định thì chúng ta phải biết kích thước lớn nhất của mục từ có thể có được, để lưu trữ bao quát hết dữ liệu Ưu điểm: nhanh chóng, dễ dàng truy xuất dữ liệu của từ khi biết vị trí bắt đầu của nó

Khuyết điểm của việc sử dụng trường dữ liệu lớn là lãng phí bộ nhớ, đặc biệt khi có những từ có kích thước rất nhỏ Điều này trở nên quan trọng hơn trên các thiết bị di động, nơi mà bộ nhớ thường bị hạn chế.

Việc quy định kích thước cố định cho mục từ gây khó khăn trong việc lưu trữ các mục từ thông dụng có kích thước lớn hơn hoặc nội dung phong phú hơn Điều này làm cho việc lưu trữ trở nên không tự nhiên và gây khó khăn trong việc cập nhật thêm mục từ khi dữ liệu từ điển mới phát sinh.

4.4.2 Tổ chức các mục từ có kích thước biến động

Tùy thuộc vào kích thước của mỗi mục từ, chúng ta sẽ cấp phát bộ nhớ phù hợp để lưu trữ dữ liệu Mỗi mục từ sẽ chứa thông tin về vị trí bắt đầu và kích thước trường dữ liệu đi kèm Ưu điểm của phương pháp này là tiết kiệm tối đa tài nguyên bộ nhớ, không giới hạn kích thước của mục từ, cho phép dữ liệu lớn nhỏ tùy ý mà không ảnh hưởng đến các mục từ khác, tạo cảm giác tự nhiên hơn.

Khuyết điểm của việc sử dụng mục từ có kích thước khác nhau là cần thêm trường dữ liệu để quản lý kích thước, điều này gây khó khăn trong việc tra cứu Do đó, cần tổ chức dữ liệu một cách hợp lý để hỗ trợ việc tra cứu nhanh hơn.

Trên môi trường di động, việc ưu tiên bộ nhớ là rất quan trọng, do đó tổ chức mục từ với kích thước cố định có nhiều khuyết điểm Tổ chức các mục từ với kích thước biến động giúp tránh lãng phí không gian bộ nhớ, vì vậy giải pháp này thường được áp dụng trong các ứng dụng Để cải thiện tốc độ truy xuất, cần tổ chức dữ liệu từ điển một cách hợp lý.

4.4.3 Tổ chức dữ liệu từ điển tra cứu nhanh

Vấn đề tổ chức tập tin để hỗ trợ tìm kiếm đã được giải quyết với nhiều phương pháp khác nhau Việc tổ chức cấu trúc tập tin hiệu quả giúp cải thiện tốc độ tìm kiếm Dưới đây là một số phương pháp tổ chức tập tin.

Tập tin tuần tự là loại tập tin lưu trữ các mục liên tiếp, và khi tìm kiếm từ khóa, quá trình này diễn ra bằng cách so sánh từ khóa với các từ gốc trong tập tin Trường hợp tốt nhất là từ khóa khớp ngay trong lần tìm kiếm đầu tiên, trong khi trường hợp xấu nhất là phải duyệt qua hầu hết các từ gốc để tìm ra kết quả Mặc dù phương pháp này dễ cài đặt, nhưng nó tốn thời gian xử lý do khối lượng dữ liệu lớn, dẫn đến việc truy xuất chậm, đặc biệt trên thiết bị di động.

Tập tin chỉ mục giúp tăng hiệu quả tìm kiếm cho các tập tin lớn bằng cách chứa từ khóa và thông tin mô tả vị trí dữ liệu Việc tìm kiếm từ khóa trở nên dễ dàng hơn khi chỉ cần tra cứu trên tập tin toàn từ khóa, kết hợp với thông tin vị trí để lấy ngữ nghĩa Sử dụng tìm kiếm nhị phân có thể tăng tốc độ tìm kiếm trên tập tin chỉ mục này.

Tập tin băm giúp phân loại các từ khóa có cùng tính chất vào một cụm, từ đó giới hạn phạm vi tìm kiếm khi số lượng mẫu tin lớn, thay vì phải tìm kiếm trên toàn bộ các từ khóa.

Cây nhị phân tìm kiếm cho phép đọc tất cả các mẫu tin chỉ mục và phát sinh cây tìm kiếm để lưu trữ Ưu điểm của cây nhị phân tìm kiếm là tốc độ tìm kiếm nhanh, nhưng nhược điểm là yêu cầu nhiều bộ nhớ Xem xét các phương pháp tổ chức tập tin, sự kết hợp giữa chỉ mục và băm tập tin là giải pháp tối ưu nhất cho việc tìm kiếm nhanh Bài viết sẽ trình bày chi tiết cách sử dụng phương pháp này.

4.4.3.1 Tổ chức tập tin chỉ mục kết hợp băm tập tin

Mục đích việc băm tập tin chỉ mục nhằm chia nhỏ phạm vi tìm kiếm, hỗ trợ tìm kiếm nhanh Nên nó phải thỏa mãn các tiêu chí sau:

 Việc tính toán hàm băm phải nhanh

 Các từ khóa phân bố đều trong bảng băm

 Vẫn giữ thứ tự như dữ liệu từ điển ban đầu

Tập tin chỉ mục được sắp xếp theo thứ tự bảng chữ cái, cho phép băm theo chữ cái đầu của từ Hàm băm này đáp ứng hai tiêu chí quan trọng Để thỏa mãn các tiêu chí khác, có thể băm tập tin chỉ mục theo nhiều cấp dựa trên số ký tự đầu Việc chia theo bảng băm nhiều cấp sẽ giúp phân hóa dữ liệu chi tiết hơn, do đó cần lựa chọn cấp băm một cách hợp lý.

Bảng băm cấp một gom các từ có cùng ký tự đầu tiên thành một cụm, tạo ra khoảng 30 cụm dữ liệu Tuy nhiên, một số cụm có nguồn dữ liệu phong phú hơn, trong khi những cụm khác lại ít dữ liệu Số lượng dữ liệu trong mỗi cụm vẫn còn lớn, dẫn đến việc ứng dụng có thể chạy chậm, do đó cần phải phân hoạch nhỏ hơn nữa.

CÀI ĐẶT VÀ THỰC NGHIỆM ỨNG DỤNG

Ngày đăng: 04/07/2023, 10:35

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w