精华内容
下载资源
问答
  • python3怎么使用结巴分词下面这个程序是对一个文里的内容进行分词序:test.py[python] view plain copy#!/usr/bin/python#-*-encoding:utf-8-*-importjieba#导入jiebadefsplitSentence(inp...

    python3怎么使用结巴分词

    下面这个程序是对一个文里的内容进行分词序:test.py

    [python] view plain copy

    #!/usr/bin/python

    #-*- encoding:utf-8 -*-

    import jieba                                                    #导入jieba

    def splitSentence(inputFile, outputFile):

    fin = open(inputFile, 'r')                                  #以读的方式打开文件

    fout = open(outputFile, 'w')                                #以写得方式打开文件

    for eachLine in fin:

    line = eachLine.strip().decode('utf-8', 'ignore')       #去除每行首尾可能出现的空格,并转为Unicode进行处理

    wordList = list(jieba.cut(line))                        #用结巴分词,对每行内容进行分词

    outStr = ''

    for word in wordList:

    outStr  = word

    outStr  = '/ '

    fout.write(outStr.strip().encode('utf-8')   '\n')       #将分词好的结果写入到输出文件

    fin.close()

    fout.close()

    splitSentence('myInput.txt', 'myOutput.txt')

    写完程序之后,在Linux重点输入:python test.py即可运行程序进行分词。

    输入的文件内容如下所示:

    经过结巴分词后,输出结果如下所示:

    注意:第11行的 jieba.cut()返回的结构是一个可迭代的generator,可以用list(jieba.cut(...))转化为list

    版权声明:本站所有文章皆为原创,欢迎转载或转发,请保留网站地址和作者信息。

    展开全文
  • python 结巴分词学习

    万次阅读 2019-01-17 08:24:35
    结巴分词(自然语言处理之中文分词器) jieba分词算法使用了基于前缀词典实现高效的词图扫描,生成句子中汉字所有可能生成词情况所构成的有向无环图(DAG), 再采用了动态规划查找最大概率路径,找出基于词频的最大...

    https://www.toutiao.com/a6643201326710784520/

     

    2019-01-06 10:14:00

    结巴分词(自然语言处理之中文分词器)

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

    python 结巴分词学习

     

    jieba分词支持三种分词模式:

    1. 精确模式, 试图将句子最精确地切开,适合文本分析:

    2. 全模式,把句子中所有的可以成词的词语都扫描出来,速度非常快,但是不能解决歧义;

    3. 搜索引擎模式,在精确模式的基础上,对长词再词切分,提高召回率,适合用于搜索引擎分词。

    一 结巴分词的安装

    pip3 install jieba

    二 结巴分词的主要功能

    python 结巴分词学习

     

    1. jieba.cut:该方法接受三个输入参数:
      参数1:需要分词的字符串; 
      参数2:cut_all参数用来控制是否采用全模式,默认为精确模式;
     cut_all=True 全模式
     cut_all=false 精确(默认)模式
      参数3:HMM参数用来控制是否适用HMM模型 

    python 结巴分词学习

     

    2. jieba.cut_for_search:该方法接受两个参数:
      参数1:需要分词的字符串;
      参数2:是否使用HMM模型,
    该方法适用于搜索引擎构建倒排索引的分词,粒度比较细。
    3. jieba.cut 以及jieba.cut_for_search
    返回的结构都是可以得到的generator(生成器)
    4. jieb.lcut 以及 jieba.lcut_for_search 
    直接返回list
    5.jieba.Tokenizer(dictionary=DEFUALT_DICT)
    新建自定义分词器,
    可用于同时使用不同字典,
    jieba.dt为默认分词器,所有全局分词相关函数都是该分词器的映射。

    三 结巴分词的三种模式

    import jieba
    text='赵丽颖主演的正午阳光剧,知否知否应是绿肥红瘦'

    1 全模式 cut_all=True

    python 结巴分词学习

     

    seq_list=jieba.cut(text,cut_all=True)
    print(seq_list) #<generator object Tokenizer.cut at 0x0000026EB6F0CD58>
    print(list(seq_list))
    '''
    ['赵', '丽', '颖', '主演', '的', '正午', '阳光', '剧', '', '', '知', '否', '知', '否', '应', '是', '绿肥', '绿肥红瘦']
    '''

    python 结巴分词学习

     

    2 精确模式 (默认模式) cut_all =False

    python 结巴分词学习

     

    # 02精确模式
    seq_list=jieba.cut(text,cut_all=False)
    print(list(seq_list))
    '''
    ['赵丽颖', '主演', '的', '正午', '阳光', '剧', ',', '知否', '知否', '应', '是', '绿肥红瘦']
    '''

    python 结巴分词学习

     

    3 搜索引擎模式 cut_for_search

    seq_list=jieba.cut_for_search(text,)
    print(list(seq_list))
    '''
    ['赵丽颖', '主演', '的', '正午', '阳光', '剧', ',', '知否', '知否', '应', '是', '绿肥', '绿肥红瘦']
    '''

    四 自定义分词器(jieba.Tokenizer)

    1 创建词典内容的格式

    一个词语占一行(分三部分)
    格式: 词语 词频 词性
    如:张三 5
     李四 10 eng

    python 结巴分词学习

     

    2 自定义词典的导入(load_userdict)

    python 结巴分词学习

     

    text='赵丽颖主演的正午阳光剧,知否知否应是绿肥红瘦'
    # 自定义词典
    jieba.load_userdict('自定义词典.txt')
    sep_list=jieba.lcut(text)
    print('userdict>>>',sep_list)

    python 结巴分词学习

     

    userdict>>> ['赵丽颖', '主演', '的', '正午', '阳光剧', ',', '知否', '知否', '应是', '绿肥红瘦']

    五 利用jieba 进行关键词的抽取

    1 基于TF-IDF算法的关键词抽取

    详解自然语言处理之TF-IDF模型和python实现

    2 python 实现关键提取

    python 结巴分词学习

     

    jieba.analyse.extract_tags(text,topK=20,withWeight=False,allowPOS=())
    '''
     text:为待提取的文本;
     topK:返回几个TF/IDF权重最大的关键字,默认值为20;
     withWeight:是否一并返回关键词权重值,默认False;
    '''
    jieba.analyse.TFIDF(idf_path=None) #新建tf-idf实例,idf_path为IDF实例

    python 结巴分词学习

     

    五 使用结巴的词云实例

    1 数据准备

    文档:

    python 结巴分词学习

     

    死了都要爱.txt

    python 结巴分词学习

     

    dream ispossible.txt

    图片:(红心.jpg)

    python 结巴分词学习

     

    python 结巴分词学习

     

    # 数据获取
    with open('死了都要爱.txt','r',encoding='utf8')as f:
     text=f.read()
    # with open('dream is possible.txt','r',encoding='utf8')as f:
    # text=f.read()
    #图片获取
    mask=np.array(Image.open('红心.jpg'))

    python 结巴分词学习

     

    2 数据清洗

    屏蔽不需要的数据和分词

    # 数据清洗
    # 屏蔽死了都要爱
    STOPWORDS.add('死了都要爱')
    sep_list=jieba.lcut(text,cut_all=False)
    sep_list=" ".join(sep_list) #转为字符串

    自定义画布

    python 结巴分词学习

     

    wc=WordCloud(
     font_path=font,#使用的字体库
     margin=2,
     mask=mask,#背景图片
     background_color='white', #背景颜色
     max_font_size=25,
     max_words=200,
     stopwords=STOPWORDS, #屏蔽的内容
    )

    python 结巴分词学习

     

    生成词语,保存图片

    wc.generate(text) #制作词云
    wc.to_file('新增图片.jpg') #保存到当地文件

    3 数据展示

    plt.imshow(wc,interpolation='bilinear')
    plt.axis('off')
    plt.show()

    完整代码和效果展示

    python 结巴分词学习

     

    完整代码

    图片一(未分词):

    python 结巴分词学习

     

    图片二(分词效果)

    python 结巴分词学习

     

    python 结巴分词学习

    展开全文
  • 结巴分词Python代码

    2014-08-26 20:24:16
    结巴分词,很不错的分词工具,python写的,亲身试用,不管英文还是中文分得很准!
  • 本文实例讲述了Python中文分词工具之结巴分词用法。分享给大家供大家参考,具体如下: 结巴分词工具的安装及基本用法,前面的文章《Python结巴中文分词工具使用过程中遇到的问题及解决方法》中已经有所描述。这里要...
  • 主要介绍了Python 结巴分词实现关键词抽取分析,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • python 结巴分词(jieba)详解

    千次阅读 2018-09-03 17:22:00
    结巴”中文分词:做最好的 Python 中文分词组件 "Jieba" (Chinese for "to stutter") Chinese text segmentation: built to be the best Python Chinese word segmentati...

    【转自:https://www.cnblogs.com/jackchen-Net/p/8207009.html

    “结巴”中文分词:做最好的 Python 中文分词组件

    "Jieba" (Chinese for "to stutter") Chinese text segmentation: built to be the best Python Chinese word segmentation module.

    • Scroll down for English documentation.

    特点

    • 支持三种分词模式:

      • 精确模式,试图将句子最精确地切开,适合文本分析;
      • 全模式,把句子中所有的可以成词的词语都扫描出来, 速度非常快,但是不能解决歧义;
      • 搜索引擎模式,在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词。
    • 支持繁体分词

    • 支持自定义词典
    • MIT 授权协议

     

    安装说明

    代码对 Python 2/3 均兼容

    • 全自动安装:easy_install jieba 或者 pip install jieba / pip3 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 模型。该方法适合用于搜索引擎构建倒排索引的分词,粒度比较细
    • 待分词的字符串可以是 unicode 或 UTF-8 字符串、GBK 字符串。注意:不建议直接输入 GBK 字符串,可能无法预料地错误解码成 UTF-8
    • jieba.cut 以及 jieba.cut_for_search 返回的结构都是一个可迭代的 generator,可以使用 for 循环来获得分词后得到的每一个词语(unicode),或者用
    • jieba.lcut 以及 jieba.lcut_for_search 直接返回 list
    • jieba.Tokenizer(dictionary=DEFAULT_DICT) 新建自定义分词器,可用于同时使用不同词典。jieba.dt 为默认分词器,所有全局分词相关函数都是该分词器的映射。

    代码示例

    # 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 一样,一个词占一行;每一行分三部分:词语、词频(可省略)、词性(可省略),用空格隔开,顺序不可颠倒。file_name 若为路径或二进制方式打开的文件,则文件必须为 UTF-8 编码。
    • 词频省略时使用自动计算的能保证分出该词的词频。

    例如:

    创新办 3 i
    云计算 5
    凱特琳 nz
    台中
    

    回到导航

    调整词典

    • 使用 add_word(word, freq=None, tag=None) 和 del_word(word) 可在程序中动态修改词典。
    • 使用 suggest_freq(segment, tune=True) 可调节单个词语的词频,使其能(或不能)被分出来。

    • 注意:自动计算的词频在使用 HMM 新词发现功能时可能无效。

    代码示例:

    >>> print('/'.join(jieba.cut('如果放到post中将出错。', HMM=False)))
    如果/放到/post/中将/出错/。
    >>> jieba.suggest_freq(('中', '将'), True)
    494
    >>> print('/'.join(jieba.cut('如果放到post中将出错。', HMM=False)))
    如果/放到/post/中/将/出错/。
    >>> print('/'.join(jieba.cut('「台中」正确应该不会被切开', HMM=False)))
    「/台/中/」/正确/应该/不会/被/切开
    >>> jieba.suggest_freq('台中', True)
    69
    >>> print('/'.join(jieba.cut('「台中」正确应该不会被切开', HMM=False)))
    「/台中/」/正确/应该/不会/被/切开

    3. 关键词提取

    回到导航

    基于 TF-IDF 算法的关键词抽取

    import jieba.analyse

    • jieba.analyse.extract_tags(sentence, topK=20, withWeight=False, allowPOS=())
      • sentence 为待提取的文本
      • topK 为返回几个 TF/IDF 权重最大的关键词,默认值为 20
      • withWeight 为是否一并返回关键词权重值,默认值为 False
      • allowPOS 仅包括指定词性的词,默认值为空,即不筛选
    • jieba.analyse.TFIDF(idf_path=None) 新建 TFIDF 实例,idf_path 为 IDF 频率文件

    代码示例 (关键词提取)

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

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

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

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

    回到导航

    基于 TextRank 算法的关键词抽取

    • jieba.analyse.textrank(sentence, topK=20, withWeight=False, allowPOS=('ns', 'n', 'vn', 'v')) 直接使用,接口相同,注意默认过滤词性。
    • jieba.analyse.TextRank() 新建自定义 TextRank 实例

    算法论文: TextRank: Bringing Order into Texts

    基本思想:

    1. 将待抽取关键词的文本进行分词
    2. 以固定窗口大小(默认为5,通过span属性调整),词之间的共现关系,构建图
    3. 计算图中节点的PageRank,注意是无向带权图

    使用示例:

    见 test/demo.py

    4. 词性标注

    • jieba.posseg.POSTokenizer(tokenizer=None) 新建自定义分词器,tokenizer 参数可指定内部使用的 jieba.Tokenizer 分词器。jieba.posseg.dt 为默认词性标注分词器。
    • 标注句子分词后每个词的词性,采用和 ictclas 兼容的标记法。
    • 用法示例
    >>> import jieba.posseg as pseg
    >>> words = pseg.cut("我爱北京天安门")
    >>> for word, flag in words:
    ...    print('%s %s' % (word, 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 倍。

    • 注意:并行分词仅支持默认分词器 jieba.dt 和 jieba.posseg.dt

    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. 命令行分词

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

    命令行选项(翻译):

    使用: python -m jieba [options] filename
    
    结巴命令行界面。
    
    固定参数:
      filename              输入文件
    
    可选参数:
      -h, --help            显示此帮助信息并退出
      -d [DELIM], --delimiter [DELIM]
                            使用 DELIM 分隔词语,而不是用默认的' / '。
                            若不指定 DELIM,则使用一个空格分隔。
      -p [DELIM], --pos [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
    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
      -p [DELIM], --pos [DELIM]
                            enable POS tagging; if DELIM is specified, use DELIM
                            instead of '_' for POS delimiter
      -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 (ignored with POS tagging)
      -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.
    

    延迟加载机制

    jieba 采用延迟加载,import jieba 和 jieba.Tokenizer() 不会立即触发词典的加载,一旦有必要才开始加载词典构建前缀字典。如果你想手工初始 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

    源码:

      

    源码下载的地址:https://github.com/fxsjy/jieba

    演示地址:http://jiebademo.ap01.aws.af.cm/

    展开全文
  • 压缩文件之中包含了结巴中文分词的说明文档,以及Java,Python,C++的使用示例。对于自然语言处理(NLP)有帮助。
  • 下面小编就为大家带来一篇python中文分词,使用结巴分词python进行分词的实例讲解。有比较好的参考价值,希望能给大家做个参考。一起跟随小编过来看看吧
  • 结巴分词使用教程

    2021-01-20 03:00:03
     注:pip是python自带的(没有安装过python的同学可以先安装python)  1、pip添加源(已经添加过的请忽略此步骤)  windows下在个人用户目录下(c:\users\[自己的电脑用户名]\)下新建文件夹 pip,再新建文件pip....
  • 如何对excel表格里的词结巴分词python

    千次阅读 2020-12-03 03:00:09
    实际应用的统计分词系统都要使用一部基本 的分词词典(常用词词典)进行串匹配分词,同时使用统计方法识别一些新的词,即将串频统计和串匹配结合起来, 既发挥匹配分词切分速度快、效率高的特点,又利用了无词典分词...

    展开全部

    # -*- coding: utf-8 -*-

    import jieba

    '''''

    Created on 2015-11-23

    '''

    def word_split(text):

    """

    Split a text in words. Returns a list of tuple that contains

    (word, location) location is the starting byte position of the word.

    """

    word_list = []

    windex = 0

    word_primitive = jieba.cut(text, cut_all = True)

    for word in word_primitive:

    if len(word) > 0:

    word_list.append((windex, word))

    windex += 1

    return word_list

    def inverted_index(text):

    """

    Create an Inverted-Index of the specified text document.

    {word:[locations]}

    """

    inverted = {}

    for index, word in word_split(text):

    locations = inverted.setdefault(word, [])

    locations.append(index)

    return inverted

    def inverted_index_add(inverted, doc_id, doc_index):

    """

    Add Invertd-Index doc_index of the document doc_id to the

    Multi-Document Inverted-Index (inverted),

    using doc_id as document identifier.

    {word:{doc_id:[locations]}}

    """

    for word, locations in doc_index.iteritems():

    indices = inverted.setdefault(word, {})

    indices[doc_id] = locations

    return inverted

    def search_a_word(inverted, word):

    """

    search one word

    """

    word = word.decode('utf-8')

    if word not in inverted:

    return None

    else:

    word_index = inverted[word]

    return word_index

    def search_words(inverted, wordList):

    """

    search more than one word

    """

    wordDic = []

    docRight = []

    for word in wordList:

    if isinstance(word, str):

    word = word.decode('utf-8')

    if word not in inverted:

    return None

    else:

    element = inverted[word].keys()

    element.sort()

    wordDic.append(element)

    numbers = len(wordDic)

    inerIndex = [0 for i in range(numbers)]

    docIndex = [wordDic[i][0] for i in range(numbers)]

    flag = True

    while flag:

    if min(docIndex) == max(docIndex):

    docRight.append(min(docIndex))

    inerIndex = [inerIndex[i]+1 for i in range(numbers)]

    for i in range(numbers):

    if inerIndex[i] >= len(wordDic[i]):

    flag = False

    return docRight

    docIndex = [wordDic[i][inerIndex[i]] for i in range(numbers)]

    else:

    minIndex = min(docIndex)

    minPosition = docIndex.index(minIndex)

    inerIndex[minPosition] += 1

    if inerIndex[minPosition] >= len(wordDic[minPosition]):

    flag = False

    return docRight

    docIndex = [wordDic[i][inerIndex[i]] for i in range(numbers)]

    def search_phrase(inverted, phrase):

    """

    search phrase

    """

    docRight = {}

    temp = word_split(phrase)

    wordList = [temp[i][1] for i in range(len(temp))]

    docPossible = search_words(inverted, wordList)

    for doc in docPossible:

    wordIndex = []

    indexRight = []

    for word in wordList:

    wordIndex.append(inverted[word][doc])

    numbers = len(wordList)

    inerIndex = [0 for i in range(numbers)]

    words = [wordIndex[i][0] for i in range(numbers)]

    flag = True

    while flag:

    if words[-1] - words[0] == numbers - 1:

    indexRight.append(words[0])

    inerIndex = [inerIndex[i]+1 for i in range(numbers)]

    for i in range(numbers):

    if inerIndex[i] >= len(wordIndex[i]):

    flag = False

    docRight[doc] = indexRight

    break

    if flag:

    words = [wordIndex[i][inerIndex[i]] for i in range(numbers)]

    else:

    minIndex = min(words)

    minPosition = words.index(minIndex)

    inerIndex[minPosition] += 1

    if inerIndex[minPosition] >= len(wordIndex[minPosition]):

    flag = False

    break

    if flag:

    words = [wordIndex[i][inerIndex[i]] for i in range(numbers)]

    return docRight

    if __name__ == '__main__':

    doc1 = """

    中文分词指的是将一个汉32313133353236313431303231363533e58685e5aeb931333363393739字序列切分成一个一个单独的词。分词就是将连续的字序列按照一定的规范

    重新组合成词序列的过程。我们知道,在英文的行文中,单词之间是以空格作为自然分界符的,而中文

    只是字、句和段能通过明显的分界符来简单划界,唯独词没有一个形式上的分界符,虽然英文也同样

    存在短语的划分问题,不过在词这一层上,中文比之英文要复杂的多、困难的多。

    """

    doc2 = """

    存在中文分词技术,是由于中文在基本文法上有其特殊性,具体表现在:

    与英文为代表的拉丁语系语言相比,英文以空格作为天然的分隔符,而中文由于继承自古代汉语的传统,

    词语之间没有分隔。 古代汉语中除了连绵词和人名地名等,词通常就是单个汉字,所以当时没有分词

    书写的必要。而现代汉语中双字或多字词居多,一个字不再等同于一个词。

    在中文里,“词”和“词组”边界模糊

    现代汉语的基本表达单元虽然为“词”,且以双字或者多字词居多,但由于人们认识水平的不同,对词和

    短语的边界很难去区分。

    例如:“对随地吐痰者给予处罚”,“随地吐痰者”本身是一个词还是一个短语,不同的人会有不同的标准,

    同样的“海上”“酒厂”等等,即使是同一个人也可能做出不同判断,如果汉语真的要分词书写,必然会出现

    混乱,难度很大。

    中文分词的方法其实不局限于中文应用,也被应用到英文处理,如手写识别,单词之间的空格就不很清楚,

    中文分词方法可以帮助判别英文单词的边界。

    """

    doc3 = """

    作用

    中文分词是文本挖掘的基础,对于输入的一段中文,成功的进行中文分词,可以达到电脑自动识别语句含义的效果。

    中文分词技术属于自然语言处理技术范畴,对于一句话,人可以通过自己的知识来明白哪些是词,哪些不是词,

    但如何让计算机也能理解?其处理过程就是分词算法。

    影响

    中文分词对于搜索引擎来说,最重要的并不是找到所有结果,因为在上百亿的网页中找到所有结果没有太多的意义,

    没有人能看得完,最重要的是把最相关的结果排在最前面,这也称为相关度排序。中文分词的准确与否,常常直接

    影响到对搜索结果的相关度排序。从定性分析来说,搜索引擎的分词算法不同,词库的不同都会影响页面的返回结果

    """

    doc4 = """

    这种方法又叫做机械分词方法,它是按照一定的策略将待分析的汉字串与一个“充分大的”机器词典中的词条进行配,

    若在词典中找到某个字符串,则匹配成功(识别出一个词)。按照扫描方向的不同,串匹配分词方法可以分为正向

    匹配和逆向匹配;按照不同长度优先匹配的情况,可以分为最大(最长)匹配和最小(最短)匹配;常用的几种

    机械分词方法如下:

    正向最大匹配法(由左到右的方向);

    逆向最大匹配法(由右到左的方向);

    最少切分(使每一句中切出的词数最小);

    双向最大匹配法(进行由左到右、由右到左两次扫描)

    还可以将上述各种方法相互组合,例如,可以将正向最大匹配方法和逆向最大匹配方法结合起来构成双向匹配法。

    由于汉语单字成词的特点,正向最小匹配和逆向最小匹配一般很少使用。一般说来,逆向匹配的切分精度略高于

    正向匹配,遇到的歧义现象也较少。统计结果表明,单纯使用正向最大匹配的错误率为,单纯使用逆向

    最大匹配的错误率为。但这种精度还远远不能满足实际的需要。实际使用的分词系统,都是把机械分词

    作为一种初分手段,还需通过利用各种其它的语言信息来进一步提高切分的准确率。

    一种方法是改进扫描方式,称为特征扫描或标志切分,优先在待分析字符串中识别和切分出一些带有明显特征

    的词,以这些词作为断点,可将原字符串分为较小的串再来进机械分词,从而减少匹配的错误率。另一种方法

    是将分词和词类标注结合起来,利用丰富的词类信息对分词决策提供帮助,并且在标注过程中又反过来对分词

    结果进行检验、调整,从而极大地提高切分的准确率。

    对于机械分词方法,可以建立一个一般的模型,在这方面有专业的学术论文,这里不做详细论述。

    """

    doc5 = """

    从形式上看,词是稳定的字的组合,因此在上下文中,相邻的字同时出现的次数越多,就越有可能构成一个词。

    因此字与字相邻共现的频率或概率能够较好的反映成词的可信度。可以对语料中相邻共现的各个字的组合的频度

    进行统计,计算它们的互现信息。定义两个字的互现信息,计算两个汉字的相邻共现概率。互现信息体现了

    汉字之间结合关系的紧密程度。当紧密程度高于某一个阈值时,便可认为此字组可能构成了一个词。这种方法

    只需对语料中的字组频度进行统计,不需要切分词典,因而又叫做无词典分词法或统计取词方法。但这种方法

    也有一定的局限性,会经常抽出一些共现频度高、但并不是词的常用字组,例如“这一”、“之一”、“有的”、

    “我的”、“许多的”等,并且对常用词的识别精度差,时空开销大。实际应用的统计分词系统都要使用一部基本

    的分词词典(常用词词典)进行串匹配分词,同时使用统计方法识别一些新的词,即将串频统计和串匹配结合起来,

    既发挥匹配分词切分速度快、效率高的特点,又利用了无词典分词结合上下文识别生词、自动消除歧义的优点。

    另外一类是基于统计机器学习的方法。首先给出大量已经分词的文本,利用统计机器学习模型学习词语切分的规律

    (称为训练),从而实现对未知文本的切分。我们知道,汉语中各个字单独作词语的能力是不同的,此外有的字常

    常作为前缀出现,有的字却常常作为后缀(“者”“性”),结合两个字相临时是否成词的信息,这样就得到了许多

    与分词有关的知识。这种方法就是充分利用汉语组词的规律来分词。这种方法的最大缺点是需要有大量预先分好词

    的语料作支撑,而且训练过程中时空开销极大。

    到底哪种分词算法的准确度更高,目前并无定论。对于任何一个成熟的分词系统来说,不可能单独依靠某一种算法

    来实现,都需要综合不同的算法。例如,海量科技的分词算法就采用“复方分词法”,所谓复方,就是像中西医结合

    般综合运用机械方法和知识方法。对于成熟的中文分词系统,需要多种算法综合处理问题。

    """

    # Build Inverted-Index for documents

    inverted = {}

    documents = {'doc1':doc1, 'doc2':doc2, 'doc3':doc3, 'doc4':doc4, 'doc5':doc5}

    for doc_id, text in documents.iteritems():

    doc_index = inverted_index(text)

    inverted_index_add(inverted, doc_id, doc_index)

    # Search one word

    aWord = "分词"

    result_a_word = search_a_word(inverted, aWord)

    if result_a_word:

    result_a_word_docs = result_a_word.keys()

    print "'%s' is appeared at" %(aWord)

    for result_a_word_doc in result_a_word_docs:

    result_a_word_index = result_a_word[result_a_word_doc]

    for index in result_a_word_index:

    print (str(index) + ' '),

    print "of " + result_a_word_doc

    print ""

    else:

    print "No matches!\r\n"

    #Search more than one word

    words = ["汉语", "切分"]

    result_words = search_words(inverted, words)

    if result_words:

    print ("["),

    for i in range(len(words)):

    print ("%s " %(words[i])),

    print ("] are appeared at the "),

    for result_words_doc in result_words:

    print (result_words_doc + ' '),

    print "\r\n"

    else:

    print "No matches!\r\n"

    #Search phrase

    phrase = "中文分词"

    result_phrase = search_phrase(inverted, phrase)

    if result_phrase:

    result_phrase_docs = result_phrase.keys()

    print "'%s' is appeared at the " %(phrase)

    for result_phrase_doc in result_phrase_docs:

    result_phrase_index = result_phrase[result_phrase_doc]

    for index in result_phrase_index:

    print (str(index) + ' '),

    print "of " + result_phrase_doc

    print ""

    else:

    print "No matches!\r\n"

    展开全文
  • python教程全解 结巴中文分词安装:pip install jieba特点:支持三种分词模式:精确模式,试图将句子最精确地切开,适合文本分析; 全模式,把句子中所有的可以成词的词语都扫描出来, 速度非常快,但是不能解决...
  • jieba:“结巴”中文分词:做最好的 Python 中文分词组件
  • 结巴分词jar包

    2017-05-15 17:08:32
    结巴”中文分词:做最好的 Python 中文分词组件 "Jieba" (Chinese for "to stutter") Chinese text segmentation: built to be the best Python Chinese word segmentation module. Scroll down for English ...
  • 结巴分词安装教程

    千次阅读 2020-03-26 13:49:25
    注:pip是python自带的(没有安装过python的同学可以先安装python) 1、pip添加源(已经添加过的请忽略此步骤) windows下在个人用户目录下(c:\users\[自己的电脑用户名]\)下新建文件夹 pip,再新建文件pip....
  • Python 结巴分词

    2020-11-30 11:02:41
    今天的任务是对txt文本进行分词,有幸了解到"结巴"中文分词,其愿景是做最好的Python中文分词组件。有兴趣的朋友请点这里。jieba支持三种分词模式:*精确模式,试图将句子最精确地切开,适合文本分析;*全模式,把...
  • Python中,除了用pyecharts库,其实用matplotlib也可以制作词云图,只是jieba库不太好安装。白天是很难安装成功的,所以一般都趁着凌晨来安装。示例代码如下:from wordcloud import WordCloud,STOPWORDSfrom PIL ...
  • python 3.8 结巴分词安装使用

    千次阅读 2020-03-13 22:49:51
    前段时间有个课程作业要分析数据用到结巴,于是自己安了个结巴,下面是自己的安装步骤: 一、官网下载结巴 jieba 0.42.1 官网:https://pypi.org/project/jieba/ 我个人用的是python 3.8,这个python 2和python 3...
  • jieba"结巴"中文分词:做最好的Python中文分词组件"Jieba" (Chinese for "to stutter") Chinese text segmentation: built to be the best Python Chinese word segmentation module.Scroll down for English ...
  • 结巴分词支持三种分词模式,支持繁体字,支持自定义词典 2、三种分词模式 全模式:把句子中所有的可以成词的词语都扫描出来, 速度非常快,但是不能解决歧义 精简模式:把句子最精确的分开,不会添加多余单词,看起来...
  • 主要介绍了Python结巴中文分词工具使用过程中遇到的问题及解决方法,较为详细的讲述了Python结巴中文分词工具的下载、安装、使用方法及容易出现的问题与相应解决方法,需要的朋友可以参考下
  • Python 进行 结巴 分词

    2018-05-14 21:58:00
    #一直因为这个编码问题没有分出来 ,后来多试验了几次就行了,供大家参考一下import jiebaf1=open('all.txt','r',encoding='utf-8',errors='ignore')f2=open('allutf8.txt','w',encoding='utf-8')line=f1.readline()...
  • Python3 ,所以我是通过 pip3 来安装 jieba 分词模块:1 pip3 install jieba执行完上面的一步之后,我们就已经成功安装了 jieba 分词模块了,以下我们来进行一个简单的测试,看看我们是否安装成功:1 #-*- coding: ...
  • 结巴分词的原始版本为python编写,目前该项目在github上的关注量为170, 打星727次(最新的数据以原仓库为准),Fork238次,可以说已经有一定的用户群。 结巴分词(java版)只保留的原项目针对搜索引擎分词的功能...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,391
精华内容 2,156
关键字:

结巴分词python教程

python 订阅