2.CONTEXT CARTRIDGE
2.1.Giới thiệu
ConText Cartridge (Oracle 8) cho phép các khả năng tìm kiếm, khôi phục và xem dữ liệu dạng văn bản (text) được lưu trong CSDL của Oracle 8. Ngoài ra ConText còn cho phép xử lý ngôn ngữ cao cấp các văn bản tiếng Anh.
Với ConText chúng ta có thể sử dụng SQL và PL/SQL kết hợp văn bản cao cấp và chứùc năng ngôn ngữ vào các ứng dụng sau:
-Text Processing:
ConText cho phép tìm kiếm và xem văn bản, cũng như phục hồi văn bản một cách đầy đủ. Text Query cho phép những khả năng tìm kiếm rất lớn với những lựa chọn khác nhau, bao gồm: biểu thức logic, tìm gần đúng, đồng nghĩa.
-Linguistic Processing:
Nếu tài liệu chứa văn bản tiếng Anh, ConText cho phép phân tích ngôn ngữ sâu hơn. Từ quá trình Linguistic Processing, Chúng ta có thể thực hiện truy vấn theo chủ đề, phục hồi lại tài liệu dựa trên những chủ đề chính được tìm thấy trong tài liệu.
Ngoài ra ConText còn cho phép quá trình Linguistic Processing đối với những tài liệu riêng biệt dưới dạng Linguistic services. Linguistic Services cho phép xem các tài liệu cao cấp như là danh sách các đề mục và tóm tắt văn bản (gọi là Gists).
Để Text Query và Theme Query được thực hiện, những cột CSDL được dùng để lưu văn bản phải được định nghĩa như là những text columns và các text indexes và theme indexes phải được tạo ra cho những cột này.
Ngày nay phần lớn các dữ liệu không được lưu dưới dạng dữ liệu có cấu trúc, chúng được lưu dưới dạng văn bản với những dạng khác nhau: letters, memos, reports, notes, e-mail, … Những dạng tài liệu này thường khó tìm kiếm, phục hồi và thường không thể tóm tắt được. Oracle giải quyết vấn đề quản lý văn bản với ConText. ConText quản lý dữ liệu không có cấu trúc cũng nhanh và dễ dàng như dữ liệu có cấu trúc.
2.2.Một số khái niệm:
-Documents: Text & Document được định nghĩa gần giống nhau. Tuy nhiên, Text là khái niệm tổng quát hơn, xác định tập hợp dữ liệu không có cấu trúc được lưu trữ trong một cột CSDL hoặc trong 1 file hệ thống.
Trong môi trường ConText, document là một văn bản được lưu trong một cột của một dòng của CSDL hoặc là một con trỏ chỉ tới một file hệ thống.
-Text Storage: có 2 cách
+internal: document được lưu trong 1 text column.
+external: document được lưu trong những file của hệ điều hành.
-Search options:
+Từ đơn hoặc câu
+Tổ hợp các từ và các câu
+Tìm gần đúng, tìm từ phát âm giống, tìm từ sử dụng thay thế.
-Query Expressions: được tạo nên bởi những từ và những câu cùng với những toán tử và những ký tự đặc biệt khác tạo ra tiêu chí tìm kiếm.
-Hitlists: Khi query được thực hiện, ConText tạo ra danh sách tất cả document thỏa tiêu chí tìm kiếm cùng với score. Đó là hitlist.
-Scoring: là cách để ConText đánh giá document nào trong hitlist quan hệ nhiều nhất đến cái mà user cần dựa trên tiêu chí tìm kiếm.
-Result Tables: là vùng nhớ để lưu các output từ những truy vấn của user. Những bảng này được cấp phát bởi chương trình ứng dụng hoặc thủ tục và tồn tại cho đến khi được xóa bởi ứng dụng.
2.3.Text Query
Text Query tìm kiếm những cột văn bản trong các bảng truy vấn theo điều kiện đã đượïc đặc tả (những từ hoặc những câu), và trả về tất cả các dòng (các tài liệu) có chứa những từ hay những câu này.
Ngoài ra, mỗi tài liệu được trả về cùng với một con số, đó là số lần xuất hiện điều kiện truy vấn trong tài liệu và nó biểu hiện sự liên quan của tài liệu đến truy vấn.
ConText cho phép thực hiện Text Query đối với các biểu thức logic và các biểu thức mở rộng.Các phương pháp để thực hiện text query:
+Two-step Query
+One-step Query
+In-memory Query
Để thực hiện được text query chúng ta phải thực hiện các công việc sau:
+Tạo text index cho text column
+Tạo Bảng kết quả (đối với two-step query).
Để phục hồi lại các document có liên quan, Text Query phải hoàn thành các công việc sau đây:
+Nhận biết những document trong bảng đáp ứng điều kiện query
+Đếm số lần đáp ứng điều kiện tìm kiếm của các document.
+Trả về những dòng của bảng thỏa điều kiện để hiển thị hoặc sử dụng vào mục đích khác trong ứng dụng.
Các bước thực hiện Text Query (Hình 1)

-Khởi động Context Servers
-Tạo Policy (Định nghĩa cột văn bản)
-Tạo Text index cho cột văn bản
-Tạo bảng kết quả (two-step query)
-Thực hiện Query
*Khởi động Context Servers
-Context servers chỉ có thể được khởi động bởi user CTXSYS Oracle.
-Để tạo được Text index cho cột văn bản, Context servers phải được khởi động với DDL(D) personality. Ngoài ra để thực hiện Text query, Context servers phải được khởi động với Query(Q) personality.
-Có thể khởi động Context servers bằng 2 cách: ctxsrvx executable hoặc ctxctl utility.
-Ví dụ dùng ctxsrvx executable
$ ctxsrvx -user ctxsys/ctxsys -personality DQ -log ctx.log &
trong đó
ctxsys/ctxsys: user name / password
ctx.log: tên file lưu thông tin context
*Tạo Policy (Định nghĩa cột văn bản)
-Định nghĩa một cột dữ liệu như là một cột văn bản. Cột văn bản là một cột mà policy đã được tạo cho nó.
-Một policy xác định cột để chứa văn bản, phương pháp lưu văn bản và những options khác để Context tạo index cho cột.
-Để tạo policy cho một cột, sử dụng thủ tục CTX_DDL.CREATE_POLICY với các thông số sau: policy name, tên cột cho policy.
Ví dụ:
Exec ctx_ddl.create_policy('ctx_docs', 'ctxdev.docs.text');
Ctx_docs: tên policy
Ctxdev: tên user
Docs: tên table
Text: tên cột tạo policy
*Tạo Text index cho cột văn bản
-Để tạo text index cho cột văn bản ta gọi thủ tục CREATE_INDEX trong CTX_DDL PL/SQL Package và đặc tả policy cho cột.
Ví dụ:
Exec ctx_ddl.create_index('ctx_docs');
Ctx_docs: tên policy đã được tạo trước đó
-Sau khi tạo text index cho cột, Context server với Query personality có thể thực hiện quá trình text query.
*Tạo bảng kết quả (two-step query)
-Để thực hiện two-step query, cần phải tạo bảng kết quả (result table) để lưu danh sách các textkeys và scores của những tài liệu thỏa điều kiện query.
-Bảng kết quả có thể có tên bất kỳ, nhưng nó phải có cấu trúc như sau:
+TEXTKEY varchar2(64): Lưu textkeys của những dòng thỏa query
+SCORE number: lưu score của mỗi dòng
+CONID number: lưu CONTAINS ID
-Ví dụ:
create table ctx_temp(textkey varchar2(64), score number, conid number );
*Thực hiện Text Query
-Các phương pháp để thực hiện text query:
+Two-step Query
+One-step Query
+In-memory Query
-Two-step query
Trong bước thứ nhất, gọi thủ tục CONTAINS trong package CTX_QUERY để điền vào bảng kết quả (đã được tạo ra trước đó). Bước thứ hai, truy vấn bảng kết quả để trả về danh sách các tài liệu.
Ví dụ:
1.Begin
Ctx_query.contains('ctx_docs', 'oracle', 'ctx_temp');
End;
2.Select score,title
From ctx_temp,docs
Where ctx_temp.textkey=docs.pk
Order by score desc;
-One-step query
Sử dụng Context SQL function CONTAINS trực tiếp trong mệnh đề WHERE của câu lệnh SELECT.
Ví dụ:
Select score (1), pk, title
From docs
Where contains(text, 'oracle', 1) > 0
Order by score (1) desc;
-In-memory Query
Sử dụng các thủ tục trong package CTX_QUERY như: OPEN_CON, CLOSE_CON, FETCH_HITS.
OPEN_CON mở 1 cursor trong buffer query và thực hiện query. Kết quả query được lưu trong buffer. FETCH_HIT cho xem kết quả, và CLOSE_CON xóa cursor đi.
Ví dụ:
Declare
Score char(5);
Pk char(5);
Title char(40);
Curid number;
Begin
Curid:= ctx_query.open_con( policy_name => 'ctx_docs',
Text_query => 'oracle',
Score_sorted => true,
Other_cols => 'title' );
While (ctx_query.fetch_hit (curid, pk, score, title) > 0)
Loop
Dbms_output.put_line(score || pk || substr(title,1,50));
End loop;
Ctx_query.close_con(curid);
End;
2.4.Theme Query
Theme Query tìm kiếm những cột văn bản của những bảng truy vấn theo những chủ đề (đề mục) được đặc tả trước và trả về tất cả những dòng (những tài liệu) có những chủ đề này. Một theme diễn tả một chủ đề chính hoặc một đề tài được triển khai trong tài liệu.
Để thực hiện được theme query chúng ta phải thực hiện các công việc sau:
+Tạo theme index cho text column
+Tạo Bảng kết quả (đối với two-step query).
Mỗi tài liệu được trả về bởi Theme Query có 1 score. Score trong theme query biểu diễn sự liên quan của tài liệu đối với query, mỗi score là trọng số của theme trong tài liệu.
Khi thực thi theme query, chúng ta miêu tả một chuỗi truy vấn, có thể là một cụm từ hoặc một câu (có hoặc không có toán tử), ConText trả về danh sách các document thỏa điều kiện cùng với score của nó. Một số toán tử có thể được sử dụng trong chuỗi truy vấn như: accumulate (,), or (|), and (&), minus (-), not (~), weight (*), threshold (>), max (:).
Các bước thực hiện Theme Query (Hình 2)

-Khởi động Context server
-Định nghĩa cột văn bản
-Tạo theme index cho cột văn bản
-Tạo bảng kết quả (two-step query)
-Thực hiện query
*Khởi động Context server
-Theme index được thực hiện bởi context server với DDL (D) personality và theme query được thực hiện bởi context server với Query (Q) personality
-Ví dụ:
$ ctxsrv -user ctxsys/ctxsys -personality DQ -log ctx.log &
ctxsys/ctxsys: user name / password
ctx.log: tên log file
*Định nghĩa cột văn bản
-Định nghĩa cột văn bản cho theme index cũng tương tự như cho text index, chỉ khác nhau ở chỗ sử dụng lexer khác với lexer đã sử dụng trong text index policy (BASIC LEXER)
-Để tạo theme index policy, sử dụng thủ tục CREATE_POLICY trong PL/SQL với lexer preference là THEME_LEXER.
-Ví dụ:
Begin
Ctx_ddl.create_policy ('ctx_thidx',
'ctxdev.docs.text'
lexer_pref => 'THEME_LEXER');
End;
Ctx_thidx: tên policy
Ctxdev.docs.text: user -tên bảng - tên cột văn bản
*Tạo theme index cho cột văn bản
-Để tạo theme index cho cột, ta gọi thủ tục CREATE_INDEX trong CTX_DDL và miêu tả theme index policy cho cột đó.
-Ví dụ:
exec ctx_ddl.create_index ('ctx_thidx')
ctx_thidx: tên policy
-Sau khi thực hiện theme index cho cột, Context server với personality Query có thể thực hiện theme query.
*Tạo bảng kết quả (two-step query)
-Cấu trúc của bảng kết quả cho theme query và phương pháp tạo bảng kết quả giống như bảng kết quả trong text query.
-Ví dụ:
create table ctx_theme_temp
(textkey varchar2(64),
score number,
conid number );
*Thực hiện theme query
-Các phương pháp để thực hiện theme query:
+Two-step Query
+One-step Query
+In-memory Query
-Two-step query
Trong bước thứ nhất, gọi thủ tục CONTAINS trong package CTX_QUERY để điền vào bảng kết quả (đã được tạo ra trước đó). Bước thứ hai, truy vấn bảng kết quả để trả về danh sách các tài liệu.
Ví dụ:
1.Begin
Ctx_query.contains('ctx_thidx', 'oracle', 'ctx_theme_temp');
End;
2.Select score, pk, title
From ctx_theme_temp,docs
Where ctx_theme_temp.textkey=docs.pk
Order by score desc;
-One-step query
Sử dụng Context SQL function CONTAINS trực tiếp trong mệnh đề WHERE của câu lệnh SELECT.
Ví dụ:
Select score (1), pk, title
From docs
Where contains(text, 'oracle', 1, 'ctx_thidx') > 0
Order by score (1) desc;
-In-memory Query
Sử dụng các thủ tục trong package CTX_QUERY như: OPEN_CON, CLOSE_CON, FETCH_HITS.
OPEN_CON mở 1 cursor trong buffer query và thực hiện query. Kết quả query được lưu trong buffer. FETCH_HIT cho xem kết quả, và CLOSE_CON xóa cursor đi.
Ví dụ:
Declare
Score char(5);
Pk char(5);
Title char(40);
Curid number;
Begin
Curid:= ctx_query.open_con( policy_name => 'ctx_thidx',
Text_query => 'oracle',
Score_sorted => true,
Other_cols => 'title' );
While (ctx_query.fetch_hit (curid, pk, score, title) > 0)
Loop
Dbms_output.put_line(score || pk || substr(title,1,50));
End loop;
Ctx_query.close_con(curid);
End;
2.5.Query Methods
ConText có 3 phương pháp khác nhau để thực hiện truy vấn:
-Two-step query: trong bước thứ nhất, sử dụng thủ tục PL/SQL để tạo ra 1 hitlist và lưu kết quả vào 1 bảng kết quả. Bước thứ hai, dùng lệnh SELECT để chọn kết quả từ bảng kết quả.
-One-step query: tạo một câu lệnh SQL, sử dụng chức năng truy vấn của Context để tìm kiếm và trả về một tập hợp những dòng và cột trong bảng được chọn trực tiếp cho user.
-In-memory query: sử dụng một bộ đệm và một cursor chỉ tới bộ đệm trả về kết quả truy vấn, kết quả được ghi vào bộ đệm. Chúng ta tìm kết quả và đóng cursor.
Mỗi phương pháp truy vấn đều có những ưu điểm và khuyết điểm của mình. Chúng ta cần phải chọn lựa cho đúng khi phát triển ứng dụng của mình.
2.6.Linguistic services
ConText Linguistic được sử dụng để phân tích nội dung các tài liệu tiếng Anh. ConText Linguistic cho phép xem xét document ở nhiều khía cạnh khác nhau, cho phép người sử dụng có thể nhanh chóng duyệt qua nội dung của tài liệu và lấy được nội dung mà họ quan tâm.
Kết quả của ConText Linguistic có thể là một trong các dạng sau:
+Theme: những khái niệm chính của tài liệu
+Generic Gist: những đoạn tài liệu chứa những nội dung chính.
+Point-of-view Gist: những đoạn tài liệu chứa một chủ đề cho trước.
Để có thể sử dụng được ConText Linguistic, cần phải:
+Text được lưu trong 1 cột
+Cột phải có 1 policy
+ConText Server chạy với Linguistic Personality.
Các bước thực hiện Linguistic services (Hình 3)

-Khởi động Context Servers
-Tạo Policy (Định nghĩa cột văn bản)
-Tạo các bảng Linguistic Output
-Thực hiện Linguistic Output
-Query document (Themes, Gists)
2.7.Thực hiện Context
Trước khi làm việc với ConText, cần phải kiểm tra những điều sau:
-Oracle 8 đã được cài đặt và đang hoạt động.
-Các tablespaces đã được tạo ra.
-Các user Oracle đã được tạo ra và được cấp cho những quyền cần thiết.
Để có thể bắt đầu làm việc với ConText, chúng ta phải trả lời các câu hỏi sau:
-Đã tạo bảng để lưu văn bản chưa?
-Text đã được load vào bảng chưa?
-ConText đã được cài đặt chưa?
-ConText đã được khởi tạo tham số enabled chưa?
-Quyền CTXAPP đã được gán cho user chưa?
Sau khi thực hiện xong các bước trên, chúng ta có thể bắt đầu làm việc với ConText.
PcLeHoan
1996 - 2002
Mirror :
http://www.pclehoan.com
Mirror :
http://www.lehoanpc.net
Mirror :
http://www.ktlehoan.com