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 相关文章推荐
简单的编程0基础下Python入门指引
Apr 01 Python
Python实现将MySQL数据库表中的数据导出生成csv格式文件的方法
Jan 11 Python
Python之reload流程实例代码解析
Jan 29 Python
Django框架多表查询实例分析
Jul 04 Python
解决python中遇到字典里key值为None的情况,取不出来的问题
Oct 17 Python
Django 多环境配置详解
May 14 Python
python flask 如何修改默认端口号的方法步骤
Jul 12 Python
在Python中使用MongoEngine操作数据库教程实例
Dec 03 Python
python实现飞行棋游戏
Feb 05 Python
详解Python的三种拷贝方式
Feb 11 Python
浅谈Pytorch中的自动求导函数backward()所需参数的含义
Feb 29 Python
Python中文纠错的简单实现
Jul 07 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
isset和empty的区别
2007/01/15 PHP
PHP+Ajax实时自动检测是否联网的方法
2015/07/01 PHP
详解PHP PDO简单教程
2019/05/28 PHP
iis6+javascript Add an Extension File
2007/06/13 Javascript
javascript 导出数据到Excel(处理table中的元素)
2009/12/18 Javascript
Javascript 八进制转义字符(8进制)
2011/04/08 Javascript
基于javascript实现九九乘法表
2016/03/27 Javascript
如何解决IONIC页面底部被遮住无法向上滚动问题
2016/09/06 Javascript
使用BootStrapValidator完成前端输入验证
2016/09/28 Javascript
基于jquery实现弹幕效果
2016/09/29 Javascript
jquery 判断div show的状态实例
2016/12/03 Javascript
微信小程序 122100版本更新问题解决方案
2016/12/22 Javascript
手把手教你使用vue-cli脚手架(图文解析)
2017/11/08 Javascript
Vue设置长时间未操作登录自动到期返回登录页
2020/01/22 Javascript
详解Vue.js 响应接口
2020/07/04 Javascript
Python列表list内建函数用法实例分析【insert、remove、index、pop等】
2017/07/24 Python
PyQt5每天必学之拖放事件
2020/08/27 Python
详解PyCharm配置Anaconda的艰难心路历程
2018/08/13 Python
Python开发的十个小贴士和技巧及长常犯错误
2018/09/27 Python
Python解析Excle文件中的数据方法
2018/10/23 Python
解决pycharm上的jupyter notebook端口被占用问题
2019/12/17 Python
Python tkinter实现简单加法计算器代码实例
2020/05/13 Python
详解Python 函数参数的拆解
2020/09/02 Python
CSS3中Animation动画属性用法详解
2016/07/04 HTML / CSS
罗德与泰勒百货官网:Lord & Taylor
2016/08/12 全球购物
林清轩官方网站:山茶花润肤油开创者
2016/10/26 全球购物
美国工业用品采购网站:Zoro.com
2020/10/27 全球购物
serialVersionUID具有什么样的特征
2014/02/20 面试题
Java基础面试题
2014/07/19 面试题
奖学金自我鉴定范文
2013/10/03 职场文书
党员贯彻十八大精神思想汇报范文
2014/10/25 职场文书
辩护词格式
2015/05/22 职场文书
Vue Element UI自定义描述列表组件
2021/05/18 Vue.js
新手入门Mysql--概念
2021/06/18 MySQL
laravel添加角色和模糊搜索功能的实现代码
2021/06/22 PHP
Python实现抖音热搜定时爬取功能
2022/03/16 Python