Tải bản đầy đủ (.docx) (23 trang)

Tiểu luận môn điện toán lưới và đám mây TRÍCH XUẤT TỪ KHOÁ SỬ DỤNG MAPREDUCE

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (793.79 KB, 23 trang )

ĐẠI HỌC QUỐC GIA TP.HỒ CHÍ MINH
__
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
Dương Thị Phương Mai
TRÍCH XUẤT TỪ KHOÁ SỬ DỤNG MAPREDUCE
Đồ Án Môn Học
Điện Toán Lưới Và Đám Mây
TP HỒ CHÍ MINH – Năm 2014
ĐẠI HỌC QUỐC GIA TP.HỒ CHÍ MINH
__
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
Dương Thị Phương Mai
TRÍCH XUẤT TỪ KHOÁ SỬ DỤNG MAPREDUCE
Ngành: Khoa Học Máy Tính
Đồ Án Môn Học
Điện Toán Lưới Và Đám Mây
GIẢNG VIÊN HƯỚNG DẪN
PGS.TS. Nguyễn Phi Khứ
TP HỒ CHÍ MINH – Năm 2014
Mục Lục
2
Danh sách hình vẽ
3
Trong những năm gần đây, với sự trợ giúp của Internet thì thông tin càng lúc
càng đa dạng, phong phú cũng như là có sự trùng lặp nhiều. Việc trích xuất
những từ khóa thích hợp sẽ giúp chúng ta dễ dàng chọn lựa được văn bản, tài liệu
thích hợp để đọc và giúp tiết kiệm thời gian. Có nhiều hướng nghiên cứu cho vấn
đề này, trong đó có trích xuất từ khóa từ văn bản, trích xuất từ khóa từ trang web,
trích xuất từ khóa tiếng Việt…
Có nhiều công trình đã nghiên cứu và có giải pháp / thuật toán cho bài toán trích
xuất thông tin từ văn bản. Kết quả của những thuật toán này được đánh giá là rất


tốt. Tuy nhiên việc xử lý trên những đoạn văn bản dài, cũng như là xử lý trên
nhiều file văn bản sẽ làm cho hiệu suất của chương trình giảm đáng kể. Đồ án
này nghiên cứu việc áp dụng MapReduce vào trong một thuật toán trích xuất từ
khóa từ văn bản, Keyword Extraction from a Single Document using Word Co-
occurrence Statistical Information (Y. Matsuo, M.Ishizuka) để nâng cao hiệu
suất của chương trình trong việc xử lý nhiều văn bản cũng như là những văn bản
lớn.
4
Chương 1. GIỚI THIỆU
1.1 Đặt vấn đề
Trong những năm gần đây, với sự trợ giúp của Internet thì thông tin càng
lúc càng đa dạng, phong phú cũng như là có sự trùng lặp nhiều. Việc trích
xuất những từ khóa thích hợp sẽ giúp chúng ta dễ dàng chọn lựa được văn
bản, tài liệu thích hợp để đọc và giúp tiết kiệm thời gian. Ngoài ra, việc
trích xuất từ khóa từ văn bản còn giúp hỗ trợ để giải quyết những bài toán
có liên quan như:
Phân loại văn bản: dựa vào từ khóa đã trích xuất được thì ta có thể gom
cụm các văn bản lại theo chủ đề nào để dễ dàng trong việc lưu trữ và tìm
kiếm. Việc này đặc biệt có ích đối với các văn bản là tài liệu học thuật, khi
đó người dùng muốn nghiên cứu một vấn đề cụ thể nào đó thì sẽ dễ dàng
tìm đúng tài liệu, bài báo để tham khảo.
Hỗ trợ cho các cỗ máy tìm kiếm: hiện nay hầu hết các công cụ tìm kiếm
trên thế giới đều tìm kiếm trên những từ khóa. Việc trích xuất từ khóa tự
động từ văn bản giúp cho việc tìm kiếm dễ dàng hơn…Tuy nhiên việc xử lý
trên những đoạn văn bản dài, cũng như là xử lý trên nhiều file văn bản sẽ
làm cho hiệu suất của chương trình giảm đáng kể.
Đồ án này nghiên cứu việc áp dụng MapReduce vào trong một thuật toán
trích xuất từ khóa từ văn bản, Keyword Extraction from a Single Document
using Word Co-occurrence Statistical Information (Y. Matsuo, M.Ishizuka)
để nâng cao hiệu suất của chương trình trong việc xử lý nhiều văn bản cũng

như là những văn bản lớn.
Ý tưởng chính của thuật toán sẽ được trình bày trong phần tiếp theo.
5
1.2 Thuật toán trích xuất từ khóa từ một văn bản
Thuật toán dùng để trích xuất từ khóa được trình bày trong bài này được lấy
từ bài báo Keyword Extraction from a Single Document using Word Co-
occurrence Statistical Information (Y. Matsuo, M.Ishizuka). Ở đây chỉ trình
bày tóm tắt ý tưởng chính của thuật toán.
Đầu tiên, những từ, cụm từ thường xuyên xuất hiện trong đoạn văn bản sẽ
được trích xuất ra và được ghi nhận lại số lần xuất hiện của nó. Nếu một
cụm từ thường xuyên xuất hiện chung với một từ cụ thể nào đó, thì cụm từ
đó có thể sẽ có ý nghĩa quan trọng trong văn bản. Độ đo của phân phối của
việc xuất hiện đồng thời đó được tính bằng độ đo χ
2
(Chi-square). Một văn
bản bao gồm nhiều câu. Một câu được xem như là một tập các từ, cụm từ
được ngăn cách bằng một dấu kết thúc câu (“.”, “?” hay “!”). Hai cụm từ
trong cùng một câu được xem như là xuất hiện một lần.
Giả sử cụm từ w xuất hiện một cách độc lập đối với các cụm từ xuất hiện
thường xuyên (ký hiệu là G), phân phối của việc đồng xuất hiện của cụm từ
w và các cụm từ xuất hiện thường xuyên tương tự như phân phối không
điều kiện của việc xuất hiện các cụm từ thường xuyên. Ngược lại, nếu cụm
từ w có một mối quan hệ ngữ nghĩa với một cụm từ cụ thể g G∈ , sự đồng
xuất hiện của cụm từ w và g lớn hơn mong đợi, phân phối được xem là có
độ lệch. Độ lệch của sự đồng xuất hiện được sử dụng như là một dấu hiệu
nhận biết của những cụm từ quan trọng.
Thuật toán biểu diễn xác suất vô điều kiện của một cụm từ thường xuyên
g∈ G như là xác suất mong đợi p
g
và tổng số lần đồng xuất hiện của cụm từ

w và những cụm từ thường xuyên G như là n
w
. Tần số xuất hiện đồng thời
của cụm từ w và cụm từ thường xuyên g là freq(w,g). Giá trị thống kê của χ
2
được xác định như công thức sau
6
Nếu χ
2
(w) > , giả thuyết bị loại bỏ với mức α. Thuật ngữ n
w
p
g
biểu diễn cho
tần số mong đợi xuất hiện đồng thời của w và g; và biểu diễn sự chênh lệch
giữa tần số tính được và tần số mong đợi. Do đó, χ
2
(w) lớn thể hiện rằng tần
số xuất hiện đồng thời của cụm từ g biểu diễn độ lệch lớn.
Tổng kết lại, thuật toán đầu tiên trích xuất ra những cụm từ thường xuyên
xuất hiện như là một “chuẩn” để đo, sau đó nó trích xuất ra những cụm từ
với độ lệch lớn so với “chuẩn” và xem chúng là từ khóa.
7
Chương 2. GIỚI THIỆU HADOOP MAPREDUCE
2.1 Sự ra đời của mô hình MapReduce
Map Reduce là một mô hình lập trình, được Google phát triển vào năm
2003, để hỗ trợ cho quá trình tính toán song song trên số lượng tập các dữ
liệu cực lớn (vài tỷ byte) lưu trữ ở các cụm máy tính thành phần trong điện
toán đám mây. Trong mô hình này, người dùng định nghĩa một hàm Map
để tính toán một cặp khóa/giá trị đầu vào và tạo nên một tập các cặp

khóa/giá trị tạm thời, sau đó hàm Reduce sẽ gom nhóm tất cả những giá trị
tạm thời nào có chung khóa lại với nhau cho ra kết quả mong muốn.
Hệ thống khi chạy sẽ quan tâm chi tiết phân vùng của dữ liệu đầu vào, lập
lịch quá trình thực thi chương trình thông qua một tập các máy tính thành
phần, xử lý lỗi và quản lý các kết nối nội giữa các máy tính thành phần.
Trong vòng vài năm trước đây, các kỹ sư của Google phải khởi tạo hàng
trăm các quá trình tính toán dành cho các mục đích đặc biệt trên số lượng
lớn các dữ liệu thô như các dữ liệu móc nối, nhật ký các trang web yêu
cầu…Các quá trình tính toán này dùng cho nhiều mục đích khác nhau như
tóm tắt số lượng các trang đã được móc nối bởi từng host, tính tần số truy
xuất của 1 trang web, tìm ra tập các câu truy vấn được dùng nhiều nhất
trong ngày…Hầu hết các tính toán này đều không phức tạp,nhưng dữ liệu
đầu vào thường rất lớn và quá trình tính toán cần phải được phân tán cho
hàng trăm ngàn máy nhằm có thể thực thi trong khoảng thời gian cho phép.
Các vấn đề về việc song song hóa tính toán,phân tán dữ liệu và quản lý lỗi
đã làm cho các quá trình tính toán vốn đơn giản này trở nên vô cùng phức
tạp.
Để giải quyết vấn đề, các kỹ sư của Google đã thiết kế một mô hình trừu
tượng cho phép chúng ta diễn tả quá trình tính toán này một cách đơn giản
như vốn dĩ của nó, đồng thời che dấu đi các chi tiết phức tạp trong việc
8
song song hóa, chấp nhận lỗi, cân bằng nạp, phân tán dữ liệu trong một thư
viện riêng. Sự trừu tượng hóa này được lấy ý tưởng từ 2 thành phần cơ bản
là map và reduce. Việc sử dụng mô hình hàm chức năng map và reduce
cho phép chúng ta có thể thực thi song song các tính toán lớn dễ dàng và có
thể sử dụng quá trình thực thi lại như một cơ chế chấp nhận lỗi.
Các thế mạnh chính của phương pháp này là cung cấp cho chúng ta một
giao diện đơn giản và mạnh mẽ, cho phép song song hóa và phân tán dữ
liệu trong các phép toán lớn một cách tự động, giúp cho ta thu được hiệu
năng cao nhất trong số lượng lớn các cụm máy tính thành phần của đám

mây điện toán.
Mô hình lập trình
Quá trình tính toán nhận một cặp giá trị đầu vào gồm khóa/giá trị, và tính
toán cho ra một tập các cặp khóa/giá trị đầu ra. Người dùng sử dụng thư
viện MapReduce để diễn tả quá trình này thông qua hai hàm là M ap và
Reduce.
Map là hàm được định nghĩa bởi người dùng, nhận một cặp giá trị đầu vào
và tạo ra các cặp giá trị trung gian.Thư viện MapReduce nhóm tất cả các
giá trị trung gian có liên quan tới key I lại với nhau và chuyển nó cho hàm
Reduce.
9
Hình 2-1 Cơ chế Map
Hàm Reduce cũng được viết bởi người dùng, chấp nhận key I và các tập giá
trị trung gian của key I này. Sau đó tiến hành hợp nhất các giá trị này thành
một tập các giá trị nhỏ hơn nếu có thể.Một lần nữa nguyên tắc kết hợp lại
được sử dụng trong hệ thống điện toán đám mây nhằm phục vụ cho thuật
toán giải quyết yêu cầu bài toán, sau khi chia nhỏ các chương trình lớn
thành các phần nhỏ để thực hiện tính toán một cách song song nhằm làm
giảm thời gian thực hiện một bài toán thì hệ thống tiến hành kết hợp các kết
quả tính toán từ các tiến trình nhỏ song song lại với nhau để đưa ra một kết
quả tính toán thống nhất của chương trình tính toán mà người dùng yêu
cầu . Thông thường chỉ có một giá trị output được đưa ra từ hàm Reduce
hoặc không có giá trị nào cả.
10
Hình 2-2 Cơ chế Reduce
Hình 2-3 Tổng quan cơ chế MapReduce
2.2 Hadoop
Hadoop, một dự án phần mềm quản lý dữ liệu Apache với nhân trong
khung phần mềm MapReduce của Google, được thiết kế để hỗ trợ các ứng
dụng sử dụng được số lượng lớn dữ liệu cấu trúc và phi cấu trúc.

Không giống như các hệ quản trị cơ sở dữ liệu truyền thống, Hadoop được
thiết kế để làm việc với nhiều loại dữ liệu và dữ liệu nguồn. Công nghệ
HDFS của Hadoop cho phép khối lượng lớn công việc được chia thành các
khối dữ liệu nhỏ hơn được nhân rộng và phân phối trên các phần cứng của
một cluster để xử lý nhanh hơn. Công nghệ này đã được sử dụng rộng rãi
bởi một số trang web lớn nhất thế giới, chẳng hạn như Facebook, eBay,
Amazon, Baidu, và Yahoo. Các nhà quan sát nhấn mạnh rằng Yahoo là một
trong những nhà đóng góp lớn nhất đối với Hadoop.
11
Công nghệ Hadoop ngày càng được sử dụng nhiều hơn trong các ngân
hàng, công ty quảng cáo, các viện nghiên cứu, các công ty dược phẩm và
các công ty CNTT khác.
Cấu trúc tập tin của Hadoop cho phép các công ty về cơ bản nắm bắt và
củng cố tốt bất kỳ loại tập tin dữ liệu có cấu trúc và phức tạp nào, chẳng
hạn như các nhật ký trên trang web, siêu dữ liệu, tập tin âm thanh và video,
dịch vụ email phi cấu trúc, dữ liệu dòng Twitter và dịch vụ truyền thông xã
hội. Do đó, công nghệ này là lý tưởng cho các công ty muốn phân tích khối
lượng lớn dữ liệu có cấu trúc và phi cấu trúc.
2.2.1.Thành phần
• Lưu trữ: HDFS (Hadoop Distributed File System) Hệ thống file phân
tán
• Xử lý: MapReduce
2.2.2.Giới thiệu HDFS
HDFS ra đời trên nhu cầu lưu trữ dữ liệu của Nutch, một dự án Search
Engine nguồn mở. HDFS kế thừa các mục tiêu chung của các hệ thống file
phân tán trước đó như độ tin cậy, khả năng mở rộng và hiệu suất hoạt động.
Tuy nhiên, HDFS ra đời trên nhu cầu lưu trữ dữ liệu của Nutch, một dự án
Search Engine nguồn mở, và phát triển để đáp ứng các đòi hỏi về lưu trữ
và xử lý của các hệ thống xử lý dữ liệu lớn với các đặc thù riêng. Do đó,
các nhà phát triển HDFS đã xem xét lại các kiến trúc phân tán trước đây và

nhận ra các sự khác biệt trong mục tiêu của HDFS so với các hệ thống file
phân tán truyền thống.
Thứ nhất, các lỗi về phần cứng sẽ thường xuyên xảy ra. Hệ thống HDFS sẽ
chạy trên các cluster với hàng trăm hoặc thậm chí hàng nghìn node. Các
node này được xây dựng nên từ các phần cứng thông thường, giá rẻ, tỷ lệ
lỗi cao. Chất lượng và số lượng của các thành phần phần cứng như vậy sẽ
tất yếu dẫn đến tỷ lệ xảy ra lỗi trên cluster sẽ cao. Các vấn đề có thể điểm
12
qua như lỗi của ứng dụng, lỗi của hệ điều hành, lỗi đĩa cứng, bộ nhớ, lỗi của
các thiết bị kết nối, lỗi mạng, và lỗi về nguồn điện… Vì thế, khả năng phát
hiện lỗi, chống chịu lỗi và tự động phục hồi phải được tích hợp vào trong hệ
thống HDFS.
Thứ hai, kích thước file sẽ lớn hơn so với các chuẩn truyền thống, các file
có kích thước hàng GB sẽ trở nên phổ biến. Khi làm việc trên các tập dữ
liệu với kích thước nhiều TB, ít khi nào người ta lại chọn việc quản lý hàng
tỷ file có kích thước hàng KB, thậm chí nếu hệ thống có thể hỗ trợ. Điều
chúng muốn nói ở đây là việc phân chia tập dữ liệu thành một số lượng ít
file có kích thước lớn sẽ là tối ưu hơn. Hai tác dụng to lớn của điều này có
thể thấy là giảm thời gian truy xuất dữ liệu và đơn giản hoá việc quản lý các
tập tin.
Thứ ba, hầu hết các file đều được thay đổi bằng cách append dữ liệu vào
cuối file hơn là ghi đè lên dữ liệu hiện có. Việc ghi dữ liệu lên một vị trí
ngẫu nhiên trong file không hề tồn tại. Một khi đã được tạo ra, các file sẽ
trở thành file chỉ đọc (read-only), và thường được đọc một cách tuần tự. Có
rất nhiều loại dữ liệu phù hợp với các đặc điểm trên. Đó có thể là các kho
dữ liệu lớn để các chương trình xử lý quét qua và phân tích dữ liệu. Đó có
thể là các dòng dữ liệu được tạo ra một cách liên tục qua quá trình chạy các
ứng dụng (ví dụ như các file log). Đó có thể là kết quả trung gian của một
máy này và lại được dùng làm đầu vào xử lý trên một máy khác. Và do vậy,
việc append dữ liệu vào file sẽ trở thành điểm chính để tối ưu hoá hiệu suất.

2.2.3.Mục tiêu của HDFS
• Lưu trữ file rất lớn (hàng terabyte)
• Truy cập dữ liệu theo dòng
• Mô hình liên kết dữ liệu đơn giản: ghi 1 lần, đọc nhiều lần
• Di chuyển quá trình xử lý thay vì dữ liệu
• Sử dụng phần cứng phổ thông, đa dạng
• Tự động phát hiện lỗi, phục hồi dữ liệu rất nhanh
13
2.2.4.Tổng quan kiến trúc HDFS
Trên một hadoop cluster, có duy nhất một node chạy NameNode, một
node chạy JobTracker (NameNode và JobTracker có thể nằm trên cùng
một máy vật lý, tuy nhiên trên các cluster thật sự với hàng trăm, hàng
nghìn node thì thường phải tách riêng NameNode và JobTracker ra các
máy vật lý khác nhau). Có nhiều node slave, mỗi node slave thường đóng
2 vai trò: một là DataNode, hai là TaskTracker.
Block
Đây là đơn vị lưu trữ dữ liệu nhỏ nhất. Hadoop dùng mặc định
64MB/block. Một file sẽ được chia thành nhiều block và các block chứa ở
bất kỳ node nào trong cluster.
NameNode
Đây là thành phần trọng yếu của HDFS, dùng để quản lý và thực thi các
thao tác liên quan đến tên file (mở file, đóng file, lưu tên file) và quản lý
vị trí của các block.
Thành phần này đóng vai trò là master của hệ thống HDFS, quản lý các
meta-data của hệ thống HDFS như file system space, danh sách các file
trên hệ thống và các block id tương ứng của từng file, quản danh sách
slave và tình trạng hoạt động của các DataNode (live hay dead) thông qua
các hearbeat, điều hướng quá trình đọc/ghi dữ liệu từ client lên các
DataNode.
DataNode

Dùng để quản lý các block và thực hiện thao tác trên dữ liệu (thêm block,
xóa block, xử lý dữ liệu)
JobTracker và TaskTracker chịu trách nhiệm duy trì bộ máy MapReduce,
nhận và thực thi các MapReduce Job. Vai trò cụ thể như sau:
14
JobTracker
Thành phần này tiếp nhận các yêu cầu thực thi các MapReduce job, phân
chia job này thành các task và phân công cho các TaskTracker thực hiện,
quản lý tình trạng thực hiện các task của TaskTracker và phân công lại
nếu cần. JobTracker cũng quản lý danh sách các node TaskTracker và tình
trạng của từng node thông qua hearbeat.
TaskTracker
Thành phần này nhận các task từ JobTracker và thực hiện task.
Hình 2-4 Kiến trúc HDFS
15
Chương 3. CHƯƠNG TRÌNH TRÍCH XUẤT TỪ KHÓA SỬ DỤNG
MAPREDUCE
3.1 Cấu trúc chương trình
Chương trình được viết bằng C# trên nền tảng .NET Framework 4.0
Chương trình gồm 2 modules chính là Word_Searching_MapReduce và
SemanticLibrary
3.1.1.SematicLibrary
Bao gồm các thành phần nhỏ hơn như
Keyword: lớp từ khóa
KeywordAnalyzer: đây là thành phần chính phân tích và đánh giá để xác
định một cụm từ có phải là từ khóa hay không
SemanticLibrary: chứa các cấu trúc phân tích câu, cụm từ… Dựa vào đó
có thể tách lọc được ra một từ, cụm từ có khả năng làm từ khóa
TitleExtractor: trích lọc tiêu đề
3.1.2.Word_Searching_MapReduce

Công việc chính của module này là overwrite lại các hàm Mapper và
Reducer, từ đó đếm tần số xuất hiện của các cụm từ có khả năng làm từ
khóa.
Mapper
• Input: Một dòng của văn bản
• Output: <key, value>
Trong đó key là một ứng viên của từ khóa, và value là giá trị 1
Reducer
• Input: <key, values >
Trong đó key là một ứng viên của từ khóa, values là tập hợp các giá
trị đếm được của từ
• Output: <key, value>
16
Trong đó key là một ứng viên của từ khóa, và value là tổng số
lượng của từ đó trong đoạn văn bản
Cơ chế MapReduce trong bài này được mô tả cụ thể như hình bên dưới:
Hình 3-5 Cơ chế MapReduce với bài toán Word Count
3.2 Demo chương trình
Để chạy được chương trình thì máy tính cần phải cài đặt những thành phần
như sau:
• .NET Framework 4.0
• HDInsight developer version
• MapReduce package: có thể được cài đặt thông qua Nuget trong
Visual Studio
Ở đây chúng ta sẽ chạy thử chương trình với dữ liệu đầu vào là một đoạn
trong bài báo Keyword Extraction from a Single Document using Word Co-
occurrence Statistical Information (Y. Matsuo, M.Ishizuka)
17
Hình 3-6 Input File
Sau đó ta sẽ khởi động Hadoop Command Line để chép file input vừa mới

tạo vào đường dẫn Input/Input_Files, đây là đường dẫn ta tự tạo ra và chỉ
định trong chương trình
18
Hình 3-7 Hadoop Command Line
Bước tiếp theo là chạy chương trình
Hình 3-8 Chạy chương trình
Kết quả trả về là những từ khóa như sau: Extraction, Extraction Single,
Keyword, Keyword Extraction, Recently, Single, Single Document, Word
Co-occurrence Statistical Information…
19
Hình 3-9 Output
3.3 Kết quả thực nghiệm
Dưới đây là kết quả thực nghiệm khi so sánh tốc độ chạy của 2 chương
trình: không sử dụng MapReduce và có sử dụng MapReduce (có sử dụng
MapReduce chạy trên 2 máy có cùng cấu hình).
Chương trình không sử dụng MapReduce không hỗ trợ việc chạy chương
trình với nhiều file input cùng một lúc, nên kết quả này chỉ so sánh đối với
việc chạy chương trình trên 1 file input đầu vào. Ta thấy rằng khi số lượng
từ trong file càng tăng thì thời gian chạy càng thể hiện rõ sự khác biệt giữa
2 chương trình. Kết quả được mô tả như biểu đồ bên dưới:
20
Bảng 1 Bảng so sánh kết quả thực nghiệm
21
Số lượng từ trong văn bản
Giây
TÀI LIỆU THAM KHẢO
Tiếng Việt
[1] Chu Anh Minh (2009), Bài toán trích xuất từ khóa cho trang web áp dụng
phương pháp phân tích thẻ HTML và đồ thị web, BC Khóa luận Tốt nghiệp
Đại học Ngành Công nghệ thông tin Hệ chính quy, Đại học Quốc gia Hà Nội.

[2] Hadoop – công nghệ khai thác mỏ vàng trên Internet (20/05/2014)
/>Tiếng Anh
[3] Y. Matsuo, M.Ishizuka (2003), “Keyword Extraction from a Single
Document using Word Co-occurrence Statistical Information”, International
Journal on Artificial Intelligence Tools, World Scientific Publishing
Company.
[4] BIG DATA for .NET Devs: HDInsight, Writing Hadoop Map Reduce Jobs In
C# And Querying Results Back Using LINQ
/>on.html
[5] Keyword Extraction with Word Co-occurrence Algorithm (23/05/2014)

22

×