python提取内容关键词的方法


Posted in Python onMarch 16, 2015

本文实例讲述了python提取内容关键词的方法。分享给大家供大家参考。具体分析如下:

一个非常高效的提取内容关键词的python代码,这段代码只能用于英文文章内容,中文因为要分词,这段代码就无能为力了,不过要加上分词功能,效果和英文是一样的。

# coding=UTF-8

import nltk

from nltk.corpus import brown

# This is a fast and simple noun phrase extractor (based on NLTK)

# Feel free to use it, just keep a link back to this post

# http://thetokenizer.com/2013/05/09/efficient-way-to-extract-the-main-topics-of-a-sentence/

# Create by Shlomi Babluki

# May, 2013

  

# This is our fast Part of Speech tagger

#############################################################################

brown_train = brown.tagged_sents(categories='news')

regexp_tagger = nltk.RegexpTagger(

    [(r'^-?[0-9]+(.[0-9]+)?$', 'CD'),

     (r'(-|:|;)$', ':'),

     (r'\'*$', 'MD'),

     (r'(The|the|A|a|An|an)$', 'AT'),

     (r'.*able$', 'JJ'),

     (r'^[A-Z].*$', 'NNP'),

     (r'.*ness$', 'NN'),

     (r'.*ly$', 'RB'),

     (r'.*s$', 'NNS'),

     (r'.*ing$', 'VBG'),

     (r'.*ed$', 'VBD'),

     (r'.*', 'NN')

])

unigram_tagger = nltk.UnigramTagger(brown_train, backoff=regexp_tagger)

bigram_tagger = nltk.BigramTagger(brown_train, backoff=unigram_tagger)

#############################################################################

# This is our semi-CFG; Extend it according to your own needs

#############################################################################

cfg = {}

cfg["NNP+NNP"] = "NNP"

cfg["NN+NN"] = "NNI"

cfg["NNI+NN"] = "NNI"

cfg["JJ+JJ"] = "JJ"

cfg["JJ+NN"] = "NNI"

#############################################################################

class NPExtractor(object):

    def __init__(self, sentence):

        self.sentence = sentence

    # Split the sentence into singlw words/tokens

    def tokenize_sentence(self, sentence):

        tokens = nltk.word_tokenize(sentence)

        return tokens

    # Normalize brown corpus' tags ("NN", "NN-PL", "NNS" > "NN")

    def normalize_tags(self, tagged):

        n_tagged = []

        for t in tagged:

            if t[1] == "NP-TL" or t[1] == "NP":

                n_tagged.append((t[0], "NNP"))

                continue

            if t[1].endswith("-TL"):

                n_tagged.append((t[0], t[1][:-3]))

                continue

            if t[1].endswith("S"):

                n_tagged.append((t[0], t[1][:-1]))

                continue

            n_tagged.append((t[0], t[1]))

        return n_tagged

    # Extract the main topics from the sentence

    def extract(self):

        tokens = self.tokenize_sentence(self.sentence)

        tags = self.normalize_tags(bigram_tagger.tag(tokens))

        merge = True

        while merge:

            merge = False

            for x in range(0, len(tags) - 1):

                t1 = tags[x]

                t2 = tags[x + 1]

                key = "%s+%s" % (t1[1], t2[1])

                value = cfg.get(key, '')

                if value:

                    merge = True

                    tags.pop(x)

                    tags.pop(x)

                    match = "%s %s" % (t1[0], t2[0])

                    pos = value

                    tags.insert(x, (match, pos))

                    break

        matches = []

        for t in tags:

            if t[1] == "NNP" or t[1] == "NNI":

            #if t[1] == "NNP" or t[1] == "NNI" or t[1] == "NN":

                matches.append(t[0])

        return matches

# Main method, just run "python np_extractor.py"

def main():

    sentence = "Swayy is a beautiful new dashboard for discovering and curating online content."

    np_extractor = NPExtractor(sentence)

    result = np_extractor.extract()

    print "This sentence is about: %s" % ", ".join(result)

if __name__ == '__main__':

    main()

希望本文所述对大家的Python程序设计有所帮助。

Python 相关文章推荐
python实现爬虫统计学校BBS男女比例之数据处理(三)
Dec 31 Python
Python使用自带的ConfigParser模块读写ini配置文件
Jun 26 Python
Python使用QQ邮箱发送Email的方法实例
Feb 09 Python
利用python模拟实现POST请求提交图片的方法
Jul 25 Python
Python SqlAlchemy动态添加数据表字段实例解析
Feb 07 Python
Python3读取Excel数据存入MySQL的方法
May 04 Python
python发送多人邮件没有展示收件人问题的解决方法
Jun 21 Python
python 一个figure上显示多个图像的实例
Jul 08 Python
python3实现带多张图片、附件的邮件发送
Aug 10 Python
解决jupyter notebook 前面书写后面内容消失的问题
Apr 13 Python
最新PyCharm从安装到PyCharm永久激活再到PyCharm官方中文汉化详细教程
Nov 17 Python
Python 2.6.6升级到Python2.7.15的详细步骤
Dec 14 Python
python生成随机mac地址的方法
Mar 16 #Python
python通过线程实现定时器timer的方法
Mar 16 #Python
python每隔N秒运行指定函数的方法
Mar 16 #Python
python实现登陆知乎获得个人收藏并保存为word文件
Mar 16 #Python
Python标准库urllib2的一些使用细节总结
Mar 16 #Python
python实现查询苹果手机维修进度
Mar 16 #Python
python让图片按照exif信息里的创建时间进行排序的方法
Mar 16 #Python
You might like
探讨PHP调用时间格式的参数详解
2013/06/06 PHP
PHP SESSION的增加、删除、修改、查看操作
2015/03/20 PHP
PHP用mb_string函数库处理与windows相关中文字符及Win环境下开启PHP Mb_String方法
2015/11/11 PHP
php生成curl命令行的方法
2015/12/14 PHP
js进行表单验证实例分析
2015/02/10 Javascript
jQuery使用hide方法隐藏元素自身用法实例
2015/03/30 Javascript
javascript实现完美拖拽效果
2015/05/06 Javascript
jQuery UI Bootstrap是什么?
2016/06/17 Javascript
AngularJS入门教程之Helloworld示例
2016/12/25 Javascript
js中作用域的实例解析
2017/03/16 Javascript
详解vue2.0组件通信各种情况总结与实例分析
2017/03/22 Javascript
详解redux异步操作实践
2018/08/15 Javascript
从零到一详聊创建Vue工程及遇到的常见问题
2019/04/25 Javascript
vue项目中mock.js的使用及基本用法
2019/05/22 Javascript
vue的注意规范之v-if 与 v-for 一起使用教程
2019/08/04 Javascript
微信小程序封装分享与分销功能过程解析
2019/08/13 Javascript
解决LayUI加上form.render()下拉框和单选以及复选框不出来的问题
2019/09/27 Javascript
[02:04]2018DOTA2亚洲邀请赛Secret赛前采访
2018/04/03 DOTA
python中类变量与成员变量的使用注意点总结
2017/04/29 Python
python绘制简单折线图代码示例
2017/12/19 Python
python3.4.3下逐行读入txt文本并去重的方法
2018/04/29 Python
Python文本统计功能之西游记用字统计操作示例
2018/05/07 Python
Python字典循环添加一键多值的用法实例
2019/01/20 Python
Django实现微信小程序支付的示例代码
2020/09/03 Python
CSS3使用border-radius属性制作圆角
2014/12/22 HTML / CSS
Java里面Pass by value和Pass by Reference是什么意思
2016/05/02 面试题
英语专业学生个人求职信
2014/01/28 职场文书
党支部书记岗位责任制
2014/02/11 职场文书
保安队长职务说明书
2014/02/23 职场文书
企业党员公开承诺书
2014/03/26 职场文书
公开承诺书格式
2014/05/21 职场文书
商业用房租赁协议书
2014/10/13 职场文书
贵阳市党的群众路线教育实践活动党(工)委领导班子整改方案
2014/10/26 职场文书
《女娲补天》教学反思
2016/02/20 职场文书
小学三年级作文之写景
2019/11/05 职场文书
Python常用配置文件ini、json、yaml读写总结
2021/07/09 Python