Tìm kiếm giá sản phẩm thương mại điện tử tự động trên mạng pdf

10 377 0
Tìm kiếm giá sản phẩm thương mại điện tử tự động trên mạng pdf

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

Thông tin tài liệu

HỌC VIỆN KỸ THUẬT QUÂN SỰ KHOA CÔNG NGHỆ THÔNG TIN o0o BÁO CÁO MÔN HỌC Chương trình dịch Đề bài 10: Tìm hiểu về biểu thức chính quy và viết chương trình tìm kiếm giá của sản phẩm điện tử trên mạng internet Giảng viên giảng dạy: TS. Hà Chí Trung Học viên: Hoàng Nam Thắng Nguyễn Duy Cường Hoàng Thị Thanh Nguyễn Thị Tuyền Lớp: K23 - CHCNTT Hà Nội – Năm 2012 I. BIỂU THỨC CHÍNH QUY - Biểu thức chính quy (regular expression, viết tắt là regexp, regex hay regxp) là một chuỗi miêu tả một bộ các chuỗi khác, theo những quy tắc cú pháp nhất định. Biểu thức chính quy thường được dùng trong các trình biên tập văn bản và các tiện ích tìm kiếm và xử lý văn bản dựa trên các mẫu được quy định. Nhiều ngôn ngữ lập trình cũng hỗ trợ biểu thức chính quy trong việc xử lý chuỗi, chẳng hạn như C#, Perl có bộ máy mạnh mẽ để xử lý biểu thức chính quy được xây dựng trực tiếp trong cú pháp của chúng. Bộ các trình tiện ích (gồm trình biên tập sed và trình lọc grep) đi kèm các bản phân phối Unix có vai trò đầu tiên trong việc phổ biến khái niệm biểu thức chính quy. - Thuật ngữ regular expression xuất phát từ lý thuyết toán học và khoa học máy tính, nó phản ánh một đặc điểm của các biểu thức toán học được gọi là chính quy (regularity). Một biểu thức có thể được thực hiện trong một phần mềm bằng cách sử dụng một bộ xác định giới hạn tự động (Deterministic Finite Automation – DFA). DFA là một trạng thái xác định và không sử dụng cơ chế quay lui (backtracking). - Nếu sử dụng tốt những kỹ năng về regular expression. Chúng ta sẽ đơn giản hơn nhiều trong lập trình và quá trình xử lý văn bản, và có những vấn đề sẽ không thể giải quyết được nếu không sử dụng regular expression. Bạn sẽ cần đến hàng trăm thủ tục để trích xuất tất cả các địa chỉ email từ một số tài liệu, đây có thể nói là một việc làm tẻ nhạt và vất vã. Nhưng với regular expression bạn chỉ cần một số dòng lệnh hoặc thậm chí một dòng lệnh để làm việc này. - Regular expression là một công cụ mạnh mẽ trong việc thao tác và trích xuất văn bản trên máy tính. Do đó nắm vững các biểu thức chính quy sẽ giúp bạn tiết kiệm nhiều thời gian và công sức. 1. Định nghĩa Cho Σ là một bộ chữ cái. Biểu thức chính quy trên Σ và các tập hợp mà chúng mô tả được định nghĩa một cách đệ quy như sau: 1) φ là biểu thức chính quy ký hiệu cho tập rỗng 2) ε là biểu thức chính quy ký hiệu cho tập {ε} 3) ∀ a ⊂ ∑ , a là biểu thức chính quy ký hiệu cho tập {a} 4) Nếu r và s là các biểu thức chính quy ký hiệu cho các tập hợp R và S thì (r + s), (rs) và (r*) là các biểu thức chính quy ký hiệu cho các tập hợp R  S, RS, R* tương ứng. Trong khi viết biểu thức chính quy ta có thể bỏ bớt các dấu ngoặc đơn với lưu ý rằng thứ tự ưu tiên của các phép toán xếp theo thứ tự giảm dần là: phép bao đóng, phép nối kết, phép hợp, chẳng hạn: biểu thức ((0(1*)) + 1) có thể viết là 01*+ 1. Phép toán bao đóng dương cũng có thể được sử dụng khi viết biểu thức chính quy. Ta có thể viết rút gọn rr* hay r*r thành r + . Nếu cần thiết phân biệt thì ta sẽ dùng ký hiệu r cho biểu thức chính quy r và L(r) cho ngôn ngữ được ký hiệu bởi biểu thức chính quy r; ngược lại một cách tổng quát, ta có thể dùng r cho cả hai. Thí dụ 01: Một số biểu thức chính quy ký hiệu cho các ngôn ngữ: - 00 là biểu thức chính quy biểu diễn tập {00}. - (0+1)* ký hiệu cho tập hợp tất cả các chuỗi số 0 và số 1, kể cả chuỗi rỗng = {ε, 0, 1, 00, 01, 10, 11, 010, 011, 0010 } - (0+1)*00(0+1)* ký hiệu cho tập hợp tất cả các chuỗi 0,1 có ít nhất hai số 0 liên tiếp. = {00, 000, 100, 0000, 0001, 1000, 1001, 011001, } - (1+10)* ký hiệu cho tất cả các chuỗi 0, 1 bắt đầu bằng số 1 và không có hai số 0 liên tiếp = {ε, 1, 10, 11, 1010, 111, 101010, } - (0+ε)(1+10)* ký hiệu cho tất cả các chuỗi không có hai số 0 liên tiếp. = {ε, 0, 01, 010, 1, 10, 01010, 0111, } - (0+1)*011 ký hiệu cho tất cả các chuỗi 0, 1 tận cùng bởi 011. = {011, 0011, 1011, 00011, 11011, } - 0*1*2* ký hiệu cho tất cả các chuỗi có một số bất kỳ các số 0, theo sau là một số bất kỳ số 1 và sau nữa là một số bất kỳ số 2. = {ε, 0, 1, 2, 01, 02, 12, 012, 0012, 0112, } - 00*11*22* ký hiệu cho tất cả các chuỗi trong tập 0*1*2* với ít nhất một trong mỗi ký hiệu. 00*11*22* có thể được viết gọn thành 0 + 1 + 2 + Thí dụ 02: Biểu thức chính quy ký hiệu cho tập hợp các số nguyên trong ngôn ngữ lập trình Pascal: Một chuỗi số nguyên trong một chương trình Pascal có thể bắt đầu bằng dấu âm (-) hoặc dấu dương (+) hay không chứa ký hiệu dấu, và theo sau đó là một chuỗi các ký hiệu số với ít nhất là một số. Biểu thức chính quy có dạng như sau: r = ( ‘+’ + ‘-‘ + ε) ( 0 + … + 9 (0 + … +9 )* 2. Một số tính chất đại số của biểu thức chính quy Dễ dàng chứng minh rằng, nếu cho r, s, t là các biểu thức chính quy thì ta có các đẳng thức sau: 1. r + s = s + r 2. r + r = r 3. r + (s+t) = (r+s) + t 4. r (st) = (rs) t 5. r (s+t) = rs + rt 6. (r+s) t = rt + st 7. rε = ε r = r 8. φ r = r φ = φ 9. r + φ = r 10. φ * = φ 11. (ε + r)* = r* 12. r + r* = r* 13. (r* )* = r* 14. (r* s* )* = (r+s)* Trong đó, ta có r = s có nghĩa là L(r) = L(s). II. BIỂU THỨC CHÍNH QUY TRONG NGÔN NGỮ C# 1. Mẫu tìm kiếm trong biểu thức chính quy. - Các mẫu đơn giản (Simple pattern). Thực hiện việc tìm kiếm chính xác theo những kí tự được chỉ ra trong mẫu. Ví dụ: lazydog là một regex. Nó là một mẫu đơn giản nhất vì nó so khớp (match) với đoạn text lazydog. Một match là một đoạn text so khớp với mẫu. - Kết hợp các ký tự đơn giản và đặc biệt. Được dùng khi ta muốn tìm kiếm các chuỗi cùng dang. Ví dụ, ta muốn tìm kiếm một chuỗi có một kí tự xuất hiện nhiều lần hay có nhiều kí tự trắng. Thông thường, dữ liệu do người dùng nhập vào thường có nhiều từ. Ví dụ, biểu thức /xy*z/ sẽ tìm kiếm các chuỗi bắt đầu bẵng x, có thể có nhiều kí tự y hay không có bên trong nó, kết thúc bởi z. Trong chuỗi xxzzzyzxyyyzz, biểu thức sẽ trả về chuỗi con ‘xyyyz’ Phức tạp hơn một chút: \b[A-Z0-9._%+-]+@[A-Z0-9 ]+\.[A-Z]{2,4}\b Đây là mẫu mô tả một địa chỉ email. Mẫu này có thể được dùng để tìm một địa chỉ email trong một đoạn văn bản, hoặc kiểm tra xem một chuỗi có phải là địa chỉ email hợp lệ hay không. 2. Biểu thức chính quy trong C# Phải xác định cú pháp của biểu thức chính quy cho phù hợp với cấu trúc và nội dung của dữ liệu cần kiểm tra, đây là phần khó nhất khi sử dụng biểu thức chính quy. Biểu thức chính quy được xây dựng trên hai yếu tố: trực kiện (literal) và siêu ký tự (metacharacter). - Trực kiện mô tả các ký tự có thể xuất hiện trong mẫu mà bạn muốn so trùng; - Siêu ký tự hỗ trợ việc so trùng các ký tự đại diện (wildcard), tầm trị, nhóm, lặp, điều kiện, và các cơ chế điều khiển khác. Các siêu ký tự thường dùng: Siêu ký tự Mô tả . Mọi ký tự trừ ký tự xuống dòng (\n). \d Ký tự chữ số thập phân (digit). \D Ký tự không phải chữ số (non-digit). \s Ký tự whitespace (như khoảng trắng, tab ). \S Ký tự non-whitespace. \w Ký tự word (gồm mẫu tự, chữ số, và dấu gạch dưới). \W Ký tự non-word. ^ Bắt đầu một chuỗi hoặc dòng. \A Bắt đầu một chuỗi. $ Kết thúc một chuỗi hoặc dòng. \z Kết thúc một chuỗi. | Ngăn cách các biểu thức có thể so trùng, ví dụ AAA|ABA|ABB sẽ so trùng với AAA, ABA, hoặc ABB [abc] So trùng với một trong các ký tự trong nhóm, ví dụ [AbC] sẽ so trùng với A, b, hoặc C. [^abc] So trùng với bất cứ ký tự nào không thuộc các ký tự trong nhóm, ví dụ [^AbC] sẽ không so trùng với A, b, or C nhưng so trùng với B, F,… [a-z] So trùng với bất kỳ ký tự nào thuộc khoảng này, ví dụ [A-C] sẽ so trùng với A, B, hoặc C. ( ) Xác định một biểu thức con sao cho nó được xem như một yếu tố đơn lẻ đối với các yếu tố được trình bày trong bảng này. ? Xác định có một hoặc không có ký tự hoặc biểu thức con đứng trước nó, vídụ A?B so trùng với B, AB, nhưng không so trùng với AAB. * Xác định không có hoặc có nhiều ký tự hoặc biểu thức con đứng trước nó, ví dụ A*B so trùng với B, AB, AAB, AAAB,… + Xác định có một hoặc có nhiều ký tự hoặc biểu thức con đứng trước nó, vídụ A+B so trùng với AB, AAB, AAAB,… nhưng không so trùng với B. {n} Xác định có đúng n ký tự hoặc biểu thức con đứng trước nó, ví dụ A{2} chỉ so trùng với AA. {n,} Xác định có ít nhất n ký tự hoặc biểu thức con đứng trước nó, ví dụ A{2,} so trùng với AA, AAA, AAAA,… nhưng không so trùng với A. {n, m} Xác định có từ n đến m ký tự đứng trước nó, ví dụ A{2,4} so trùng với AA,AAA, và AAAA nhưng không so trùng với A hoặc AAAAA. 3. Các lớp để thao tác với Regular Expression trong .NET - .NET cung cấp một cách tiếp cận hướng đối tượng về việc so khớp chuỗi và thay thế theo RE. System.Text.RegularExpression là namespace trên thư viện các lớp chuẩn của .NET liên quan đến tất cả các đối tượng gắn liền với RE. - Lớp Regex tượng trưng cho một regular expression bất di bất dịch (read- only). Nó cũng chứa một phương thức tĩnh (static) cho phép chúng ta sử dụng những lớp Regex khác mà khỏi khởi tạo một đối tượng khác. Ví dụ: string pattern = @"\s2011"; Regex myRegex = new Regex(pattern); - Thành phần của lớp Regex: Thuộc tính: +Options: trả về những mục chọn được trao qua cho constructor Regex. +RightToLeft: nhận 1 trị cho biết liệu xem regular expression dò tìm từ phải qua trái hay không. Phương thức: +GetGroupNames: trả về mảng gồm toàn tên nhóm thu lượm đối với RE. +GetGroupNumbers: trả về mảng gồm toàn số nhóm thu lượm tương ứng với tên nhóm trên 1 mảng. +GroupNameFromNumber: đi lấy tên nhóm tương ứng với số nhóm được khai báo. +IsMatch: trả về trị bool cho biết liệu xem RE có tìm thấy một so khớp hay không trên pattern. +Match: dò tìm trên pattern xem có xuất hiện một RE hay không rồi trả về kết quả chính xác như là một đối tượng Match duy nhất. +Matches: dò tìm trên pattern xem tất cả các xuất hiện của một RE có hay không rồi trả về tất cả những so khớp thành công xem như Match được gọi nhiều lần. +Replace: cho thay thế những xuất hiện của một pattern được định nghĩa bởi một RE bởi một chuỗi ký tự thay thế được chỉ định. +Split: chẻ một pattern thành một mảng gồm những chuỗi con ở những vị trí được chỉ định bởi một so khớp trên RE +Unescape: cho unescape bất cứ những ký tự nào được escape trên pattern. III. XÂY DỰNG ỨNG DỤNG TÌM KIẾM GIÁ CỦA CÁC MẶT HÀNG ĐIỆN TỬ TRÊN INTERNET. 1. Khảo sát a. Đặt vấn đề Ngày nay thương mại điện tử đã trở nên quen thuộc với mọi người. Người tiêu dùng Việt Nam đã có ý thức rất rõ về điều này. Nắm bắt được xu thế đó các hệ thống thương mại điện tử liên tục được ra đời và cung cấp nhiều công nghệ mới hơn. Một trong những điểm quan trọng quyết định thắng lợi của các trang thương mại điện tửgiá cả. Do đó việc thay đổi giá các sản phẩm thường xuyên để cạnh tranh được điễn ra hàng ngày. Với những lý do đó nếu chúng ta xây dựng được một hệ thống cung cấp cho người sử dụng giá cả cập nhật các mặt hàng sẽ được rất nhiều người quan tâm. Mặt hàng điện máy đang được rất nhiều hệ thống chọn để kinh doanh như: http://www.trananh.vn/, http://www.mediamart.vn, http://vatgia.com/home/ Nhóm chúng tôi đã lựa chọn việc lấy giá các sản phẩm điện máy để xây dựng nên một hệ thống http://www.giacadienmay.com/ b. Khảo sát thực tế Khi vào các trang thương mại điện tử điện máy như http://www.trananh.vn/, http://www.mediamart.vn, http://vatgia.com/home/ chúng ta dễ nhận thấy cấu trúc tổ chức thông tin sẽ là: Danh sách các loại sản phẩm -> Danh sách các sản phẩm trong danh mục -> Chi tiết sản phẩm đó. Do đó khi lấy dữ liệu về giá của sản phẩm chúng ta sẽ phải trình tự lấy theo các bước như trên. 2. Phân tích hệ thống a. Phân tích đối tượng người sử dụng Hệ thống gồm 2 nhóm người sử dụng chính: Người quản trị, Thành viên hệ thống Người quản trị sẽ có khả năng vào định nghĩa các nguồn dữ liệu cũng như các biểu thức regex để lấy dữ liệu Thành viên của hệ thống có thể vào hệ thống tìm ra các sản phẩm từ nhiều hệ thống thương mại điện tử khác nhau để đưa ra quyết định cho riêng mình. b. Các chức năng của hệ thống. Hệ thống gồm các chức năng sau - Quản trị người dùng - Quản trị Site - Quản trị Link - Quản trị Regex - Quản trị lấy dữ liệu - Tìm kiếm sản phẩm. 3. Triển khai hệ thống. a. Một số giao diện khi triển khai - Quản trị site: - Quản trị link: - Quản trị Regex: - Lấy dữ liệu: - Tìm kiếm dữ liệu: b. Các biểu thức Regex thiết lập cho site Sau khi làm xong phẩn quan trị chúng tôi đã viết thử một số biểu thức chính quy theo chuẩn đã quản trị. 1.VatGia-HaTung http://www.vatgia.com/hatung319 a.Cat Stt Name Regex 1 REGION (?<REGION><div class="content menu_product".*?>[\w\W]*?</div>) 2 CAT <li class="level_1".*?>(?<CAT>[\w\W]*?)</li> 3 NAME <span lang="vi">(?<NAME>[\w\W]*?)</span> 4 URL <a href="(?<URL>[\w\W]*?)"> b.Item Stt Name Regex 1 REGION (?<REGION><table class="product_table_list".*?>[\w\W]*?</table>) 2 ITEM <tr class="list".*?>(?<ITEM>[\w\W]*?)</tr> 3 NAME <div class="product_name".*?>.*?<a.*?>(?<NAME>[\w\W]*?)</a> 4 URL <div class="product_name".*?>.*?<a href="(?<URL>[\w\W]*?)"> 5 IMAGE <a class="product_picture_thumbnail".*?rel="<img src='(?<IMAGE>[\w\W]*?)' 6 PRICE <div class="price">(?<PRICE>[\w\W]*?)</div> 7 REGIONPAGE <div class="page_div">(?<REGIONPAGE>[\w\W]*?)</div> 8 PAGE <a.*?href="(?<PAGE>[\w\W]*?)" 2.VatGia-BaoThy http://www.vatgia.com/baothymobile a.Cat Stt Name Regex 1 REGION (?<REGION><div class="content menu_product".*?>[\w\W]*?</div>) 2 CAT <li class="level_1".*?>(?<CAT>[\w\W]*?)</li> 3 NAME <span lang="vi">(?<NAME>[\w\W]*?)</span> 4 URL <a href="(?<URL>[\w\W]*?)"> b.Item Stt Name Regex 1 REGION (?<REGION><table class="product_table_list".*?>[\w\W]*?</table>) 2 ITEM <tr class="list".*?>(?<ITEM>[\w\W]*?)</tr> 3 NAME <div class="product_name".*?>.*?<a.*?>(?<NAME>[\w\W]*?)</a> 4 URL <div class="product_name".*?>.*?<a href="(?<URL>[\w\W]*?)"> 5 IMAGE <a class="product_picture_thumbnail".*?rel="<img src='(? <IMAGE>[\w\W]*?)' 6 PRICE <div class="price">(?<PRICE>[\w\W]*?)</div> 7 REGIONPAGE <div class="page_div">(?<REGIONPAGE>[\w\W]*?)</div> 8 PAGE <a.*?href="(?<PAGE>[\w\W]*?)" 3.HoangHaMoblile http://www.hoanghamobile.com a.Cat Stt Name Regex 1 REGION <div class="header-blue">.*?class="brands">(?<REGION>[\w\W]*?)</ul> 2 CAT <li>(?<CAT>[\w\W]*?)</li> 3 NAME <a.*?>(?<NAME>[\w\W]*?)</a> 4 URL <a href="(?<URL>[\w\W]*?)"> b.Item Stt Name Regex 1 REGION class="list-mobile"(?<REGION>[\w\W]*?)</table> 2 ITEM <td class="image">(?<ITEM>[\w\W]*?)(vnđ</span>|Liên hệ</span>) 3 NAME <span class="name".*?>.*?<a.*?>(?<NAME>[\w\W]*?)</a> 4 URL <span class="name".*?>.*?href="(?<URL>[\w\W]*?)"> 5 IMAGE style="background:url.'(?<IMAGE>[\w\W]*?)' 6 PRICE <span class="price-value">(?<PRICE>[\w\W]*?)$ 7 REGIONPAGE <div class="paging">(?<REGIONPAGE>[\w\W]*?)</div> 8 PAGE <a.*?href="(?<PAGE>[\w\W]*?)" Kết thúc . những ký tự nào được escape trên pattern. III. XÂY DỰNG ỨNG DỤNG TÌM KIẾM GIÁ CỦA CÁC MẶT HÀNG ĐIỆN TỬ TRÊN INTERNET. 1. Khảo sát a. Đặt vấn đề Ngày nay thương mại điện tử đã trở nên quen thuộc. o0o BÁO CÁO MÔN HỌC Chương trình dịch Đề bài 10: Tìm hiểu về biểu thức chính quy và viết chương trình tìm kiếm giá của sản phẩm điện tử trên mạng internet Giảng viên giảng dạy: TS. Hà Chí Trung . các hệ thống thương mại điện tử liên tục được ra đời và cung cấp nhiều công nghệ mới hơn. Một trong những điểm quan trọng quyết định thắng lợi của các trang thương mại điện tử là giá cả. Do đó

Ngày đăng: 27/06/2014, 03:20

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan