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

之前有个小伙伴做作家文风分析,大概就是将作家的文章做处理,然后分析作家的写作风格和一些细节上的习惯,显然首先要做的就是将所有文章都分成一个个词然后进行统计,手动分词的话显然是个很复杂的工程,想起来之前看过搜索引擎分词相关的文章,所以就去找了下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。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 常用概念: 自然语言处理(NLP) 数据挖掘 推荐算法 用户画像 知识图谱 信息检索 文本分类 常用技术: 词级别...
    御风之星阅读 9,290评论 1 25
  • 注:参考文档 一、在线词云图工具# (1)、使用### 在正式使用jieba分词之前,首先尝试用在线分词工具来将自...
    DearIreneLi阅读 6,169评论 1 8
  • 关键词: 中文分词;分词;自然语言处理;中文语料 最近要做中文自然语言处理相关任务,牵涉到使用中文分词工具和相关算...
    generalz阅读 7,457评论 0 15
  • 转载请注明:终小南 » 中文分词算法总结 什么是中文分词众所周知,英文是以 词为单位的,词和词之间是靠空格隔开,而...
    kirai阅读 9,916评论 3 24
  • 宗功祖泽,木本水源。杨氏世德,流长源远。 系出弘农,绍始轩辕。皇祖世胄,姬姓绵延。 杨侯得姓,武王嫡传。汉儒震公,...
    林应心易阅读 729评论 0 0