https://github.com/fxsjy/jieba 

 

Python 2.x

    • 全自动安装:easy_install jieba 或者 pip install jieba
    • 半自动安装:先下载 http://pypi.python.org/pypi/jieba/ ,解压后运行 python setup.py install
    • 手动安装:将 jieba 目录放置于当前目录或者 site-packages 目录
    • 通过 import jieba 来引用

    • 算法

      • 基于前缀词典实现高效的词图扫描,生成句子中汉字所有可能成词情况所构成的有向无环图 (DAG)
      • 采用了动态规划查找最大概率路径, 找出基于词频的最大切分组合
      • 对于未登录词,采用了基于汉字成词能力的 HMM 模型,使用了 Viterbi 算法
        • 主要功能

          1) :分词

          • jieba.cut 方法接受三个输入参数: 需要分词的字符串;cut_all 参数用来控制是否采用全模式;HMM 参数用来控制是否使用 HMM 模型
          • jieba.cut_for_search 方法接受两个参数:需要分词的字符串;是否使用 HMM 模型。该方法适合用于搜索引擎构建倒排索引的分词,粒度比较细
          • 注意:待分词的字符串可以是 GBK 字符串、UTF-8 字符串或者 unicode
          • jieba.cut 以及 jieba.cut_for_search 返回的结构都是一个可迭代的 generator,可以使用 for 循环来获得分词后得到的每一个词语(unicode),也可以用 list(jieba.cut(...)) 转化为 list

          代码示例( 分词 )

          #encoding=utf-8
          import jieba
          
          seg_list = jieba.cut("我来到北京清华大学", cut_all=True)
          print "Full Mode:", "/ ".join(seg_list)  # 全模式
          
          seg_list = jieba.cut("我来到北京清华大学", cut_all=False)
          print "Default Mode:", "/ ".join(seg_list)  # 精确模式
          
          seg_list = jieba.cut("他来到了网易杭研大厦")  # 默认是精确模式
          print ", ".join(seg_list)
          
          seg_list = jieba.cut_for_search("小明硕士毕业于中国科学院计算所,后在日本京都大学深造")  # 搜索引擎模式
          print ", ".join(seg_list)

          输出:

          【全模式】: 我/ 来到/ 北京/ 清华/ 清华大学/ 华大/ 大学
          
          【精确模式】: 我/ 来到/ 北京/ 清华大学
          
          【新词识别】:他, 来到, 了, 网易, 杭研, 大厦    (此处,“杭研”并没有在词典中,但是也被Viterbi算法识别出来了)
          
          【搜索引擎模式】: 小明, 硕士, 毕业, 于, 中国, 科学, 学院, 科学院, 中国科学院, 计算, 计算所, 后, 在, 日本, 京都, 大学, 日本京都大学, 深造
          

          2) :添加自定义词典

          • 开发者可以指定自己自定义的词典,以便包含 jieba 词库里没有的词。虽然 jieba 有新词识别能力,但是自行添加新词可以保证更高的正确率
          • 用法: jieba.load_userdict(file_name) # file_name 为自定义词典的路径
          • 词典格式和dict.txt一样,一个词占一行;每一行分三部分,一部分为词语,另一部分为词频,最后为词性(可省略),用空格隔开
          • 范例:

          • "通过用户自定义词典来增强歧义纠错能力" --- https://github.com/fxsjy/jieba/issues/14

          3) :关键词提取

          • jieba.analyse.extract_tags(sentence,topK,withWeight) #需要先 import jieba.analyse
          • sentence 为待提取的文本
          • topK 为返回几个 TF/IDF 权重最大的关键词,默认值为 20
          • withWeight 为是否一并返回关键词权重值,默认值为 False

          代码示例 (关键词提取)

          https://github.com/fxsjy/jieba/blob/master/test/extract_tags.py

          关键词提取所使用逆向文件频率(IDF)文本语料库可以切换成自定义语料库的路径

          关键词提取所使用停止词(Stop Words)文本语料库可以切换成自定义语料库的路径

          关键词一并返回关键词权重值示例

          基于TextRank算法的关键词抽取实现

          算法论文: TextRank: Bringing Order into Texts

          基本思想:
          1. 将待抽取关键词的文本进行分词
          2. 以固定窗口大小(我选的5,可适当调整),词之间的共现关系,构建图
          3. 计算图中节点的PageRank,注意是无向带权图
          基本使用:

          jieba.analyse.textrank(raw_text)

          示例结果:

          来自__main__的示例结果:

          吉林 1.0
          欧亚 0.864834432786
          置业 0.553465925497
          实现 0.520660869531
          收入 0.379699688954
          增资 0.355086023683
          子公司 0.349758490263
          全资 0.308537396283
          城市 0.306103738053
          商业 0.304837414946
          

          4) : 词性标注

          • 标注句子分词后每个词的词性,采用和 ictclas 兼容的标记法
          • 用法示例
          >>> import jieba.posseg as pseg
          >>> words = pseg.cut("我爱北京天安门")
          >>> for w in words:
          ...    print w.word, w.flag
          ...
          我 r
          爱 v
          北京 ns
          天安门 ns
          

          5) : 并行分词

          • 原理:将目标文本按行分隔后,把各行文本分配到多个 python 进程并行分词,然后归并结果,从而获得分词速度的可观提升
          • 基于 python 自带的 multiprocessing 模块,目前暂不支持 windows
          • 用法:

            • jieba.enable_parallel(4) # 开启并行分词模式,参数为并行进程数
            • jieba.disable_parallel() # 关闭并行分词模式
          • 例子:https://github.com/fxsjy/jieba/blob/master/test/parallel/test_file.py

          • 实验结果:在 4 核 3.4GHz Linux 机器上,对金庸全集进行精确分词,获得了 1MB/s 的速度,是单进程版的 3.3 倍。

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

          • 注意,输入参数只接受 unicode
          • 默认模式
          result = jieba.tokenize(u'永和服装饰品有限公司')
          for tk in result:
              print "word %s\t\t start: %d \t\t end:%d" % (tk[0],tk[1],tk[2])
          word 永和                start: 0                end:2
          word 服装                start: 2                end:4
          word 饰品                start: 4                end:6
          word 有限公司            start: 6                end:10
          
          
          • 搜索模式
          result = jieba.tokenize(u'永和服装饰品有限公司',mode='search')
          for tk in result:
              print "word %s\t\t start: %d \t\t end:%d" % (tk[0],tk[1],tk[2])
          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
          

          7) : ChineseAnalyzer for Whoosh 搜索引擎

          8) : 命令行分词

          使用示例:cat news.txt | python -m jieba > cut_result.txt

          命令行选项(翻译):

          使用: python -m jieba [options] filename
          
          结巴命令行界面。
          
          固定参数:
            filename              输入文件
          
          可选参数:
            -h, --help            显示此帮助信息并退出
            -d [DELIM], --delimiter [DELIM]
                                  使用 DELIM 分隔词语,而不是用默认的' / '。
                                  若不指定 DELIM,则使用一个空格分隔。
            -D DICT, --dict DICT  使用 DICT 代替默认词典
            -u USER_DICT, --user-dict USER_DICT
                                  使用 USER_DICT 作为附加词典,与默认词典或自定义词典配合使用
            -a, --cut-all         全模式分词
            -n, --no-hmm          不使用隐含马尔可夫模型
            -q, --quiet           不输出载入信息到 STDERR
            -V, --version         显示版本信息并退出
          
          如果没有指定文件名,则使用标准输入。
          

          --help 选项输出:

          $> python -m jieba --help
          usage: python -m jieba [options] filename
          
          Jieba command line interface.
          
          positional arguments:
            filename              input file
          
          optional arguments:
            -h, --help            show this help message and exit
            -d [DELIM], --delimiter [DELIM]
                                  use DELIM instead of ' / ' for word delimiter; or a
                                  space if it is used without DELIM
            -D DICT, --dict DICT  use DICT as dictionary
            -u USER_DICT, --user-dict USER_DICT
                                  use USER_DICT together with the default dictionary or
                                  DICT (if specified)
            -a, --cut-all         full pattern cutting
            -n, --no-hmm          don't use the Hidden Markov Model
            -q, --quiet           don't print loading messages to stderr
            -V, --version         show program's version number and exit
          
          If no filename specified, use STDIN instead.
          

          模块初始化机制的改变:lazy load (从0.28版本开始)

          jieba 采用延迟加载,"import jieba" 不会立即触发词典的加载,一旦有必要才开始加载词典构建前缀字典。如果你想手工初始 jieba,也可以手动初始化。

          import jieba
          jieba.initialize()  # 手动初始化(可选)
          

          在 0.28 之前的版本是不能指定主词典的路径的,有了延迟加载机制后,你可以改变主词典的路径:

          jieba.set_dictionary('data/dict.txt.big')
          

          例子: https://github.com/fxsjy/jieba/blob/master/test/test_change_dictpath.py

          其他词典

          1. 占用内存较小的词典文件 https://github.com/fxsjy/jieba/raw/master/extra_dict/dict.txt.small

          2. 支持繁体分词更好的词典文件 https://github.com/fxsjy/jieba/raw/master/extra_dict/dict.txt.big

          下载你所需要的词典,然后覆盖 jieba/dict.txt 即可;或者用jieba.set_dictionary('data/dict.txt.big')

          其他语言实现

          结巴分词 Java 版本

          作者:piaolingxue 地址:https://github.com/huaban/jieba-analysis

          结巴分词 C++ 版本

          作者:Aszxqw 地址:https://github.com/aszxqw/cppjieba

          结巴分词 Node.js 版本

          作者:Aszxqw 地址:https://github.com/aszxqw/nodejieba

          结巴分词 Erlang 版本

          作者:falood 地址:https://github.com/falood/exjieba

          结巴分词 R 版本

          作者:qinwf 地址:https://github.com/qinwf/jiebaR

          系统集成

          1. Solr: https://github.com/sing1ee/jieba-solr

          分词速度

          • 1.5 MB / Second in Full Mode
          • 400 KB / Second in Default Mode
          • 测试环境: Intel(R) Core(TM) i7-2600 CPU @ 3.4GHz;《围城》.txt

          常见问题

Posted on 2014-12-02 10:15  旅途  阅读(703)  评论(0)    收藏  举报