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 基础学习第二弹 类属性和实例属性
Aug 27 Python
python Django模板的使用方法(图文)
Nov 04 Python
python中Genarator函数用法分析
Apr 08 Python
Python实现批量修改文件名实例
Jul 08 Python
Pycharm导入Python包,模块的图文教程
Jun 13 Python
Python计算一个点到所有点的欧式距离实现方法
Jul 04 Python
python 实现多维数组(array)排序
Feb 28 Python
Matplotlib使用Cursor实现UI定位的示例代码
Mar 12 Python
python 深度学习中的4种激活函数
Sep 18 Python
python向企业微信发送文字和图片消息的示例
Sep 28 Python
python自动统计zabbix系统监控覆盖率的示例代码
Apr 03 Python
如何判断pytorch是否支持GPU加速
Jun 01 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
使用数据库保存session的方法
2006/10/09 PHP
PDO预处理语句PDOStatement对象使用总结
2014/11/20 PHP
Laravel如何使用数据库事务及捕获事务失败后的异常详解
2017/10/23 PHP
js中的window.open返回object的错误的解决方法
2009/08/15 Javascript
Javascript中正则表达式的全局匹配模式分析
2011/04/26 Javascript
javascript小数四舍五入多种方法实现
2012/12/23 Javascript
JavaScript中匿名、命名函数的性能测试
2014/09/04 Javascript
JS跨域问题详解
2014/11/25 Javascript
jQuery+PHP实现微信转盘抽奖功能的方法
2016/05/25 Javascript
文件上传的几个示例分享【推荐】
2016/12/16 Javascript
javascript填充默认头像方法
2018/02/22 Javascript
vue列表数据发生变化指令没有更新问题及解决方法
2020/01/16 Javascript
原生JS实现九宫格抽奖
2020/09/13 Javascript
JavaScript函数柯里化实现原理及过程
2020/12/02 Javascript
[02:57]DOTA2英雄基础教程 风行者
2014/01/16 DOTA
[03:44]2015国际邀请赛选手档案—Cloud9.NoTail
2015/07/28 DOTA
Python操作MySQL简单实现方法
2015/01/26 Python
在Python中使用lambda高效操作列表的教程
2015/04/24 Python
使用pycharm生成代码模板的实例
2018/05/23 Python
python3+requests接口自动化session操作方法
2018/10/13 Python
python3实现zabbix告警推送钉钉的示例
2019/02/20 Python
Python音频操作工具PyAudio上手教程详解
2019/06/26 Python
树莓派3 搭建 django 服务器的实例
2019/08/29 Python
Python中的上下文管理器相关知识详解
2019/09/19 Python
应届生服装设计自我评价
2013/09/20 职场文书
求职信内容考虑哪几点
2013/10/05 职场文书
人力资源主管的岗位职责
2014/03/15 职场文书
大学英语演讲稿范文
2014/04/24 职场文书
最美乡村医生事迹材料
2014/06/02 职场文书
校庆活动策划方案
2014/06/05 职场文书
村党支部书记个人对照材料汇报
2014/10/26 职场文书
2015庆祝七一建党节94周年活动总结
2015/03/20 职场文书
银行服务理念口号
2015/12/25 职场文书
公文写作:教你写“建议书”
2019/05/07 职场文书
PostgreSQL数据库创建并使用视图以及子查询
2022/04/11 PostgreSQL
java版 联机五子棋游戏
2022/05/04 Java/Android