cygwin下用Python+jieba给文本分词并提取高频词

seofangfa shell学习笔记99,8003阅读模式

今晚小折腾了一下在cygwin下用Python和jieba分词(结巴分词)组件给文本分词并提取高频词,过程记录如下:

目的

分析某行业中,用户最关心的一些需求,再根据这一需求去调整站内TDK,以及一些频道、内容的规划

过程

1、下载安装cygwin:http://www.cygwin.com/

2、cygwin安装时别忘记安装curl,wget,iconv,lynx,dos2unix,Python等常用工具,特别是Python,这次主要就是用它了。

3、去下载jieba中文分词组件:

        首选:https://github.com/fxsjy/jieba/archive/master.zip

        备用:https://pypi.python.org/pypi/jieba/

4、安装jieba中文分词组件:

        全自动安装: easy_install jieba 或者 pip install jieba / pip3 install jieba

        半自动安装:先下载 https://pypi.python.org/pypi/jieba/ ,解压后运行 python setup.py install

        手动安装:将 jieba 目录放置于当前目录或者 site-packages 目录

        通过 import jieba 来引用

5、复制以下代码,另存为“jiebacmd.py”

6、新建一个文件夹,将你需要分词的文本和jiebacmd.py拷进去,记住文本需要另存为utf-8编码,然后在cygwin里用cd命令把工作目录切换进新建的文件夹,再输入以下命令:cat abc.txt|python jiebacmd.py|sort|uniq -c|sort -nr|head -100

#encoding=utf-8
#usage example (find top 100 words in abc.txt):
#用途:找出abc.txt文件中出现频率最高的前100个词
#复制以下命令到cygwin里运行,abc.txt是你文本的文件名,head -100可以自己改成想要提取的前多少个词
#cat abc.txt | python jiebacmd.py | sort | uniq -c | sort -nr -k1 | head -100
#以上都是注释,不影响程序运行
from __future__ import unicode_literals
import sys
sys.path.append("../")
reload(sys)
sys.setdefaultencoding( "utf-8" )
import jieba
default_encoding='utf-8'
if len(sys.argv)>1:
    default_encoding = sys.argv[1]
while True:
    line = sys.stdin.readline()
    if line=="":
        break
    line = line.strip()
    for word in jieba.cut(line):
        print(word)

结果

效果如下图,完成16万个关键词的分词、去重、按关键词的出现次数排序、取出现次数最多的前10个词,只花了18秒。

cygwin下用Python+jieba给文本分词并提取高频词-图片1

再来试个140万的词库,用时不到2分半:

cygwin下用Python+jieba给文本分词并提取高频词-图片2

cygwin下用Python+jieba给文本分词并提取高频词-图片3

补充

另有一示例脚本,也是提取高权重词的,貌似比上面的脚本更准确,代码如下:

import sys
sys.path.append('../')

import jieba
import jieba.analyse
from optparse import OptionParser

USAGE = "usage:    python extract_tags.py  -k [top k]"

parser = OptionParser(USAGE)
parser.add_option("-k", dest="topK")
opt, args = parser.parse_args()


if len(args) < 1:
    print(USAGE)
    sys.exit(1)

file_name = args[0]

if opt.topK is None:
    topK = 10
else:
    topK = int(opt.topK)

content = open(file_name, 'rb').read()

tags = jieba.analyse.extract_tags(content, topK=topK)

print("\n".join(tags))

复制代码另存为extract_tags.py,使用方式为在cygwin下面输入python extract_tags.py yttlj.txt -k 20,yttlj.txt是《倚天屠龙记》这部小说,统计里面出现次数最多的词,取前20名,结果如下:

cygwin下用Python+jieba给文本分词并提取高频词-图片4

如果用一开始给的那个代码,将得到如下结果,可以看到,标点符号和停止词(stop words)都分出来,所以感觉还是上面那个结果更靠谱一些。

cygwin下用Python+jieba给文本分词并提取高频词-图片5

文章末尾固定信息

weinxin
我的微信
我的微信
微信扫一扫
 
seofangfa
  • 本文由 seofangfa 发表于 2015年5月30日23:05:55
  • 转载请务必保留本文链接:https://wp.fangfa.me/shell/cygwin-python-jieba.html
评论  9  访客  9
    • 大葱
      大葱 1

      python安装怎么安装,那么多选择项?

        • 方法
          方法

          @ 大葱 呃。。这个一言难尽,你先找找教程,回头我录一套视频

        • 大葱
          大葱 1

          谢谢啊,方法老师。消化吸收实践下焦大seo内容,到时候参加您培训……shell python 可真难啊……

            • 方法
              方法

              @ 大葱 呃。。这么晚还在留言,辛苦了,早点睡吧!

            • Blemrr
              Blemrr 7

              最后结果输出是什么格式

              • 长春SEO孟斌_创业之家
                长春SEO孟斌_创业之家 1

                不管什么难题 不管想学什么 找方法博客 没错的

                • yiyi
                  yiyi 7

                  尝试半天终于成功了。
                  友情说明:
                  一、第二个分词脚本前面记得插入
                  reload(sys)
                  sys.setdefaultencoding( “utf-8” )
                  否则不能用cygwin对结果进行导出等操作
                  二、两个脚本使用的命令有点不同。脚本1需要从标准输出读数据,也就是要 cat file | python 脚本1…,脚本二可以直接 python 脚本2 file 运行。

                  • _Gins
                    _Gins 1

                    另外有点遗憾就是:
                    脚本1看得到具体词频但是分词不够只能,而脚本2分词很智能,但是输出的数据是已经按词频排了序的,看不到具体词频。
                    所以现在我是两种结合使用,先分别用脚本1、脚本2提取出分词结果,然后再用脚本2的结果匹配脚本1的结果,这样就能实现智能分词,同时看得到具体词频。

                    • _Gins
                      _Gins 1

                      如果我懂python的话,可以对脚本适当改造来达到最终目的,然而我不懂。
                      方法大大有解决办法的话还请分享一下

                    匿名

                    发表评论

                    匿名网友
                    :?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:
                    确定

                    拖动滑块以完成验证