Tài liệu tham khảo công nghệ thông tin Xây dựng dịch vụ web học từ vựng
Trang 2ĐẠI HỌC QUỐC GIA HÀ NỘITRƯỜNG ĐẠI HỌC CÔNG NGHỆ
Bùi Quang Trung
Trang 3LỜI NÓI ĐẦU
Tôi xin cảm ơn Khoa Công Nghệ Thông Tin – Đại Học Công Nghệ đã tạo điều kiện cho tôi học tập, trau dồi kiến thức để vững bước trên con đường sau này.
Tôi xin chân thành cảm ơn các thầy cô trong trường đã tận tình giảng dạy, truyền cho tôi những kiến thức quý báu trong suốt bốn năm học.
Tôi xin chân thành cảm ơn thầy TS Trương Anh Hoàng đã tận tình giúp đỡ tôi trong quá trình làm đồ án này Những chỉ bảo của thầy giúp tôi mở mang thêm rất nhiều.
Và cuối cùng con xin gửi lời biết ơn sâu sắc tới cha mẹ, người luôn sát cánh bên con, nuôi dưỡng con lên người, trở thành người có ích cho xã hội.
Trang 4CHƯƠNG 2: TỔNG QUAN VỀ DỊCH VỤ WEB 5
2.1 Giới thiệu dịch vụ Web 5
2.1.1 Dịch vụ web là gì? 5
2.1.2 Đặc điểm của dịch vụ web 5
2.1.2.1 Sự tương kết có một ưu tiên cao nhất 5
3.1 Phân tích yêu cầu 21
3.1.1 Yêu cầu người sử dụng 21
Trang 54.2 Thiết kế cơ sở dữ liệu 39
4.3 Thiết kế giao diện 43
Trang 6BẢNG CÁC KÝ HIỆU VÀ CHỮ VIẾT TẮT
MVC Model-View-ControllerRSS Really Simple SyndicationHTML HyperText Markup Language
HTTP Hypertext Transfer ProtocolXML Extensible Markup Language
WSDL Web Services Description LanguageSOAP Simple Object Access Protocol
RPC Remote procedure call
Trang 7BẢNG CÁC HÌNH VẼ
Hình 1 Tính năng tra từ của Stardict 2
Hình 2 So sánh giữa Vdict và Webdict 3
Hình 3 Thành phần của SOAP 9
Hình 4 MVC 16
Hình 5 Biểu đồ Ca sử dụng 22
Hình 6 Thiết kế tổng quan hệ thống 26
Hình 7 Biểu đồ tuần tự chức năng Đăng nhập 26
Hình 8 Biểu đồ tuần tự chức năng Tra từ - Searchdict 28
Hình 9 Biểu đồ tuần tự chức năng Tra từ - autoComplete 29
Hình 10 Biểu đồ tuần tự chức năng Tra từ 30
Hình 11 Biểu đồ tuần tự chức năng Học từ 31
Hình 12 Biểu đồ tuần tự chức năng Đọc báo 32
Hình 13 Biểu đồ tuần tự chức năng Quản lý từ vựng 33
Hình 14 Biểu đồ hoạt động chức năng Đăng nhập 34
Hình 15 Biểu đồ hoạt động chức năng Tra từ 35
Hình 16 Biểu đồ hoạt động chức năng Học từ 36
Hình 17 Biểu đồ hoạt động chức năng Đọc báo 37
Hình 18 Biểu đồ hoạt động chức năng Quản lý từ vựng 38
Trang 8Hình 33 Cửa sổ Đăng nhập thất bại 46
Hình 34 Cửa sổ sau khi Đăng nhập 47
Hình 35 Cửa sổ Tra từ gợi ý 48
Hình 36 Cửa sổ Đọc báo chi tiết 50
Trang 9BẢNG CÁC BẢNG BIỂU
Bảng 1 Các nhà cung cấp OpenID 18
Bảng 2 Luồng sự kiện Đăng nhập 22
Bảng 3 Luồng sự kiện Tra từ 23
Bảng 4 Luồng sự kiện Học từ 23
Bảng 5 Luồng sự kiện Đọc báo 24
Bảng 6 Luồng sự kiện Quản lý từ vựng 24
Trang 10TÓM TẮT NỘI DUNG
Học từ vựng là một vấn đề lớn đối với nhiều người Học theo cách truyền thống là sử dụng từ điển đơn thuần thường không hiệu quả Hệ thống học từ vựng là một tiện ích giúp mọi người tăng khả năng ngoại ngữ Những tính năng rất đơn giản mà hiệu quả, tra từ nhanh chóng, học từ theo một từ điển tự chọn, phát âm chuẩn, hình ảnh gần với từ cần học giúp khả năng ghi nhớ lâu hơn Chức năng đọc báo đáp với dữ liệu được tự động cập nhật hàng ngày từ các báo nổi tiếng trên internet, thuộc nhiều lĩnh vực khác nhau như Asia, Americas, Sport, Entertainment Chức năng này với tính năng thông minh, tự động làm nổi bật những từ người dùng chưa biết, đồng thời hiển thị nghĩa khi di chuột lên những từ đó trong tầm nhìn của trình duyệt giúp người dùng học từ ngay khi đọc tin tức.
Những tính năng đó hy vọng sẽ giúp người dùng có được những trải nghiệm mới trong học từ vựng, không theo lối khô khan như trước nữa Chức năng đọc báo dựa trên kiến thức từ vựng của từng người, tạo được sự hứng thú Hệ thống và người dùng có tương tác cao, tạo hiệu quả lớn trong quá trình học tập.
Trang 11CHƯƠNG 1: GIỚI THIỆU
1.1 Đặt vấn đề
Hiện nay nhu cầu học ngoại ngữ đang trở nên rất cần thiết Mỗi một người đều hiểu rõ tầm quan trọng của việc học ngoại ngữ, giúp họ tăng khả năng giao tiếp, lương cao, khả năng thăng tiến Việc học ngoại ngữ bao gồm học nhiều kỹ năng khác nhau, như phát âm, ngữ pháp, viết, nói Trong đó, việc học từ vựng là một công việc khá mất thời gian, nhiều khi còn khiến người học nản chí.
Trên mạng cũng có rất nhiều phần mềm và trang web hỗ trợ việc học từ vựng Nhưng hầu hết những chương trình và phần mềm đó đều khiến cho người dùng nhanh chóng cảm thấy chán, khả năng ghi nhớ không được lâu, ví dụ như
http://www.tudientiengviet.net, http://tudien.timnhanh.com, http://www.vietgle.vn/tratu
đều là các trang cho phép người dùng tra từ vựng Nguyên nhân là những trang web thường quá đơn điệu, chỉ nêu ra nghĩa của từ mà không có phương pháp giúp người
dùng tăng khả năng ghi nhớ từ đó Chẳng hạn, khi người dùng muốn tra từ mother, thì hầu hết đều chỉ đưa ra nghĩa là mẹ, chăm sóc … Tuy rằng nghĩa thì đúng và đầy đủ,
nhưng như thế không thể giúp người dùng ghi nhớ lâu được, phải đọc đi đọc lại nhiều lần, rất mất thời gian.
Đối với nhiều người thích đọc báo online thì vấn đề về từ vựng cản trở họ rất nhiều Nhiều từ khi đọc không biết, lại phải tra từ điển, như thế mất thời gian, cũng không ghi nhớ được từ hiệu quả.
Google translate là một tiện ích mà nhiều người biết đến Nó tự động dịch một đoạn văn bản từ ngôn ngữ này sang ngôn ngữ khác Tuy nhiên, khi dịch toàn bộ đoạn văn bản thì nội dung thường không chính xác, vì thế gây bất tiện cho người dùng Ví dụ, đoạn văn bản sau: “Law enforcement officials are looking into whether Shahzad had any foreign connections who may have participated in Saturday's failed bombing attempt in New York City”, khi được dịch ra thì có nghĩa là “Luật cán bộ thực thi pháp luật đang xem xét liệu có bất kỳ kết nối Shahzad nước ngoài có thể đã tham gia vụ đánh bom không thành công trong nỗ lực thứ bảy tại New York City” Nghĩa được dịch ra đó không chính xác, gây phiền toái cho người sử dụng.
Hay như tính năng tự động tra từ khi một từ được bôi đen của Stardict.
Trang 12Hình 1 Tính năng tra từ của Stardict
Cửa sổ nghĩa hiện ra che mất không gian đọc, gây khó chịu cho người dùng.
Trên cơ sở những khó khăn đó, ý tưởng xây dựng một trang web trợ giúp mọi người học từ vựng cần phải được hiện thực hóa Hệ thống có các chức năng cần thiết giúp người dùng học từ vựng một cách hiệu quả nhất
1.2 Tổng quan về giải pháp1.2.1 Tại sao là dịch vụ Web?
Dịch vụ web đã ra đời từ lâu Nó có ứng dụng rộng rãi trong nhiều lĩnh vực Dịch vụ web chính là tạo ra một nơi lưu trữ liệu và tính toán trên dữ liệu đó, nhiều người có thể truy cập vào, sử dụng để tạo ra ứng dụng riêng cho mình Nhận thấy nếu sử dụng dịch vụ web thì sẽ tiết kiệm được thời gian và công sức, đồng thời ứng dụng cũng sẽ chạy tốt và ổn định hơn Dữ liệu chính xác là điều rất cần thiết để ứng dụng có thể tồn tại lâu dài, đồng thời có nhiều người sử dụng.
1.2.2 Giải pháp Webdict
Webdict là hệ thống chạy trên Internet, cho phép nhiều người truy cập học từ vựng Hệ thống được xây dựng sử dụng dịch vụ web, đáp ứng yêu cầu thuận tiện và hiệu quả cho người dùng.
Trong bộ não con người thì ý thức giác quan chiếm tới 60% (thông tin từ trang web http://namgioi.timnhanh.com/song_khoe/suc_khoe/20070206/35A4ED14/) Nếu
Trang 13gắn thông tin với các hình ảnh cụ thể thì sẽ dễ nhớ hơn Ví dụ như khi bạn đến thăm nhà một người bạn mới, lỡ quên mất số nhà, lần sau đến bạn vẫn có thể tìm được cái nhà ấy vì ở đầu đường có cái cây cầu hoặc có một cây bàng to lớn Việc học từ vựng cũng vậy, nhiều từ rất đơn giản, chỉ cần nhìn một lần là nhớ, nhưng nhiều từ thì rất khó nhớ
Chẳng hạn từ academy có nghĩa là học viện, nếu ngay lần đầu học từ này thì sẽ khó nhớ,
nhưng nếu có thêm hình ảnh các học viện đi kèm thì từ này sẽ được ghi nhớ lâu hơn, khi
nhìn một học viện thì liên tưởng ngay đến từ này Hoặc từ acrobatically có nghĩa là tài
tình, khéo léo, từ ngày thì rất khó nhớ, nhưng nếu có thêm hình ảnh cầu thủ Berbatov
của MU đang tung người dứt điểm thì sẽ rất dễ nhớ Trong hình minh họa, bên trái là kết quả từ trang vdict.com, còn bên phải là kết quả mà hệ thống tìm được Rõ ràng có hình ảnh thì sự ghi nhớ tăng lên rõ rệt.
Hình 2 So sánh giữa Vdict và Webdict
Dựa vào điều này, để giúp ghi nhớ từ lâu cần hiển thị hình ảnh kèm theo mỗi khi người dùng tra từ Hình ảnh cần gần nhất với từ được tra Chúng ta đều biết Google là một bộ máy tìm kiếm nhanh và hiệu quả Thông qua kết quả thực tế cho thấy khi gõ một từ trong từ điển vào tìm kiếm hình ảnh trên Google thì đều hiển thị kết quả rất phù
hợp Vì thế dữ liệu hình ảnh đều được tổng hợp từ Google.
Bạn đang học từ để thi TOEFL, nhưng thật khó khăn nếu cứ cầm quyển sách và học, không hiệu quả chút nào Chức năng học từ vựng được xây dựng để trợ giúp người dùng học từ hiệu quả hơn Khi người dùng chọn từ điển và tra một từ, rồi nhấn vào nút học từ, chương trình sẽ hiển thị các từ liên tiếp nhau sau mỗi mười lăm giây, các từ hiển thị đều có hình ảnh và phát âm đi kèm Người dùng cũng có thể học các từ liên tiếp bằng cách chọn từ tiếp theo hoặc trước từ đang học hoặc dừng chức năng tra từ để tìm kiếm một từ bất kỳ.
Hệ thống cũng cho phép người dùng đăng nhập và thêm từ vựng vào từ điển của mình Có một điểm đặc biệt là hệ thống không có chức năng đăng ký tài khoản Nhiều người dùng không thể hoàn thành chức năng đăng ký vì những yêu cầu khi nhập dữ liệu quá phức tạp, dài dòng Trong khi đó Gmail, Yahoo Mail đều rất thông dụng, ít nhất ai
Trang 14cũng có một tài khoản email Vì thế, có thể sử dụng các tài khoản email đó đăng nhập vào hệ thống thì rất thuận tiện cho người dùng Hệ thống có chức năng đăng nhập sử dụng Gmail, người dùng chỉ cần gõ email và mật khẩu, hệ thống sẽ tự đăng nhập và hiển thị email như tên người dùng Sau khi đăng nhập thì người dùng có thể thêm các từ đã học vào từ điển của mình Phần quản lý từ vựng sẽ liệt kê các từ đã học, thuận tiện khi tra cứu.
Việc học từ vựng đã hiệu quả hơn rất nhiều Khi đã có được vốn từ khá khá, người dùng muốn đọc báo online thì việc trợ giúp đọc báo hiệu quả rất cần thiết Hiển thị các từ mới sao cho hiệu quả là điều quan trọng Các từ mới không có trong từ điển của người dùng sẽ được đánh dấu, khi di chuột đến từ đó và chờ một thời gian, nghĩa của từ đó sẽ hiển thị bên cạnh Như thế sẽ tiết kiệm được thời gian, đồng thời học từ cũng hiệu quả.
Muốn xây dựng được hệ thống thì cần phải có dữ liệu Mặt khác, từ điển dữ liệu rất lớn, do đó phải có phương pháp để tìm kiếm nhanh, hiệu quả Sphinx là một công cụ để sắp xếp dữ liệu và tìm kiếm khá hiệu quả CakePHP là một bộ khung dành cho PHP, hỗ trợ lập trình theo hướng MVC, được dùng để xây dựng các trang web từ nhỏ tới lớn rất hiệu quả Dữ liệu về báo được lấy từ RSS của các trang như BCC, VOA News Python là một ngôn ngữ khá mạnh trong việc xử lý dữ liệu web, được dùng để lấy thông tin từ các báo và lưu trữ trên máy chủ.
Trang 15CHƯƠNG 2: TỔNG QUAN VỀ DỊCH VỤ WEB
2.1 Giới thiệu dịch vụ Web2.1.1 Dịch vụ web là gì?
Là một giao diện lập trình ứng dụng điển hình có thể được sử dụng thông qua một mạng, như Internet và được thực thi ở một hệ thống máy chủ yêu cầu các dịch vụ chủ và khách giao tiếp thông qua giao thức HTTP Dịch vụ web là một nền ứng dụng dựa trên XML – ngôn ngữ đánh dấu mở rộng và HTTP (theo
2.1.2 Đặc điểm của dịch vụ web
2.1.2.1 Sự tương kết có một ưu tiên cao nhất
[2] Thời điểm hiện tại, trên thế giới có rất nhiều ngôn ngữ lập trình, hệ thống với đặc thù khác nhau Các hệ thống làm việc với những mục đích khác nhau, tuy nhiên sự trao đổi, hợp tác để đi đến một lợi ích chung là điều luôn cần đến Điển hình ở Việt Nam, lĩnh vực truyền thông đang phát triển rất mạnh mẽ Các thuê bao di động đang tăng trưởng với tốc độ chóng mặt Nhiều dòng điện thoại mới với các tính năng ngày càng được cải tiến ra đời Gần đây nhất là iPhone 3G của Apple Các ứng dụng trên di động cũng theo đó mà phát triển không ngừng Từ trò chơi, ứng dụng văn phòng, giải trí, tiện ích… Các phần mềm ra đời cần có được sự quảng bá rộng rãi thì số lượng người dùng sẽ tăng đáng kể Mobifone chỉ cần gửi một tin nhắn thông báo khuyến mãi phần mềm là rất nhiều người sẽ tải về và dùng thử Hoặc quảng bá trên website riêng của họ, cũng thu hút người dùng không kém Để làm được điều này thì cần có sự hợp tác giữa các hệ thống Tuy nhiên sự hợp tác này không phải lúc nào cũng diễn ra một cách dễ dàng.
Một ví dụ để thấy sự bất cập khi hai hệ thống muốn hợp tác với nhau Bạn làm một ứng dụng trên điện thoại di động Người dùng phải mất tiền đăng ký mới sử dụng được Bạn hợp tác với một nhà cung cấp dịch vụ mạng, ví dụ Mobifone Họ có phương thức để trừ tiền của khách hàng Nhưng đó là bí mật, không thể cung cấp phương thức đó cho bạn được Vậy thì làm thế nào để hợp tác được với họ?
Dịch vụ web giải quyết được vấn đề này Mobifone cung cấp phương thức của họ dưới dạng một dịch vụ, cho phép bạn gọi hàm đó và họ sẽ thực hiện việc trừ tiền, trả về kết quả thành công hay không Như vậy không hề lộ bí mật mà cả hai bên đều hợp tác
Trang 16vui vẻ Đây chính là ích lợi khi bạn viết ứng dụng và cung cấp nó dưới dạng dịch vụ web.
2.1.2.2 XML
Dịch vụ web sử dụng XML để trao đổi dữ liệu.
[2] XML là ngôn ngữ được sử dụng trên nhiều nền và ngôn ngữ khác nhau Nó gần như HTML, tuy nhiên cũng có sự khác biệt XML được thiết kế theo hướng dữ liệu cần lưu trữ là gì, còn HTML thì thiết kế theo hướng dữ liệu sẽ được trình bày như thế nào (theo trang http://www.w3schools.com/xml/xml_whatis.asp ) Ví dụ đoạn mã sau:
<name>Name here</name><content>Content here</content></menu>
Như trong ví dụ, các thẻ của XML không được định nghĩa trước mà hoàn toàn phụ thuộc vào người dùng Tuy nhiên vẫn có một chuẩn chung đó là một thẻ mở phải có một thẻ đóng Trong ví dụ trên nếu <menu> là thẻ mở, thì thẻ đóng phải là </menu> Nó được tổ chức theo cấu trúc dạng cây, xuất phát từ gốc và phát triển theo từng nhánh Như ví dụ trên, gốc là menu, có hai nhánh con là name và content.
Điểm mạnh của XML là nó được sử dụng giữa nhiều ngôn ngữ khác nhau Nếu dùng C# để tạo ra một file XML thì cũng có thể dùng PHP, ASP.Net để đọc file đó Chính vì thế, XML khá phổ biến, được dùng ở mọi nơi.
Trang 17definition of types </types>
definition of a message </message>
definition of a port </portType>
definition of a binding </binding>
<message name="getTermResponse"> <part name="value" type="xs:string"/></message>
<portType name="glossaryTerms"> <operation name="getTerm">
<input message="getTermRequest"/> <output message="getTermResponse"/> </operation>
Trang 182.1.3 Giao thức dịch vụ web – SOAP
Một giao thức thông dụng khi sử dụng dịch vụ web đó là SOAP Đơn giản hơn, nó là một giao thức để truy cập dịch vụ web Mục đích của SOAP là cho phép ứng dụng trao đổi dữ liệu thông qua giao thức HTTP Phiên bản hiện tại của SOAP là 1.2, được công bố vào ngày 27-04-2007 (theo http://www.w3.org/TR/soap12-part1)
Các đặc điểm của SOAP:
- Là một giao thức truyền thông
- Cho phép hai ứng dụng giao tiếp với nhau- Là một định dạng cho phép gửi thông tin- Truyền thông tin qua internet
- Là một nền độc lập- Một ngôn ngữ độc lập- Dựa trên XML
- Đơn giản và dễ mở rộng
Tại sao lại sử dụng SOAP? Bởi vì nó quan trọng khi phát triển ứng dụng cho phép các ứng dụng trao đổi thông tin qua internet RPC là một giao thức cũng cho phép các ứng dụng trao đổi thông tin qua internet, nhưng nó thường gặp các vấn đề về bảo mật, nó bị chặn bởi các máy chủ sử dụng proxy, hay tường lửa Nhưng HTTP được sử dụng bởi tất các trình duyệt web và máy chủ SOAP cho phép các ứng dụng giao tiếp với nhau trên bất cứ hệ điều hành nào, hay công nghệ và ngôn ngữ khác nhau Chẳng hạn một chương trình chạy trên máy tính có hệ điều hành Windows 2000 muốn giao tiếp với chương trình chạy trên hệ điều hành Linux, hoặc trên hệ điều hành Solaris.
Trang 19[2] [7] Một tin nhắn dưới dạng SOAP là một tài liệu XML chứa những thành phần như sau:
Hình 3 Thành phần của SOAP
- Thành phần Envelope để xác định tài liệu XML đó là một tin nhắn SOAP- Thành phần Header chứa đựng thông tin tiêu đề
- Thành phần Body chứa đựng yêu cầu và phản hồi.
- Thành phần Fault chứa đựng thông tin về lỗi và trạng thái.Tin nhắn SOAP phải theo tiêu chuẩn sau:
- Phải được mã hóa dưới dạng XML
- Phải sử dụng tên miền khai báo trong phần Envelope- Phải sử dụng tên miền đã mã hóa
- Phải không chứa đựng tham chiếu DTD- Phải không chứa đựng chỉ dẫn xử lý XML
SOAP được sử dụng thế nào Một tin nhắn SOAP được gửi tới một website có dịch vụ web với tham số nào đó cần thiết Website sau đó sẽ phản hồi lại một tài liệu dưới dạng XML có chứa kết quả tìm kiếm.
Dưới đây là một tin nhắn SOAP:
<?xml version="1.0"?><soap:Envelope
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">
Trang 20<soap:Fault> .
</soap:Fault></soap:Body></soap:Envelope>
Dưới đây là một ví dụ về tin nhắn SOAP (theo http://www.w3schools.com/soap).Một yêu cầu SOAP:
POST /InStock HTTP/1.1Host: www.example.org
Content-Type: application/soap+xml; charset=utf-8Content-Length: nnn
<?xml version="1.0"?><soap:Envelope
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding"><soap:Body xmlns:m="http://www.example.org/stock">
<m:GetStockPrice>
<m:StockName>IBM</m:StockName> </m:GetStockPrice>
Máy khách gọi tới hàm GetStockPrice với tham số là StockName=IBM Phản hồi của máy chủ như sau:
Trang 21HTTP/1.1 200 OK
Content-Type: application/soap+xml; charset=utf-8Content-Length: nnn
<?xml version="1.0"?><soap:Envelope
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding"><soap:Body xmlns:m="http://www.example.org/stock">
<m:GetStockPriceResponse> <m:Price>34.5</m:Price> </m:GetStockPriceResponse></soap:Body>
Bạn có thể viết mã để chạy trên Unix, hay Windows Bạn có thể viết một chương trình C/C++/Java, nhưng rất mất thời gian Python thì rất đơn giản, chạy trên mọi hệ điều hành, Windows, MacOS X, Unix, đồng thời giúp bạn nhanh chóng có kết quả trong công việc.
[6] Rất đơn giản để sử dụng Python mạnh hơn C trong việc kiểm tra lỗi, là một ngôn ngữ bậc cao, hỗ trợ nhiều kiểu dữ liệu, các mảng linh động và từ điển.
Python cũng cho phép chia nhỏ chương trình để thành các module để sử dụng lại ở các chương trình khác nhau Nó cũng có nhiều module có sẵn, như xử lý file, tương tác socket, hay ngay cả bộ giao diện người dùng.
Trang 22Python là một ngôn ngữ thông dịch, nghĩa là không cần biên dịch hay liên kết nào cả, chỉ cần file mã nguồn là có thể chạy chương trình.
Python giúp bạn viết chương trình ngắn gọn hơn các ngôn ngữ như C/C++/Java vì các lý do sau đây:
- Kiểu dữ liệu bậc cao cho phép tối ưu các thao tác phức tạp chỉ trong một câu lệnh
- Nhóm câu lệnh được kết thúc bởi dấu lùi đầu dòng thay vì dấu mở ngoặc và đóng ngoặc
- Không cần thiết khai báo biến.
Vì những lý dó trên, nên việc xử lý lấy dữ liệu từ web sử dụng python rất hiệu quả
2.3 Sphinx2.3.1 Giới thiệu
Sphinx là một cỗ máy tìm kiếm sử dụng full-text, được phân phối giấy phép theo GPL phiên bản 2.
Là một cỗ máy tìm kiếm độc lập, nghĩa là nhanh, tối ưu dung lượng, và thích hợp với các ứng dụng khác Sphinx được thiết kế đặc biệt tương thích với cơ sở dữ liệu SQL.
Hiện tại đang hỗ trợ MySQL, PostgreSQL, hoặc dưới dạng XML.
Giao diện lập trình ứng dụng tìm kiếm được sử dụng trong nhiều ngôn ngữ, như PHP, Python, Perl, Ruby, Java và cỗ máy lưu trữ MySQL Nó cũng rất dễ dàng để sử dụng trong một ngôn ngữ mới, chỉ mất thời gian rất ngắn.
Sphinx là tên viết tắt từ SQL Phrase Index Tham khảo thêm tại trang
http://sphinxsearch.com/docs/current.html
Tại sao phải sử dụng Sphinx để tìm kiếm? Với hệ thống từ điển, dữ liệu là rất lớn, lên đến hơn 500.000 hàng Nếu như tìm kiếm một từ, chẳng hạn “baby”, bằng cách sử dụng câu lệnh thông thường: “select name, meaning from words where name=’baby’”, thì thời gian tìm kiếm là gần 6 giây Đó là còn nhanh do từ này có trong cơ sở dữ liệu, nhưng nếu tìm từ babies mà cũng dùng câu lệnh trên: “select name, meaning from words where name=’babies’”, thì thời gian tìm kiếm sẽ rất là lâu, lên đến 12 giây Nguyên nhân là do với tìm kiếm thông thường, nó sẽ duyệt qua tất cả các hàng trong bảng cho tới khi tìm thấy dữ liệu thỏa mãn Do đó, nếu từ cần tìm kiếm nằm ở cuối bảng thì thời
Trang 23gian trả về kết quả là rất lâu Với hệ thống từ điển, nếu cứ dùng cách thông thường này thì người dùng sẽ không bao giờ muốn sử dụng hệ thống Họ tìm một từ mà thời giản trả về kết quả quá lâu, sẽ khiến họ tức giận và từ bỏ hệ thống Do đó, Sphinx là một giải pháp tuyệt vời Nó index dữ liệu, khi tìm kiếm thì tìm trong index của nó, và kết quả trả về nhanh chóng Như với từ baby ở trên, kết quả trả về trong 0.012 giây, còn nếu không tìm thấy thì thời gian tìm kiếm là 0.000 giây, rất nhanh chóng Như thế thì thỏa mãn được người dùng, khiến họ muốn sử dụng hệ thống lâu dài.
2.3.2 Tính chất
- Tốc độ tạo index rất nhanh (10MB/sec)
- Tốc độ tìm kiếm nhanh (trung bình 0.1sec trên 2-4GB trong tập dữ liệu văn bản)
- Cung cấp khả năng tìm kiếm phân phối
- Cung cấp khả tìm kiếm trực tiếp trong cơ sở dữ liệu MySQL- Hỗ trợ tìm kiếm theo cụm từ, theo dạng BOOLEAN, theo từ.- Hỗ trợ tìm kiếm nhiều trường trong một câu lệnh (tối đa 32)- Hỗ trợ tìm kiếm theo stopwords
- Hỗ trợ tìm kiếm theo UTF-8
- Hỗ trợ rất tốt với MySQL, PostgreSQL.
Thông tin tại trang http://www.sphinxsearch.com/docs/current.html
2.3.3 Cài đặt
Sphinx hỗ trợ nhiều hệ điều hành khác nhau: Linux, Windows, FreeBSD, NetBSD, Solaris, MacOS X.
Để cài đặt Sphinx trên hệ điều hành Windows, trước hết tải Sphinx về từ địa chỉ
http://www.sphinxsearch.com/ Giải nén ta sẽ có được thư mục sphinx Vào thư mục đó, tìm đến /bin/searchd.exe Thêm đường dẫn tới thư mục bin vào biến môi trường trong windows Sau đó mở cmd, gõ lệnh sau:
C:\Sphinx> C:\Sphinx\searchd install config C:\Sphinx\sphinx.conf servicename SphinxSearch
Sau khi tạo xong, sẽ có một dịch vụ mới được tạo ra trong windows, vào services.msc, tìm đến SphinxSearch rồi đặt chế độ khởi động là Automatic.
Trang 24type = mysql
sql_host = localhostsql_user = rootsql_pass = sql_db = webdict
sql_port = 3306 # optional, default is 3306sql_query_pre = SET NAMES utf8
sql_query = SELECT id, name, name_search, name_ascii_search, meaning, meaning_search, dictionary_id from words
sql_attr_uint = dictionary_idsql_query_post =
sql_ranged_throttle = 0}
index dict{
source = dictpath = /datadocinfo = externmlock = 0
morphology = nonemin_word_len = 1charset_type = utf-8min_prefix_len = 0min_infix_len = 1ngram_len = 1}
Trang 25Phần source là định nghĩa kết nối tới cơ sở dữ liệu Ở đây có các thiết lập như sql_host, sql_user, sql_pass, sql_db, sql_port Sau đó là dữ liệu mà sẽ dùng trong index.
sql_query = SELECT id, name, name_search, name_ascii_search, meaning, meaning_search, dictionary_id from words
PHP là một ngôn ngữ khá phổ biến trên thế giới Nhưng nó lại không có một cấu trúc cụ thể trong lập trình, tùy thuộc rất nhiều vào từng người lập trình Họ có thể tùy biến chương trình của mình theo nhiều cách khác nhau, và đôi khi là theo những cách có thể gây nguy hiểm cho chương trình của họ Chính vì thế mà khi lập trình với PHP nhiều người sẽ thấy khó khăn và đôi khi là phức tạp Nhiều đoạn mã lặp lại ở nhiều nơi, hay quên kết nối tới cơ sở dữ liệu … Chính vì thế cần có một bộ khung cho PHP để giúp việc lập trình đơn giản hơn, nhanh chóng hơn và hiệu quả, an toàn hơn.
PHP hiện tại đã cho phép lập trình OOP (Object Oriented Programming) – lập trình hướng đối tượng – giống như các ngôn ngữ Java, C++ Từ đây, các nhà phát triển PHP đã dần dần tạo ra những bộ khung giúp cho PHP phát triển nhanh hơn.
Trên internet có rất nhiều bộ khung, mỗi cái đều có những quy tắc đặt tên riêng, những cải tiến và cả những lỗi còn tồn tại Ruby On Rails là một bộ khung khá tốt cho PHP Tuy nhiên nó vẫn còn một số điểm mà nhiều người lập trình không muốn sử dụng nó: Sử dụng nó trong PHP giống như là phải viết cả một hệ thống, khó tùy chỉnh mã nguồn theo ý của từng nhà lập trình.
CakePHP thì đơn giản hơn rất nhiều, nó cung cấp cấu trúc tương thích cho một ứng dụng PHP.
Trang 262.4.2 Mô hình MVC
[1] [5] MVC là tên viết tắt của Model-View-Controller Tại sao lại có mô hình này? Bình thường khi lập trình thì mọi xử lý dữ liệu, xử lý logic đều trong một file Chẳng hạn khi kết nối tới cơ sở dữ liệu Trong nhiều file chúng ta đều phải sử dụng tới nó, như thế mã lặp đi lặp lại rất nhiều Nếu có thay đổi trong kết nối thì lại phải sửa ở từng file, rất mất thời gian, không hiệu quả Trong một file vừa cập nhật dữ liệu vào cơ sở dữ liệu, vừa xử lý logic, vừa hiển thị tới người dùng Như vậy rất khó kiểm soát mã nguồn, người đọc mã nguồn cũng rất khó hiểu
Còn một vấn đề nữa Một ứng dụng có nhiều người cùng phát triển Làm thế nào để phân chia công việc cho từng người một cách cụ thể khi mà mỗi một file đều tồn tại nhiều xử lý logic, liên quan tới cơ sở dữ liệu Chẳng hạn có người chỉ làm về giao diện, có người chỉ làm về cơ sở dữ liệu Rõ ràng, với cách truyền thống thì việc phân chia công việc sẽ không hiệu quả.
Chính vì thế mô hình MVC ra đời, giải quyết được các vấn đề trên, đem lại một phong cách lập trình khá hiệu quả Không chỉ ngôn ngữ PHP mà rất nhiều ngôn ngữ khác, như Java, ASP.Net … đều hỗ trợ.
Hình 4 MVC
Ứng dụng sử dụng MVC được chia thành ba phần riêng biệt:
- Bộ điều khiển (Controller): Chứa đựng các xử lý logic Mỗi một bộ điều khiển chứa nhiều phương thức xử lý riêng biệt các yêu cầu Nó nhận và xử lý dữ liệu từ mô hình, đồng thời tạo ra các đối tượng sẽ được sử dụng ở khung nhìn.- Mô hình (Model): Là thể hiện dữ liệu Nó kết nối tới cơ sở dữ liệu, xử lý mọi
vấn đề về dữ liệu, như truy vấn lấy dữ liệu, hay cập nhật, hay xóa… Không có
Trang 27một tương tác nào giữa mô hình và khung nhìn, tất cả tương tác với khung nhìn được xử lý thông qua bộ điều khiển.
- Khung nhìn (View): Là một mẫu file dùng để trình bày dữ liệu tới người dùng Các biến, mảng, hay đối tượng sử dụng trong khung nhìn được khởi tạo ở trong bộ điều khiển Khung nhìn không chứa các xử lý logic phức tạp.
Khi mới làm quen với MVC thì mất một chút thời gian, nhưng khi đã tạo được ứng dụng rồi thì chắc chắn bạn sẽ không muốn viết ứng dụng theo cách truyền thống nữa.
Cấu trúc thư mục của một ứng dụng phát triển bằng CakePHP như bên dưới:
/path_to_app config/
Có ba thư mục quan trọng, đó là controllers, models và views.- config: Chứa các cấu hình về cơ sở dữ liệu.
- controllers: Chứa các bộ điều khiển- models: Chứa các mô hình
- views: Chứa các khung nhìn
- webroot: Chứa các file javascript, css …
Trang 28Sau khi đã tạo xong ứng dụng, bắt đầu lập trình bằng cách vào controllers, models, views để tạo ra các mô hình, bộ điều khiển và khung nhìn mới tùy theo yêu cầu của ứng dụng.
2.5 OpenID
OpenID là tương lai của dịch vụ web Mỗi người chỉ cần một tài khoản email duy nhất trên mạng (tham khảo thêm tại http://en.wikipedia.org/wiki/OpenID) Bạn có thể dùng nó để đăng nhập vào mọi trang web
OpenID được phát triển bởi Brad Fitzpatrick vào tháng 5/2005 Trang chủ của OpenID ở địa chỉ http://openid.net.
Hiện nay rất nhiều nhà cung cấp dịch vụ mạng đã hỗ trợ OpenID Chẳng hạn như Google hay Yahoo Có nghĩa là nếu bạn có một tài khoản email abcxyz@gmail.com hay
abcdef@yahoo.com, và trang web http://example.com có hỗ trợ OpenID, bạn có thể dùng tài khoản đó và đăng nhập vào trang web mà không phải mất thời gian đăng ký tài khoản rồi lại phải nhớ thêm một tài khoản nữa Các nhà cung cấp OpenID, thông tin được lấy từ địa chỉ http://en.wikipedia.org/wiki/OpenID#History:
Bảng 1 Các nhà cung cấp OpenID
Hệ thống sử dụng OpenID do Google cung cấp Một chương trình nhỏ mã nguồn mở do Google cung cấp, tải về tại địa chỉ http://code.google.com/p/gdata-samples/source/browse/#svn/trunk/hybrid Khi người dùng chọn đăng nhập với tài khoản Gmail, thì một cửa sổ popup hiện ra, yêu cầu nhập Email và Mật khẩu Toàn bộ quá trình xử lý do Google Khi đăng nhập xong thì kết quả trả về là Email đã đăng nhập.
Sử dụng chương trình này rất đơn giản Khi tải về, giải nén ra có tệp quan trọng là popuplib.js Trước hết trỏ đường dẫn tới tệp đó trong dự án của bạn Sau đó khai báo hai biến như bên dưới.
var extensions =
{"openid.ns.ext1":"http:\/\/openid.net\/srv\/ax\/1.0",
Trang 29"openid.oauth.scope":"http:\/\/docs.google.com\/feeds\/ http:\/\/spreadsheets.google.com\/feeds\/ http:\/\/www-opensocial.googleusercontent.com\/api\/people\/","openid.ui.icon":"true"};
var upgradeToken = function() {window.location = '/webdict/'; };var googleOpener = popupManager.createPopupOpener({
'realm' : 'http://vsearch.vn/webdict',
'opEndpoint' : 'https://www.google.com/accounts/o8/ud','returnToUrl' : 'http://vsearch.vn/webdict/users/login/google','onCloseHandler' : upgradeToken,
'shouldEncodeUrls' : true,'extensions' : extensions});
Extensions không được thay đổi Còn googleOpener có ba cấu hình quan trọng Thứ nhất là ‘realm’, đây là địa chỉ mà chúng ta đăng ký và đã được Google xác nhận Thứ hai là ‘opEndpoint’ là địa chỉ openid của Google, không được thay đổi Thứ ba là ‘returnToUrl’ là địa chỉ sau khi đăng nhập thành công sẽ được Google trỏ về Cuối cùng, có một đường link với id LoginWithGoogleLink Thêm gọi hàm bên dưới là chương trình của bạn đăng nhập được với Gmail.
$(document).ready(function () {
jQuery('#LoginWithGoogleLink').click(function() {
Trang 30googleOpener.popup(450, 500); return false;
});});
Trang 31- Học từ: Hiện lên các từ liên tiếp nhau sau mỗi mười lăm giây Cho phép dừng học từ bằng cách nhấn nút Pause Có nút cho hiện từ ngay trước từ hiện tại, từ ngay sau từ hiện tại.
- Đọc báo: Các tin tức được lấy từ báo nước ngoài Được phân loại theo chuyên mục, dễ dàng tìm được tin tức mong muốn Khi đọc chi tiết một tin thì chỉ hiển thị tin đó trong tầm nhìn cửa sổ Nếu tin đó dài quá thì sẽ được cắt thành nhiều trang Khi đó có nút cho sang trang sau, trở về trang trước Có một tập các từ thông dụng, coi như người dùng nào cũng biết, chẳng hạn như will, has, have, go, do … Kết hợp với các từ có trong cơ sở dữ liệu của riêng từng người dùng,