Các nền tảng xây dựng ứng dụng web bằng Scala

Một phần của tài liệu TÌM tầm ẢNH HƯỞNG của bài báo KHOA học TRONG MẠNG TRÍCH dẫn (Trang 58)

CHƯƠNG 2 : CƠ SỞ LÝ THUYẾT

2.7. Web MVC với Play Framework

2.7.1. Các nền tảng xây dựng ứng dụng web bằng Scala

Do ứng dụng web linh động và dễ triển khai trên nhiều hệ điều hành và thiết bị nên trong đề tài này tôi sẽ phát triển hệ thống CNE với giao diện web. Hiện có nhiều Web Framework hỗ trợ ngơn ngữ Scala như: Play, Scalatra, Lift, Finatra, Spray... Trong đề tài này tôi chọn phát triển hệ thống CNE bằng Play Framework do đặc tính nhẹ, mạnh, đơn giản, dễ mở rộng, hỗ trợ mơ hình MVC, ...

2.7.2. Play Framework

Play là một nền tảng xây dựng nhanh ứng dụng web bằng ngôn ngữ Java và Scala. Nó tích hợp nhiều thành phần (components) và API cần thiết để phát triển ứng dụng web hiện đại theo mơ hình MVC.

Play dựa trên kiến trúc nhẹ, khơng trạng thái, thân thiện web và các tính năng dự đoán và tiêu thụ tài nguyên tối thiểu (CPU, bộ nhớ, threads) cho các ứng dụng có khả năng mở rộng cao nhờ mơ hình phản ứng của nó dựa trên Akka Streams (playframework.com, 2017).

Akka Streams là một thư viện để xử lý và truyền một chuỗi các phần tử bằng cách sử dụng không gian bộ nhớ đệm được giới hạn (bounded buffer space). Thuộc tính giới hạn là tính năng xác định của Akka Streams. Nó có thể biểu diễn một chuỗi (hoặc các đồ thị) các thực thể xử lý, mỗi thực thể xử lý thực hiện độc lập (và có thể đồng thời) với những thực thể xử lý khác, trong khi đó chỉ lưu vào bộ nhớ đệm một số lượng giới hạn các phần tử ở bất kỳ thời điểm nào. Thuộc tính này của bộ nhớ đệm được giới hạn là một trong những điểm khác biệt so với mơ hình tác nhân (the actor model), trong đó mỗi tác nhân thường có một hộp thư khơng bị giới hạn, hoặc bị giới hạn, nhưng lấy ra được. Các thực thể xử lý của Akka Stream có "những hộp thư" bị giới hạn nhưng khơng lấy ra được (doc.akka.io, 2017).

Có thể xem thêm thơng tin đầy đủ về Play Framework, download chương trình cài đặt, tham khảo tài liệu, xem các ví dụ... tại https://www.playframework.com .

2.8. Biểu diễn trực quan đồ thị với VisJs

2.8.1. Khái quát về các thư viện biểu diễn trực quan đồ thị

Hiện tại có nhiều thư viện hỗ trợ biểu diễn trực quan đồ thị. Có thể chia thành hai nhóm:

- Nhóm 1: Thư viện hỗ trợ ngôn ngữ Scala/Java để biểu diễn trực quan đồ thị trên giao diện Desktop. Ví dụ: Lightning, GraphStream, Databricks, GraphViz, JGraph, Ubigraph, Jung...

- Nhóm 2: Thư viện hỗ trợ ngôn ngữ JavaScript để biểu diễn trực quan đồ thị trên giao diện Web. Ví dụ: VisJs, D3, Scala.js, Vega, SigmaJs, Cytoscape, ArborJs, Alchemy...

Trong đề tài này tơi chọn VisJs vì thư viện này thỏa mãn những tiêu chí như: đơn giản, linh hoạt, tài liệu rõ ràng phong phú và cung cấp nhiều tham số cho phép biểu diễn trực quan đồ thị trong trình duyệt đẹp mắt và chuyên nghiệp.

2.8.2. VisJs Framework

Một thư viện trực quan động dựa trên trình duyệt. Thư viện được thiết kế để dễ sử dụng, có thể xử lý số lượng lớn dữ liệu động và cho phép thao tác và tương tác với dữ liệu. Thư viện bao gồm các thành phần DataSet, Timeline, Mạng (Đồ thị), Graph2d và Graph3d.

Với mục tiêu dễ sử dụng nên VisJs được thiết kế với cú pháp đơn giản, rõ ràng, dễ hiểu nhưng đầy đủ. Tài liệu phong phú và trình bày có hệ thống nhằm giúp người đọc có thể sử dụng được. Ngồi ra VisJs cịn cung cấp một bộ sưu tập các ví dụ minh họa giúp người lập trình nhanh chóng làm quen với thư viện này.

Có thể xem thêm thơng tin đầy đủ về VisJs, download thư viện, tham khảo tài liệu, xem các ví dụ... ở http://visjs.org/ .

CHƯƠNG 3:

PHÂN TÍCH & THIẾT KẾ HỆ THƠNG

3.1. u cầu của hệ thống

Yêu cầu của hệ thống là xây dựng hệ thống Citation Network Explorer (CNE) để tìm tầm ảnh hưởng của bài báo khoa học trong mạng trích dẫn. Cụ thể, hệ thống CNE bao gồm các chức năng sau:

1. Tải cơ sở dữ liệu từ OrientDb vào Apache Spark. 2. Biểu diễn trực quan đồ thị.

3. Tính PageRank cho các đỉnh trên đồ thị. 4. Tìm tầm ảnh hưởng của một bài báo. 5. Tìm bài báo có tầm ảnh hưởng nhiều nhất. 6. Tìm thành phần liên thơng chứa một bài báo. 7. Xác định độ lan tỏa của một bài báo theo thời gian.

Để xây dựng hệ thống như trên ta cần thực hiện các công việc sau:

- Thiết kế sơ đồ kiến trúc.

- Thiết kế cơ sở dữ liệu.

- Thiết kế chức năng.

3.2. Sơ đồ kiến trúc hệ thống CNE

Sơ đồ kiến trúc hệ thống CNE, như trong Hình 3.1, gồm 4 tầng:

- Client: cung cấp giao diện để người sử dụng truy cập vào hệ thống. Tầng

này sử dụng thư viện VisJs để thực hiện việc biểu diễn trực quan đồ thị.

- Apache Spark Cluster xử lý, chuyển kết quả xử lý về Client. Tầng này sử

dụng Play Framework để thực hiện cơng việc của mình.

- Apache Spark Cluster: là nơi chủ yếu xử lý yêu cầu của hệ thống bằng

cách sử dụng nền tảng Apche Spark và GraphX API. Tầng này có thể bao gồm nhiều máy tính tham gia xử lý song song để gia tăng hiệu quả xử lý của hệ thống.

- OrientDb Server Cluster: là nơi lưu trữ cơ sở dữ liệu đồ thị. Tầng này có

thể bao gồm nhiều máy tính để thực hiện việc lưu trữ phân tán cơ sở dữ liệu để gia tăng hiệu quả truy cập dữ liệu và khả năng chịu lỗi của hệ thống.

-

-

- Hình 3.1 - Sơ đồ kiến trúc hệ thống CNE.

3.3. Thiết kế cơ sở dữ liệu

3.3.1. Thu thập dữ liệu

-Dữ liệu mạng trích dẫn “DBLP-Citation-network V8: 3,272,991 papers and

8,466,777 citation relationships (2016-07-14)” được download từ site

https://aminer.org/citation là dạng text file được trình bày như sau:

- S

TT

- Tiền

Tố - Ý Nghĩa

- 1 - #* - Tên bài báo

- 2 - #@ - Tên các tác giả

- 3 - #t - Năm công bố

- 4 - #c - Nơi công bố

- 5 - #ind

ex - Id của bài báo

- STT

Tiền Tố - Ý Nghĩa

- 6 #% - Id của bài báo được tham khảo. Có thể có nhiều id của bài

báo được tham khảo, mỗi id trên một dịng

- 7 #! - Tóm tắt bài báo

- Dưới đây là ví dụ về một bài báo được lưu trong text file:

-

- #*Information geometry of U-Boost and Bregman divergence

- #@Noboru Murata,Takashi Takenouchi,Takafumi Kanamori,Shinto Eguchi

#t2004 - #cNeural Computation - #index436405 - #%94584 - #%282290 - #%605546 - #%620759 - #%564877 - #%564235 - #%594837 - #%479177 - #%586607

- #!We aim at an extension of AdaBoost to U-Boost, in the paradigm to build a stronger

classification machine from a set of weak learning machines. A geometric understanding of the Bregman divergence defined by a generic convex function U leads to the U-Boost method in the framework of information geometry extended to the space of the finite measures over a label set. We propose two versions of U-Boost learning algorithms by taking account of whether the domain is restricted to the space of probability functions. In the sequential step, we observe that the two adjacent and the initial classifiers are associated with a right triangle in the scale via the Bregman divergence, called the Pythagorean relation. This leads to a mild convergence property of the U-Boost algorithm as seen in the expectation-maximization algorithm. Statistical discussions for

- consistency and robustness elucidate the properties of the U-Boost methods

based on

a stochastic assumption for training data.

3.3.2. Thiết kế cơ sở dữ liệu đồ thị trong OrientDB

-Từ dữ liệu thô ở trên, để tổ chức thành đồ thị trong OrientDB, tôi đã tạo hai lớp

Paper và Reference. Lớp Paper dùng để biểu diễn các bài báo, lớp Reference dùng để

biểu diễn mối quan hệ tham khảo giữa hai bài báo. Chi tiết các lớp như trong Bảng 3.1.

- Bảng 3.1 - Chi tiết các lớp Paper và Reference.

- Lớ p - Thuộc tính - Kiểu dữ liệu - Mô tả - Pa per

- - - Biểu diễn bài báo

- - id - OType.L

ONG

- Id của bài báo - Unique Index

Key

- - title - OType.S

TRING - Tên bài báo

- - authors - OType.S

TRING - Danh sách các tác giả

- - year - OType.S

HORT - Năm công bố

- - publicatio nVenue

- OType.S

TRING - Nơi công bố

- - index - OType.S

TRING

- Index của bài báo - Unique

Index Key

- - abstract - OType.S

TRING

- Tóm lược nội dung bài báo

- - references - OType.S

TRING

- Danh sách những index, được

phân tách bởi dấu chấm phẩy (;), của các bài báo được tham khảo

- Ref

erence

- - - Biểu diễn mối quan hệ

tham khảo

-

- src - OType.L

ONG

- Id của bài báo nguồn (bài báo

tham khảo)

- - dst - OType.L

ONG

- Id của bài báo đích (bài báo

được tham khảo)

3.3.3. Chương trình đọc text file và chuyển thành cơ sở dữ liệu đồ thị

-Do dữ liệu mạng trích dẫn thu thập được là một text file nên cần phải viết chương trình đọc text file và lưu vào cơ sở dữ liệu đồ thị. Chương trình này độc lập với hệ thống CNE và bao gồm những chức năng chính được liệt kê trong Bảng 3.2. Code Scala hiện thực các chức năng này được trình bày trong Phụ Lục 1.

- Bảng 3.2 - Danh mục các hàm của chương trình đọc text file.

- STT - Tên hàm - Chức năng - T rang - 1 - prepare

Graph() - Chuẩn bị cơ sở dữ liệu đồ thị. 1

-

2

- importN odes()

- Đọc text file và tạo các đỉnh trong cơ sở dữ liệu đồ thị. - 4 2 - 3 - createEd ges()

- Đọc thuộc tính references của mỗi đỉnh để tạo

các cạnh trong cơ sở dữ liệu đồ thị.

- 4 3

-

4

- main() - Gọi các hàm ở trên để tạo nội dung cho cơ sở

dữ liệu đồ thị.

- 4 3

-

-Sau đây là mô tả chi tiết về các hàm của chương trình đọc text file và lưu vào cơ sở dữ liệu đồ thị.

3.3.3.I. Hàm prepareGraph()

-Hàm prepareGraph() chuẩn bị cơ sở dữ liệu đồ thị trước khi đọc text file. Hàm này nhận một tham số là graph, là cơ sở dữ liệu đồ thị rỗng trong OrientDb Server, tạo lớp đỉnh Paper và lớp cạnh Reference trong đồ thị. Thuật tốn 3.1 mơ tả chi tiết các cơng việc của hàm prepareGraph().

- Thuật tốn 3.1 — Thuật toán của hàm prepareGraphộ.

-Hàm prepareGraph() chuẩn bị cơ sở dữ liệu đồ thị trước khi đọc text file. Tham khảo Code 1 để xem chi tiết hiện thực hàm prepareGraph().

- Input: graph là cơ sở dữ liệu đồ thị rỗng trong OrientDb server.

- Output: khơng có. 1. Bắt đầu.

3. Tạo các thuộc tính cho lớp Paper.

4. Tạo index cho thuộc tính index của lớp Paper. 5. Tạo lớp cạnh Reference.

6. Tạo các thuộc tính cho lớp Reference. 7. Kết thúc.

3.3.3.2. Hàm importNodes()

-Hàm importNodes() đọc text file và tạo các đỉnh trong cơ sở dữ liệu đồ thị. Hàm này nhận hai tham số. Tham số thứ nhất là graph, là cơ sở dữ liệu đồ thị trong OrientDb server. Cơ sở dữ liệu đồ thị này chỉ có định nghĩa hai lớp Paper và Reference chứ chưa có dữ liệu. Tham số thứ hai là íileName, đây là đường dẫn của text file chứa thông tin các bài báo của mạng trích dẫn. Hàm importNodes() đọc từng dịng của text file, phân tích và tạo các đỉnh trong cơ sở dữ liệu đồ thị. Thuật tốn 3.2 mơ tả chi tiết các cơng việc của hàm importNodes().

- Thuật tốn 3.2 - Thuật toán của hàm importNodes().

-Hàm importNodes() đọc textfile và tạo các đỉnh trong cơ sở dữ liệu đồ thị. Tham khảo Code 2 để xem chi tiết hiện thực hàm importNodes().

- Input: graph, fileName. Trong đó:

- + Graph: là cơ sở dữ liệu đồ thị trong OrientDb server.

- + fileName: là đường dẫn của text file chứa thông tin các bài báo của

mạng trích dẫn.

- Output: khơng có. 1. Bắt đầu.

2. Mở text file để đọc.

3. Lặp qua từng dòng của text file:

a. Nếu dịng đọc được bắt đầu bằng “#*” thì thêm đỉnh vào đồ thị. b. Ngược lại gán giá trị cho các thuộc tính của đỉnh.

4. Đóng text file. 5. Kết thúc.

3.3.3.3. Hàm createEdges()

-Hàm createEdges() đọc thuộc tính references của mỗi đỉnh để tạo các cạnh trong cơ sở dữ liệu đồ thị. Thuộc tính references chứa danh sách index, phân tách bởi dấu chấm phẩy (;), của những bài báo được một bài báo tham khảo. Hàm này nhận một tham số là graph, là cơ sở dữ liệu đồ thị trong OrientDb server. Đồ thị này đã có các đỉnh nhưng chưa có cạnh. Thuật tốn 3.3 mơ tả chi tiết các cơng việc của hàm createEdges().

- Thuật tốn 3.3 - Thuật tốn của hàm createEdgesộ.

-Hàm createEdges() đọc thuộc tính references của mỗi đỉnh để tạo các cạnh trong cơ sở dữ liệu đồ thị. Tham khảo Code 3 để xem chi tiết hiện thực hàm createEdges().

- Input: graph là cơ sở dữ liệu đồ thị trong OrientDb server.

- Output: khơng có. 1. Bắt đầu.

2. Lấy các đỉnh của graph.

3. Lặp qua từng đỉnh paper của graph:

a. Lấy thuộc tính references của đỉnh paper.

b. Lặp qua từng index chứa trong thuộc tính references:

i. Tìm đỉnh originalPaper, trong graph, tương ứng với index. ii. Tạo cạnh từ đỉnh paper đến đỉnh originalPaper.

iii. Gán các thuộc tính cho cạnh vừa tạo. 4. Kết thúc.

3.3.3.4. Hàm main()

-Hàm main() sẽ gọi các hàm ở trên để tạo nội dung cho cơ sở dữ liệu đồ thị. Trước khi chạy hàm main() phải tạo cơ sở dữ liệu cn (citation network)11 và chạy OrientDb Server. Thuật tốn 3.4 mơ tả chi tiết các công việc của hàm main().

- Thuật toán 3.4 — Thuật toán của hàm main().

-Hàm main() gọi các hàm ở trên để tạo nội dung cho cơ sở dữ liệu đồ thị. Tham khảo Code 4 để xem chi tiết hiện thực hàm main().

11 Có thể tạo cơ sở dữ liệu bằng cách dùng OrientDb Console hoặc OrientDb Studio.

- Input: khơng có.

- Output: khơng có. 1. Bắt đầu.

2. Kết nối đến OrientDb Server để truy cập cơ sở dữ liệu cn. 3. Lấy ra đối tượng graph, tượng trưng cho cơ sở dữ liệu đồ thị.

4. Gọi hàm prepareGraph(graph) để tạo lớp Paper và Reference. Hai lớp này tượng trưng cho đỉnh và cạnh trong đồ thị.

5. Gọi hàm importNodes(graph, íileName) để đọc text file và tạo các đỉnh trên đồ thị.

6. Gọi hàm createEdges(graph) để tạo các cạnh trên đồ thị. 7. Đóng kết nối đến OrientDb Server.

8. Kết thúc.

-Biểu đồ 3.1 cho thấy thời gian chuyển đổi nội dung text file thành cơ sở dữ liệu đồ thị. Do mạng trích dẫn trong text file rất lớn, có 3.272.991 đỉnh và 8.466.777 cạnh, nên thời gian tạo cơ sở dữ liệu đồ thị khá lâu. Thời gian tạo các đỉnh là 1.243 giây (gần 21 phút). Thời gian tạo các cạnh là 12.721 giây (212 phút, hơn 3,5 giờ). Đây là số liệu thống kê khi chạy trên máy có cấu hình như Hình 3.2.

-

- ■ Thời Gian (Phút) 21 212

- - Cơng Việc

- vìew basic intormation about your Computer - Windows edrtion

- Windows 10 Home

- £ 2017 Microsoít Corporation. All rights reserved

- System

- Processor: Intel(R) Core(TM) Í7-3630QM CPU © 2.40GHz 2.40 GHz

- Installed memory (RAM): 8.00 GB (7.89 GB usable)

- System type: 64-bit operating System, x64-based processor

- Pen and Touch: No Pen or Touch Input is availableíorthis Display

Một phần của tài liệu TÌM tầm ẢNH HƯỞNG của bài báo KHOA học TRONG MẠNG TRÍCH dẫn (Trang 58)

Tải bản đầy đủ (DOCX)

(145 trang)
w