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

xây dựng một toà soạn báo điện tử và công cụ thu thập tin tự động

81 455 0
Tài liệu đã được kiểm tra trùng lặp

Đ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 đề Xây Dựng Một Tòa Soạn Báo Điện Tử Và Công Cụ Thu Thập Tin Tự Động
Tác giả Phan Thị Thanh Nhàn
Người hướng dẫn Thầy Nguyễn Ngọc Khương
Trường học Đại học Hải Phòng
Chuyên ngành Khoa Học Công Nghệ Thông Tin
Thể loại đề án tốt nghiệp đại học
Năm xuất bản 2012
Thành phố Hải Phòng
Định dạng
Số trang 81
Dung lượng 3,36 MB

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

Nội dung

Ngày nay, chỉ với một chiếc máy tính có nối mạng Internet, chúng ta đã có thể truy cập thông tin của bất kỳ tờ báo nào có thiết lập trang báo điện tử.. Ngoài ưu thế có thể chuy

Trang 1

Chương 1 TỔNG QUAN 4

4

1.3 Sự vượt trội của báo điện tử so với báo giấy thông thường 5

1.4 Sự thành công của các tờ báo điện tử hiện nay 7

1.5 Sự gia tăng về số lượng độc giả của các báo điện tử 9

2.1 Tính khả thi của việc lấy tin tự động 34

Trang 2

2.1.4 Kết luận 36

2.2 Công cụ hỗ trợ việc thu thập tin tức từ các báo điện tử khác

36

43

45

3.2.3.3 Gói quản lý chuyên mục tin 52

3.2.4 Thuyết minh cho mô hình thực thể kết hợp 64

Trang 3

3.3.4.2 Thiết kế chức năng 68

78

4.1.2 Xây dựng công cụ hỗ trợ việc thu thập tin tự động 78

81

Trang 4

LỜI CẢM ƠN

Tôi xin chân thành cảm ơn các thầy cô giáo giảng dạy tại khoa Toán Tin,

trường Đại học Hải Phòng, đã tạo điều kiện cho chúng tôi thực hiện đề tài

tốt nghiệp này

Xin cảm ơn Thầy Nguyễn Ngọc Khương người đã tận tình hướng dẫn, chỉ

bảo tôi trong suốt thời gian thực hiện đề tài Trong thời gian làm việc với

Thầy, tôi không những học hỏi được nhiều kiến thức bổ ích mà còn học

được tinh thần làm việc, thái độ nghiên cứu khoa học nghiêm túc của

Thầy

Xin gửi lời cảm ơn chân thành đến gia đình, ba mẹ và bè bạn vì đã luôn là

nguồn động viên to lớn, giúp đỡ tôi vượt qua những khó khăn trong suốt

quá trình làm việc

Mặc dù đã cố gắng hoàn thiện luận văn với tất cả sự nỗ lực của bản thân,

nhưng chắc chắn không thể tránh khỏi những thiếu sót Kính mong quý

Thầy Cô tận tình chỉ bảo

Một lần nữa, tôi xin chân thành cảm ơn và luôn mong nhận được sự đóng

góp quý báu của tất cả mọi người

Hải Phòng, Tháng 5/2012

Phan Thị Thanh Nhàn

Trang 5

MỞ ĐẦU

1.1 Lý do thực tiễn

Với sự gia tăng nhanh chóng của dân số và sự phát triển không ngừng của

công nghệ thông tin , kinh tế làm cho đời sống vật chất và tinh thần của

nhân dân ngày càng được nâng cao Nắm bắt thông tin về các vấn đề của

xã hội, văn hoá, thể thao, pháp luật, giải trí… đã trở thành một nhu cầu

không thể thiếu của độc giả Bên cạnh đó, báo giấy, báo nói, báo hình

ngày càng thể hiện nhiều bất cập của mình trong việc đưa thông tin đến

độc giả Do đó cần xây dựng một toà soạn báo điện tử để có thể đáp ứng

nhu cầu ngày càng cao về lượng thông tin hàng ngày của độc giả Giúp họ

cập nhật thông tin một cách nhanh chóng , chính xác và tiện lợi nhất

1.2 Lý do lý luận

Để xây dựng một tờ soạn báo có một lượng thông tin lớn được cập nhật

hàng ngày, hàng giờ nhanh chóng và chính xác đòi hỏi phải có một đội

ngũ nhân viên đông đảo và có kinh nghiệm làm việc Bên cạnh đó chi phí

cho toà soạn báo cũng không phải là thấp Ở Việt Nam không phải chi có

một toà soạn báo mà có ít nhất là 10 toà soạn báo Việc cập nhật thông tin

bị trùng lặp là không thể xảy ra dẫn đến sự lẵng phí về nguồn nhân lực và

chi phí Vậy tại sao chúng ta không xây dựng toà soạn báo điện tử cập

nhập thông tin từ những website tin tức khác để giảm sự lẵng phí trên

1.3 Mục đích nghiên cứu

Tìm hiểu một phần quy trình và xây dựng một toà soạn báo điện tử đồng

thời trang bị cho bản thân thêm những kiến thức cần thiết về lập trình,

những công cụ thiết kế web

Trang 6

Chương 2 TỔNG QUAN

1.1 Cách nhìn nhận về báo điện tử :

Sự phát triển không ngừng của công nghệ thông tin là tiền đề cho sự phát

triển của các ngành khoa học khác.

Song song với sự phát triển mạnh mẽ của khoa học kỹ thuật, nhu cầu cập

nhật thông tin của con người ngày càng nâng cao Có thông tin thì con

người mới có thể tiếp cận, nắm bắt và hiểu biết được sự thay đổi của thế

giới xung quanh Một thông tin để được xem là đạt yêu cầu khi thông tin

đó cần thỏa mãn 5 điều kiện: nhanh, chính xác, đầy đủ, được cập nhật kịp

thời và cách trình bày phải thu hút Chính vì để thỏa mãn 5 yêu cầu trên

người ta mới nghĩ đến vai trò của việc phát hành một tờ báo điện tử

Vậy “Báo điện tử là gì ?” Đó là một hệ thống website được thiết kế và

thực thi trên nền Internet Trong đó, việc xử lý thông tin được thực hiện

tại máy chủ và trả về cho độc giả kết quả xử lý thông qua trình duyệt Web

như Internet Explorer, FireFox, Việc này rất tiện lợi vì độc giả có thể

truy cập được tin tức ở bất kỳ đâu không phụ thuộc vào môi trường làm

việc miễn là máy tính của họ có kết nối Internet và có cài đặt một trình

duyệt web

Báo điện tử không chỉ tập trung vào việc trao đổi thông tin, dịch vụ nhằm

phát sinh lợi nhuận mà còn hỗ trợ cho các nhu cầu khác của độc giả Hay

nói cách khác, “Báo điện tử” là một hình thức kinh doanh trong đó người

bán và người mua không cần trao đổi trực tiếp mà vẫn hiểu nhau và ngày

càng xích lại gần nhau hơn Dữ liệu để trao đổi thông tin có thể ở dạng văn

bản, biểu mẫu, đồ họa, các video clip, âm thanh hay hình ảnh động …Bạn

cũng có thể bắt gặp các trang báo điện tử hiện nay trên mạng mà mọi

người thường xuyên truy cập nhất Đó là: http://vnexpress.net ,

http://www.dantri.com ,…

Được xem là sự hội tụ của cả 3 loại hình báo chí đi trước là báo nói,

báo in và báo hình, báo điện tử đã thu hút được một lượng độc giả nhanh

chóng đáng kể ngay từ khi mới ra đời Nó chia sẻ số lượng độc giả của các

loại hình báo chí khác .Cùng với sự phát triển của Internet và máy tính,

loại hình báo chí này còn đang được dự đoán sẽ trở thành loại báo được

nhiều người đọc nhất chỉ trong vòng 5 năm tới

Trang 7

1.2 Sự vượt trội của báo điện tử so với báo giấy thông thường

Trước kia, nếu muốn có một tờ báo thì người ta phải ra tiệm hoặc sạp báo

để mua Ngày nay, chỉ với một chiếc máy tính có nối mạng Internet, chúng

ta đã có thể truy cập thông tin của bất kỳ tờ báo nào có thiết lập trang báo

điện tử

Với trang báo điện tử, ngay tại nhà, bạn sẽ biết được thông tin mua, bán,

giá cả thị trường, tư vấn sức khỏe, thông tin việc làm…

Không những vậy, báo điện tử còn đáp ứng được nhiều thắc mắc, góp ý

của những khách hàng khó tính Nó phục vụ nhiều loại hình dịch vụ đa

dạng cho nhiều loại khách hàng khác nhau

Với báo điện tử, cơ hội mở rộng giao dịch trao đổi mua bán là rất lớn

Không chỉ giữa doanh nghiệp và khách hàng thông qua loại hình dịch vụ

quảng cáo mà còn giữa các khách hàng với nhau

Chỉ sau vài năm xuất hiện, các báo điện tử đã khẳng định được thế mạnh

không thể phủ nhận của mình Với sự trợ giúp của công nghệ thông tin,

báo điện tử đã cho phép chuyển tải những thông tin tới người đọc gần

như tức thời bằng cả chữ viết, tiếng nói và cả hình ảnh Đây là lợi ích hơn

hẳn so với các loại hình báo khác, nhất là loại hình báo giấy khi phải chờ

đợi in ấn theo định kỳ xuất bản

Ngoài ưu thế có thể chuyển tải thông tin một cách nhanh nhất tới bất kỳ

nơi nào trên thế giới, một trong những lợi thế hơn hẳn của báo điện tử là

không phải mất chi phí và thời gian cho công việc in ấn, vấn đề nan giải

thường gặp phải đối với các tờ báo giấy

Trong khi một tờ báo giấy phải tính toán hàng loạt những vấn đề liên quan

tới chi phí như : số lượng trang in màu, đen trắng, số lượng báo cần in

thì đối với báo điện tử, điều này lại gần như vô nghĩa Đặc tính thiết kế

nhiều tầng lớp của báo điện tử giúp người làm báo có thể xuất bản theo

nhu cầu mà không bị giới hạn về số lượng chữ viết, hình ảnh và số

lượng trang báo.

Thêm vào đó, những tờ báo điện tử còn có lợi thế hơn hẳn trong việc giao

tiếp hai chiều với bạn đọc Những cuộc phỏng vấn trực tuyến được các

báo điện tử thực hiện liên tục trong thời gian gần đây đã chứng minh điều

đó Người đọc có thể tham gia gửi câu hỏi ngay trong lúc xem thông tin

qua mạng Khả năng này đã tạo cảm giác gần gũi hơn giữa bạn đọc và báo

Báo điện tử cũng dễ dàng thực hiện các cuộc thăm dò dư luận ngay trên

mặt báo của mình Điều mà các tờ báo khác không thể làm được Người

đọc có thể điền thông tin ngay trên mặt báo và hồi âm lại chỉ bằng một

động tác click chuột

Trang 8

Những thế mạnh trên đã giải thích vì sao báo điện tử trên thế giới và Việt

Nam lại có tốc độ phát triển nhanh đến chóng mặt Chỉ sau vài năm ra đời,

Việt Nam đã hình thành cả một mạng lưới lên tới hàng chục tờ báo điện

tử Các tờ báo này cũng đều có mức gia tăng người đọc (được tính bằng số

lần truy cập) liên tục hàng ngày và thậm chí là hàng giờ

Hiện tại, thị trường báo điện tử đã có sự góp mặt của hầu hết các tờ báo in

có tên tuổi như Nhân dân, Lao động, Thanh niên Song song với việc xuất

bản báo giấy, các tòa soạn đều đã thành lập những bộ phận riêng biệt

chuyên làm báo điện tử Sự phát triển mạnh mẽ trên đã góp phần tạo nên

một thị trường báo chí đa dạng, mới mẻ, hiện đại hơn và đặc biệt thích hợp

với giới trẻ - những người luôn thích ứng nhanh với công nghệ mới

Theo dự đoán của giới chuyên môn, với một lực lượng phóng viên chuyên

nghiệp sẵn có kinh nghiệm nhiều năm, những tờ báo giấy lớn hiện nay có

nhiều triển vọng để trở thành những tờ báo điện tử có số lượng người truy

cập lớn nhất trong tương lai

1.3 Sự thành công của các tờ báo điện

tử hiện nay

1.3.1 Trong nước

Bước ngoặt của báo điện tử ở Việt Nam đă

được đánh dấu bằng sự ra đời của các báo

điện tử như Laodong, Vneconomy (Thời

báo Kinh tế Việt Nam), VnExpress,

Vietnamnet

Báo chí điện tử mới phát triển ở nước ta trong 5 năm qua nhưng đã

đạt được những kết quả đáng khích lệ Năm 1997, báo chí điện tử Việt

Nam mới chỉ có một tạp chí điện tử (tạp chí Quê hương), nhưng đến nay

đã nâng tổng số lên 21 tờ báo điện tử, hai nhà xuất bản và một số báo đã

có trang điện tử (tính đến tháng 8/2002) Nhiều tờ báo sau khi đưa lên

mạng đã thu hút ngay một số lượng độc giả rất nhiều so với báo in như:

Lao động, Nhân dân, Sài Gòn giải phóng

Với ưu thế mà báo in không có được, báo điện tử đã cập nhật một cách

nhanh nhất các sự kiện, sự việc diễn ra trong đời sống chính trị, kinh tế, xã

hội Số lượng người đọc ngày càng đông vì báo điện tử có thể đáp ứng

mọi yêu cầu và cung cấp đầy đủ các thông tin mà mọi người quan tâm

So với báo in, phát thanh, truyền hình, báo chí điện tử còn có khả năng lưu

trữ, bảo quản thông tin hiệu quả, gọn nhẹ, đỡ tốn kém và phục vụ kịp thời

cho việc tra cứu của độc giả theo yêu cầu Bên cạnh đó, báo điện tử đã

khắc phục được cơ bản những trở ngại đối với báo in khi đưa ra nước

ngoài Mặt khác, báo chí điện tử còn là phương tiện để tuyên truyền chủ

Trang web Laodong.com.vn.

Trang 9

trương, đường lối, chính sách của Đảng và Nhà nước, giúp cho bạn bè trên

thế giới, Việt kiều đang sống ở nước ngoài hiểu về công cuộc đổi mới, tình

hình phát triển của đất nước

1.3.2 Ngoài nước

Trên thế giới, báo điện tử đã sớm trở thành một xu hướng và đang

phát triển rất mạnh Trường hợp của ông Michael Maier là một ví dụ.

Với việc thành lập báo điện tử Netzeitung, ông Maier giờ đây đã thực hiện

được ước mơ của mình Nổi tiếng ngay từ khi còn làm chủ bút tờ Berliner

Zeitung ở Berlin, song ông trùm báo chí Đức 42 tuổi Michael Maier vẫn

nuôi ý tưởng làm báo điện tử Và khi chuyển sang làm tạp chí Stern, ông

được coi là người đi đầu một kỷ nguyên báo chí mới ở Đức Tuy nhiên,

sau 6 tháng chuẩn bị, vào tháng 7-1999, ông lại rời Stern sang Jerusalem

trước khi "kỷ nguyên báo chí mới" của ông bắt đầu

Trải qua một sự thay đổi có ảnh hưởng sâu rộng ở Jerusalem, Maier đã

nhận ra rằng, ông không nhất thiết phải in báo thêm nữa Ông có thể tìm

thấy bất cứ điều gì ông muốn trên Internet Maier đã tự đặt mình trong một

phòng thưa thớt đồ đạc: một bàn làm việc, một máy vi tính và một tivi

Trên bàn có thêm vài tờ báo thay vì cả đống chất ngất như khi còn ở

Berliner Zeitung Maier còn nghĩ xa hơn nữa: 2 tờ báo vẫn còn là quá

nhiều đối với ông

Maier đã bắt tay vào làm tờ báo điện tử Netzeitung từ đầu tháng 10 năm

2000 Tờ báo mạng với đội ngũ nhân viên 30 người đang trong giai đoạn

hoạt động thử nghiệm Họ hy vọng với sự tiên phong của nó, báo điện tử

sẽ cách mạng hoá ngành báo chí ở Đức Mặc dù, tờ báo này được thành

lập mà không có một nguồn thu nhập nào khác, không có các băng quảng

cáo, thậm chí là không có cả một chiến dịch quảng cáo ngoài Internet,

nhưng ông Maier vẫn tin rằng, Netzeitung sẽ trở thành một trong những

nguồn tin tức hàng đầu ở Đức trên Internet

Maier lý giải: “Nếu tôi cầm một tờ báo và nhận ra rằng tôi đã xem mọi

tin tức trong tờ báo này trên bản tin truyền hình hôm qua, thì nó trở

nên vô dụng đối với tôi” Và nếu bản tin truyền hình đã bắt đầu quyến rũ

được những người đọc báo, thì rồi những bản tin Internet với việc đề cập

tất cả những sự kiện mới nhất từ 6 giờ sáng đến 11 giờ đêm, cập nhật từng

10 phút một, sẽ làm cho tờ báo điện tử càng

hoàn thiện hơn

Tính xu hướng của Báo điện tử còn thể

hiện rõ trên Báo cáo Tình trạng thông tin

Hoa Kỳ 2004 (do Trung tâm nghiên cứu

Pew và Dự án cho tính ưu việt báo chí

Trang 10

thực hiện, công bố ngày 24-5-2004), hiện có đến 66% người Mỹ xem tin

tức trên mạng (chia thành ba nhóm: khoảng 50% xem tin nóng; 30% xem

tin cùng lúc với công việc trực tuyến khác, chẳng hạn kiểm tra email, chat

hoặc mua sắm trên mạng; và còn lại là thành phần cố ý tìm thêm thông tin

về vấn đề gì đó mà họ đã nghe qua)

1.4 Sự gia tăng về số lượng độc giả của các báo điện tử

Toàn cảnh CNTT Việt Nam 2004 cho biết, đã có 5 trang web tiếng Việt

lọt vào top 10.000 website toàn cầu Tính theo cả số lượt truy cập cũng

như lưu lượng truy cập, thì VnExpress giữ vị trí đứng đầu, Tin tức Việt

Nam đứng thứ 2, Việt Nam Net đứng thứ 3 Ngoài ra, báo điện tử Thanh

Niên xếp ở vị trí thứ 4 và Tuổi Trẻ đứng hàng thứ 5.

Hiện nay, VnExpress có hơn 800.000 độc giả thường xuyên, với trung

bình 13 triệu lượt người truy cập hàng tháng VnExpress được các nhà báo

viết về CNTT bình chọn là một trong 10 sự kiện nổi bật trong lĩnh vực

công nghệ thông tin của năm 2002 vì

"đã thực sự là một biểu tượng cho sự

phát triển nội dung Internet ở Việt

Nam"

Theo Hiệp hội Báo chí thế giới (dẫn lại

từ BBC ngày 1-6-2004), lượng độc giả

báo điện tử (toàn cầu) đã tăng 350%

trong 5 năm qua

Về lý thuyết, khái niệm truyền thông đại chúng đã thể hiện cực rõ trong

hoạt động báo điện tử Nếu như báo in chỉ phát hành được khoảng vài

trăm ngàn hay trên 1 triệu bản, báo điện tử có thể đến với hàng triệu độc

giả không chỉ trong nước mà còn khắp thế giới, tại bất cứ nơi nào có máy

tính truy cập mạng

Trang 11

1.5 Mục tiêu đề tài

Qua những phân tích về mặt công nghệ và xu hướng phát triển của Báo

điện tử trong tương lai, nhóm đề ra những mục tiêu sau cho đề tài :

1.5.1 Tìm hiểu Regular Expression

Đôi khi bạn cần kiểm tra dữ liệu nhập vào có đúng với cấu trúc và nội

dung được quy định trước hay không Ví dụ, bạn muốn bảo đảm người

dùng nhập địa chỉ IP, số điện thoại, hay địa chỉ e-mail hợp lệ Khi đó, bạn

sẽ cần tới Regular Expression (RegEx), hay còn gọi là 'Biểu thức chính

quy"

1.5.1.1 Giới thiệu

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 bạn sử dụng tốt những kỹ năng về regular expression Chúng 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

Trang 12

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ạc 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 ngôn ngữ cực mạnh dùng mô tả văn bản

cũng như thao tác trên văn bản Đó là một biểu thức ở dạng chuỗi mô tả

một quy tắc dùng để so khớp mẫu văn bản Bất kỳ chuỗi đầu vào nào thỏa

quy tắc này sẽ được coi là một chuỗi hợp lệ Việc sử dụng Regex sẽ giúp

ta loại bỏ được các dữ liệu không hợp lệ trong quá trình nhập liệu 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

Một Regular expression thường được ứng dụng lên một chuỗi, nghĩa là

lên một nhóm ký tự

Chẳng hạn, ta có chuỗi sau:

Mot, Hai, Ba, Bon, NEVERLAND.

Bạn có thể trả về bất cứ hoặc tất cả các chuỗi con của nó (Hai hoặc

Bon chẳng hạn) hoặc thay đổi phiên bản của những chuỗi con của nó (Mot

hoặc BoN chẳng hạn)

1.5.1.2 Xây dựng 1 Regilar Expression

Trước tiên, bạn 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 Một Regular expression là một kiểu

mẫu văn bản gồm 2 phần:

literal (trực kiện): Đơn thuần là một ký tự(a-z) mà chúng ta muốn đem

so khớp với chuỗi đích

metacharacters (siêu ký tự): Là một ký tự đặc biệt hoạt động như là

một mệnh lệnh đối với một phần phân tích ngữ nghĩa(parser) của Regular

Expression 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

Ví dụ một regular expression như sau:

^ (From|To|Subject|Date) :

Regular expression này sẽ khớp với bất cứ chuỗi con nào miễn là chuỗi

này là một hàng mới bắt đầu với “From” hoặc “To” hoặc các chữ

“Subject” hoặc “Date” (Dấu ^ nghĩa là bắt đầu 1 hàng mới) chuỗi này kết

Dấu ^ cho bộ parser của RE biết chuỗi mà ban đang truy tìm phải bắt

đầu bởi một hàng mới Các chữ “From”, “To”, là những literal, và những

metacharacter “(“, “)”, và “|” được dùng để tạo nhóm literal và cho biết bất

Trang 13

cứ những lựa chọn nào cũng phải khớp Dấu ^ cũng là metacharacter, nó

cho biết là khởi đầu 1 hàng Do đó, chúng ta đọc hàng sau đây:

^ (From|To|Subject|Date) :

Như sau: “cho khớp bất cứ chuỗi con nào bắt đầu bởi một hàng mới theo

sau bởi bất cứ 4 chuỗi literal: From,To,Subject và Date rồi theo sau bởi

dấu hai chấm”

1.5.1.2 Các ký tự siêu thường dùng

. Đại diện cho 1 ký tự bất kỳ 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 (các biểu thức được so trùng từ trái sang)

[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

Trang 14

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

1.5.1.3 Các lớp để thao tác với Regular Expression

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 Regular Expression System.Text.Regular Expression 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 Regular Expression

Regex

Lớp Regex tượng trưng cho 1 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 rex khác mà khỏi khởi tạo 1 đối tượng khác

Ví dụ:

string pattern= “<H2 class=Lead>” ;

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

Regular Expression

Trang 15

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.

Lớp Match

Lớp này tượng trưng cho những kết quả duy nhất của một tác vụ so

khớp (match) Regular Expression Sau đây mình có 1 ví dụ nhỏ sử dụng

phương thức Match của lớp Regex để trả về 1 đối tượng kiểu Match để có

thể tìm ra so khớp đầu tiên trên chuỗi nhập

Sử dụng thuộc tính Match.Access của lớp Match báo cho biết liệu

xem đã tìm ra 1 so khớp hay chưa

Ví dụ:

string chuoi = "123abcd456bdabc";

string pattern = "abc";

Regex myRegex = new Regex(pattern);

Match m = myRegex.Match(chuoi);

if (m.Success)

{

Console.WriteLine("Tim thay chuoi con {0} o vi tri thu {1} trong chuoi", m.Value, m.Index);

}

Else

{

Trang 16

Console.WriteLine("Khong tim thay chi ca");

}

Kết quả:

Tim thay chuoi con abc o vi tri thu 3 trong chuoi

Lớp MatchCollection

Lớp này tượng trưng cho 1 loạt những so khớp thành công đè chồng lên

nhau tạo thành một tập hợp bất di bất dịch và lớp này không có phương

thức khởi tạo Những đối tượng MatchCollection sẽ do thuộc

tính Regex.Matches của lớp Regex trả về.Hay MatchCollection là mảng

các đối tượng Match là được

string pattern = "like";

Regex myRegex = new Regex(pattern);

mc = myRegex.Matches(chuoi);

foreach (Match m in mc)

{

Console.WriteLine("Chuoi con '{0}' xuat

hien o chi muc {1}", m.Value, m.Index);

}

}

Kết quả trả về:

Chuoi con 'like' xuat hien o chi muc 2

Chuoi con 'like' xuat hien o chi muc 14

Chuoi con 'like' xuat hien o chi muc 29

Sử dụng Regex Match Collections:

Hai thuộc tính của đối tượng Match là:

Chiều dài

Vị trí của pattern trong chuỗi

Xét ví dụ:

Trang 17

static void Main(string[] args)

Console.WriteLine("The match[{0}]: '{1}' co chieu

dai la {2}", i,mc[i].Value, mc[i].Length);

}

}

Chuỗi \S đi tìm những ký tự không phải khoảng trắng, và dấu + cho biết

một hoặc nhiều ký tự ở đằng sau Còn \s cho biết là khoảng trắng Do đó,

gộp lại ta có mệnh đề “hãy đi tìm bất cứ ký tự non-whitespace theo sau bởi

whitespace”

Kết quả của ví dụ trên là:

The match[0]: 'This ' co chieu dai la 5

The match[1]: 'is ' co chieu dai la 3

The match[2]: 'a ' co chieu dai la 2

The match[3]: 'example ' co chieu dai la 8

Lớp Group

Đôi khi người ta cho là rất tiện khi cho gộp lại những biểu thức con so

khớp với nhau như vậy bạn có thể phân tích ngữ nghĩa những đoạn của

chuỗi khớp

Ví dụ, có thể bạn muốn so khớp dựa trên địa chỉ IP và cho gộp lại tất cả

các IP tìm thấy được bất cứ nơi nào trên đoạn chuỗi

Lớp Group cho phép bạn tạo những nhóm so khớp dựa trên cú pháp

Regular Expression, và tượng trưng cho kết quả từ 1 biểu thức gộp nhóm

duy nhất

Một biểu thức gộp nhóm đặt tên cho một nhóm và cung cấp 1 Regular

Expression; bất cứ chuỗi con nào khớp với Regular Expression sẽ được

đưa vào nhóm Ví dụ, muốn tạo 1 nhóm IP, bạn có thể viết một Regular

Expression cho biết một hoặc nhiều digit hay dot theo sau bởi space như

sau:

@”(?(\d|\.)+)\s”

Trang 18

Lớp Match được dẫn xuất từ Group, và có một tập hợp mang tên

Groups chứa tất cả các nhóm mà Match tìm thấy

Lớp Group tượng trưng cho những kết quả thu hoạch được từ 1 thu

lượm nhóm duy nhất Ví Group có thể thu lượm 0, 1 hoặc nhiều chuỗi chữ

trong một lần so khớp duy nhất, nó chứa một tập hợp gồm những đối

tượng của Capture Vì Group kế thừa từ Capture, substring bị thu lượm có

thể được truy xuất trực tiếp

Các thể hiện của Group sẽ được trả về bởi thuộc tính

Match.Groups(số group) hoặc Match.Groups(“tên group”) nếu cấu trúc

gộp nhóm

“(?<groupname>)” được dùng đến.

Ví dụ sau đây sử dụng kiến trúc gộp nhóm lồng nhau để thu lượm

những chuỗi con gộp thành nhóm:

static void Main(string[] args)

{

string pattern = "(a(b))c";

string chuoi = "abbabc";

Regex myRegex = new Regex(pattern);

Đoạn mã sau đây sử dụng kiến trúc gộp nhóm có mang tên (name và

value) để thu lượm những substrings từ một chuỗi chứa dữ liệu trên 1 dạng

thức “DATANAME:VALUE” mà RE bị chẻ ở dâu dấu hai chấm (:)

static void Main(string[] args)

Trang 19

Kết quả:

Section:119900 co chieu dai 14

Section co chieu dai 7

119900 co chieu dai 6

Lớp GroupCollection

Là lớp tượng trưng cho 1 tập hợp gồm toàn những nhóm được thu

lượm và trả về một lô những nhóm được thu lượm trong một lần so khớp

duy nhất Collection này thuộc loại read-only và không có phương thức

khởi tạo Các thể hiện của lớp GroupCollection được trả về trong tập hợp

mà thuộc tính Match.Groups trả về

Ví dụ: Dò tìm và in ra số những nhóm được thu lượm bởi một

Regular Expression Làm thế nào để trích từng thu lượm riêng rẽ trên mỗi

thành viên của môt group collection

static void Main(string[] args)

Mỗi lần một đối tượng Regex khớp với một subexpression, một thể

hiện Capture sẽ được tạo ra, và được thêm vào tập hợp CaptureCollection

Mỗi đối tượng Capture tượng trưng cho một thu lượm (capture) đơn lẻ

Mỗi nhóm sẽ có riêng cho mình một capture collection những mục khớp

với subexpression được gắn liền với nhóm

Lớp CaptureCollection tượng trưng cho một loạt những chuỗi con

được thu lượm và trả về một lô những thu lượm được thực hiện chỉ qua

một nhóm thu lượm duy nhất Thuộc tính Captures, một đối tượng của lớp

CaptureCollection, được cung cấp như là một thành viên của các lớp

Match và Group giúp truy xuất dễ dàng lô các chuỗi con được thu lượm

Ví dụ sau đây tôi dùng đến regular expression (Abc)+ để tìm ra một

hoặc nhiều so khớp trên chuỗi “XYZAbcAbcAbcXYZAbcAb”

static void Main(string[] args)

Trang 20

{

string chuoi =

"XYZAbcAbcAbcXYZAbcAb";

string pattern = "(Abc)+";

Regex myRegex = new

Regex(pattern);

Match m = myRegex.Match(chuoi);

GroupCollection gc = m.Groups;

CaptureCollection cc;

Console.WriteLine("So nhom thu

luom duoc = {0}",gc.Count.ToString());

Abc bat dau tu ky tu 3

Abc bat dau tu ky tu 6

Abc bat dau tu ky tu 9

1.5.1.5 Khai báo sử dụng regular expression trong các ngôn ngữ lập

trình

Regular expression là một phần của ngôn ngữ lập trình và các thư viện để

hoạt động và phát triển Sau đây là khai báo sử dụng regular expression

trong 2 ngôn ngữ lớn là Java và C#:

Với ngôn ngữ Java:

using java.util.regex;

Với ngôn ngữ C#:

Trang 21

using System.Text.RegularExpressions;

Với những thư viện đã khai báo sử dụng Chúng ta có thể thực hiện những

công việc thông thường của regular expression như tìm kiếm và thay thế

bằng cách xây dựng những cú pháp đặc biệt

1.5.1.4 Những công cụ làm việc với biểu thức chính quy

Các công cụ được giới thiệu trong phần này sẽ giúp chúng ta xây dựng,

kiểm tra lỗi, kiểm tra cú pháp và những thông tin phản hồi hỗ trợ chúng ta

lập trình tốt hơn Bạn nên kiểm tra biểu thức chính quy của mình xây dựng

trong những công cụ này để kiểm tra độ chính xác của biểu thức đó

RegexBuddy

Regexbuddy là một công cụ đầy đủ các tính năng nhất hiện nay để tạo lập,

kiểm tra và thực thi các biểu thức chính quy Nó có bộ biểu thức chính quy

Trang 22

cho những ngôn ngữ lập trình khác nhau như: NET, Java,… Và cho phép

chuyển đổi biểu thức chính quy giữa các ngôn ngữ lập trình

RegexBuddy được thiết kế bởi Jan Goyvaerts (là một chuyên gia về

Regular Expression)

RegexBuddy sẽ tự động tô sáng những phần phù hợp với biểu thức chính

quy của bạn, và thông báo những lỗi xuất hiện trong biểu thức chính quy

(nếu có) Sau đây là một vài button thường hay sử dụng trong

RegexBuddy:

List All: hiển thị một danh sách tất cả các chuỗi phù hợp với biểu thức

chính quy

Replace: nằm ở phía trên của màn hình Có chức năng tìm kiếm và thay

thế chuỗi được nhập vào trong textbox với biểu thức chính quy

Split: Sử lý các biểu thức chính quy bằng cách tách riêng thành các

token cơ sở ở những nơi mà đối tượng của bạn được tìm thấy bằng cách sử

dụng biểu thức chính quy của bạn

 Click bất kỳ button nào và lựa chọn Update Automatically để

RegexBuddy hiển thị kết quả một cách tự động và đồng bộ khi bạn thay

đổi bất cứ gì trong biểu thức chính quy

Copy button: đưa biểu thức chính quy được tạo vào clipboard để bạn

dán vào source code của mình

RegexBuddy có thể chạy trên Windows 98, ME, 2000, XP, Vista and

Windows 7 Còn có thể chạy tốt trên các môi trường như: Mware,

Parallels, CrossOver Office

RegexPal

RegexPal là một trình kiểm tra biểu thức chính quy online được tạo bởi tác

giả Steven Levithan Bạn chỉ âần một trình duyệt web hiện đại và một

đường truyền internet là có thể sử dụng nó RegexPal được viết hoàn toàn

bằng JavaScript, do đó nó chỉ hỗ trợ ngôn ngữ JavasScript

Trang 23

RegexPal sẽ tự động tô màu các chuỗi phù hợp với chuỗi biểu thức chính

quy được nhập ở ô phía trên Nếu bạn nhập một cú pháp sai thì RegexPal

sẽ tô sáng những phần sai đó RegexPal là công cụ tôi thường sử dụng khi

viết các chương trình trên Net để kiểm tra biểu thức chính quy của mình

Một vài công cụ kiểm tra biểu thức chính quy online khác

Để tạo một công cụ kiểm tra biểu thức chính quy online là một điều không

quá khó Nếu bạn có một kiến thức về phát triển web và những kiến thức

về regular expression cần thiết thì bạn có thể tự tạo cho mình một trang

như RegexPal kể trên Và có hàng trăm người đã làm sẵn nó cho bạn Sau

đây là một số trang điển hình:

http://regex.larsolavtorvik.com/: Hỗ trợ PHP PCRE, PHP POSIX và JavaScript.

Trang 24

http://www.nregex.com/ : hỗ trợ các ngôn ngữ NET được phát triển bởi David

Seruyange

http://www.rubular.com/: được xây dựng bởi tác giả Micheal Lovitt.

Trang 25

http://www.myregexp.com : là một Java applet chạy trên trình duyệt web (yêu

cầu cài đặt Java trình duyệt) Trang này sử dụng thư viện java.until.regex để hỗ

trợ Do đó những biểu thức chính quy được tạo ở trang này hoàn toàn phù hợp

với Java

1.7.2 Tìm hiểu Linq to XML

XML là một ngôn ngữ được ứng dụng rất nhiều trong lập trình, xử lý dữ

liệu cũng như truyền tải thông tin Trước đây việc thao tác và tạo ra các tài

liệu XML thông qua DOM XML API trong Net rất dài dòng và rắc rối Vì

Trang 26

thế để khắc phục điều này, Microsoft đã cho ra đời LINQ cùng với LINQ

to XML API

1.7.2.1 Từ DOM XML API đến LINQ to XML API

Ví dụ để tạo một tài liệu XML đơn giản sau

Sử dụng cách cũ với DOM XML API (namespace System.Xml):

XmlDocument doc = new XmlDocument();

XmlElement blog = doc.CreateElement("Blog");

XmlElement title = doc.CreateElement("Title");

title.InnerText = "YinYang's Programming Blog";

XmlElement author = doc.CreateElement("Author");

XmlElement firstName = doc.CreateElement("FirstName");

firstName.InnerText = "Yin";

XmlElement lastName = doc.CreateElement("LastName");

lastName.InnerText = "Yang";

XmlElement categories = doc.CreateElement("Categories");

XmlElement category1 = doc.CreateElement("Category");

Trang 27

Đoạn mã trên mặc dù rất dễ hiểu nhưng cú pháp lại quá dài dòng Việc tạo

ra một cấu trúc XML theo cách trên chỉ tập trung vào hai phương thức:

CreateElement() để tạo một phần tử mới và AppendChild() để thêm phần

tử con vào phần tử hiện tại Đây quả thực là một thứ dễ gây chán nản nếu

như bạn phải thường xuyên làm việc với chúng

Bây giờ ta thử xem cách mới theo LINQ to XML (namespace

new XElement("FirstName", "Yin"),

new XElement("LastName", "Yang")),

Rất đơn giản và dễ hiểu, chỉ cần duy nhất một lớp XElement để tạo ra một

tài liệu XML như trên Điểm chính của cách làm này là sử dụng từ khóa

params Cho phép truyền một số lượng tham số không xác định vào

phương thức Một overload của constructor lớp XElement được sử dụng

nhiều nhất là:

public XElement(XName name, params object[] content);

Theo overload này, một phần tử được tạo ra dựa hai yếu tố: tên của phần

tử và các phần tử con của nó

Trang 28

Tất cả các phần tử thuộc mảng content trong tham số trên đều trở thành

phần tử con của đối tượng XElement được định nghĩa

Và như bạn thấy với cú pháp này, mã nguồn được rút gọn rất nhiều so với

cách cũ Tuy nhiên do các tham số được lồng nhau và phân cấp trên một

dòng lệnh nên một rắc rối mà ta gặp phải là khó xác định được cấu trúc

của tài liệu XML được tạo ra

Vì lý do trên, bạn nên hạn chế lồng quá nhiều phần tử và phân cấp quá

nhiều khi tạo một đối tượng XElement Chia ra khởi tạo nhiều XElement

sau đó hợp lại là cách tốt để làm đoạn mã dễ hiểu hơn Một lời khuyên đơn

giản nữa là khi viết code, bạn hãy giữ việc thụt lề theo cấp độ của phần tử

trong tài liệu XML như trong đoạn mã ví dụ trên, như vậy nội dung và cấu

trúc của tài liệu XML gần như hiện lên trước mắt bạn.

1.5.2 Cây phân cấp lớp của LINQ to XML API

Sau khi lược bỏ một vài lớp mà tôi sẽ chưa bàn tới, ta có cây phân cấp lớp của

LINQ to XML API, tất cả các lớp này đểu nằm trong namespace

System.Xml.Linq Tuy nhiên bạn cũng cần add reference đến namespace

System.Xml do các lớp thừa kế một vài interface từ namespace này như

IXmlLineInfo, IXmlSerializable:

Trang 29

Công dụng của mỗi lớp trên có thể được nhận biết ngay từ tên gọi của chúng, tuy

nhiên để đảm bảo mọi thứ rõ ràng, tôi đã tạo một bảng liệt kê các lớp này cùng

với mô tả ngắn gọn của chúng

XName Đại diện cho một tên của một phần tử XML hay thuộc tính

XNamespace Đại diện một không gian tên XML Lớp này không thể

được di truyềnXObject Đại diện cho một nút hoặc một thuộc tính trong một cây

XMLXAttribute Đại diện một thuộc tính XML

XNode Đại diện các khái niệm trừu tượng của một nút (yếu tố,

bình luận, loại tài liệu, hướng xử lý, hoặc văn bản nút) trong cây XML

XText Đại diện một nút văn bản

XComment Đại diện một bình luận XML

XContainer Đại diện một nút có thể chứa các nút khác

XElement Đại diện một phần tử XML

XDocument Đại diện một tài liệu XML

Sau khi đã có cái nhìn tổng quan về mô hình lớp của API này, ta sẽ đi sâu

hơn vào xem xét một vài lớp chính mà ta sẽ không thể bỏ lỡ nếu như

muốn làm thành thạo được LINQ to XML

XNamespace

Đại diện cho một namespace trong tài liệu XML Bạn có thể tạo thể hiện

của lớp này từ một đối tượng string có dạng URI

XNamespace ns=”http://yinyangit.wordpress.com/namespace“

Để gán namespace cho một phần tử, thông thường ta sẽ tạo một đối tượng

XNamespace và dùng toán tử cộng để tạo ra một tên đầy đủ cho phần tử:

XNamespace ns=”http://yinyangit.wordpress.com/namespace”

XElement x= new XElement(ns+”FirstElement”);

XName

Mỗi phần tử XML được tạo ra đều phải có tên, và tên này được đại diện

bằng một đối tượng XName Về cơ bản, XName là một định danh bao

gồm tên cục bộ và tên namespace của phần tử (bao gồm XNamespace)

Trang 30

Giống như XNamespace, XName có thể tự động được tạo ra từ một đối

tượng string bằng cách overload operator:

public static implicit operator XName(string expandedName);

Một đối tượng XName sẽ được tạo ra trong mỗi dòng lệnh sau:

XName name = “Test”;

XElement root = new XElement(“Test”);

Ngoài ra bạn có thể tạo một XName bao gồm tên cục bộ và namespace

bằng cách đặt tên namespace trong cặp {} và theo sau đó là tên cục bộ:

XName name=”{http://yinyangit.wordpress.com}Test”;

Khi đó property LocalName sẽ là “Test” và Namespace sẽ là

http://yinyangit.wordpress.com

XObject

Được thừa kế từ System.Object và IXmlLineInfo (System.Xml), XObject

là một lớp abstract nằm ở đỉnh của cây phân cấp mà tôi minh họa ở trên

Lớp này cung cấp các property cần thiết giúp ta truy xuất được những

phần tử liên quan và một số thông tin cần thiết của phần tử trong tài liệu

XML

- Document: đối tượng XDocument chứa toàn bộ cấu trúc và nội dung

của tài liệu XML

- NoteType: lưu giá trị kiểu enum XmlNodeType xác định kiểu của

phần tử

- Parent: tham chiếu đến phần tử cha có kiểu XElement.

Ngoài ra lớp này chứa hai event là Changed và Changing được kích hoạt

mỗi khi phần tử bị thay đổi Hai event này có kiểu EventHandler

<XObjectChangeEventArgs> Lớp XObjectChangeEventArgs chứa

property có kiểu XObjectChange, đây là một enum chỉ ra kiểu thay đổi tác

động đến phần tử, bao gồm 4 giá trị: Add, Remove, Name (đối tên), Value

XElement root = new XElement("Root");

XElement lchild = new XElement("LChild","Foo");

XElement rchild = new XElement("RChild","Bar");

Trang 31

Changing type: Add

Changing type: Add

Changing type: Name

Changing type: Value

Changing type: Remove

———-<Root>

<RChild>Barrel</RChild>

</Root>

Thêm vào đó, XObject cho phép bạn thêm các chú thích để bổ sung thông

tin cho đối tượng Các thông tin annotation chỉ là tạm thời, không phải là

một phần của tài liệu XML và sẽ không được lưu xuống file Các phương

thức làm việc với chú thích trong XObject:

AddAnnotation Thêm một đối tượng vào danh sách chú thích của XObject

.Annotation(Type) Được các đối tượng chú thích đầu tiên của loại quy định từ

XObject Annotation<T>() Lấy đối tượng chú thích đầu tiên của loại quy định từ

Trang 32

XObject Annotations(Type) Được một bộ sưu tập các chú thích của các loại quy định

cho XObject Annotations<T>() Được một bộ sưu tập các chú thích của các loại quy định

cho Xobject

RemoveAnnotations(Type) Loại bỏ các chú thích của các loại quy định từ XObject RemoveAnnotations<T>() Loại bỏ các chú thích của các loại quy định từ Xobject

XAttribute

Một phần tử XML có thể chứa nhiều attribute, mỗi attribute này được đại

diện bởi một đối tượng XAttribute Bạn có thể truy xuất đến các attribute

trước và sau bằng cách dùng hai property PreviousAttribute và

NextAttribute Trong trường hợp attribute là một khai báo namespace,

property IsNamespaceDeclaration sẽ trả về true

XNode

Đại diện cho các phần tử (element, comment, document type, processing

instruction, text node) XNode cho phép bạn truy xuất đến các phần tử

trước và sau với PreviousNode và NextNode

Một đặc điểm quan trọng của XNode là cung cấp các phương thức dùng để

thêm/xóa/sửa các phần tử trong tài liệu XML Các phần tử được thêm vào sẽ có

cùng level với nhau và có cùng phần tử cha

AddAfterSelf(Object) Thêm nội dung quy định ngay lập tức sau nút

AddAfterSelf(Object[]) Thêm nội dung quy định ngay lập tức sau nút

AddBeforeSelf(Object) Thêm nội dung quy định ngay lập tức trước nút

AddBeforeSelf(Object[]) Thêm nội dung quy định ngay lập tức trước nút

Remove Loại bỏ nút này từ cha mẹ của nó

ReplaceWith(Object) Thay thế nút này với nội dung quy định

ReplaceWith(Object[]) Thay thế nút này với nội dung quy định

Ngoài ra còn có các phương thức để duyệt các phần tử trong tài liệu XML như

Ancestors() dùng để lấy về một collection các phần tử có level cao hơn:

Ancestors() Trả về một tập hợp của các yếu tố cha của nút này

Trang 33

Ancestors(XName) Trả về một tập hợp lọc của các yếu tố cha của nút này

Các yếu tố chỉ có một XName phù hợp được bao gồm trong tập hợp

ElementsAfterSelf() Trả về một tập hợp của các yếu tố anh chị em sau nút

này

ElementsAfterSelf(XName) Trả về một tập hợp lọc của các yếu tố anh chị em sau nút

này, để tài liệu Các yếu tố chỉ có một XName phù hợp được bao gồm trong tập hợp

ElementsBeforeSelf() Trả về một tập hợp của các yếu tố anh chị em trước nút

này

ElementsBeforeSelf(XName) Trả về một tập hợp lọc của các yếu tố anh chị em trước

nút này, để tài liệu Các yếu tố chỉ có một XName phù hợp được bao gồm trong tập hợp

IsAfter Xác định các nút hiện tại sẽ xuất hiện sau một nút quy

định về trật tự tài liệu

IsBefore Xác định các nút hiện tại sẽ xuất hiện trước một nút quy

định về trật tự tài liệu

NodesAfterSelf Trả về một tập hợp của các yếu tố anh chị em sau nút

này

NodesBeforeSelf Trả về một tập hợp của các yếu tố anh chị em trước nút

này

XText và XComment

Các phần tử này chỉ chứa property Value lưu giá trị của văn bản, chú

thích Một dạng wrapper của string

XContainer

Dùng để chứa các phần tử khác Lớp này cung cấp hai property là

FirstNode và LastNode cho phép truy xuất đến phần tử đầu và cuối Ngoài

ra bổ sung thêm cho lớp XNode các phương thức để thêm phần tử con

vào

Các phương thức mà bạn cần quan tâm của lớp này:

Add(Object) Thêm nội dung con của XContainer

Add(Object[]) Thêm nội dung con của XContainer

Trang 34

AddFirst(Object) Thêm nội dung con đầu tiên của XContainer.

AddFirst(Object[]) Thêm nội dung con đầu tiên của XContainer

DescendantNodes Trả về tập hợp các nút con theo thứ tự tăng dần của

XContainer

Descendants() Trả về tập hợp các nút con theo thứ tự tăng dần của

XContainer

Descendants(XName) Trả về tập hợp các nút con theo thứ tự tăng dần của

XContainer.Các yếu tố chỉ có một XName phù hợp được bao gồm trong tập hợp

Element Trả về nút con đầu tiên của specifiedXName

Elements() Trả về nút con đầu tiên của specifiedXName

Elements(XName) Trả về nút con đầu tiên của specifiedXName.Các nút chỉ có

một XName phù hợp được bao gồm trong bộ sưu tập

Nodes Trả về tập hợp các nút con

RemoveNodes Thay thế các nút con

ReplaceNodes(Object) Thay thế các nút con

ReplaceNodes(Object[]) Thay thế các nút con

XElement

Đại diện cho một phần tử, lớp này tương tự như XNode và XContainer, bổ sung

thêm một số thuộc tính và phương thức ví dụ như Attributes() để lấy về các

attribute của phần tử Đặc trưng chính của lớp này là các phương thức Parse,

Load, Save nội dung của văn bản hoặc tập tin thành một phần tử

Ví dụ ta sử dụng Parse() để tạo một phần tử XML từ một đoạn văn bản Hai đối

tượng x1 và x2 sau sẽ tạo ra một phần tử giống nhau:

XElement x1=XElement.Parse("<Blog title=\"Let me know what you

think\"><Name>Yin Yang</Name></Blog>");

XElement x2=new XElement("Blog",

new XAttribute("title","Let me know what you think"),

new XElement("Name","Yin Yang"));

Tài liệu XML được tạo ra từ x1 và x2 trên sẽ có cùng nội dung như sau:

Blog title="Let me know what you think">

<Name>Yin Yang</Name>

</Blog>

Trang 35

XDocument là lớp đại diện cho toàn bộ một tài liệu XML Sau đây là một

ví dụ tương đối hoàn chỉnh từ MSDN:

using System;

using System.Linq;

using System.Xml.Linq;

public class Linq2XmlExample {

public static void Main() {

XDocument srcTree = new XDocument(

new XComment("This is a comment"),

new XElement("Root",

new XElement("Child1", "data1"),

new XElement("Child2", "data2"),

new XElement("Child3", "data3"),

new XElement("Child2", "data4"),

new XElement("Info5", "info5"),

new XElement("Info6", "info6"),

new XElement("Info7", "info7"),

new XElement("Info8", "info8")

)

);

XDocument doc = new XDocument(

new XComment("This is a comment"),

Trang 36

1.8 Xây dựng tòa soạn báo điện tử

Xây dựng một tòa soạn báo điện tử có những tính năng sau :

 Lấy tin tự động từ các website khác

 Xây dựng font end và back end để quản trị và hiển thị tin tức

LẤY TIN TỰ ĐỘNG

2.1 Tính khả thi của việc lấy tin tự động

2.1.1 Tổng quan

Hệ thống thu thập thông tin là hệ thống thu thập các thông tin của các

trang web trên Internet và đưa vào cơ sở dữ liệu để dành cho việc khai

thác Các thông tin cần thu thập thường được chỉ định trước và là một

phần nội dung của trang web

Một hệ thống thu thập thông tin thường có 2 hệ thống con:

- Hệ thống phân tích cấu trúc của một trang web và cho phép người

dùng rút ra các luật của trang web

- Hệ thống robot tự động đi thu thập thông tin dựa trên các luật đã rút ra

của hệ thống phân tích cấu trúc

1.1 Cơ sở lý thuyết

Vì các trang web rất đa dạng về nội dung và cấu trúc, nên rất khó xác định

chính xác ngữ nghĩa để bóc tách thông tin và do mục tiêu của phân hệ là

thu thập thông tin từ những trang tin tức khác có cấu trúc khá đơn giản và

tương tự nhau nên chúng tôi xin đưa ra một heuristic sau về ngữ nghĩa của

trang web:

“Trong một trang web tin tức, các phần tin trình bày giống nhau sẽ có

ý nghĩa tương tự nhau”.

Heuristic này được rút ra sau khi tôi phân tích rất nhiều trang tin ở Việt

Nam Chúng ta có thể xét một số ví dụ sau:

Trang 37

Như chúng ta đã thấy ở các ví dụ trên, các tin có ý nghĩa giống nhau

luôn cố gắng được trình bày tương tự nhau Mục đích của sự tương tự

là nhằm để cho người đọc có thể duyệt tin một cách dễ dàng Và đây chính

là mấu chốt để robot có thể rút trích thông tin một cách tự động từ các

trang web này

1.2 Phương án giải quyết

Heuristic nêu trên chính là mấu chốt để thực hiện việc rút trích thông tin từ

các trang web Với quy luật này chúng ta có thể chuyển đổi thông tin được

định dạng sang thông tin được gắn ngữ nghĩa Ngoài ra, với cấu trúc

chung của trang web tin tức nêu trên, chúng ta hoàn toàn có thể rút trích

toàn bộ thông tin cần thiết cho việc thu thập tin tức

Tuy nhiên để hiện thực hóa quy luật này, chúng ta cần phải giải quyết 2

vấn đề sau:

- Làm thế để lấy được tiêu đề, mô tả, nội dung của tin trong các thẻ html

khi chúng ta lấy được source code của trang đó

 Để giải quyết vấn đề này chúng ta sẽ sử dụng Regular Expression để

so khớp với các chuỗi nhằm lấy về được các thông tin mà chúng ta cần

Các tin được trình bày tương tự

Trang 38

1.3 Kết luận

Với những điểm đã nêu trên, việc thu thập thông tin từ các trang web hoàn

toàn khả thi Và với Regular Expression, chúng ta hoàn toàn có thể mở

rộng, truy vấn với bất kỳ loại trang web nào chứ không riêng gì đối với

những trang tin tức

2.1 Công cụ hỗ trợ việc thu thập tin tức từ các báo điện tử khác

Một tòa soạn điện tử ngoài việc sản xuất tin bài bằng đội ngũ phóng viên

của mình, việc thu thập tin bài từ các báo khác sẽ làm phong phú và đa

dạng hóa tờ báo của mình

Tuy nhiên, việc thu thập tin dựa vào công nghệ XPATH, một công nghệ

đòi hỏi tính chính xác và những yêu cầu nhất định về kiến thức XML

Điều này sẽ là trở ngại đối với những đơn vị muốn lập website nhưng

thiếu nhân lực có chuyên môn về XML và XPATH Chính vì vậy, sự ra

đời của một công cụ có khả năng hỗ trợ lấy tin chỉ bằng những thao tác

đơn giản, trực quan sẽ giúp giải quyết trở ngại trên Từ những lý do trên

cộng với tính khả thi của việc lấy tin tự động từ các website khác, tôi

quyết định xây dựng một công cụ dựa trên Regular Expression.Chúng ta

sẽ sử dụng những biểu thức chính quy để so khớp với các thông tin mà

chúng ta cần lấy

Quá trình lấy tin

2.2.1 RSS

RSS Feed là một tài liệu định dạng XML cho chúng ta có thể độc nội dung

cập nhật thường xuyên thông tin từ một Website, báo điện tử, blog, diênx

đàn… Nó là một trong những tính năng web 2.0 cho phép người dùng đọc

các thông tin liên quan có sẵn trên Internet Tất cả chúng ta cần làm là để

có được URL nguồn cấp dữ liệu RSS

Đây là một ví dụ về một link RSS được hiển thị trên trình duyệt Mozila

Firefox

Trang 39

Cấu trúc của chúng như sau:

<pubDate>Wed, 09 May 2012 17:05:09 GMT</pubDate>

<lastBuildDate>Wed, 09 May 2012 17:05:09 GMT</lastBuildDate>

giờ tối nay (9/5), giá bán lẻ xăng A92 sẽ giảm 500 đồng xuống còn 23.300 đồng một

lít trong khi dầu diesel cũng giảm 300 đồng Thuế nhập khẩu xăng dầu tăng từ 0%

lên 3%.<BR />> <A

href="http://vnexpress.net/gl/kinh-doanh/2012/04/gia-xang-len-23-800-dong/">Giá xăng lên 23.800 đồng</A><BR />> <A

Trang 40

Superjet-100 của Nga đang bay trình diễn tại Indonesia chiều nay mất tích khỏi hệ

thống radar Sự cố xảy ra ngay trước khi loại máy bay này sang Việt Nam chào

hàng.<BR />> <A

href="http://vnexpress.net/gl/kinh-doanh/2012/05/cong-ty-nga-sang-viet-nam-chao-ban-may-bay/">Công ty Nga sang Việt Nam chào bán máy

bay</A><BR />> <A

href="http://vnexpress.net/gl/kinh-doanh/2012/05/nhieu-hang-muon-dat-hang-may-bay-nga/">Nhiều hãng muốn mua máy bay Nga</A> ]]></description>

a>Dù chưa khẳng định người bị đánh trong clip là hai nhà báo VOV nhưng Chánh văn

phòng UBND tỉnh Hưng Yên thừa nhận, hình ảnh công an đánh người trong clip được

cho là ghi bối cảnh cưỡng chế tại Văn Giang "quá phản cảm".<BR />> <A

Ngày đăng: 26/05/2014, 18:19

HÌNH ẢNH LIÊN QUAN

Hình 3.1 Sơ đồ tổ chức - xây dựng một toà soạn báo điện tử và công cụ thu thập tin tự động
Hình 3.1 Sơ đồ tổ chức (Trang 48)
Hình 3.4 Mô hình gói chức năng - xây dựng một toà soạn báo điện tử và công cụ thu thập tin tự động
Hình 3.4 Mô hình gói chức năng (Trang 52)
3.3.4.2.2. Sơ đồ các màn hình - xây dựng một toà soạn báo điện tử và công cụ thu thập tin tự động
3.3.4.2.2. Sơ đồ các màn hình (Trang 69)
3.3.4.2.4. Bảng mô tả các hàm, thủ tục - xây dựng một toà soạn báo điện tử và công cụ thu thập tin tự động
3.3.4.2.4. Bảng mô tả các hàm, thủ tục (Trang 74)
Hình : Màn hình chính - xây dựng một toà soạn báo điện tử và công cụ thu thập tin tự động
nh Màn hình chính (Trang 77)
Hình : Duyệt bài - xây dựng một toà soạn báo điện tử và công cụ thu thập tin tự động
nh Duyệt bài (Trang 78)

TỪ KHÓA LIÊN QUAN

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