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 open()文件处理使用介绍
Nov 30 Python
Python中使用PIPE操作Linux管道
Feb 04 Python
在Mac OS上部署Nginx和FastCGI以及Flask框架的教程
May 02 Python
numpy自动生成数组详解
Dec 15 Python
浅析python参数的知识点
Dec 10 Python
如何在Django中添加没有微秒的 DateTimeField 属性详解
Jan 30 Python
Python中拆分字符串的操作方法
Jul 23 Python
selenium+python实现自动登陆QQ邮箱并发送邮件功能
Dec 13 Python
Tensorflow 实现分批量读取数据
Jan 04 Python
Python 动态变量名定义与调用方法
Feb 09 Python
python的Jenkins接口调用方式
May 12 Python
Python实现批量将文件复制到新的目录中再修改名称
Apr 12 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
咖啡知识大全
2021/03/03 新手入门
php将远程图片保存到本地服务器的实现代码
2015/08/03 PHP
php生成短网址/短链接原理和用法实例分析
2020/05/29 PHP
javascript DOM编程实例(智播客学习)
2009/11/23 Javascript
Jquery 插件开发笔记整理
2011/01/17 Javascript
javascript游戏开发之《三国志曹操传》零部件开发(五)可移动地图的实现
2013/01/23 Javascript
Javascript的this用法
2017/01/16 Javascript
bootstrap 点击空白处popover弹出框隐藏实例
2018/01/24 Javascript
vue.js2.0点击获取自己的属性和jquery方法
2018/02/23 jQuery
vue搜索和vue模糊搜索代码实例
2019/05/07 Javascript
Node.js+ELK日志规范的实现
2019/05/23 Javascript
JavaScript中的函数申明、函数表达式、箭头函数
2019/12/06 Javascript
深入浅析golang zap 日志库使用(含文件切割、分级别存储和全局使用等)
2020/02/19 Javascript
[01:49]一目了然!DOTA2DotA快捷操作对比第二弹
2014/05/16 DOTA
[02:11]完美世界DOTA2联赛10月28日赛事精彩集锦:来吧展示实力强劲
2020/10/29 DOTA
全面了解Python环境配置及项目建立
2016/06/30 Python
Python基于matplotlib实现绘制三维图形功能示例
2018/01/18 Python
django中静态文件配置static的方法
2018/05/20 Python
Python自定义函数实现求两个数最大公约数、最小公倍数示例
2018/05/21 Python
python如何生成网页验证码
2018/07/28 Python
python numpy元素的区间查找方法
2018/11/14 Python
python导入模块交叉引用的方法
2019/01/19 Python
python Tkinter版学生管理系统
2019/02/20 Python
在Pytorch中计算自己模型的FLOPs方式
2019/12/30 Python
利用Python裁切tiff图像且读取tiff,shp文件的实例
2020/03/10 Python
基于python纯函数实现井字棋游戏
2020/05/27 Python
SportsDirect.com新加坡:英国第一体育零售商
2019/03/30 全球购物
耐克亚太地区:Nike APAC
2019/12/07 全球购物
机械制造毕业生求职信
2014/03/03 职场文书
党风廉政承诺书
2014/03/27 职场文书
毕业生学校推荐信范文
2014/05/21 职场文书
预备党员综合考察材料
2014/05/31 职场文书
群众路线党员个人整改措施
2014/10/27 职场文书
医德医风自我评价2015
2015/03/03 职场文书
2015年音乐教学工作总结
2015/07/22 职场文书
你离财务总监还有多远?速览CFO的岗位职责
2019/11/18 职场文书