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 相关文章推荐
Python3遍历目录树实现方法
May 22 Python
Python设计模式之中介模式简单示例
Jan 09 Python
Python中实现变量赋值传递时的引用和拷贝方法
Apr 29 Python
python程序变成软件的实操方法
Jun 24 Python
python如何制作英文字典
Jun 25 Python
在PyCharm的 Terminal(终端)切换Python版本的方法
Aug 02 Python
python 字典有序并写入json文件过程解析
Sep 30 Python
python和pywin32实现窗口查找、遍历和点击的示例代码
Apr 01 Python
在python中修改.properties文件的操作
Apr 08 Python
使用Python画了一棵圣诞树的实例代码
Nov 27 Python
Pandas数据类型之category的用法
Jun 28 Python
Python Flask搭建yolov3目标检测系统详解流程
Nov 07 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/09/20 PHP
百度地图经纬度转换到腾讯地图/Google 对应的经纬度
2015/08/28 PHP
ThinkPHP静态缓存简单配置和使用方法详解
2016/03/23 PHP
php微信公众号开发之翻页查询
2018/10/20 PHP
YII2框架中behavior行为的理解与使用方法示例
2020/03/13 PHP
php封装实现钉钉机器人报警接口的示例代码
2020/08/08 PHP
一个JS小玩意 几个属性相加不能超过一个特定值.
2009/09/29 Javascript
一个JS的日期格式化算法示例
2013/07/31 Javascript
jquery获取复选框被选中的值
2014/04/10 Javascript
Javascript中的delete操作符详细介绍
2014/06/06 Javascript
JavaScript匿名函数用法分析
2015/02/13 Javascript
JQuery标签页效果实例详解
2015/12/24 Javascript
微信小程序分页加载的实例代码
2017/07/11 Javascript
js图片轮播插件的封装
2017/07/21 Javascript
Node.js静态服务器的实现方法
2018/02/28 Javascript
[04:22]DOTA2上海特级锦标赛主赛事第四日TOP10
2016/03/06 DOTA
讲解Python中if语句的嵌套用法
2015/05/14 Python
Python利用Beautiful Soup模块创建对象详解
2017/03/27 Python
200 行python 代码实现 2048 游戏
2018/01/12 Python
python+matplotlib实现鼠标移动三角形高亮及索引显示
2018/01/15 Python
Python整数对象实现原理详解
2019/07/01 Python
Pytorch Tensor的索引与切片例子
2019/08/18 Python
简单了解python中的与或非运算
2019/09/18 Python
python实现飞船大战
2020/04/24 Python
video结合canvas实现视频在线截图功能
2018/06/25 HTML / CSS
适合各种场合的美食礼品:Harry & David
2016/08/03 全球购物
什么是触发器(trigger)? 触发器有什么作用?
2013/09/18 面试题
护理专业的自荐信
2013/10/22 职场文书
求职信写作要突出重点
2014/01/01 职场文书
ktv总经理岗位职责
2014/02/17 职场文书
股票投资建议书
2014/05/19 职场文书
经费申请报告范文
2015/05/18 职场文书
中小学生安全教育观后感
2015/06/17 职场文书
Mysql中where与on的区别及何时使用详析
2021/08/04 MySQL
基于Python实现将列表数据生成折线图
2022/03/23 Python
Win11怎么跳过联网验机 ?Win11跳过联网验机激活教程
2022/04/05 数码科技