uit.tkorg.cspublicationcrawler.dto: Data transfer object, các đối tượng tương ứng với các bảng trong cơ sở dữ liệu.
Ngoài ra, các code chức năng hỗ trợ được đặt trong các package sau:
uit.tkorg.cspublicationcrawler.dbconnection: Cung cấp connection đến cơ sở dữ liệu. Connection có thể tạo cho cơ sở dữ liệu MySQL hay SQL Server tùy vào giá trị hằng số điều khiển của chương trình trong lớp CSPublicationCrawlerConst nằm trong package uit.tkorg.cspublicationcrawler.constant.
uit.tkorg.cspublicationcrawler.constant: Các hằng số, pattern dùng trong chương trình.
uit.tkorg.cspublicationcrawler.utility: Cung cấp các cơng cụ để thực hiện các chức năng của chương trình như lớp CommonURLQuery hỗ trợ request nội dung html của các trang web, lớp CommonHTMLProcessor hỗ trợ xử lý phân tích nội dung html để lấy dữ liệu, lớp CSPublicationCrawlerLogger hỗ trợ ghi log của chương trình.
Các kỹ thuật lập trình đáng chú ý:
Chương trình được cài đặt theo hướng kiểm sốt các đặc tính thơng qua các hằng số tập trung trong một file duy nhất để dễ sử dụng. Trong quá trình cài đặt chương trình này, tác giả cũng đã giải quyết một số vấn đề đặc trưng của một chương trình tự động nói chung và web crawler nói riêng. Chương trình có thể chạy tự động đến khi hồn thành việc crawl toàn bộ dữ liệu trong các lĩnh vực được chỉ định. Chương trình có khả năng giả lập thao tác duyệt web để vượt qua chính sách chống DDOS của MAS. Chương trình cũng có khả năng chịu lỗi khi xảy ra các lỗi về mạng, về cơ sở dữ liệu, lỗi của nguồn dữ liệu MAS… Khi có lỗi xảy ra, nó sẽ định kì kiểm tra, nếu khơng cịn lỗi nó sẽ tiếp tục thực hiện công việc với trạng thái cũ, nếu sau một số lần nhất định được chỉ định trong file hằng số mà vẫn lỗi thì nó sẽ thực hiện các công việc tiếp theo và bỏ qua mục hiện tại. Các lỗi được ghi lại trong file log để người dùng xử lý sau. Khi lỗi xảy ra, chương trình vẫn bảo đảm tính nhất qn, đúng đắn của dữ liệu.
Trong quá trình triển khai chương trình, tác giả cũng đã tiến hành thử nghiệm để tìm ra các thơng số tối ưu cho chương trình crawler khi chạy trên nguồn dữ liệu MAS để bảo đảm tính hiệu quả trong khi vẫn tránh được chính sách chống DDOS của MAS.
Để phân tích các trang html tải về và trích xuất ra dữ liệu cũng như các url để tiếp tục quá trình crawl, chương trình đã sử dụng thư viện Jsoup, đây là một thư viện mã nguồn mở theo giấy phép MIT, được viết dành cho Java để thao tác với các tài liệu html. Jsoup cung cấp một giao diện lập trình ứng dụng vơ cùng mạnh mẽ và hiệu quả với những phương thức lấy dữ liệu theo DOM, hay chọn đối tượng tựa CSS, J-Query. Jsoup có hỗ trợ HTML 5 và có khả năng xử lý cả các tài liệu lỗi với cấu trúc tag-soup.
Cơ sở dữ liệu:
Chương trình được cài đặt để có thể chạy trên hai hệ quản trị cơ sở dữ liệu phổ biến là MySQL và SQL Server, có thể chuyển đổi qua lại bằng cách thay đổi giá trị các hằng số điều khiển. Hiện tại chương trình đang được triển khai trên cơ sở dữ liệu MySQL vì các ưu điểm của nó như miễn phí, đơn giản, dễ triển khai, chất lượng và hỗ trợ tương đối tốt.
Hệ quản trị cơ sở dữ liệu đang dùng là phiên bản 5.6, MySQL Java Connector đang dùng là 5.1.16. Ở phiên bản hiện tại, MySQL có một số lỗi, tác giả đã thay đổi một số tham số cấu hình MySQL để sửa các lỗi này. MySQL hoạt động liên tục nhiều ngày với web crawler sẽ bị mất connection, tác giả đã chỉnh sửa các tham số trong file my.ini và các tham số của connection string. MySQL hiện tại không lưu được các ký tự unicode 4 bytes, tác giả đã kết hợp sử dụng kiểu dữ liệu Blob và thay đổi các tham số của connention string cho phù hợp. Để tăng hiệu quả hoạt động, tác giả đã thực hiện tạo index trên các trường dữ liệu cần thiết để tránh thắt cổ chai, và tối ưu các tham số cấu hình trong my.ini.
Trong quá trình chạy thử nghiệm, cơ sở dữ liệu đang sử dụng có tên CSPublicationCrawler, hoạt động trên localhost, cổng 3306, username root, password root.
4.2.4 Kết quả
Chương trình thu thập dữ liệu đã được hoàn thiện các chức năng cốt lõi cho việc thu thập dữ liệu hiệu quả từ nguồn dữ liệu là trang thư viện điện tử MAS. Cho đến ngày 27 tháng 01 năm 2012, chương trình đã thu thập dữ liệu thuộc lĩnh vực công nghệ thông tin được 9 lĩnh vực con trong tổng số 24 lĩnh vực con. Số lượng các chỉ mục như trong bảng sau:
Bảng 4.5 – Kết quả thu thập dữ liệu đến ngày 27 tháng 01 năm 2012.
STT Tên bảng Giải thích Số bản ghi
1. Author Tác giả 665639
2. Conference Hội thảo 1473
3. Domain Lĩnh vực 1
4. Journal Tờ báo 972
5. Keyword Từ khóa 30755
6. Org Tổ chức 7623
7. Paper Bài báo 2332245
8. Subdomain Lĩnh vực con 24
9. Author_Paper Số liên kết tác giả với bài báo
2643112 10. Paper_Keyword Số liên kết bài báo với từ
khóa 3135006
11. Paper_Paper Số liên kết bài báo trích dẫn
bài báo khác 10013399 12. Subdomain_Paper Số liên kết bài báo thuộc
lĩnh vực con
4.3 Chương trình tính tốn các chỉ số xếp hạng
4.3.1 Khảo sát hiện trạng
Như đã trình bày ở trên, có nhiều chỉ số xếp hạng đa dạng với các đặc trưng riêng. Mỗi chỉ số xếp hạng đều có điểm mạnh, điểm yếu trong việc đánh giá các đối tượng bài báo, tác giả… về các mặt khác nhau. Hệ thống được xây dựng trong đề tài này có một phần mục đích là nghiên cứu, thử nghiệm các ý tưởng, vì vậy cũng cần thiết phải cài đặt tính tốn nhiều chỉ số khác nhau, từ đó có thể thử nghiệm, kiểm tra các chỉ số cũng như các ý tưởng khác trong nghiên cứu.
4.3.2 Phân tích thiết kế
Từ cơ sở dữ liệu chỉ mục bài báo đã thu thập được bằng web crawler, chúng ta sẽ xây dựng một chương trình tính tốn các chỉ số đánh giá phân tích tài liệu. Với mục đích thử nghiệm các chỉ số khác nhau cho các loại đối tượng khác nhau, chương trình sẽ cài đặt tính tốn các chỉ số này cho tất cả các loại đối tượng trong hệ thống là bài báo, tác giả, tổ chức, hội thảo, tờ báo và tạp chí. Với mỗi loại đối tượng, các chỉ số sẽ cài đặt như sau:
Bảng 4.6 – Các chỉ số được cài đặt cho các loại đối tượng.
STT Loại đối tượng Các chỉ số
1. Bài báo - Số lượng trích dẫn. 2. Tác giả - Số lượng bài báo.
- Số lượng trích dẫn.
- Số trích dẫn trung bình của một bài báo. - Số lượng đồng tác giả.
- H-index. - G-index.
3. Tổ chức - Số lượng bài báo. - Số lượng trích dẫn.
- Số trích dẫn trung bình của một bài báo. - Số lượng tác giả.
- H-index. - G-index.
4. Hội thảo - Số lượng bài báo. - Số lượng trích dẫn.
- Số trích dẫn trung bình của một bài báo. - G-index.
5. Tờ báo - Số lượng bài báo. - Số lượng trích dẫn.
- Số trích dẫn trung bình của một bài báo. - G-index.
6. Tạp chí - Số lượng bài báo. - Số lượng trích dẫn.
- Số trích dẫn trung bình của một bài báo. - G-index.
Ở đây có một chỉ số khá đặc biệt là số trích dẫn của một bài báo, nó có thể được tính một cách dễ dàng bằng cách lấy số lượng trích dẫn chia cho số lượng bài báo. Vì vậy khơng cần phải tính tốn và lưu trữ chỉ số này, nó có thể được tính tốn ngay tại thời điểm truy xuất dữ liệu từ hai chỉ số số lượng bài báo và số lượng trích dẫn.
Để tăng thêm hiệu quả khi sử dụng các chỉ số, chương trình sẽ tính tốn với nhiều cấp độ gom cụm khác nhau:
Cấp độ tổng thể: Việc đếm và tính tốn khơng có ràng buộc nào.
Cấp độ lĩnh vực con: Việc đếm và tính tốn sẽ bị ràng buộc với điều kiện các bài báo thuộc lĩnh vực con tương ứng.
Cấp độ từ khóa: Việc đếm và tính tốn sẽ bị ràng buộc với điều kiện các bài báo có liên hệ đến từ khóa tương ứng.
Việc tính tốn với nhiều cấp độ gom cụm này sẽ giúp cho việc đánh giá các chỉ số dễ dàng hơn. Việc sử dụng các chỉ số để đánh giá các đối tượng cũng hiệu quả, chính xác hơn. Từ đó, hệ thống thư viện điện tử được xây dựng với các chỉ số này cũng hoạt động tốt hơn.
Các chỉ số như số lượng bài báo, số lượng trích dẫn, số đồng tác giả, số tác giả có thể được thực hiện thông qua thao tác đếm các đối tượng trong cơ sở dữ liệu quan hệ. Vì vậy các chỉ số này sẽ được cài đặt tính tốn bằng các sử dụng
giúp cho việc tính tốn nhanh chóng, hiệu quả hơn, giảm thiểu sử dụng tài nguyên vì stored procedure đã được biên dịch sẵn và lưu trong server.
Các chỉ số như h-index, g-index có cách tính phức tạp hơn nên khó cài đặt và bảo trì với stored procedure. Vì vậy các chỉ số này sẽ được viết chương trình để tính tốn riêng.
Các thao tác tính tốn sẽ được tiến hành trực tiếp trên cơ sở dữ liệu thu thập được từ web crawler. Để lưu trữ kết quả tính tốn, ta sẽ thêm vào các bảng cần thiết. Kết quả của việc thêm vào các bảng này ta sẽ thu được một cơ sở dữ liệu hồn chỉnh, có cả dữ liệu chỉ mục các bài báo khoa học được thu thập về và dữ liệu chỉ số được tính tốn. Cơ sở dữ liệu này cũng sẽ được sử dụng cho hệ thống thư viện điện tử sau một số tinh chỉnh nhằm tăng hiệu quả.
Mỗi loại đối tượng được tính tốn sẽ có một bảng để lưu dữ liệu chỉ số tổng quát, một bảng để lưu dữ liệu chỉ số trong mỗi lĩnh vực con, một bảng nữa để lưu dữ liệu chỉ số trong mỗi từ khóa. Các bảng này có khóa chính được lấy tương ứng từ các bảng dữ liệu chính của đối tượng tương ứng. Tuy nhiên các khóa chính này khơng phải là khóa ngoại, vì vậy các bảng lưu dữ liệu tính tốn sẽ nằm tách biệt nhau và tách biệt với các bảng dữ liệu chính thu thập về, như vậy sẽ đơn giản hơn khi thực hiện tính tốn, tránh các ràng buộc khơng cần thiết.
Để giảm kích thước lưu trữ, ta cũng sẽ quy ước rằng các đối tượng có các chỉ số cần lưu bằng khơng thì sẽ khơng cần lưu, tức là các đối tượng không tồn tại trong các bảng lưu trữ này thì coi như các chỉ số đều bằng khơng.
STT Tên bảng Tên cột Kiểu dữ liệu
Mô tả
1. _Rank_Paper idPaper INT Mã bài báo.
citationCount INT Số lượng trích dẫn. rank INT Thứ hạng.
2. _Rank_Paper _Subdomain
idPaper INT Mã bài báo. idSubdomain INT Mã lĩnh vực con.
citationCount INT Số lượng trích dẫn trong lĩnh vực con đang xét. rank INT Thứ hạng.
3. _Rank_Paper
_Keyword idPaper INT Mã bài báo. idKeyword INT Mã từ khóa.
citationCount INT Số lượng trích dẫn trong từ khóa đang xét.
rank INT Thứ hạng. 4. _Rank_Autho
r idAuthor INT Mã tác giả. publicationCou
nt INT Số lượng bài báo. citationCount INT Số lượng trích dẫn. coAuthorCount INT Số lượng đồng tác giả. h_index INT h-index
g_index INT g-index rank INT Thứ hạng. 5. _Rank_Autho
r_Subdomain
idAuthor INT Mã tác giả. idSubdomain INT Mã lĩnh vực con.
publicationCou
nt INT Số lượng bài báo trong lĩnh vực con đang xét. citationCount INT Số lượng trích dẫn trong
lĩnh vực con đang xét. coAuthorCount INT Số lượng đồng tác giả. h_index INT h-index
g_index INT g-index rank INT Thứ hạng. 6. _Rank_Autho
r_Keyword idAuthor INT Mã tác giả. idKeyword INT Mã từ khóa. publicationCou
nt
INT Số lượng bài báo trong từ khóa đang xét.
citationCount INT Số lượng trích dẫn trong từ khóa đang xét.
coAuthorCount INT Số lượng đồng tác giả. h_index INT h-index
g_index INT g-index rank INT Thứ hạng. 7. _Rank_Org idOrg INT Mã tổ chức.
publicationCou nt
INT Số lượng bài báo. citationCount INT Số lượng trích dẫn. authorCount INT Số lượng tác giả trong tổ
chức. h_index INT h-index g_index INT g-index rank INT Thứ hạng. 8. _Rank_Org_S idOrg INT Mã tổ chức.
ubdomain idSubdomain INT Mã lĩnh vực con. publicationCou
nt
INT Số lượng bài báo trong lĩnh vực con đang xét.
citationCount INT Số lượng trích dẫn trong lĩnh vực con đang xét. authorCount INT Số lượng tác giả trong tổ
chức. h_index INT h-index g_index INT g-index rank INT Thứ hạng. 9. _Rank_Org_
Keyword
idOrg INT Mã tổ chức. idKeyword INT Mã từ khóa. publicationCou
nt INT Số lượng bài báo trong từ khóa đang xét. citationCount INT Số lượng trích dẫn trong từ
khóa đang xét.
authorCount INT Số lượng tác giả trong tổ chức.
h_index INT h-index g_index INT g-index rank INT Thứ hạng. 10. _Rank_Confe
rence
idConference INT Mã hội thảo. publicationCou
nt INT Số lượng bài báo. citationCount INT Số lượng trích dẫn. g_index INT g-index
rank INT Thứ hạng. 11. _Rank_Confe idConference INT Mã hội thảo.
rence_Subdo
main idSubdomain INT Mã lĩnh vực con. publicationCou
nt
INT Số lượng bài báo. citationCount INT Số lượng trích dẫn. g_index INT g-index
rank INT Thứ hạng. 12. _Rank_Confe
rence_Keywo rd
idConference INT Mã hội thảo. idKeyword INT Mã từ khóa. publicationCou
nt INT Số lượng bài báo. citationCount INT Số lượng trích dẫn. g_index INT g-index
rank INT Thứ hạng. 13. _Rank_Journ
al idJournal INT Mã tờ báo. publicationCou
nt INT Số lượng bài báo. citationCount INT Số lượng trích dẫn. g_index INT g-index
rank INT Thứ hạng. 14. _Rank_Journ
al_Subdomai n
idJournal INT Mã tờ báo. idSubdomain INT Mã lĩnh vực con. publicationCou
nt
INT Số lượng bài báo. citationCount INT Số lượng trích dẫn. g_index INT g-index
rank INT Thứ hạng. 15. _Rank_Journ idJournal INT Mã tờ báo.
al_Keyword idKeyword INT Mã từ khóa. publicationCou
nt
INT Số lượng bài báo. citationCount INT Số lượng trích dẫn. g_index INT g-index
rank INT Thứ hạng. 16. _Rank_Maga zine idMagazine INT Mã tạp chí. publicationCou nt
INT Số lượng bài báo. citationCount INT Số lượng trích dẫn. g_index INT g-index
rank INT Thứ hạng. 17. _Rank_Maga
zine_Subdom ain
idMagazine INT Mã tạp chí. idSubdomain INT Mã lĩnh vực con. publicationCou
nt INT Số lượng bài báo. citationCount INT Số lượng trích dẫn. g_index INT g-index
rank INT Thứ hạng. 18. _Rank_Maga
zine_Keywor d
idMagazine INT Mã tạp chí. idKeyword INT Mã từ khóa. publicationCou
nt
INT Số lượng bài báo. citationCount INT Số lượng trích dẫn. g_index INT g-index
4.3.3 Cài đặt
Như đã phân tích, việc tính tốn sẽ được cài đặt làm hai phần: stored procedure và chương trình tính tốn riêng.
Stored procedure được sử dụng là của cơ sở dữ liệu MySQL. Ngoài những ưu điểm chung của stored procedure, MySQL cung cấp một số tính năng đặc biệt giúp việc cài đặt và tính tốn hiệu quả hơn, chẳng hạn như cú pháp INSERT IGNORE và INSERT ON DUPLICATE KEY UPDATE.
Chương trình tính tốn các chỉ số h-index và g-index được cài đặt bằng ngôn ngữ Java, với các công nghệ và cơng cụ tương tự như chương trình web crawler. Chương trình này cũng khơng sử dụng framework mà dùng code Java thuần túy để dễ dàng tinh chỉnh hiệu suất. Chương trình này kết nối đến cơ sở dữ liệu MySQL dùng MySQL Java Connector 5.1.16.
Kiến trúc của chương trình cũng là kiến trúc phân tầng với các tầng như của như crawler:
Controller: Quản lý các hoạt động của chương trình.
Business Logic: Thực hiện các chức năng chính của chương trình: tính tốn các chỉ số.
Data Access: Cung cấp giao tiếp giữa chương trình và Database. Database: Cơ sở dữ liệu quan hệ quản lý dữ liệu của hệ thống.
Chương trình được tổ chức thành các package tương tự như của web crawler, điểm khác biệt là thay vì có các controller và business logic thực hiện