Home

Awesome

通过对话分析女朋友的情绪值波动

Blog : Antzuhl

Github : CasterWx

扩展小猫粮 : 小猫粮

欢迎关注公众号,开启和我的交流

weix

todo

:kissing_closed_eyes::kissing_closed_eyes: 通过女朋友的一句话分析她的心情 。

Analyze her mood through her girlfriend's words .

第一章 分词

1、JieBa库

“结巴”中文分词:做最好的 Python 中文分词组件

"Jieba" (Chinese for "to stutter") Chinese text segmentation: built to be the best Python Chinese word segmentation module.

2、特点

3、算法

4、主要功能

1) 分词

seg_list = jieba.cut("我要有女朋友了", cut_all=True)
print("全模式: " + "/ ".join(seg_list))  # 全模式

seg_list = jieba.cut("我要有女朋友了", cut_all=False)
print("默认模式: " + "/ ".join(seg_list))  # 默认模式

seg_list = jieba.cut("我要有女朋友了")
print(", ".join(seg_list))

seg_list = jieba.cut_for_search("我要有女朋友了,然后我要打爆室友的狗头")  # 搜索引擎模式
print("搜索引擎模式: "+", ".join(seg_list))  

output :

全模式: 我/ 要/ 有/ 女朋友/ 朋友/ 了
默认模式: 我要/ 有/ 女朋友/ 了
我要, 有, 女朋友, 了
搜索引擎模式: 我要, 有, 朋友, 女朋友, 了, ,, 然后, 我要, 打爆, 室友, 的, 狗头

2) 添加自定义词典

载入词典

print('/'.join(jieba.cut('这个东梨会不会被分开呢。', HMM=False)))
# 添加字典
print(jieba.suggest_freq(('东梨'), True)) # 添加一个词语'东梨'
print('/'.join(jieba.cut('这个东梨会不会被分开呢。', HMM=False)))

output :

这个/东/梨/会/不会/被/分开/呢/。
这个/东梨/会/不会/被/分开/呢/。

调整词典

3) 关键词提取

基于 TF-IDF 算法的关键词抽取

import jieba.analyse

s = "操作系统(Operation System,简称OS)是管理计算机硬件与软件资源的程序,是计算机系统的内核与基石;操作系统本质上是运行在计算机上的软件程序 ;为用户提供一个与系统交互的操作界面 ;操作系统分内核与外壳(我们可以把外壳理解成围绕着内核的应用程序,而内核就是能操作硬件的程序)。"
for x, w in jieba.analyse.extract_tags(s, withWeight=True):
    print('%s %s' % (x, w))

print('-'*40)
print(' TextRank')
print('-'*40)

for x, w in jieba.analyse.textrank(s, withWeight=True):
    print('%s %s' % (x, w))

output :

内核 1.0625279118105262
操作系统 0.7315222629276317
外壳 0.4645002019336842
软件程序 0.36580730663157895
软件资源 0.34756659135263157
程序 0.3333060550794737
操作界面 0.32345367735526315
Operation 0.31459914481315787
System 0.31459914481315787
OS 0.31459914481315787
计算机硬件 0.2800679240526316
应用程序 0.2763021123763158
计算机系统 0.23982068182078944
交互 0.23731251919447366
基石 0.23595272944342105
硬件 0.22168984473789474
本质 0.18271527055526315
用户 0.1795351598005263
计算机 0.1790732744968421
围绕 0.177282393885
----------------------------------------
 TextRank
----------------------------------------
内核 1.0
程序 0.5362199524590612
系统 0.48948949335129555
提供 0.48602227553244165
围绕 0.4446670737747918
运行 0.4225011310851474
管理 0.4151898395341863
基石 0.4131936048253403
计算机系统 0.38302557644090945
硬件 0.36775003601316436
操作 0.36615155530109056
本质 0.3554627436547271
计算机硬件 0.3491604047032015
理解 0.3433887505596043
外壳 0.3419635842574655
应用程序 0.33616306371021853
用户 0.33122514947879544
交互 0.3287196036788538
计算机 0.23122054865622482
简称 0.22777433887730136

4) 词性标注

words = jieba.posseg.cut("我爱北京天安门")
for word, flag in words:
    print('%s %s' % (word, flag))
print('='*40)

output :

我 r
爱 v
北京 ns
天安门 ns

5) 并行分词

6) Tokenize:返回词语在原文的起止位置

print(' 默认模式')
print('-'*40)
result = jieba.tokenize('永和服装饰品有限公司')
for tk in result:
    print("word %s\t\t start: %d \t\t end:%d" % (tk[0],tk[1],tk[2]))

print('-'*40)
print(' 搜索模式')
print('-'*40)

result = jieba.tokenize('永和服装饰品有限公司', mode='search')
for tk in result:
    print("word %s\t\t start: %d \t\t end:%d" % (tk[0],tk[1],tk[2]))

output :

word 永和		 start: 0 		 end:2
word 服装		 start: 2 		 end:4
word 饰品		 start: 4 		 end:6
word 有限公司		 start: 6 		 end:10
----------------------------------------
 搜索模式
----------------------------------------
word 永和		 start: 0 		 end:2
word 服装		 start: 2 		 end:4
word 饰品		 start: 4 		 end:6
word 有限		 start: 6 		 end:8
word 公司		 start: 8 		 end:10
word 有限公司		 start: 6 		 end:10

5、一个完整的分词可运行实例

目录结构

jieba是我们要导入的第三方库,在项目中我直接把它放在了里面。

│  run.py
│
└─jieba
    │  dict.txt
    │  _compat.py
    │  __init__.py
    │  __main__.py
    │
    ├─analyse
    │  │  analyzer.py
    │  │  idf.txt
    │  │  textrank.py
    │  │  tfidf.py
    │  │  __init__.py
    │  │
    │  └─__pycache__
    │          analyzer.cpython-37.pyc
    │          textrank.cpython-37.pyc
    │          tfidf.cpython-37.pyc
    │          __init__.cpython-37.pyc
    │
    ├─finalseg
    │  │  prob_emit.p
    │  │  prob_emit.py
    │  │  prob_start.p
    │  │  prob_start.py
    │  │  prob_trans.p
    │  │  prob_trans.py
    │  │  __init__.py
    │  │
    │  └─__pycache__
    │          prob_emit.cpython-37.pyc
    │          prob_start.cpython-37.pyc
    │          prob_trans.cpython-37.pyc
    │          __init__.cpython-37.pyc
    │
    ├─posseg
    │  │  char_state_tab.p
    │  │  char_state_tab.py
    │  │  prob_emit.p
    │  │  prob_emit.py
    │  │  prob_start.p
    │  │  prob_start.py
    │  │  prob_trans.p
    │  │  prob_trans.py
    │  │  viterbi.py
    │  │  __init__.py
    │  │
    │  └─__pycache__
    │          char_state_tab.cpython-37.pyc
    │          prob_emit.cpython-37.pyc
    │          prob_start.cpython-37.pyc
    │          prob_trans.cpython-37.pyc
    │          viterbi.cpython-37.pyc
    │          __init__.cpython-37.pyc
    │
    └─__pycache__
            _compat.cpython-37.pyc
            __init__.cpython-37.pyc

run.py中编写代码,并且调用jieba库实现分词。

run.py

#encoding=utf-8
from __future__ import unicode_literals
import jieba

if __name__=="__main__":
    ch = input()
    seg_list = jieba.cut(str(ch))
    print(", ".join(seg_list))

在此处输入"我马上就要有女朋友了"。

即可得到输出结果如下。

我, 马上, 就要, 有, 女朋友, 了

6、代码地址

Github : [https://github.com/CasterWx/python-girlfriend-mood](https://github.com/CasterWx/python-girlfriend-mood)