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获取网页上图片下载地址的方法
Mar 11 Python
Python映射拆分操作符用法实例
May 19 Python
Pycharm学习教程(2) 代码风格
May 02 Python
python 平衡二叉树实现代码示例
Jul 07 Python
win7+Python3.5下scrapy的安装方法
Jul 31 Python
Python unittest 简单实现参数化的方法
Nov 30 Python
python matplotlib库绘制散点图例题解析
Aug 10 Python
Python 将 QQ 好友头像生成祝福语的实现代码
May 03 Python
Tensorflow tensor 数学运算和逻辑运算方式
Jun 30 Python
Python3 类型标注支持操作
Jun 02 Python
python中字符串String及其常见操作指南(方法、函数)
Apr 06 Python
OpenCV项目实践之停车场车位实时检测
Apr 11 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如何解决网站大流量与高并发的问题
2011/06/25 PHP
PHP生成唯一的促销/优惠/折扣码(附源码)
2012/12/28 PHP
PHP实现动态添加XML中数据的方法
2018/03/30 PHP
ImageZoom 图片放大镜效果(多功能扩展篇)
2010/04/14 Javascript
javaScript 利用闭包模拟对象的私有属性
2011/12/29 Javascript
IE、FF、Chrome浏览器中的JS差异介绍
2013/08/13 Javascript
验证手机号码的JS方法分享
2013/09/10 Javascript
jquery ajax对特殊字符进行转义防止js注入使用示例
2013/11/21 Javascript
JavaScript实现同一页面内两个表单互相传值的方法
2015/08/12 Javascript
jquery+CSS3实现3D拖拽相册效果
2016/07/18 Javascript
AngularJS基础 ng-copy 指令实例代码
2016/08/01 Javascript
JQuery异步提交表单与文件上传功能示例
2017/01/12 Javascript
详解Windows下安装Nodejs步骤
2017/05/18 NodeJs
canvas基础绘制-绚丽倒计时的实例
2017/09/17 Javascript
Vue.js中provide/inject实现响应式数据更新的方法示例
2019/10/16 Javascript
微信小游戏中three.js离屏画布的示例代码
2020/10/12 Javascript
[04:38]完美世界携手游戏风云打造 卡尔工作室饰品系统篇
2013/04/25 DOTA
[47:08]OG vs INfamous 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
Python中使用Inotify监控文件实例
2015/02/14 Python
浅谈Python中copy()方法的使用
2015/05/21 Python
Django跨域请求CSRF的方法示例
2018/11/11 Python
使用celery执行Django串行异步任务的方法步骤
2019/06/06 Python
Python PyQt5运行程序把输出信息展示到GUI图形界面上
2020/04/27 Python
h5实现获取用户地理定位的实例代码
2017/07/17 HTML / CSS
英国Iceland杂货店:网上食品购物
2020/12/16 全球购物
C/C++程序员常见面试题一
2012/12/08 面试题
进程的查看和调度分别使用什么命令
2015/03/25 面试题
标准毕业生自荐信范文
2013/11/04 职场文书
学年末自我鉴定
2014/01/21 职场文书
元旦获奖感言
2014/03/08 职场文书
心理咨询承诺书
2014/05/20 职场文书
2014年采购部工作总结
2014/11/20 职场文书
医院合作意向书范本
2015/05/08 职场文书
思想品德课教学反思
2016/02/24 职场文书
残联2016年全国助残日活动总结
2016/04/01 职场文书
创业计划书之健康营养产业
2019/10/15 职场文书