精华内容
下载资源
问答
  • Python中文分词 jieba 十五分钟入门与进阶

    万次阅读 多人点赞 2017-05-27 16:21:04
    整体介绍jieba 基于Python中文分词工具,安装使用非常方便,直接pip即可,2/3都可以,功能强悍,博主十分推荐 github:https://github.com/fxsjy/jieba 开源中国地址:...

    整体介绍

    jieba 基于Python的中文分词工具,安装使用非常方便,直接pip即可,2/3都可以,功能强悍,博主十分推荐
    github:https://github.com/fxsjy/jieba
    开源中国地址:http://www.oschina.net/p/jieba/?fromerr=LRXZzk9z
    写这篇文章花费两个小时小时,阅读需要十五分钟,读完本篇文章后您将能上手jieba

    下篇博文将介绍将任意中文文本生成中文词云

    同时如果你希望使用其它分词工具,那么你可以留意我之后的博客,我会在接下来的日子里发布其他有关内容.

    三种分词模式与一个参数

    以下代码主要来自于jieba的github,你可以在github下载该源码

    import jieba
    
    seg_list = jieba.cut("我来到北京清华大学", cut_all=True, HMM=False)
    print("Full Mode: " + "/ ".join(seg_list))  # 全模式
    
    seg_list = jieba.cut("我来到北京清华大学", cut_all=False, HMM=True)
    print("Default Mode: " + "/ ".join(seg_list))  # 默认模式
    
    seg_list = jieba.cut("他来到了网易杭研大厦", HMM=False)
    print(", ".join(seg_list))
    
    seg_list = jieba.cut_for_search("小明硕士毕业于中国科学院计算所,后在日本京都大学深造", HMM=False)  # 搜索引擎模式
    print(", ".join(seg_list))
    
    # jieba.cut的默认参数只有三个,jieba源码如下
    # cut(self, sentence, cut_all=False, HMM=True)
    # 分别为:输入文本 是否为全模式分词 与是否开启HMM进行中文分词
    

    分词模式的运行结果

    关键词提取

    from os import path
    import jieba.analyse as analyse
    
    d = path.dirname(__file__)
    
    text_path = 'txt/lz.txt' #设置要分析的文本路径
    text = open(path.join(d, text_path)).read()
    
    for key in analyse.extract_tags(text,50, withWeight=False):
    # 使用jieba.analyse.extract_tags()参数提取关键字,默认参数为50
        print key.encode('utf-8')
        # 设置输出编码为utf-8不然在因为win下控制台默认中文字符集为gbk,所以会出现乱码
        # 当withWeight=True时,将会返回number类型的一个权重值(TF-IDF)
    

    提取关键词的运行效果

    运行结果如图所示,但是同样的我们也发现了一些问题,比如:
    问题一:
    分词错误,在运行结果中中"路明非"(龙族男主)被分成了"路明"和"明非"啷个中文词语,这是因为jieba的词库中并不含有该词的原因,同样的原因以及jieba词库比较老,因而在许多文本分词时都会产生这种情况,而这个问题我们将在第五个模块"三种可以让分词更准确的方法"解决
    问题二:
    出现非实意词语,无论在哪种语言中,都会存在大量的非实意单词,这一类词云我们需要在进行中文分词时进行去除停用词,这个问题将在下一个模块中解决

    中文歧义测试与去除停用词

    本段代码主要来自于《机器学习实践指南(第二版))》,其作者为麦好,ps:这是一本好书

    找停用词点这里:多版本中文停用词词表 + 多版本英文停用词词表 + python词表合并程序

    import jieba
    TestStr = "2010年底部队友谊篮球赛结束"
    # 因为在汉语中没有空格进行词语的分隔,所以经常会出现中文歧义,比如年底-底部-部队-队友
    # jieba 默认启用了HMM(隐马尔科夫模型)进行中文分词,实际效果不错
    
    seg_list = jieba.cut(TestStr, cut_all=True)
    print "Full Mode:", "/ ".join(seg_list) # 全模式
    
    seg_list = jieba.cut(TestStr, cut_all=False)
    print "Default Mode:", "/ ".join(seg_list) # 默认模式
    # 在默认模式下有对中文歧义有较好的分类方式
    
    seg_list = jieba.cut_for_search(TestStr) # 搜索引擎模式
    print "cut for Search","/".join(seg_list)
    

    中文歧义测试

    去除文本中的停用词

    # - * - coding: utf - 8 -*-
    #
    # 作者:田丰(FontTian)
    # 创建时间:'2017/5/27'
    # 邮箱:fonttian@163.com
    # CSDN:http://blog.csdn.net/fontthrone
    
    import sys
    import jieba
    from os import path
    
    d = path.dirname(__file__)
    stopwords_path = 'stopwords\stopwords1893.txt' # 停用词词表
    
    text_path = 'txt/lz.txt' #设置要分析的文本路径
    text = open(path.join(d, text_path)).read()
    
    def jiebaclearText(text):
        mywordlist = []
        seg_list = jieba.cut(text, cut_all=False)
        liststr="/ ".join(seg_list)
        f_stop = open(stopwords_path)
        try:
            f_stop_text = f_stop.read( )
            f_stop_text=unicode(f_stop_text,'utf-8')
        finally:
            f_stop.close( )
        f_stop_seg_list=f_stop_text.split('\n')
        for myword in liststr.split('/'):
            if not(myword.strip() in f_stop_seg_list) and len(myword.strip())>1:
                mywordlist.append(myword)
        return ''.join(mywordlist)
    
    text1 = jiebaclearText(text)
    print text1
    

    龙族中文分词去除中文停用词后的效果

    三种可以让分词更准确的方法

    方案一,在jieba中添加中文词语:
    这种方法可以有效的解决之前龙族男主"路明非"被分为"路明"和"明非"两个词的情况

    #这个只需要在源代码中加入一个语句即可
    import sys
    import jieba
    from os import path
    
    d = path.dirname(__file__)
    stopwords_path = 'stopwords\stopwords1893.txt' # 停用词词表
    
    jieba.add_word('路明非')
    # 添加的自定义中文语句的代码在这里
    # 添加的自定义中文语句的代码在这里
    # 添加的自定义中文语句的代码在这里
    
    text_path = 'txt/lz.txt' #设置要分析的文本路径
    text = open(path.join(d, text_path)).read()
    
    def jiebaclearText(text):
        mywordlist = []
        seg_list = jieba.cut(text, cut_all=False)
        liststr="/ ".join(seg_list)
        f_stop = open(stopwords_path)
        try:
            f_stop_text = f_stop.read( )
            f_stop_text=unicode(f_stop_text,'utf-8')
        finally:
            f_stop.close( )
        f_stop_seg_list=f_stop_text.split('\n')
        for myword in liststr.split('/'):
            if not(myword.strip() in f_stop_seg_list) and len(myword.strip())>1:
                mywordlist.append(myword)
        return ''.join(mywordlist)
    
    text1 = jiebaclearText(text)
    print text1
    

    运行效果如下:
    添加自定义语句之后

    方案二,添加自定义词库:
    下面的代码主要来自于jieba的github源码,你可以在github下载该例子

    #encoding=utf-8
    from __future__ import print_function, unicode_literals
    import sys
    sys.path.append("../")
    import jieba
    jieba.load_userdict("userdict.txt")
    # jieba采用延迟加载,"import jieba"不会立即触发词典的加载,一旦有必要才开始加载词典构建trie。如果你想手工初始jieba,也可以手动初始化。示例如下:
    # import jieba
    # jieba.initialize() #手动初始化(可选)
    # 在0.28之前的版本是不能指定主词典的路径的,有了延迟加载机制后,你可以改变主词典的路径:
    # 注意用户词典为主词典即优先考虑的词典,原词典此时变为非主词典
    # jieba.set_dictionary('data/dict.txt.big')
    
    import jieba.posseg as pseg
    
    test_sent = (
    "李小福是创新办主任也是云计算方面的专家; 什么是八一双鹿\n"
    "例如我输入一个带“韩玉赏鉴”的标题,在自定义词库中也增加了此词为N类\n"
    "「台中」正確應該不會被切開。mac上可分出「石墨烯」;此時又可以分出來凱特琳了。"
    )
    words = jieba.cut(test_sent)
    print('/'.join(words))
    
    print("="*40)
    
    result = pseg.cut(test_sent)
    # pseg.cut 切分,并显示词性
    # 下面是userdict.txt的内容,如果不加入这个词库,那么在运行结果中,云计算,创新办等词都将无法识别
    '''
    云计算 5
    李小福 2 nr
    创新办 3 i
    easy_install 3 eng
    好用 300
    韩玉赏鉴 3 nz
    八一双鹿 3 nz
    台中
    凱特琳 nz
    Edu Trust认证 2000
    '''
    
    

    添加用户词典

    下面这段代码主要来自于jieba的github,你可以在github下载该源码

    print('='*40)
    print('添加自定义词典/调整词典')
    print('-'*40)
    
    print('/'.join(jieba.cut('如果放到post中将出错。', HMM=False)))
    #如果/放到/post/中将/出错/。
    # 调整词典使 中将 变为中/将
    print(jieba.suggest_freq(('中', '将'), True))
    #494
    print('/'.join(jieba.cut('如果放到post中将出错。', HMM=False)))
    #如果/放到/post/中/将/出错/。
    print('/'.join(jieba.cut('「台中」正确应该不会被切开', HMM=False)))
    #「/台/中/」/正确/应该/不会/被/切开
    print(jieba.suggest_freq('台中', True))
    print(jieba.suggest_freq('台中', True))
    #69
    # 调整词典使 台中 不被分词为台/中
    print('/'.join(jieba.cut('「台中」正确应该不会被切开', HMM=False)))
    #「/台中/」/正确/应该/不会/被/切开
    

    并行计算

    下面这段代码主要来自于jieba的github,你可以在github下载该源码

    原理:将目标文本按行分隔后,把各行文本分配到多个python进程并行分词,然后归并结果,从而获得分词速度的可观提升

    基于python自带的multiprocessing模块,目前暂不支持windows

    import sys
    import time
    sys.path.append("../../")
    import jieba
    
    jieba.enable_parallel() # 关闭并行分词
    jieba.enable_parallel(4) # 开启并行分词模式,参数为并行进程数 
    
    url = sys.argv[1]
    content = open(url,"rb").read()
    t1 = time.time()
    words = "/ ".join(jieba.cut(content))
    
    t2 = time.time()
    tm_cost = t2-t1
    
    log_f = open("1.log","wb")
    log_f.write(words.encode('utf-8'))
    
    print('speed %s bytes/second' % (len(content)/tm_cost))
    

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

    展开全文
  • 一、两种中文分词开发包THULAC(THU Lexical Analyzer for Chinese)由清华大学自然语言处理与社会人文计算实验室研制推出的一套中文词法分析工具包,具有中文分词和词性标注功能。THULAC具有如下几个特点:能力强。...

    总是看到别人用Python搞各种统计,前端菜鸟的我也来尝试了一把。有各种语义分析库在,一切好像并不是很复杂。不过Python刚开始看,估计代码有点丑。

    一、两种中文分词开发包

    THULAC(THU Lexical Analyzer for Chinese)由清华大学自然语言处理与社会人文计算实验室研制推出的一套中文词法分析工具包,具有中文分词和词性标注功能。THULAC具有如下几个特点:

    能力强。利用我们集成的目前世界上规模最大的人工分词和词性标注中文语料库(约含5800万字)训练而成,模型标注能力强大。

    准确率高。该工具包在标准数据集Chinese Treebank(CTB5)上分词的F1值可达97.3%,词性标注的F1值可达到92.9%,与该数据集上最好方法效果相当。

    速度较快。同时进行分词和词性标注速度为300KB/s,每秒可处理约15万字。只进行分词速度可达到1.3MB/s。

    据说是最好的中文分词组件,支持Python、C++、Java、node.js、PHP等多种语言。

    支持三种分词模式()

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

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

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

    支持繁体分词

    支持自定义词典

    MIT 授权协议

    二、语义分词

    2.1 简单文本分词

    两种分词组件的使用都比较简单,以 jieba 为例:

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

    import jieba

    # 精确模式

    seg_list = jieba.cut("我来到北京清华大学", cut_all=False)

    print "Default Mode: " + "/ ".join(seg_list)

    #输出结果:

    #Default Mode: 我/ 来到/ 北京/ 清华大学

    2.2 对文件内容进行分词

    对文件内容进行分词其实本质上和对字符串的分词一样,只不过多了个文件读写的过程。

    这里写了两个读写文件的函数,之所以使用codecs来读取,主要是为了解决Python2.7 文件读写过程中Unicode编码问题

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

    import codecs

    # @see 读取文件内容

    def readFile(filename):

    content = ""

    try:

    fo = codecs.open(filename,'r', "utf-8")

    print "读取文件名:", filename

    for line in fo.readlines():

    content += line.strip()

    print "字数:", len(content)

    except IOError as e:

    print "文件不存在或者文件读取失败"

    return ""

    else:

    fo.close()

    return content

    # @see 写入文件内容(数组会使用writelines进行写入)codec.open实现

    # @param toFile 文件名

    # content 内容

    def writeFile(toFile, content):

    try:

    fo = codecs.open(toFile, 'wb', "utf-8")

    print "文件名:", toFile

    if type(content) == type([]):

    fo.writelines(content)

    else:

    fo.write(content)

    except IOError:

    print "没有找到文件或文件读取失败"

    else:

    print "文件写入成功"

    fo.close()

    将文件读写和分词结合起来

    # 读取源文件(sourceFile)内容

    rawContent = readFile(sourceFile)

    # 结巴分词

    seg_list = jieba.cut(rawContent, cut_all=False)

    # 把分词结果写到目标文件(targetFile)中,这里是用空格分割,也可以改成其他符号

    writeFile(targetFile, " ".join(seg_list))

    三、对分词结果进行统计和排序

    简单说一下思路,读取分词结果的txt文件,然后用空格分割成词语数组,遍历数组,分别统计词语的出现次数。最后对所有的单词根据频次进行排序。

    3.1 统计分词

    # 词语数组

    wordList= []

    # 用于统计词频

    wordCount= {}

    # 从分词后的源文件中读取数据

    sourceData = readFile(sourceFile)

    # 利用空格分割成数组

    wordList = sourceData.split(' ')

    # 遍历数组进行词频统计,这里使用wordCount 对象,出发点是对象下标方便查询

    for item in wordList:

    if item not in wordCount:

    wordCount[item] = 1

    else:

    wordCount[item] += 1

    # 循环结束,wordCount 对象将保存所有的词语和词频

    3.2 根据词频排序

    Python 数组中自带sort() 函数,为了方便比较,我们定义了一个对象,并标明了比较方法

    # 定义wordItem 类

    class wordItem:

    label = ''

    times = 0

    # 构造函数

    def __init__(self, l, t):

    self.label = l

    self.times = t

    # 用于比较

    def __lt__(self, other):

    return self.times < other.times

    # 定义wordItem 数组用于排序

    wordItemArray= []

    # 构造对象数组

    for key in wordCount:

    wordItemArray.append(wordItem(key, wordCount[key]))

    # 按词频由高到低倒序排列

    wordItemArray.sort(reverse = True)

    # 写入目标文件 target

    wf = codecs.open(targetFile,'w', "utf-8")

    for item in wordItemArray:

    wf.write(item.label+' '+str(item.times) + '\n')

    四、使用命令行

    使用命令行需要引入import sys,通过sys.argv[n]可以获得输入的命令行参数,注意第一个是脚本名。

    import sys

    # 我们调用时会 python index.py 'source.txt' 'target.txt'

    # 注意这里argv 是脚本名

    # print "name: ", sys.argv[0] # 脚本名 如:index.py

    sourceFile = sys.argv[1]

    targetFile = sys.argv[2]

    五、完整代码

    参见 github node-popcorn,项目中加入了一些puppeteer无头浏览器爬虫抓取网页内容的代码。

    展开全文
  • (3)中文分词——Python结巴分词

    千次阅读 2016-03-18 22:40:03
    jieba 分词下载地址:https://pypi.python.org/pypi/jieba 特点: 1、支持三种分词模式: 精确模式,试图将句子最精确地切开,适合文本分析; 全模式,把句子中所有的可以成词的词语都扫描出来, 速度非常快,...

    结巴分词器介绍:
    jieba 分词下载地址:https://pypi.python.org/pypi/jieba
    特点:
    1、支持三种分词模式:
    精确模式,试图将句子最精确地切开,适合文本分析;
    全模式,把句子中所有的可以成词的词语都扫描出来, 速度非常快,但是不能解决歧义;
    搜索引擎模式,在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词。
    2、支持繁体分词
    3、支持自定义词典
    Algorithm
    1、基于Trie树结构实现高效的词图扫描,生成句子中汉字所有可能成词情况所构成的有向无环图(DAG)
    2、采用了动态规划查找最大概率路径, 找出基于词频的最大切分组合
    3、对于未登录词,采用了基于汉字成词能力的HMM模型,使用了Viterbi算法
    分词
    jieba.cut方法接受两个输入参数: 1) 第一个参数为需要分词的字符串 2)cut_all参数用来控制是否采用全模式
    jieba.cut_for_search方法接受一个参数:需要分词的字符串,该方法适合用于搜索引擎构建倒排索引的分词,粒度比较细
    注意:待分词的字符串可以是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)

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

    下面我们利用结巴分词器来对文本集中的所有文本进行分词,具体代码如下:

    #!/usr/bin/python
    #-*- coding: utf-8 -*-
    
    import sys
    import os
    import jieba
    import re
    reload(sys)
    sys.setdefaultencoding('utf-8')
    
    #对中文文本数据集进行分词
    '''注意:
            1、输入的数据集路径必须是基目录/数据集名,数据集下是类别子目录,类别下是文本
            2、停用词表被放在了程序的当前目录下
            3、停用词表是我自己整理的,可以改用别的,或者不去掉停用词
            4、分词结果只包含中文\u4e00-\u9fa5,无其他特殊符合和数字
            5、如遇编码问题,请自行百度
    '''
    
    #对文本进行分词
    def segment(textpath,savepath):
        global stopwords
        content=open(textpath,'r+').read()#读取文本内容
        writer=open(savepath,'w+')
        #content=content.decode('gb2312','ignore')#将gbk编码转为unicode编码
        #content=content.encode('utf-8','ignore')#将unicode编码转为utf-8编码
        #print content  #打印文本内容
        text=jieba.cut(content)#分词,默认是精确分词
        #print "/".join(text)
        for word in text:
            #通过合并所有中文内容得到纯中文内容
            word=''.join(re.findall(u'[\u4e00-\u9fa5]+', word))#去掉不是中文的内容
            word=word.strip()
            if(len(word)!=0 and not stopwords.__contains__(word)):#去掉在停用词表中出现的内容
                #print word
                writer.write(word+"\n")
        writer.flush()
        writer.close()
        print savepath+"保存好了"
    
    #对整个文本集进行分词
    def main(dir_name,tar_name):    
        if(not os.path.exists(tar_name)):
            os.mkdir(tar_name)#不存在则新建目录
        classes=os.listdir(dir_name)#该目录下的子目录,即各个类别
        for c in classes:
            #print c #类别
            label=dir_name+"/"+c
            files=os.listdir(label)#获取目录下的所有文本文件
            tarLabel=tar_name+"/"+c#将文本保存在相应类别的目录下
            if(not os.path.exists(tarLabel)):
                os.mkdir(tarLabel)
            #print files
            for f in files:
                #print f         #打印文件名
                textpath=label+"/"+f
                savepath=tarLabel+"/"+f
                segment(textpath,savepath)
    
    dir_name = u"F:\\各种数据集\\复旦语料库\\train"#数据集路径
    tar_name=u"trainSegment"#保存路径
    stopwords = [line.strip() for line in open('cstopword.dic').readlines() ]#读取中文停用词表
    main(dir_name,tar_name)
    展开全文
  • 对于中文以及windows下路径的修改是要注意的,尤其是编码方式 ASCII不能存储中文 unicode是中文在内存的编码方式 utf-8是中文在硬盘的编码方式 需要转化尤其是在调用存储的时候 下面的代码先decode的...

    对于中文以及windows下路径的修改是要注意的,尤其是编码方式

    ASCII不能存储中文

    unicode是中文在内存的编码方式

    utf-8是中文在硬盘的编码方式

    需要转化尤其是在调用存储的时候

    下面的代码先decode的目的在于,将原本存于硬盘的utf-8代码解析成Unicode,然后再转换成utf-8显示

    还有就是split对于分词来说十分有用

    python下标是从0开始的。。。

    # -*- coding: UTF-8 -*-
    import os,sys 
    import re
    str2 = 'C:/Users/Hit/Desktop/文本/199801.txt' 
    path = unicode(str2,"utf8") 
    fo = open(path) 
    fw = open('new.txt','w')
    count = 0 
    done = 0
    while not done:
        line = fo.readline() 
        if line:
            count = count+1 
            if count != 0:
                split_line = line.split("  ")
                clear_time = 1
                for item in split_line:
                    if clear_time == 1:
                        clear_time = clear_time + 1
                        continue
                    else:
                        term = re.split('/',item)
                        if term[0] != '\n':
                            for word in term[1].split():
                                if word == 'nr' or word == 'ns' or word == 'nz' or word == 'nt':
                                    count_nr = 0
                                    isfirst = 1
                                    for contain in term[0].decode('utf-8'):
                                        count_nr  = count_nr + 1
                                        if count_nr == 1 and contain == '[':
                                            continue
                                        else:
                                            fw.write(contain.encode('utf-8'))
                                            fw.write(' ')
                                            if isfirst == 1:
                                                fw.write(word.upper())
                                                fw.write('-B')
                                                isfirst = isfirst + 1
                                            else:
                                                fw.write('I')
                                            fw.write('\n')
                                else:
                                    for contain in term[0].decode('utf-8'):
                                        fw.write(contain.encode('utf-8'))
                                        fw.write(' O\n')
                                        
                fw.write('\n')         
        else:
            done = 1
    fw.close()
    fo.close()

    # -*- coding: UTF-8 -*-
    import os,sys 
    import re
    str2 = 'C:/Users/Hit/Desktop/文本/199801.txt' 
    path = unicode(str2,"utf8") 
    fo = open(path) 
    fw = open('new.txt','w')
    count = 0 
    done = 0
    while not done:
        line = fo.readline() 
        if line:
            count = count+1 
            if count ==4:
                split_line = line.split("  ")
                clear_time = 1
                print len(split_line)
                rows = 0
                pre = ''
                preterm = []
                for num in range(len(split_line)):
                    if num == 0:
                        continue
                    else:
                        print "NEW ITERATION :",
                        print num
                        term = re.split('/',split_line[num])
                        print term[0]
                        if term[0] != '\n':
                            word = term[1]
                            if word == 'nr' or word == 'ns' or word == 'nz' or word == 'nt':
                                if word != pre:
                                    if word == 'nr' or word == 'ns' or word == 'nz' or word == 'nt':
                                        count_nr = 0
                                        isfirst = 1
                                        for contain in term[0].decode('utf-8'):
                                            count_nr  = count_nr + 1
                                            if count_nr == 1 and contain == '[':
                                                continue
                                            else:
                                                fw.write(contain.encode('utf-8'))
                                                fw.write(' ')
                                                if isfirst == 1:
                                                    fw.write(word.upper())
                                                    fw.write('-B')
                                                    isfirst = isfirst + 1
                                                else:
                                                    fw.write('I')
                                            fw.write('\n')
                                else:
                                    if word == 'nr' or word == 'ns' or word == 'nz' or word == 'nt':
                                        count_nr = 0
                                        isfirst = 1
                                        for contain in term[0].decode('utf-8'):
                                            count_nr  = count_nr + 1
                                            if count_nr == 1 and contain == '[':
                                                continue
                                            else:
                                                fw.write(contain.encode('utf-8'))
                                                fw.write(' ')
                                                if isfirst == 1:
                                                    fw.write('I')
                                                    isfirst = isfirst + 1
                                                else:
                                                    fw.write('I')
                                            fw.write('\n')
                            else:
                                 for contain in term[0].decode('utf-8'):
                                    fw.write(contain.encode('utf-8'))
                                    fw.write(' O\n')
                    if num == 1:
                        continue
                    preterm = re.split('/',split_line[num])
                    pre = preterm[1]
                fw.write('\n')         
        else:
            done = 1
    fw.close()
    fo.close()


    展开全文
  • “结巴”中文分词:做最好的 Python 中文分词组件 “Jieba” (Chinese for “to stutter”) Chinese text segmentation: built to be the best Python Chinese word segmentation module. Scroll down for English ...
  • 本文运用字标注法进行中文分词,使用4-tag对语料进行字标注,观察分词效果。模型方面选用开源的条件随机场工具包“ CRF++: Yet Another CRF toolkit ”进行分词。本文使用的中文语料资源是SIGHAN提供的 backoff 2005...
  • 那你得先学会如何做中文文本分词。跟着我们的教程,一步步用Python来动手实践吧。需求在《如何用Python做词云》一文中,我们介绍了英文文本的词云制作方法。大家玩儿得可还高兴?文中提过,选择英文文本作为示例,是...
  • 一、结巴分词简介利用结巴分词进行中文分词,基本实现原理有三:基于Trie树结构实现高效的词图扫描,生成句子中汉字所有可能成词情况所构成的有向无环图(DAG)采用了动态规划查找最大概率路径,找出基于词...
  • 这次将与大家分享Jieba中文分词Python简单实现,由于Jieba分词是基于词频最大切分组合,所以不用做词频统计,可以直接得到其关键字。 1、安装jieba 安装方式可以查看博主的中文分词工具( ...
  • Python调用jieba分词中的中文编码问题

    万次阅读 2015-10-10 10:27:12
    使用python调用jieba进行中文分词: https://github.com/fxsjy/jieba 根据官方指导完成安装,copy demo,出现问题: # encoding=utf-8 import jieba seg_list = jieba.cut("我来到北京清华大学", cut_all=...
  • 据说Python 最恶心的地方是中文编码问题,这也让很多人放弃使用Python。此刻我只想说。。放弃得好!。。因为这确实是Python 最恶心的问题,暂时木有之一。在经过多次挫败,多次google,多次stackoverflow 无果之后,...
  • 在ICT实习获得的第一个任务与中文分词有关,本想用Stanford中文分词器,苦于VirtualBox中的Ubuntu跑Stanford的中文分词程序的时候会出现OSError: Java Command Failed 的错误。负责OS这方面的队友在纠结不前之时,...
  • 那你得先学会如何做中文文本分词。 跟着我们的教程,一步步用python来动手实践吧。? (由于微信公众号外部链接的限制,文中的部分链接可能无法正确打开。 如有需要,请点击文末的“阅读原文”按钮,访问可以正常...
  • Python第三方库jieba(中文分词)入门与进阶(官方文档) jieba “结巴”中文分词:做最好的 Python 中文分词组件 github:https://github.com/fxsjy/jieba 特点 支持三种分词模式: 精确模式,试图将句子...
  • 人生苦短,我用python 除了给你生孩子,python都能给你做到。...中文分词 指的是将一个汉字序列切分成一个一个单独的词。分词就是将连续的字序列按照一定的规范重新组合成词序列的过程。 ** 在自然语言处理技术...
  • 中文分词领域,基于字标注的方法得到广泛应用,通过字标注分词问题可转换为序列标注问题,现在分词效果较好且常用的是基于条件随机场(CRFs)的标注模型。其模型思想是,条件随机场模型对应一个无向图 ,,Y中的...
  • python中文分词工具:结巴分词jieba

    千次阅读 2015-04-27 15:39:36
    结巴分词jieba 特点  支持三种分词模式:  精确模式,试图将句子最精确地切开,适合文本分析;  全模式,把句子中所有的可以成词的词语都扫描出来, 速度非常快,但是不能解决歧义;  搜索引擎模式,在精确模式...
  • 注意:该方法只接收unicode编码状态下的str 5)词典延迟加载机制 一般情况下,jieba在首次进行分词时才加载词典并生成trie树,若手动初始化,会立即加载。 import jieba jieba.initialize() #手动初始化...
  • 程序功能及简介:安装和测试Python下的中文分词工具 开发时间:2019年3月10 开发时长:0.5个工作日。 开发要求及分析: 在Python下可以采用的较好的中文分词工具是结巴中文分词和中科院的分词系统,现就Jieba中文...
  • Python实现逆向最大匹配中文分词,注意的是作为词典的文件编码格式应该为utf-8. # -*- coding: utf-8 -*- # BMM # 使用逆向最大匹配算法实现中文分词 dic = [] def init(): """ 读文件 获取中文词典 :return:...
  • http://www.tuicool.com/articles/zq2yyi ... 主题中文分词Python 本文运用字标注法进行中文分词,使用4-tag对语料进行字标注,观察分词效果。模型方面选用开源的条件随机场工具包“CRF++: Y...
  • #要分析的文本,注意编码 filename='1.txt' def file_jieba_wordcout(filename):  file=open(filename,'r').read()  file=jieba.cut(file)  dict={}  for word in file:  if word in dict:  dict[word]+=1  ...
  • Python中文分词 jieba

    2019-03-08 19:05:34
    作者:Font Tian 来源:CSDN ...版权声明:本文为博主原创文章,转载请附上博文链接!...jieba 基于Python中文分词工具,安装使用非常方便,直接pip即可,2/3都可以,功能强悍,博主十分推荐 github:https://github.com...
  • 基于python中jieba包的中文分词中详细使用(一)

    万次阅读 多人点赞 2018-05-06 12:43:21
    基于python中jieba包的中文分词中详细使用(一) 01.前言 02.jieba的介绍 02.1 What 02.2特点 02.3安装与使用 02.4涉及到的算法 03.主要功能 03.01分词 03.02添加自定义词典 03.02调整词典 04.结束语 ...
  • Python 中文分词 NLPIR 快速搭建

    千次阅读 2017-06-05 23:03:58
    前述本篇文章写完需要半个...NLPIR 是中科院的汉语分词系统,在Python中使用也比较广泛,而且曾多次夺得汉语分词比赛的冠军,并且其可以在多个语言上都实现了接口甚至在Hadoop中也可以使用,博主比较推荐NLPIRgithub地址:...
  • jieba分词 jieba分词支持三种分词模式: 精确模式, 试图将句子最精确地切开,适合文本分析 全模式,把句子中所有的可以成词的词语都扫描出来,速度非常快,但是不能解决歧义 ...在python2.x和python3.x均兼容,...
  • 2.分词 jieba.cut 方法接受三个输入参数: 需要分词的字符串;cut_all 参数用来控制是否采用全模式;HMM 参数用来控制是否使用 HMM 模型jieba.cut_for_search 方法接受两个参数:需要分词的字符串;是否使用 HMM...
  • python调用中科院分词器进行中文分词之前一直使用python自带的jieba分词来进行中文分词,但是慢慢感觉分词效果不是很好,所以想用中科院的分词器进行分词。先看一下jieba分词效果import jieba str1='张三是我的老师'...
  • jieba “结巴”中文分词:做最好的 Python 中文分词组件 "Jieba" (Chinese for "to stutter") Chinese text segmentation: built to be the best Python Chinese word segmentation module.

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 8,941
精华内容 3,576
关键字:

中文分词python编码

python 订阅