Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 105 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
105
Dung lượng
1,24 MB
Nội dung
ĐẠI HỌC QUỐC GIA HÀ NỘI ĐẠI HỌC CÔNG NGHỆ PHẠM LÊ CƯƠNG VỀ MỘT MƠ HÌNH CSDL QUAN HỆ VỚI THÔNG TIN KHÔNG CHẮC CHẮN DẠNG NGÔN NGỮ GẦN TỰ NHIÊN LUẬN VĂN THẠC SĨ CÔNG NGHỆ THÔNG TIN HÀ NỘI - 2008 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com ĐẠI HỌC QUỐC GIA HÀ NỘI ĐẠI HỌC CƠNG NGHỆ PHẠM LÊ CƯƠNG VỀ MỘT MƠ HÌNH CSDL QUAN HỆ VỚI THÔNG TIN KHÔNG CHẮC CHẮN DẠNG NGÔN NGỮ GẦN TỰ NHIÊN Mã số : 1.01.10 LUẬN VĂN THẠC SĨ CÔNG NGHỆ THÔNG TIN Người hướng dẫn khoa học: PGS,TSKH NGUYỄN CÁT HỔ HÀ NỘI - 2008 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com MỤC LỤC LỜI CAM ĐOAN .1 LỜI CẢM ƠN .2 MỤC LỤC DANH MỤC CÁC KÝ HIỆU CÁC CHỮ VIẾT TẮT .5 DANH MỤC CÁC HÌNH VẼ MỞ ĐẦU .7 CHƯƠNG – TỔNG QUAN .9 1.1 Lý thuyết mờ 1.1.1 Tập mờ .9 1.1.2 Lôgic mờ 10 1.1.3 Hạn chế việc quản lý thao tác thông tin mờ biểu thị lý thuyết tập mờ CSDL 11 1.1.4 Giới thiệu đại số gia tử .12 1.4.1 Đại số gia tử 14 1.4.1.1 Những phát biểu 15 1.1.4.1.2 Các khái niệm tính tuyến tính .15 1.1.4.1.3 Topo tính trù mật ĐSGT 17 1.1.4.1.4 Độ đo tính mờ 20 1.1.4.1.5 Hàm định lượng ngữ nghĩa biến ngôn ngữ 24 1.1.4.1.6 Sự tương tự tô-pô liệu định nghĩa ánh xạ định lượng ngữ nghĩa 28 CHƯƠNG – XÂY DỰNG MƠ HÌNH CSDL QUAN HỆ VỚI THƠNG TIN NGƠN NGỮ .33 2.1 Giới thiệu chung sở liệu với thông tin ngôn ngữ 33 2.2 Quản lý ngữ nghĩa liệu dựa ĐSGT 41 2.3 Phụ thuộc hàm dựa độ tương tự CSDL ngôn ngữ 46 2.4 Các đặc điểm tính chất mơ hình .56 CHƯƠNG 3- CÀI ĐẶT MỘT SỐ THỦ TỤC CỦA CSDL NGÔN NGỮ 58 3.1 Lập hàm sign .58 3.2 Lập hàm tính độ đo tính mờ fm 59 3.3 Lập hàm định lượng ngữ nghĩa QSF 61 3.4 Lập hàm ánh xạ giá trị giá trị biến ngôn ngữ sang miền giá trị thực 62 3.5 Lập hàm xác định lân cận mức k 63 3.6 Sửa đổi thao tác truyền thống sở liệu: insert, update, delete, select 63 3.6.1 Thao tác insert 64 3.6.2 Thao tác update 64 3.6.3 Thao tác delete 64 3.6.4 Thao tác select 65 3.7 Viết ứng dụng 65 3.7.1 Các hình nhập số liệu 66 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com 3.7.2 Các báo cáo 71 KẾT LUẬN .74 TÀI LIỆU THAM KHẢO 75 PHỤ LỤC 78 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com DANH MỤC CÁC KÝ HIỆU CÁC CHỮ VIẾT TẮT CSDL: Cơ sở liệu ĐSGT: Đại số gia tử LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com DANH MỤC CÁC HÌNH VẼ Hình 1: Tập mờ tập rõ 10 Hình 2: Mơ tả cường độ dòng điện 12 Hình 3: Minh họa độ đo tính mờ .23 Hình 4: Một ví dụ hệ lân cận 35 Hình 5: Ví dụ hệ lân cận .40 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com MỞ ĐẦU Trong năm gần đây, CSDL mờ nhiều tác giả nước quan tâm nghiên cứu có kết đáng kể [1,6,14,15] Có nhiều cách tiếp cận khác cách tiếp cận theo lý thuyết tập mờ [2,14], theo lý thuyết khả Prade Testemale năm 1983, tương tự [11] Tất cách tiếp cận nhằm mục đích nắm bắt xử lý cách thỏa đáng quan điểm thơng tin khơng xác (Unexact), không chắn (uncertainty) hay thông tin không đầy đủ (Incomplete) Do đa dạng loại thơng tin nên gặp khó khăn biểu thị ngữ nghĩa thao tác với chúng Trong năm gần đại số gia tử nhiều tác giả nghiên cứu [3,4,5,12,13] có ứng dụng đáng ý, đặc biệt lập luận xấp xỉ số toán điều khiển Vì vậy, có nhiều kết nghiên cứu CSDL mờ, theo chiều hướng cách tiếp cận nghiên cứu CSDL mờ với ngữ nghĩa dựa đại số gia tử xem vấn đề nghiên cứu Khác với CSDL mờ giá trị ngơn ngữ xem nhãn tập mờ, theo cách tiếp cận ĐSGT, giá trị xem phần tử đại số gia tử, theo cách biểu thị ngữ nghĩa ĐSGT, chúng xem giá trị ngơn ngữ Con người thường phải đối mặt với thông tin không chắn có nhu cầu tự nhiên việc xây dựng CSDL mờ Việc quản lý thao tác thông tin mờ biểu thị lý thuyết tập mờ CSDL quan tâm nghiên cứu mạnh mẽ Tuy nhiên người ta gặp số khó khăn biểu diễn quản lý thông tin mờ Nhiệm vụ đề tài nghiên cứu tiếp mơ hình CSDL với thơng tin biểu thị ngôn ngữ tự nhiên với ngữ nghĩa dựa cấu trúc thứ tự đại số gia tử phân tích ưu điểm mơ hình Nghiên cứu cài đặt thủ tục thao LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com tác liệu để bảo đảm tính trọn vẹn liệu mơ hình CSDL chứng tỏ thuận tiện đơn giản loại mô hình LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com CHƯƠNG – TỔNG QUAN 1.1 Lý thuyết mờ 1.1.1 Tập mờ Các tập mờ hay tập hợp mờ (tiếng Anh: Fuzzy set) mở rộng lý thuyết tập hợp kinh điển dùng lôgic mờ Trong lý thuyết tập hợp kinh điển, quan hệ thành viên phần tử tập hợp đánh giá theo điều kiện rõ ràng — phần tử thuộc không thuộc tập hợp Ngược lại, lý thuyết tập mờ cho phép đánh giá quan hệ thành viên phần tử tập hợp; quan hệ mô tả hàm thuộc (membership function) Các tập mờ coi mở rộng lý thuyết tập hợp kinh điển vì, với miền định, hàm thuộc giữ vai trị hàm đặc trưng ánh xạ phần tử tới giá trị khái niệm kinh điển Định nghĩa 1.1 Một tập hợp mờ tập hợp kinh điển Χ định nghĩa sau: Hàm thuộc μA(x) lượng hóa mức độ mà phần tử x thuộc tập sở Χ Nếu hàm cho kết phần tử phần tử khơng có tập cho, kết mơ tả thành viên tồn phần tập hợp Các giá trị khoảng mở từ đến đặc trưng cho thành viên mờ LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com 10 Hình 1: Tập mờ tập rõ Hàm thuộc μA(x) thỏa mãn điều kiện sau 1.1.2 Lôgic mờ Lôgic mờ (tiếng Anh: Fuzzy logic) phát triển từ lý thuyết tập mờ để thực lập luận cách xấp xỉ thay lập luận xác theo lơgic vị từ kinh điển Lơgic mờ coi mặt ứng dụng lý thuyết tập mờ để xử lý giá trị giới thực cho toán phức tạp (Klir 1997) Người ta hay nhầm lẫn khả với xác suất Tuy nhiên, hai khái niệm khác hẳn nhau; độ đắn lôgic mờ biểu diễn độ thuộc với tập định nghĩa không rõ ràng, khả xảy biến cố hay điều kiện Để minh họa khác biệt, xét tình sau: Bảo đứng ngơi nhà có hai phịng thơng nhau: phịng bếp phòng ăn Trong nhiều trường hợp, trạng thái Bảo tập hợp gồm thứ "ở bếp" hoàn toàn đơn giản: "trong bếp" "không bếp" Nhưng Bảo đứng cửa nối hai phịng sao? Anh ta coi "có phần bếp" Việc định lượng trạng thái "một phần" cho quan hệ thuộc tập mờ Chẳng hạn, Bảo thị ngón chân vào phịng ăn, ta nói Bảo "trong bếp" đến 99% phòng ăn 1% Một cịn đứng cửa LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com 91 where g.hedge_word_id = w.hedge_word_id and ((case_sensitive = 'Y' and w.hedge_word_text = hedge_word) or (case_sensitive = 'N' and upper(w.hedge_word_text) = upper(hedge_word))) and a.algebra_id = HA_HA_ID and (a.positive_hedge_group_id = g.hedge_group_number or a.negative_hedge_group_id = g.hedge_group_number); RETURN hedge_sequence; EXCEPTION WHEN no_data_found THEN raise_application_error(-20006,'Undefined order sequence for "' || hedge_word || '"'); WHEN others THEN raise ; END; Function HA_HEDGE_SEQUENCE Hàm xác định dấu gia tử FUNCTION HA_HEDGE_SIGN(ha_algebra_id in number, ha_hedge_word in varchar2, case_sensitive IN VARCHAR2) RETURN number IS hedge_algebra_id hedge_algebra.algebra_id%type; hedge_sign hedge_groups.hedge_sign%type; last_word varchar2(100); BEGIN select g.hedge_sign into hedge_sign from hedge_word_list w, hedge_algebra a, hedge_groups g where upper(w.hedge_word_text) = last_word LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com 92 ((case_sensitive = 'Y' and w.hedge_word_text = ha_hedge_word) or (case_sensitive = 'N' and upper(w.hedge_word_text) = upper(ha_hedge_word))) and w.hedge_word_id = g.hedge_word_id and a.algebra_id = ha_algebra_id and (a.positive_hedge_group_id = g.hedge_group_number or a.negative_hedge_group_id = g.hedge_group_number) and g.hedge_order_sequence 0; return hedge_sign; exception when no_data_found then raise_application_error(-20002,'Undefined hedge "' || ha_hedge_word || '"' ); return -1; when others then raise_application_error(sqlcode, sqlerrm); return -1; END; Hàm xác định từ cuối FUNCTION HA_LAST_WORD ( ha_expression IN varchar2) RETURN varchar2 IS word_separator varchar2(200); BEGIN word_separator := ha_system_param('WORD_SEPARATOR'); return substr(ha_expression, instr(ha_expression, word_separator, -1)+ 1, length(ha_expression)); EXCEPTION WHEN others THEN LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com 93 return ''; END; Function HA_LAST_WORD Hàm xác định từ FUNCTION HA_NEXT_WORD ( instring IN varchar2, word_separator In Varchar2) RETURN varchar2 IS -next_string varchar2(200); post number(10); BEGIN post := instr(instring, word_separator, 1) - 1; if post ha_max_level then return (0); end if; LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com 96 relation_sign := 1; ha_id := HA_HA_ID(ha_tmp, case_sensitive); negative_generator := ha_generator(ha_id, -1, case_sensitive); Gets negative generator positive_generator := ha_generator(ha_id, 1, case_sensitive); Gets positive generator if (word_count = 1) then begin if (last_word = negative_generator) then return (-1); else begin if (last_word = positive_generator) then return (1); end if; end; end if; raise no_such_hedge_word; end; end if; first_word := substr(ha_tmp, 1, instr(ha_tmp, word_separator, 1) - 1); LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com 97 remaining_word := substr(ha_tmp, instr(ha_tmp, word_separator, 1) + 1, length(ha_tmp) - instr(ha_tmp, word_separator, 1)); if (instr(remaining_word, word_separator, 1) > 0) then second_word := substr(remaining_word, 1, instr(remaining_word, word_separator, 1) -1); else second_word := substr(remaining_word, 1, length(remaining_word)); end if; if ((case_sensitive = 'Y' and second_word in (negative_generator, positive_generator)) or (case_sensitive = 'N' and upper(second_word) in (negative_generator, positive_generator))) then relation_sign := ha_hedge_sign(ha_id, first_word, case_sensitive); else relation_sign := ha_relation(first_word, second_word, case_sensitive); end if; return (relation_sign * ha_sign(remaining_word, first_word, ha_max_level, case_sensitive)); EXCEPTION when no_such_hedge_word then raise_application_error(-20004,'No such a hedge word: ' || last_word || ' Case sensitive: ' || case_sensitive); END; Hàm ánh xạ định lượng ngôn ngữ LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com 98 FUNCTION HA_QSF(ha_expression in varchar2, ha_max_level in number, ha_w in number, ha_alpha in number, ha_beta in number, ha_p in number, case_sensitive IN VARCHAR2) RETURN number IS ha_tmp hedge_master.hedge_master_text%type; last_word varchar2(50); first_word hedge_word_list.hedge_word_text%type; second_word hedge_word_list.hedge_word_text%type; remaining_word hedge_word_list.hedge_word_text%type; ha_id hedge_algebra.algebra_id%type; word_count number(10); generator hedge_word_list.hedge_word_text%type; no_such_hedge_word EXCEPTION; relation_sign number(1); word_separator varchar2(2); i integer; j integer; fuzziness_tmp hedge_groups.hedge_fuzziness%type; BEGIN ha_tmp := upper(ha_expression); ha_tmp := ha_expression; if case_sensitive = 'N' then ha_tmp := upper(ha_tmp); end if; word_separator := ha_system_param('WORD_SEPARATOR'); LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com 99 last_word := HA_LAST_WORD(ha_tmp); word_count := HA_WORD_COUNT(ha_tmp, word_separator); relation_sign := 1; ha_id := HA_HA_ID(ha_tmp, case_sensitive); generator := ha_generator(ha_id, -1, case_sensitive); Gets negative generator if (word_count = 1) then begin if (last_word = generator) then return (ha_w - ha_alpha * HA_FUZZINESS(ha_id, last_word, case_sensitive)); else begin generator := ha_generator(ha_id, 1, case_sensitive); Gets positive generator if (last_word = generator) then return (ha_w + ha_alpha * HA_FUZZINESS(ha_id, last_word, case_sensitive)); end if; end; end if; raise no_such_hedge_word; end; end if; first_word := substr(ha_tmp, 1, instr(ha_tmp, word_separator, 1) - 1); remaining_word := substr(ha_tmp, instr(ha_tmp, word_separator, 1) + 1, length(ha_tmp) - instr(ha_tmp, word_separator, 1)); j := HA_HEDGE_SEQUENCE(ha_id, first_word, case_sensitive); LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com 100 fuzziness_tmp := 0; if ha_hedge_sign(ha_id, first_word, case_sensitive) = -1 then begin for i in j ha_p loop fuzziness_tmp := fuzziness_tmp + ha_fm(ha_id, ha_hedge(ha_id, i, case_sensitive) || word_separator || remaining_word, case_sensitive); end loop; return (HA_QSF(remaining_word, ha_max_level, ha_w, ha_alpha, ha_beta, ha_p, case_sensitive) + ha_sign(ha_tmp, '', ha_max_level, case_sensitive) * (fuzziness_tmp (1 - ha_sign(ha_tmp, '', ha_max_level, case_sensitive) * ha_sign(ha_hedge(ha_id, 1, case_sensitive) || word_separator || ha_tmp, '', ha_max_level, case_sensitive) * (ha_beta - ha_alpha)) * ha_fm(ha_id, ha_tmp, case_sensitive)/2)); end; else begin for i in ha_p + j loop fuzziness_tmp := fuzziness_tmp + ha_fm(ha_id, ha_hedge(ha_id, i, case_sensitive) || word_separator || remaining_word, case_sensitive); LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com 101 end loop; return (HA_QSF(remaining_word, ha_max_level, ha_w, ha_alpha, ha_beta, ha_p, case_sensitive) + ha_sign(ha_tmp, '', ha_max_level, case_sensitive) * (fuzziness_tmp (1 - ha_sign(ha_tmp, '', ha_max_level, case_sensitive) * ha_sign(ha_hedge(ha_id, 1, case_sensitive) || word_separator || ha_tmp, '', ha_max_level, case_sensitive) * (ha_beta - ha_alpha)) * ha_fm(ha_id, ha_tmp, case_sensitive)/2)); end; end if; EXCEPTION when no_such_hedge_word then raise_application_error(-20002,'No such a hedge word'); END; Hàm ánh xác định giá trị miền thực [a,b] = [min, max] FUNCTION HA_QSF_MAP ( ha_expression in varchar2, qsf_val OUT number, mapped_val OUT NUMBER) RETURN NUMBER IS max_level hedge_algebra.maximum_level%type; LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com 102 w_value hedge_algebra.w_value%type; real_max_val hedge_algebra.real_max_value%type; real_min_val hedge_algebra.real_min_value%type; hedge_algebra_id hedge_algebra.algebra_id%type; alpha_val hedge_groups.hedge_fuzziness%type; beta_val hedge_groups.hedge_fuzziness%type; p_val number(3); param_val number(1); round_cut_func hedge_algebra.round_cut_function%type; precision_val hedge_algebra.qsf_precision%type; case_sensitive hedge_algebra.case_sensitive%type; Declare program variables as shown above BEGIN hedge_algebra_id := HA_HA_ID(ha_expression, case_sensitive); param_val := HA_HA_PARAMS(hedge_algebra_id, max_level, w_value, real_max_val, real_min_val, alpha_val, beta_val, p_val, round_cut_func, precision_val, case_sensitive); qsf_val := HA_QSF(ha_expression, max_level, w_value, alpha_val, beta_val, p_val, case_sensitive); if round_cut_func is not null then if upper(round_cut_func) = 'ROUND' then mapped_val := round(real_min_val + (real_max_val - real_min_val) * qsf_val, precision_val); elsif upper(round_cut_func) = 'TRUNC' then mapped_val := trunc(real_min_val + (real_max_val - real_min_val) * qsf_val, precision_val); end if; LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com 103 else mapped_val := (real_min_val + real_max_val - real_min_val) * qsf_val; end if; RETURN 1; END; Function HA_QSF_MAP Hàm chuyển đổi tuyến tính giá trị chuỗi (thuật ngữ) từ khoảng [0,1] sang khoảng giá trị thực [a,b] FUNCTION HA_FUZZY_TRANSLATION ( ha_expression in varchar2, errorcode out varchar2) ( ha_expression in varchar2) RETURN NUMBER IS hedge_val hedge_master.hedge_master_mapped_value%type; Declare program variables as shown above BEGIN select hedge_master_mapped_value into hedge_val from hedge_master m, hedge_algebra a where m.hedge_algebra_id = a.algebra_id and ( ( a.case_sensitive = 'Y' and hedge_master_text = ha_expression) or (a.case_sensitive = 'N' and upper(hedge_master_text) = upper(ha_expression))); errorcode := ''; RETURN hedge_val; EXCEPTION LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com 104 WHEN no_data_found THEN errorcode := 'Undefined hedge master for "' || ha_expression || '"'; raise_application_error(-20007,'Undefined hedge master for "' || ha_expression || '"'); return 0; WHEN too_many_rows THEN errorcode := 'Ambiguous hedge master for "' || ha_expression || '"'; raise_application_error(-20008,'Ambiguous hedge master for "' || ha_expression || '"'); return 0; END; Function HA_FUZZY_TRANSLATION FUNCTION HA_NEIGHBOR ( ha_ha_id IN number, full_hedge_word IN VARCHAR2, depth_k IN number, case_sensitive IN VARCHAR2, leftbound number, rightbound number) RETURN number IS cursor temp_term(ha_id_in number) as select term_name from temp_term where ha_id = ha_id_in; leftbound1 number; rightbound2 number; leftbound3 number; rightbound4 number; leftbound5 number; LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com 105 rightbound6 number; word_separator varchar2(2); BEGIN word_separator := ha_system_param('WORD_SEPARATOR'); last_word := HA_LAST_WORD(ha_tmp); word_count := HA_WORD_COUNT(ha_tmp, word_separator); if word_count