(以下代码在 Jupyter Notebook 运行)
dict1:
思路:
先引入re,正则表达式库。
1.定义预处理函数:
先将句子中的每个单词和标点符号用空格分开:
text = re.sub(r"(\w)([.,;:!?'\"”\)])", r"\1 \2", text)
text = re.sub(r"([.,;:!?'\"“\(])(\w)", r"\1 \2", text)
re.sub函数,第一个参数是寻找(\w)([.,;:!?'"”)])这样组合的(第一组)(第二组),然后用第二个参数来代替第一个参数。
例如"happy."中的 "y"和“.”就是这样的组合,然后代码把它分成"y ."(中间有一个空格),实现happy 和句号由空格分开,来将句子里每个元素分开的效果。(第二个代码也同理)
将分开完的元素空格分开,代码:
re.split函数通过出现模式来拆分字符串,\s为空格,当空格出现了,分割一次
tokens = re.split(r"\s+",text) \s+代表连续的空格或者一个空格。
然后就是normalisation:(目前还不懂,以后补充)
这样就实现了文本的预处理。
然后我们利用打分的形式来代表这个句子是positive 还是negetive。
先弄一个简单的词典,当文本出现happy时,+1.0,当出现sad时候,-1.0。
定义一个getSentiment函数用来得到一个单词的情感分数。
然后用analyseSentiment函数来分析
words = preProcess(text)
scores = [getSentiment(w) for w in words]
这样就可以得到text中每个单词的情感分数,
然后求和,得出这个文本是positive还是negetive。
我们也可以导入外面的词典:
with open('sentiment.csv', 'rb') as f:
reader = unicodecsv.reader(f, encoding='utf-8')
for line in reader:
sentimentDict[line[0]] = float(line[1])
以二进制的方式打开sentiment.csv文件,然后以 'utf-8'编码来读取。
最后遍历reader,将新的词典赋值到sentimentDict中。
(后续还会更新)