NLP:预处理和情感分析(简易入门代码)

355 阅读2分钟
本人刚开始学习NLP,先放代码,有些地方不是很清楚,后面完善。

(以下代码在 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。

![](https://p1-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/c161a9146c6f4ea69fbb3681eedacb03~tplv-k3u1fbpfcp-zoom-1.image)
![](https://p6-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/ad17b993f473495d850b5b5f93670eb8~tplv-k3u1fbpfcp-zoom-1.image)

我们也可以导入外面的词典:

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中。

(后续还会更新)