# 手把手教你完成一个数据科学小项目（8）：Emoji提取与分布图谱

## 读取数据

```import pandas as pd

## 提取 emoji

```import re
def get_emoji(content):
pattern =re.compile(u"\[[a-zA-Z\u4e00-\u9fa5]+\]")
result=re.findall(pattern,content)
return result
df['emojis_list'] = df['content'].apply(get_emoji)

```emojis = df['emojis_list'].values.tolist()
emojis```

```[['[费解]', '[费解]', '[费解]'],
['[允悲]', '[允悲]'],
['[嘿哈]'],
['[笑而不语]'],
['[doge]'],
['[doge]'],
['[泪]'],
['[doge]'],
['[吃瓜]'],
['[允悲]'],
['[二哈]'],
['[笑而不语]', '[笑而不语]'],
['[小黄人得意]'],
['[喵喵]', '[喵喵]'],
['[二哈]'],
['[doge]', '[doge]', '[doge]']]```

```emojis_list = sum(emojis, [])
emojis_set = list(set(emojis_list))
num = len(emojis_set)
print(num)
print(emojis_set)```

```76
['[打脸]', '[白眼]', '[太开心]', '[允悲]', '[爱你]', '[ok]', '[小黄人坏笑]', '[思考]', '[喵喵]', '[偷笑]', '[悲伤]', '[抱抱]', '[睡]', '[围观]', '[摊手]', '[怒]', '[衰]', '[中国赞]', '[汗]', '[鲜花]', '[小黄人得意]', '[闭嘴]', '[吃惊]', '[吐]', '[阴险]', '[晕]', '[骷髅]', '[憧憬]', '[呵呵]', '[米奇比心]', '[羞嗒嗒]', '[可怜]', '[可爱]', '[挖鼻]', '[哈哈]', '[微笑]', '[挤眼]', '[耶]', '[给力]', '[笑cry]', '[威武]', '[握手]', '[吃瓜]', '[鼓掌]', '[拜拜]', '[失望]', '[坏笑]', '[泪]', '[跪了]', '[嘿哈]', '[费解]', '[哆啦A梦汗]', '[嘻嘻]', '[亲亲]', '[皱眉]', '[哈欠]', '[怒骂]', '[攤手]', '[米奇大哭]', '[笑而不语]', '[黑线]', '[鄙视]', '[good]', '[doge]', '[作揖]', '[費解]', '[猪头]', '[二哈]', '[赞]', '[哼]', '[嘘]', '[生病]', '[哆啦A梦微笑]', '[疑问]', '[污]', '[并不简单]']```

## emoji 分组统计

```from collections import Counter
counter = Counter(emojis_list)
print(counter.most_common())```

`[('[doge]', 198), ('[二哈]', 148), ('[允悲]', 131), ('[费解]', 100), ('[摊手]', 93), ('[微笑]', 83), ('[笑cry]', 70), ('[吃瓜]', 66), ('[嘻嘻]', 44), ('[吐]', 35), ('[笑而不语]', 34), ('[并不简单]', 33), ('[跪了]', 32), ('[挖鼻]', 25), ('[拜拜]', 24), ('[喵喵]', 20), ('[太开心]', 20), ('[哈哈]', 16), ('[作揖]', 15), ('[泪]', 14), ('[good]', 13), ('[偷笑]', 10), ('[汗]', 10), ('[哆啦A梦汗]', 9), ('[失望]', 9), ('[疑问]', 9), ('[思考]', 8), ('[爱你]', 6), ('[赞]', 6), ('[憧憬]', 6), ('[污]', 6), ('[阴险]', 6), ('[白眼]', 5), ('[黑线]', 5), ('[中国赞]', 5), ('[可爱]', 5), ('[威武]', 5), ('[怒]', 4), ('[鄙视]', 4), ('[米奇大哭]', 4), ('[ok]', 4), ('[皱眉]', 4), ('[費解]', 4), ('[吃惊]', 4), ('[怒骂]', 4), ('[哼]', 4), ('[鲜花]', 4), ('[坏笑]', 3), ('[悲伤]', 3), ('[鼓掌]', 3), ('[攤手]', 3), ('[嘘]', 3), ('[晕]', 3), ('[衰]', 2), ('[呵呵]', 2), ('[抱抱]', 2), ('[小黄人坏笑]', 2), ('[可怜]', 2), ('[哈欠]', 2), ('[打脸]', 2), ('[嘿哈]', 1), ('[小黄人得意]', 1), ('[握手]', 1), ('[挤眼]', 1), ('[耶]', 1), ('[亲亲]', 1), ('[米奇比心]', 1), ('[羞嗒嗒]', 1), ('[围观]', 1), ('[猪头]', 1), ('[闭嘴]', 1), ('[生病]', 1), ('[给力]', 1), ('[哆啦A梦微笑]', 1), ('[骷髅]', 1), ('[睡]', 1)]`

## emoji 使用情况

```y_emojis, x_counts = zip(*counter.most_common())
from pyecharts import Bar
bar = Bar("emoji 使用情况")
bar```

## 评论数据

```cmnts_list = df['content'].values.tolist()
cmnts_list```

```['[费解][费解][费解]',
'那你以为不单身就能避免？',
'谢谢',
'想去声援你 结果发不出?',
'锅太大，接不住',
'[允悲][允悲]…',
'居然这么说我们年轻人[嘿哈]',
'老了',
'我觉得这条博就是一个笑话……',
'到底该不该透支消费？专家统一一下意见，在线等，急。',
'拜托，我买再多手机穿再多名牌喝再多星巴克都没一个房贷债务高吧。推责任推这么心安理得恶不恶心啊。',
'你们反省一下，不要做历史的罪人[笑而不语]',```

```cmnts = ' '.join(cmnts_list)
print(len(cmnts))
print(cmnts)```

## jieba 分词

GitHub/jieba分词前，先把上面的`emojis_set`里的去掉中括号后的`emoji`一个个都添加进自定义的词典，以免分词时被切分开。

jieba/test/test_userdict.py `jieba.del_word('自定义词')`或者在`txt`的存好，然后读入`jieba.load_userdict("userdict.txt")`

```import jieba
emoji_drop = []
for emojis in y_emojis:
emoji = emojis[1:-1] # 去掉括号
emoji_drop.append(emoji) # 将去掉括号后的emoji单独保存
words = list(jieba.cut(cmnts))
print(len(words))
print(words)```

```54431
['[', '费解', ']', '[', '费解', ']', '[', '费解', ']', ' ', '那', '你', '以为', '不', '单身', '就', '能', '避免', '？', ' ', '谢谢', ' ', '想', '去', '声援', '你', ' ', '结果', '发不出', '?', ' ', '锅太大', '，', '接', '不住', ' ', '[', '允悲', ']', '[', '允悲', ']', '…', ' ', '居然', '这么', '说', '我们', '年轻人', '[', '嘿哈', ']', ' ', '老', '了',```

`['doge', '二哈', '允悲', '费解', '摊手', '微笑', '笑cry', '吃瓜', '嘻嘻', '吐', '笑而不语', '并不简单', '跪了', '挖鼻', '拜拜', '喵喵', '太开心', '哈哈', '作揖', '泪', 'good', '偷笑', '汗', '哆啦A梦汗', '失望', '疑问', '思考', '爱你', '赞', '憧憬', '污', '阴险', '白眼', '黑线', '中国赞', '可爱', '威武', '怒', '鄙视', '米奇大哭', 'ok', '皱眉', '費解', '吃惊', '怒骂', '哼', '鲜花', '坏笑', '悲伤', '鼓掌', '攤手', '嘘', '晕', '衰', '呵呵', '抱抱', '小黄人坏笑', '可怜', '哈欠', '打脸', '嘿哈', '小黄人得意', '握手', '挤眼', '耶', '亲亲', '米奇比心', '羞嗒嗒', '围观', '猪头', '闭嘴', '生病', '给力', '哆啦A梦微笑', '骷髅', '睡']`

## NLTK 分布图谱

```import matplotlib.pyplot as plt
%matplotlib inline
import nltk
from nltk.draw.dispersion import dispersion_plot

plt.rcParams['font.sans-serif'] = ['SimHei']
ntext = nltk.Text(words)
ntext.dispersion_plot(emoji_drop[:15])```

`ntext.dispersion_plot(emoji_drop)`

57 篇文章15 人订阅

0 条评论

## 相关文章

29550

1.3K150

### 学习使用Jieba1.Jieba2. 特点3.功能4.安装5.使用6.其他中文分词工具

1.Jieba 相信大多数知道NLP的人都知道什么是Jieba，但对于像我这样的新手而言，也仅限于知道而已，并没有学习过它，使用过它，打算用几天的时间来记录自己...

453130

12740

8720

36640

10750

39270

19620

33540