三十四、基于python的高效中文文本切词

来源:互联网 发布:excel统计不同数据个数 编辑:程序博客网 时间:2024/06/05 01:51


对中文文本做自然语言处理一定设计到切词的操作,流行的切词工具有很多,本文介绍基于python的结巴中文分词,它是基于文本分析的,不是基于词库的,因此更精确

请尊重原创,转载请注明来源网站www.shareditor.com以及原始链接地址

安装jieba分词工具

在https://pypi.python.org/pypi/jieba/下载jieba-0.38.zip

解压后执行:

python setup.py install

 

试验切词效果

 

创建testjieba.py文件内容如下:

# coding:utf-8#!/usr/local/bin/pythonimport jiebaseg_list = jieba.cut("www.shareditor.com全栈工程师教程、讲述程序猿自己的故事,shareditor涉及机器学习、深度学习、大数据相关知识的系统学习方法及热文推荐")for str in seg_list:    print str

 

输出分词结果如下:

www.shareditor.com全栈工程师教程、讲述程序猿自己的故事,shareditor涉及机器学习、深度学习、大数据相关知识的系统学习方法及热文推荐

 

jieba.cut返回的是python的generator结构,遍历后得到分词结果中包括:中文词汇(单字、多字)、英文单词、标点符号

请尊重原创,转载请注明来源网站www.shareditor.com以及原始链接地址

对批量文档分词

 

我们之前抓取的微信公众号文章都保存到了mysql的page表里,并且提取纯文本内容保存在了content列中,所以我们从mysql加载content并做切词,之后再利用scikit-learn计算tf-idf值

创建cut_and_cal_tfidf.py,内容如下:

# coding:utf-8from sklearn.feature_extraction.text import CountVectorizerfrom sklearn.feature_extraction.text import TfidfTransformerimport jiebaimport MySQLdbconn = MySQLdb.connect(host="127.0.0.1",user="myuser",passwd="mypasswd",db="mydb",charset="utf8")cursor = conn.cursor()sql = "select content from page"cursor.execute(sql)corpus=[]for content in cursor.fetchall():    seg_list = jieba.cut(content[0])    line = ""    for str in seg_list:        line = line + " " + str    corpus.append(line)conn.commit()conn.close()vectorizer=CountVectorizer()csr_mat = vectorizer.fit_transform(corpus)transformer=TfidfTransformer()tfidf=transformer.fit_transform(csr_mat)word=vectorizer.get_feature_names()print tfidf.toarray()

执行后输出结果如下:

Building prefix dict from the default dictionary ...Loading model from cache /var/folders/tq/c0kp5y857x138x5vf8bzxfc80000gp/T/jieba.cacheLoading model cost 0.447 seconds.Prefix dict has been built succesfully.[[ 0.          0.00567306  0.         ...,  0.          0.          0.        ] [ 0.          0.          0.         ...,  0.          0.          0.        ] [ 0.          0.          0.         ...,  0.          0.          0.        ] ..., [ 0.          0.          0.         ...,  0.          0.          0.        ] [ 0.          0.          0.         ...,  0.          0.          0.        ] [ 0.          0.          0.         ...,  0.          0.          0.        ]]

讲解一下

先说下代码逻辑:首先加载数据库的content数据,如果对于page数据库表不熟请回过头来看《教你成为全栈工程师(Full Stack Developer) 三十二-scrapy爬虫抓取网页写入mysql数据库》,然后用jieba.cut对每一条content做分词,把分词按空格分隔存到二维数组corpus中,最后用scikit-learn计算tfidf,如果对这部分不熟请回过头来看《教你成为全栈工程师(Full Stack Developer) 三十三-利用scikit-learn计算tf-idf做文本词频分析》

 

再说下输出的内容,前面几行文字是jieba分词器自动打印的加载词典的信息,下面是整个tf-idf矩阵,因为维度太高,scikit-learn库自动帮我们用...做了省略

0 0
原创粉丝点击