在之前的实验中我使用卡方统计法,提取语料库中单词信息量最高的1000 2000 3000词不等。
之后发现大部分算法还是需要一定的features量,也就是 在一定范围内(如 1000~3000)提取的词汇越多,classifier性能越好。达到一定峰值后 性能会下降。
只有Knn算法出现了与众不同的现象,features越大,性能有呈现下降趋势。其本身性能也不是很好,所以没给予更多关注。
后来想提高算法性能,于是打算先从已有的features下手。导师建议我去review一下提取的unigram,看里面是个什么情况。简单浏览一下发现,很多词汇是没什么情感色彩的名词,这些词汇似乎对情感分析没有帮助,而且有可能起到负面作用。于是想试下提纯features。 导师推荐了用情感词典做为参考。
于是做了一个筛选:如果选出来的features在情感词典中 那么保留,如果不在,丢弃。
import itertools
line = []
share_words = []
inpfile = open("my_features.txt", "r") # 提取的features,可多提取一些,如8000个 best_words
line1 = inpfile.readline()
my_features = []
while line1:
word1 = line1.strip()
my_features.append(word1)
line1 = inpfile.readline()
inpfile.close()
inpfile = open("lexicon.txt", "r") # 情感词典
line2 = inpfile.readline()
lexicon = []
while line2:
word2 = line2.strip()
lexicon.append(word2)
line2 = inpfile.readline()
inpfile.close()
for w in my_features:
if(w in lexicon):
line.append(w)
share_words.append(line)
f1=open('shared_words.txt','w') # 写入到文件(此例子中为1662个shared features)
words = share_words
words = list(itertools.chain(*words))
for item in words:
f1.write(item+"\n") #k
f1.close()
这样处理后再用weka进行