1、基于 TF-IDF 算法的关键词抽取
1) 使用方法
import jieba.analyse
jieba.analyse.extract_tags(sentence, topK=20, withWeight=False, allowPOS=())
sentence:为待提取的文本。
topK:为返回几个 TF/IDF
权重最大的关键词,默认值为 20
。
allowPOS:仅包括指定词性的词,默认值为空,即不筛选。
jieba.analyse.TFIDF(idf_path=None): 新建 TFIDF
实例,idf_path
为 IDF
频率文件
使用示例:
import sys sys.path.append('../') import jieba import jieba.analyse from optparse import OptionParser USAGE = "usage: python extract_tags.py [file name] -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(",".join(tags))
2) 关键词提取所使用逆向文件频率(IDF)文本语料库可以切换成自定义语料库的路径
用法:
jieba.analyse.set_idf_path(file_name) # file_name为自定义语料库的路径
自定义语料库示例:https://github.com/fxsjy/jieba/blob/master/extra_dict/idf.txt.big
使用示例:
import sys sys.path.append('../') import jieba import jieba.analyse from optparse import OptionParser USAGE = "usage: python extract_tags_idfpath.py [file name] -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() jieba.analyse.set_idf_path("../extra_dict/idf.txt.big"); tags = jieba.analyse.extract_tags(content, topK=topK) print(",".join(tags))
3) 关键词提取所使用停止词(Stop Words)文本语料库可以切换成自定义语料库的路径
用法:
jieba.analyse.set_stop_words(file_name) # file_name为自定义语料库的路径
自定义语料库示例:https://github.com/fxsjy/jieba/blob/master/extra_dict/stop_words.txt
使用示例:
import sys sys.path.append('../') import jieba import jieba.analyse from optparse import OptionParser USAGE = "usage: python extract_tags_stop_words.py [file name] -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() jieba.analyse.set_stop_words("../extra_dict/stop_words.txt") jieba.analyse.set_idf_path("../extra_dict/idf.txt.big"); tags = jieba.analyse.extract_tags(content, topK=topK) print(",".join(tags))
4) 关键词一并返回关键词权重值示例
import sys sys.path.append('../') import jieba import jieba.analyse from optparse import OptionParser USAGE = "usage: python extract_tags_with_weight.py [file name] -k [top k] -w [with weight=1 or 0]" parser = OptionParser(USAGE) parser.add_option("-k", dest="topK") parser.add_option("-w", dest="withWeight") 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) if opt.withWeight is None: withWeight = False else: if int(opt.withWeight) is 1: withWeight = True else: withWeight = False content = open(file_name, 'rb').read() tags = jieba.analyse.extract_tags(content, topK=topK, withWeight=withWeight) if withWeight is True: for tag in tags: print("tag: %s\t\t weight: %f" % (tag[0],tag[1])) else: print(",".join(tags))
2、基于 TextRank 算法的关键词抽取
1)jieba.analyse.textrank(sentence, topK=20, withWeight=False, allowPOS=('ns', 'n', 'vn', 'v'))
直接使用,接口相同,注意默认过滤词性。
2) jieba.analyse.TextRank()
新建自定义 TextRank
实例
算法论文: TextRank: Bringing Order into Texts
使用示例:
#encoding=utf-8 from __future__ import unicode_literals import sys sys.path.append("../") import jieba import jieba.posseg import jieba.analyse print('='*40) print('1. 分词') print('-'*40) 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)) print('='*40) print('2. 添加自定义词典/调整词典') 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)) #69 print('/'.join(jieba.cut('「台中」正确应该不会被切开', HMM=False))) #「/台中/」/正确/应该/不会/被/切开 print('='*40) print('3. 关键词提取') print('-'*40) print(' TF-IDF') print('-'*40) s = "此外,公司拟对全资子公司吉林欧亚置业有限公司增资4.3亿元,增资后,吉林欧亚置业注册资本由7000万元增加到5亿元。吉林欧亚置业主要经营范围为房地产开发及百货零售等业务。目前在建吉林欧亚城市商业综合体项目。2013年,实现营业收入0万元,实现净利润-139.13万元。" for x, w in jieba.analyse.extract_tags(s, withWeight=True): print('%s %s' % (x, w)) print('-'*40) print(' TextRank') print('-'*40) for x, w in jieba.analyse.textrank(s, withWeight=True): print('%s %s' % (x, w)) print('='*40) print('4. 词性标注') print('-'*40) words = jieba.posseg.cut("我爱北京天安门") for word, flag in words: print('%s %s' % (word, flag)) print('='*40) print('6. Tokenize: 返回词语在原文的起止位置') print('-'*40) print(' 默认模式') print('-'*40) result = jieba.tokenize('永和服装饰品有限公司') for tk in result: print("word %s\t\t start: %d \t\t end:%d" % (tk[0],tk[1],tk[2])) print('-'*40) print(' 搜索模式') print('-'*40) result = jieba.tokenize('永和服装饰品有限公司', mode='search') for tk in result: print("word %s\t\t start: %d \t\t end:%d" % (tk[0],tk[1],tk[2]))
3、使用结巴分词(jieba)词性标注
1) jieba.posseg.POSTokenizer(tokenizer=None)
新建自定义分词器,tokenizer
参数可指定内部使用的 jieba.Tokenizer
分词器。jieba.posseg.dt
为默认词性标注分词器。
2) 标注句子分词后每个词的词性,采用和 ictclas
兼容的标记法。
3) 除了jieba
默认分词模式,提供paddle
模式下的词性标注功能。paddle
模式采用延迟加载方式,通过enable_paddle()
安装paddlepaddle-tiny
,并且import
相关代码;
使用示例:
>>> import jieba >>> import jieba.posseg as pseg >>> words = pseg.cut("我爱北京天安门") #jieba默认模式 >>> jieba.enable_paddle() #启动paddle模式。 0.40版之后开始支持,早期版本不支持 >>> words = pseg.cut("我爱北京天安门",use_paddle=True) #paddle模式 >>> for word, flag in words: ... print('%s %s' % (word, flag)) ... 我 r 爱 v 北京 ns 天安门 ns
paddle
模式词性标注对应表如下:
paddle
模式词性和专名类别标签集合如下表,其中词性标签 24 个(小写字母),专名类别标签 4 个(大写字母)。
标签 | 含义 | 标签 | 含义 | 标签 | 含义 | 标签 | 含义 |
n | 普通名词 | f | 方位名词 | s | 处所名词 | t | 时间 |
nr | 人名 | ns | 地名 | nt | 机构名 | nw | 作品名 |
nz | 其他专名 | v | 普通动词 | vd | 动副词 | vn | 名动词 |
a | 形容词 | ad | 副形词 | an | 名形词 | d | 副词 |
m | 数量词 | q | 量词 | r | 代词 | p | 介词 |
c | 连词 | u | 助词 | xc | 其他虚词 | w | 标点符号 |
PER | 人名 | LOC | 地名 | ORG | 机构名 | TIME | 时间 |
官方文档:https://github.com/fxsjy/jieba
相关文档: