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从入门到精通(DAY 1)
Dec 20 Python
python3.5仿微软计算器程序
Mar 30 Python
Python 中Pickle库的使用详解
Feb 24 Python
Python中跳台阶、变态跳台阶与矩形覆盖问题的解决方法
May 19 Python
python实现将文件夹下面的不是以py文件结尾的文件都过滤掉的方法
Oct 21 Python
关于Python形参打包与解包小技巧分享
Aug 24 Python
OpenCV+face++实现实时人脸识别解锁功能
Aug 28 Python
基于Django实现日志记录报错信息
Dec 17 Python
Django添加bootstrap框架时无法加载静态文件的解决方式
Mar 27 Python
jupyter notebook实现显示行号
Apr 13 Python
PyCharm MySQL可视化Database配置过程图解
Jun 09 Python
使用python实现下载我们想听的歌曲,速度超快
Jul 09 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/04/20 PHP
php常用Stream函数集介绍
2013/06/24 PHP
CodeIgniter模板引擎使用实例
2014/07/15 PHP
dvwa+xampp搭建显示乱码的问题及解决方案
2015/08/23 PHP
用HTML/JS/PHP方式实现页面延时跳转的简单实例
2016/07/18 PHP
PHP中的使用curl发送请求(GET请求和POST请求)
2017/02/08 PHP
脚本吧 - 幻宇工作室用到js,超强推荐expand.js
2006/12/23 Javascript
Flow之一个新的Javascript静态类型检查器
2015/12/21 Javascript
js获取鼠标点击的对象,点击另一个按钮删除该对象的实现代码
2016/05/13 Javascript
Javascript基础_标记文字的实现方法
2016/06/14 Javascript
详解JS: reduce方法实现 webpack多文件入口
2017/02/14 Javascript
vue v-on监听事件详解
2017/05/17 Javascript
简单的Vue SSR的示例代码
2018/01/12 Javascript
JavaScript实现抖音罗盘时钟
2019/10/11 Javascript
Vue中el-form标签中的自定义el-select下拉框标签功能
2020/04/20 Javascript
[02:39]DOTA2英雄基础教程 天怒法师
2013/11/29 DOTA
python使用wmi模块获取windows下硬盘信息的方法
2015/05/15 Python
使用Python脚本实现批量网站存活检测遇到问题及解决方法
2016/10/11 Python
基于Python的接口测试框架实例
2016/11/04 Python
Django中的Signal代码详解
2018/02/05 Python
如何安装多版本python python2和python3共存以及pip共存
2018/09/18 Python
python项目对接钉钉SDK的实现
2019/07/15 Python
用Python徒手撸一个股票回测框架搭建【推荐】
2019/08/05 Python
django admin 自定义替换change页面模板的方法
2019/08/23 Python
Python之数据序列化(json、pickle、shelve)详解
2019/08/30 Python
基于Python实现扑克牌面试题
2019/12/11 Python
浅谈python中频繁的print到底能浪费多长时间
2020/02/21 Python
selenium WebDriverWait类等待机制的实现
2020/03/18 Python
基于python实现可视化生成二维码工具
2020/07/08 Python
python调用私有属性的方法总结
2020/07/24 Python
Python日志器使用方法及原理解析
2020/09/27 Python
CSS3实现的闪烁跳跃进度条示例(附源码)
2013/08/19 HTML / CSS
购买原创艺术品:Zatista
2019/11/09 全球购物
C++面试题目
2013/06/25 面试题
反对四风问题自我剖析材料
2014/09/29 职场文书
JavaWeb Servlet开发注册页面实例
2022/04/11 Java/Android