Python

好用的Python中文分词组件——jieba分词

2018-01-03  本文已影响78人  Veniendeavor

之前有个小伙伴做作家文风分析,大概就是将作家的文章做处理,然后分析作家的写作风格和一些细节上的习惯,显然首先要做的就是将所有文章都分成一个个词然后进行统计,手动分词的话显然是个很复杂的工程,想起来之前看过搜索引擎分词相关的文章,所以就去找了下python分词相关的东西,果然找到了一个非常好用的库——jieba。

照例先上官方文档,里面有详细的安装方法和简单的介绍和演示,下面就以莫言《红高粱》为例看一下jiaba分词的效果。思路就是将文章进行分解,将每一个词都存到数据库中然后进行分析。

# -*- coding:UTF-8 -*-
import pymysql
#导入jieba词性标注
from jieba import  posseg 


db_config ={
    'host': '127.0.0.1',
    'port': 3306,
    'user': 'root',
    'password': 'root',
    'db': 'compword',
    'charset': 'utf8'
}
connection = pymysql.connect(**db_config)

with open(r'G:\testData\red.txt', 'r') as file:
    lines = file.readlines()
    for line in lines:
        words = posseg.cut(line.strip())
        with connection.cursor() as cursor:
            sql = 'insert into words(word, flag) values(%s, %s)'
            for word in words:
                cursor.execute(sql, (word.word, word.flag))
        connection.commit()

connection.close()

上面的代码就是将存在G盘的文章一行一行地读取并去掉空格进行分词并以词性标注,然后存入数据库,主要语句就是

words = posseg.cut(line.strip())

然后再用上次介绍到的plotly做图形,代码及效果图如下:

import pandas
import plotly as py
import plotly.graph_objs as go
import pymysql

py.tools.set_credentials_file(username='venidi', api_key='***********')

db_config ={
    'host': '127.0.0.1',
    'port': 3306,
    'user': 'root',
    'password': 'root',
    'db': 'compword',
    'charset': 'utf8'
}
connection = pymysql.connect(**db_config)

with connection.cursor() as cursor:
    sql = 'select flag,count(*) from words GROUP BY flag'
    cursor.execute(sql)
    rows = cursor.fetchall()

# 使用Pandas中的DataFrame处理便于plotly的使用,转换成DataFarame的格式,类似二维表
df = pandas.DataFrame([[ij for ij in i] for i in rows])
df.rename(columns={0: 'flag', 1: 'count'}, inplace=True)

trace1 = go.Bar(
    x=df['flag'],
    y=df['count']
)

data = [trace1]
# 离线形式存储形成的图表
py.offline.plot(data, filename='g:/test2.html')

结果如下,各词性使用数量


各词性词的使用量.png

连词使用量

import pandas
import plotly as py
import plotly.graph_objs as go
import pymysql

py.tools.set_credentials_file(username='venidi', api_key='**********')

db_config ={
    'host': '127.0.0.1',
    'port': 3306,
    'user': 'root',
    'password': 'root',
    'db': 'compword',
    'charset': 'utf8'
}
connection = pymysql.connect(**db_config)

with connection.cursor() as cursor:
    sql = 'select word,count(*) from words where flag = "c" GROUP BY word '
    cursor.execute(sql)
    rows = cursor.fetchall()

# 使用Pandas中的DataFrame处理便于plotly的使用,转换成DataFarame的格式,类似二维表
df = pandas.DataFrame([[ij for ij in i] for i in rows])
df.rename(columns={0: 'word', 1: 'count'}, inplace=True)

trace1 = go.Scatter(
    x=df['word'],
    y=df['count'],
    mode = 'markers'
)

data = [trace1]
# 离线形式存储形成的图表
py.offline.plot(data, filename='g:/test.html')

结果:


连词使用量.png

好了,大概就是这样了,另外关于中文信息处理分析啥的我不太懂,就是听小伙伴转述,有不对的地方还请见谅,文章中有错误的话欢迎大家指正O(∩_∩)O。

上一篇下一篇

猜你喜欢

热点阅读