一、任务介绍
本任务是NLP&CC 2013的跨语言情感分析,主要是在英文资源的前提下,对测试集内的每条中文评论进行倾向性分类。
本任务的所有数据均由主办方提供,主要包含三部分:
① 英文标注数据和英文情感词典;
② 中文未标注语料;
③ 中文测试集。
数据均采用XML格式, UTF-8 编码存储。除组织方提供的数据外,不得使用任何中英文标注数据、中英文未标注数据和中英文情感词典等资源。不得人工干预评测结果,不得对测试集进行人工标注。
二、实验环境
Anaconda2-4.3.1(Python2.7),genism。
三、数据预处理
3.1 解析XML
主要是对XML原文件进行解析,去除英文标注语料的标点符号,同时对于过长的英文句子只取前100个词汇。
对应代码:ENProcess.py
#! /usr/bin/env python
# -*- coding: utf-8 -*-
import codecs
import xml.etree.ElementTree as ET
from nltk.tokenize import RegexpTokenizer
def nltkProcess(sentence):
if not sentence:
print("Empty sentence in nltkProcess()!")
tokenizer = RegexpTokenizer(r'\w+')
tokens = tokenizer.tokenize(sentence)
#tokens = [w.lower() for w in tokens ]
return tokens
def process(inputFile,outputfile):
result= codecs.open(outputfile, "w", "utf-8")
tree = ET.parse(inputFile)
root = tree.getroot()
for i,item in enumerate(root.findall('item')):
summary = item.find('summary').text
text = item.find('text').text
label=item.find('polarity').text
texts = summary + "," + text
result.write(str(label) + '\t')
results = nltkProcess(texts)
for j,word in enumerate(results):
if j>100:
continue
result.write(word + " ")
result.write("\n")
print i
result.close()
if __name__ == '__main__':
#process('../NLPCC2013/RawData/Train_EN/book/train.data', '../NLPCC2013/Process/TrainBookEN.data')
#process('../NLPCC2013/RawData/Train_EN/music/train.data', '../NLPCC2013/Process/TrainMusicEN.data')
process('../NLPCC2013/RawData/Train_EN/dvd/train.data', '../NLPCC2013/Process/TrainDvdEN.data')
3.2 谷歌翻译中文语料
主要是对XML原文件进行解析后调用谷歌翻译进行翻译成英文,再对所得到的未标注语料去除标点符号。
对应代码:GoogleTranslate.py、CNtoENProcess.py
可见另外一篇博客:python爬虫Google翻译的实现
四、实验方法
4.1 提取特征
①词汇特征,通过观察发现评论的句子里含有大量的good和bad单词,并且通常分别对应的标注是positive和negative,