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实现代码行数统计示例分享
Feb 10 Python
浅谈Python实现贪心算法与活动安排问题
Dec 19 Python
python日期时间转为字符串或者格式化输出的实例
May 29 Python
python 实现矩阵按对角线打印
Nov 29 Python
Pytorch 保存模型生成图片方式
Jan 10 Python
pytorch 实现删除tensor中的指定行列
Jan 13 Python
基于Python和PyYAML读取yaml配置文件数据
Jan 13 Python
通过Python实现一个简单的html页面
May 16 Python
Keras load_model 导入错误的解决方式
Jun 09 Python
python爬虫调度器用法及实例代码
Nov 30 Python
Python实战之OpenCV实现猫脸检测
Jun 26 Python
Python中第三方库Faker的使用详解
Apr 02 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新手谈谈我的学习心得
2007/02/25 PHP
浅析php单例模式
2014/11/25 PHP
php实现curl模拟ftp上传的方法
2015/07/29 PHP
php中10个不同等级压缩优化图片操作示例
2016/11/14 PHP
Code: write(s,d) 输出连续字符串
2007/08/19 Javascript
设置iframe的document.designMode后仅Firefox中其body.innerHTML为br
2012/02/27 Javascript
使用jQuery同时控制四张图片的伸缩实现代码
2013/04/19 Javascript
js浮点数保留两位小数点示例代码(四舍五入)
2013/12/26 Javascript
javascript计算用户打开网页的停留时间
2014/01/09 Javascript
Jquery中ajax方法data参数的用法小结
2014/02/12 Javascript
基于JavaScript实现定时跳转到指定页面
2016/01/01 Javascript
JS中Json数据的处理和解析JSON数据的方法详解
2016/06/29 Javascript
Jquery删除css属性的简单方法
2016/12/04 Javascript
微信小程序开发之大转盘 仿天猫超市抽奖实例
2016/12/08 Javascript
vue父子组件的数据传递示例
2017/03/07 Javascript
Bootstrap table学习笔记(2) 前后端分页模糊查询
2017/05/18 Javascript
详解在AngularJS的controller外部直接获取$scope
2017/06/02 Javascript
微信小程序-getUserInfo回调的实例详解
2017/10/27 Javascript
基于vue配置axios的方法步骤
2017/11/09 Javascript
浅谈在不使用ssr的情况下解决Vue单页面SEO问题(2)
2018/11/08 Javascript
koa2 数据api中间件设计模型的实现方法
2020/07/13 Javascript
[53:21]2014 DOTA2国际邀请赛中国区预选赛5.21 DT VS LGD-CDEC
2014/05/22 DOTA
使用Python快速搭建HTTP服务和文件共享服务的实例讲解
2018/06/04 Python
Python3最长回文子串算法示例
2019/03/04 Python
Python实现图像去噪方式(中值去噪和均值去噪)
2019/12/18 Python
python抢购软件/插件/脚本附完整源码
2021/03/04 Python
俄罗斯在线手表和珠宝商店:AllTime
2019/09/28 全球购物
Currentbody美国/加拿大:美容仪专家
2020/03/09 全球购物
群众路线专项整治方案
2014/10/27 职场文书
关于感谢信的范文
2015/01/23 职场文书
2015年置业顾问工作总结
2015/04/07 职场文书
行政助理岗位职责范本
2015/04/11 职场文书
消防安全月活动总结
2015/05/08 职场文书
趣味运动会通讯稿
2015/07/18 职场文书
Golang: 内建容器的用法
2021/05/05 Golang
MySQL 5.7常见数据类型
2021/07/15 MySQL