Python数据预处理--文本特征提取(以Jieba工具包为例)

需求场景:

基于分词技术,实现对文本数据中命名实体(如人名、地名等)的提取,或者自动计算文本中的TF(词频)和TF-IDF(词频-逆向文件频率)。

主流工具包:

目前业界主流的分词工具包有“jieba”和“HanLP”等好几种。其中jieba是目前Python社区中最广泛使用的,HanLP作为Java开发的工具包,使用Python调用时 需要先加载jpype模块。本文主要介绍Jieba工具,并进行文本特征提取的操作示范。

 

安装方法:

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

三种分词模式

  • 精确模式:将句子最精确地切开,适合文本分析;
  • 全模式: 把句子中所有的可以成词的词语都扫描出来, 速度非常快,但是不能解决歧义;
  • 搜索引擎模式:在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词。
        # 1 全模式,扫描所有可以成词的词语, 速度非常快,不能解决歧义.
        seg_list = jieba.cut("我来到四川美术学院", cut_all=True)
        print("\nFull Mode: " + "/ ".join(seg_list))
        # 返回 “Full Mode: 我/ 来到/ 四川/ 美术/ 美术学/ 美术学院/ 术学/ 学院”
    
    
        # 2 默认是精确模式,适合文本分析.
        seg_list = jieba.cut("我来到四川美术学院", cut_all=False)
        print("\nDefault Mode: " + "/ ".join(seg_list))
        # 返回“Default Mode: 我/ 来到/ 四川/ 美术学院”
    
        # 3 搜索引擎模式,对长词再次切分,提高召回率,适合用于搜索引擎分词。
        seg_list = jieba.cut_for_search("小明硕士毕业于中国科学院计算所,后在日本京都大学深        造",HMM=False)
        print('\n搜索引擎模式:'+", ".join(seg_list))

    自定义分词字典

  • 添加自定义词典
    print('\n原文档:\t' + '/'.join(jieba.cut('猫狗应该不会被切开', HMM=False)))
    # 猫/狗/应该/不会/被/切开
    print(jieba.suggest_freq('猫狗', True))

    print('改进文档:\t' + '/'.join(jieba.cut('猫狗应该不会被切开', HMM=False)))
    # 猫狗/应该/不会/被/切开
  • 加载自定义词典文件
    sys.path.append("../")
    jieba.load_userdict("../Files/user_dict.txt") # 加载自定义分词词典

    seg_list1 = jieba.cut("今天很高兴在中国移动和大家交流学习")
    print('\n\n加载自定义分词词典:\n'+"/ ".join(seg_list1))

词典文件格式:

 

关键词提取

    '''
    extract_tags(sentence, topK=20, withWeight=False, allowPOS=())
    sentence 为待提取的文本
    topK 为返回几个 TF/IDF 权重最大的关键词,默认值为 20
    withWeight 为是否一并返回关键词权重值,默认值为 False
    allowPOS 仅包括指定词性的词,默认值为空,即不筛选
    '''
    s = "此外,公司拟对全资子公司吉林欧亚置业有限公司增资4.3亿元,增资后,吉林欧亚置业注册资本由7000万元增加到5亿元。吉林欧亚置业主要经营范围为房地产开发及百货零售等业务。目前在建吉林欧亚城市商业综合体项目。2013年,实现营业收入0万元,实现净利润-139.13万元。"
    for x, w in jieba.analyse.extract_tags(s, 10, withWeight=True):
        print('%s %s' % (x, w))

词性标注

    words = jieba.posseg.cut("我爱北京天安门")
    for word, flag in words:
        print('%s %s' % (word, flag))

    '''
    我 r
    爱 v
    北京 ns
    天安门 ns
    '''

 

词性对照文件:

おすすめ

転載: blog.csdn.net/chenxy02/article/details/104632346