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 相关文章推荐
pyqt5自定义信号实例解析
Jan 31 Python
python matplotlib绘图,修改坐标轴刻度为文字的实例
May 25 Python
利用python提取wav文件的mfcc方法
Jan 09 Python
Pycharm 实现下一个文件引用另外一个文件的方法
Jan 17 Python
Python字符串通过'+'和join函数拼接新字符串的性能测试比较
Mar 05 Python
使用python 对验证码图片进行降噪处理
Dec 18 Python
浅谈tensorflow模型保存为pb的各种姿势
May 25 Python
Python dict的常用方法示例代码
Jun 23 Python
python3的pip路径在哪
Jun 23 Python
有趣的二维码:使用MyQR和qrcode来制作二维码
May 10 Python
TensorFlow的自动求导原理分析
May 26 Python
如何利用python实现列表嵌套字典取值
Jun 10 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
PL-880隐藏功能
2021/03/01 无线电
DedeCMS dede_channeltype表字段注释
2010/04/07 PHP
PHP利用MySQL保存session的实现思路及示例代码
2014/09/09 PHP
Laravel 5 框架入门(四)完结篇
2015/04/09 PHP
PHP正则表达式之捕获组与非捕获组
2015/11/06 PHP
php中输出json对象的值(实现方法)
2018/03/07 PHP
Ext grid 添加右击菜单
2009/11/26 Javascript
DOM_window对象属性之--clipboardData对象操作代码
2011/02/03 Javascript
使用jquery实现简单的ajax
2013/07/08 Javascript
jQuery根据元素值删除数组元素的方法
2015/06/24 Javascript
Mvc提交表单的四种方法全程详解
2016/08/10 Javascript
js中数组的常用方法小结
2016/12/30 Javascript
详解如何在NodeJS项目中优雅的使用ES6
2017/04/22 NodeJs
vue.js 使用v-if v-else发现没有执行解决办法
2017/05/15 Javascript
简化vuex的状态管理方案的方法
2018/06/02 Javascript
JavaScript链式调用实例浅析
2018/12/19 Javascript
Vue源码之关于vm.$delete()/Vue.use()内部原理详解
2019/05/01 Javascript
jQuery+Ajax+js实现请求json格式数据并渲染到html页面操作示例
2020/06/02 jQuery
Vue之封装公用变量以及实现方式
2020/07/31 Javascript
elementUI同一页面展示多个Dialog的实现
2020/11/19 Javascript
jQuery实现简单弹幕制作
2020/12/10 jQuery
[04:02]2014DOTA2国际邀请赛 BBC每日综述中国战队将再度登顶
2014/07/21 DOTA
[03:11]DOTA2上海特锦赛小组赛第一日recap精彩回顾
2016/02/28 DOTA
[02:12]探秘2016国际邀请赛中国区预选赛选手房间
2016/06/25 DOTA
[04:40]DOTA2-DPC中国联赛1月26日Recap集锦
2021/03/11 DOTA
wxpython 学习笔记 第一天
2009/02/09 Python
python避免死锁方法实例分析
2015/06/04 Python
Python机器学习算法之k均值聚类(k-means)
2018/02/23 Python
python 将json数据提取转化为txt的方法
2018/10/26 Python
浅谈Python大神都是这样处理XML文件的
2019/05/31 Python
快速创建python 虚拟环境
2020/11/28 Python
使用css3制作动感导航条示例
2014/01/26 HTML / CSS
Html5 APP中监听返回事件处理的方法示例
2018/03/15 HTML / CSS
20年同学聚会感言
2014/02/03 职场文书
水电站项目建议书
2014/05/12 职场文书
普通党员对照检查材料
2014/08/28 职场文书