Trong bài tutorial Phân tích bài đăng trên Twitter, chúng ta đã viết chương trình thu thập dữ liệu Twitter về một chủ đề nhất định và phân tích quan điểm của từng bài đăng. Tuy nhiên dữ liệu thu về là dữ liệu thô, chưa qua xử lý nên kết quả phân tích còn nhiều hạn chế, không đạt độ chính xác cao.

Trong bài này chúng ta sẽ sử dụng Regular Expression (xem thêm tại đây) để loại bỏ các đoạn text không cần thiết và dùng API của Language Tool để chỉnh sửa các từ bị viết sai. Sau đó ta sẽ so sách kết quả đánh giá quan điểm của bài đăng đã được xử lý, làm sạch với bài đăng ở dạng thô.

Trước hết ta thêm dependency của Language Tool vào file pom.xml như sau:

Khác với các bài tutorial trước, trong bài này ta sẽ tạo hai Java class là NLPUtility và Runner. NLPUtility là class chứa các hàm chức năng còn Runner là class chính để chạy chương trình và gọi các hàm trong NLPUtility để xử lý dữ liệu. Trong NLPUtility ta viết hàm dataCleener(String tweet) để loại bỏ các đoạn text không cần thiết (URL, username, # của hastag, RT(Retweet) sử dụng Regular Expression như sau:

Sau khi loại bỏ các đoạn text không cần thiết, ta được kết quả là bài đăng ngắn gọn và dễ phân tích hơn. Tuy vậy trong bài đăng này, có thể có những từ bị viết sai, viết không đầy đủ hoặc dùng sai cách. Do đó bước tiếp theo, ta sử dụng Java API của Language Tool để phát hiện và chỉnh sửa các từ này như sau:

Ngoài ra, ta sử dụng lại hàm findSentiment (String tweet) và hàm getSentimentScore(double[] scoreArray) trong bài tutorial Phân tích bài đăng trên Twitter trong NLPUtility để so sánh kết quả phân tích quan điểm giữa bài đăng đã được xử lý và làm sạch với bài đăng ở dạng thô.

Full code của Runner và NLPUtility class lần lượt như sau:

Chạy chương trình Runner, ta được kết quả

Như vậy, trong trường hợp ta sử dụng dữ liệu ở dạng thô thì CoreNLP trả về kết quả điểm Sentiment là 1 (negative: tiêu cực). Khi ta tiến hành xử lý, làm sạch bài đăng và loại bỏ đoạn text không cần thiết (‘RT’, facebook link, 2 users name: @JackDown và @TomCrucky), Language Tool phát hiện có 5 từ nên được sửa lại (they, send, dấu cách, itt và ffuny). Trong trường hợp này, CoreNLP trả về kết quả điểm Sentiment cho trường hợp này là 2 (neutral: bình thường). Kết quả này hợp lý hơn so với kết quả ‘tiêu cực’ vì dù phần đầu của bài đăng (‘crazy’) thì phần cuối của bài đăng lại mang nghĩa tích cực (‘funny’).

Tháng Mười Một 30, 2018
ITechSeeker