from __future__ import division
import urllib
import json
from math import log
def hits(word1,word2=""):
query = "http://ajax.googleapis.com/ajax/services/search/web?v=1.0&q=%s"
if word2 == "":
results = urllib.urlopen(query % word1)
else:
results = urllib.urlopen(query % word1+" "+"AROUND(10)"+" "+word2)
json_res = json.loads(results.read())
google_hits=int(json_res['responseData']['cursor']['estimatedResultCount'])
return google_hits
def so(phrase):
num = hits(phrase,"excellent")
#print num
den = hits(phrase,"poor")
#print den
ratio = num/den
#print ratio
sop = log(ratio)
return sop
print so("ugly product")
我需要此代碼來計算點明智的相互信息,可用於將評論分爲正面或負面。基本上我使用Turney(2002)指定的技術:http://acl.ldc.upenn.edu/P/P02/P02-1053.pdf作爲情感分析的無監督分類方法的示例。Python - 使用點互信息的情緒分析
正如文章中所解釋的,如果短語與單詞「poor」更強相關,並且與「excellent」更強相關,則該單詞的語義方向是否定的。
上面的代碼計算短語的SO。我使用Google來計算命中數並計算出SO(因爲AltaVista現在不存在)
計算出的值非常不穩定。他們不拘泥於特定的模式。 例如SO(「醜陋的產品」)原來是2.85462098541而SO(「美麗的產品」)是1.71395061117。而前者預計是負面的,另一個是正面的。
代碼有問題嗎?有沒有更簡單的方法來計算一個短語(使用PMI)SO與任何Python庫,比如說NLTK?我嘗試了NLTK,但無法找到計算PMI的明確方法。
有什麼建議? – keshr3106
啊,我有一個PMI的代碼,給我一分鐘。我會稍微上傳一下。 – alvas