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运行时间的几种方法
Jun 17 Python
使用C++扩展Python的功能详解
Jan 12 Python
Flask框架web开发之零基础入门
Dec 10 Python
Pycharm以root权限运行脚本的方法
Jan 19 Python
Python实现的爬取百度文库功能示例
Feb 16 Python
Python: 传递列表副本方式
Dec 19 Python
python cv2截取不规则区域图片实例
Dec 21 Python
Django REST framwork的权限验证实例
Apr 02 Python
django rest framework 过滤时间操作
Jul 12 Python
django表单中的按钮获取数据的实例分析
Jul 31 Python
详解numpy.ndarray.reshape()函数的参数问题
Oct 13 Python
Python+Selenium实现抖音、快手、B站、小红书、微视、百度好看视频、西瓜视频、微信视频号、搜狐视频、一点号、大风号、趣头条等短视频自动发布
Apr 13 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 高级课程笔记 面向对象
2009/06/21 PHP
php PDO中文乱码解决办法
2009/07/20 PHP
PHP四舍五入精确小数位及取整
2014/01/14 PHP
destoon实现首页显示供应、企业、资讯条数的方法
2014/07/15 PHP
不错的JS中变量相关的细节分析
2007/08/13 Javascript
JavaScript入门教程(10) 认识其他对象
2009/01/31 Javascript
利用javascript移动div层-javascript 拖动层
2009/03/22 Javascript
javascript 折半查找字符在数组中的位置(有序列表)
2010/12/09 Javascript
JavaScript常用小技巧小结
2014/12/29 Javascript
JS修改iframe页面背景颜色的方法
2015/04/01 Javascript
浅谈Vue的基本应用
2016/12/27 Javascript
vue-router实现webApp切换页面动画效果代码
2017/05/25 Javascript
使用prop解决一个checkbox选中后再次选中失效的问题
2017/07/05 Javascript
Angular @HostBinding()和@HostListener()用法
2018/03/05 Javascript
js实现二级菜单点击显示当前内容效果
2018/04/28 Javascript
微信小程序文章详情页面实现代码
2018/09/10 Javascript
详解Vue.js使用Swiper.js在iOS
2018/09/10 Javascript
vue实现图片上传预览功能
2019/12/23 Javascript
Python中正则表达式的用法实例汇总
2014/08/18 Python
零基础写python爬虫之抓取百度贴吧代码分享
2014/11/06 Python
win7上python2.7连接mysql数据库的方法
2017/01/14 Python
Python内置函数—vars的具体使用方法
2017/12/04 Python
Python中新式类与经典类的区别详析
2019/07/10 Python
python基于event实现线程间通信控制
2020/01/13 Python
Python多进程multiprocessing、进程池用法实例分析
2020/03/24 Python
CSS3实现文字波浪线效果示例代码
2016/11/20 HTML / CSS
2014年入党积极分子党课学习心得体会模板
2014/04/03 职场文书
创先争优公开承诺书
2014/08/30 职场文书
甘南现象心得体会
2014/09/11 职场文书
大学生实习证明范本
2014/09/19 职场文书
2014财务年度工作总结
2014/11/11 职场文书
遗失证明范文
2015/06/19 职场文书
学生安全责任协议书
2016/03/22 职场文书
2019辞职报告范本3篇!
2019/07/23 职场文书
修改并编译golang源码的操作步骤
2021/07/25 Golang
CSS实现单选折叠菜单功能
2021/11/01 HTML / CSS