Phân tích tâm lý (Sentiment Analysis) Twitter (P2) – Tính chỉ số tâm lý (sentiment score)

Sentiment Analysis
Sentiment Analysis

Ở phần hai, ta sẽ tính chỉ số tâm lý (sentiment score) cho từng tweet dựa vào nội dung của người dùng. Chỉ số cho từng tweet được tính bằng cách lấy tổng điểm sentiment của từng từ trong tweet đó. Ta tạo file tweet_sentiment.py nhận hai đối số đầu vào là AFINN-111.txt và tweets.json. Sau đó, lưu chỉ số tâm lý cho từng tweet vào file tweet_scores.txt.

Nói sơ về phương pháp tính chỉ số tâm lý

Để tính được chỉ số tâm lý, ta cần tạo danh sách chứa các từ thường được sử dụng để bộc lộ cảm xúc hay suy nghĩ của người dùng. File AFINN-111.txt chứa danh sách điểm sentiment được tính sẵn cho từng từ.

abandon	-2
abandoned	-2
abandons	-2
abducted	-2
abduction	-2
abductions	-2
abhor	-3
abhorred	-3
abhorrent	-3
abhors	-3
abilities	2
ability	2
aboard	1
absentee	-1
absentees	-1
absolve	2
absolved	2
absolves	2
absolving	2
absorbed	1
...

Ví dụ, để tính chỉ số tâm lý cho tweet “I love these features but I hate its colors.”. Giả sử từ “love 3”“hate -2” nằm trong danh sách trên ta được chỉ số tâm lý là 3 + (-2) = 1. Vì đây là kết quả dương, nên ta có thể nhìn nhận đây là một tweet tích cực (positive). Nếu chỉ số tâm lý bằng 0 hoặc là một kết quả âm thì ta có chỉ số tâm lý trung lập (neutral) hoặc tiêu cực (negative).

Đọc dữ liệu và tính toán chỉ số tâm lý

Đầu tiên ta đọc dữ liệu từ file AFINN-111.txt và lưu vào biến scores là một biến thuộc kiểu dữ liệu dict trong Python.

def read_sentiment_scores(sent_file):
	sent_file = open(sent_file)
	scores = {} # initialize an empty dictionary
	for line in sent_file:
	  term, score  = line.split("\t")  # The file is tab-delimited. "\t" means "tab character"
	  scores[term] = int(score)  # Convert the score to an integer.

	return scores # return every (term, score) pair in the dictionary

Do tập dữ liệu thu được tweets.json có định dạng là JSON (Javascript Object Notation), ta cần sử dụng thư viện json để duyệt file này.

import json

def read_tweets_file(tweet_file):
	tweet_file = open(tweet_file)

	# fetching tweet json to list
	tweets = []
	for line in tweet_file:
		tweet = json.loads(line)
		tweets.append(tweet)

	return tweets

Ta có thể quan sát một dòng tweet bất kỳ bằng trang web http://jsonviewer.stack.hu. Ta copy nội dung cần quan sát vào phần text. Sau đó, chuyển qua tab viewer để xem cây phân tích json.

Copy json text
Copy json text
Inspecting json tweet
Inspecting json tweet

Dựa vào cây phân tích cấu trúc trên, ta có thể nhận ra nội dung tweet nằm trong element text (được highlight). Từ đây, với mỗi dòng trong file tweet, ta có thể trích xuất nội dung tweet để tính chỉ số tâm lý (sentiment score).

def compute_tweet_sentiment_score(scores, tweets):
	# extract tweet content
	for i in range(1, len(tweets)):
		tweet_score = 0
		words = tweets[i]['text'].split(" ")

		# calculate sentiment score
		for w in words:
			if w in scores:
				tweet_score += scores[w]

		print tweet_score

Chạy chương trình và lưu kết quả tính toán

Để chạy chương trình, ta thực hiện lệnh sau ở màn hình console

python tweet_sentiment.py AFINN-111.txt tweets.json > tweet_scores.txt

Như vậy, ta được file tweet_scores.txt chứa kết quả tính toán chỉ số tâm lý tương ứng cho từng dòng tweet trong file tweets.json. Từ kết quả này, ta có thể mở rộng để tính các chỉ số thống kê như:

  • Vẽ biểu đồ histogram những từ biểu thị cảm xúc thường được sử dụng.
  • Top 10 địa điểm trên bản đồ cho thấy người dùng có phản ứng tích cực với một chủ đề nào đó trên Internet.
  • Top 10 những hash tags được dùng trong các tweet.
Happiness State
Happiness State
Top 10 hashtag
Top 10 hashtag
Advertisements

Gửi phản hồi

Mời bạn điền thông tin vào ô dưới đây hoặc kích vào một biểu tượng để đăng nhập:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Log Out / Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Log Out / Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Log Out / Thay đổi )

Google+ photo

Bạn đang bình luận bằng tài khoản Google+ Log Out / Thay đổi )

Connecting to %s