NLP工具——stanford Parser使用手册

Preface:工作两年多了,陆续接触过蛮多工具,时常没有时间整理整理,最近接触得多了,整理整理自己接触到的NLP这块工具

环境:

  1. macOS
  2. anaconda2

目录

一、下载

安装

资源

二、使用

运行配置及栗子

分词及POS

命名实体识别

句法分析

依存句法


一、下载

  1. 安装

    1. pip install stanfordcorenlp
  2. 资源

    1. 下载模型及文件:wget http://nlp.stanford.edu/software/stanford-corenlp-full-2018-10-05.zip
    2. 下载中文jar包:https://stanfordnlp.github.io/CoreNLP/download.html
    3. 解压stanford-corenlp-full-2018-10-05.zip,并将stanford-chinese-corenlp-2018-10-05-models.jar,放入文件夹中

 

二、使用

  1. 运行配置及栗子

    1. demo
      1. from stanfordcorenlp import StanfordCoreNLP
        path = '/Users/shifengmac/Downloads/myselfdoc/selflearning/stanford-corenlp-full-2018-10-05'
        nlp = StanfordCoreNLP(path, lang='zh')
        s = '''今天上海的天气很好'''
        
        token = nlp.word_tokenize(s)
        postag = nlp.pos_tag(s)
        ner = nlp.ner(s)
        parse = nlp.parse(s)
        dependencyParse = nlp.dependency_parse(s)
        
        print ' '.join(token)
        print '|'.join([','.join(i) for i in postag])
        print '|'.join([','.join(i) for i in ner])
        print parse
        for i, begin, end in dependencyParse:
            print i, '-'.join([str(begin), token[begin-1]]), '-'.join([str(end),token[end-1]])
        
        # python2.7条件下
        import sys
        reload(sys)
        sys.setdefaultencoding('utf-8')
        us = unicode(s)
        print ' '.join(nlp.word_tokenize(us))
        
        nlp.close()
        '''#结果:
        今天 上海 的 天气 很好
        今天,NT|上海,NR|的,DEG|天气,NN|很好,VV
        今天,DATE|上海,STATE_OR_PROVINCE|的,O|天气,O|很好,O
        (ROOT
          (IP
            (NP (NT 今天))
            (NP
              (DNP
                (NP (NR 上海))
                (DEG 的))
              (NP (NN 天气)))
            (VP (VV 很好))))
        ROOT 0-很好 5-很好
        nmod:tmod 5-很好 1-今天
        nmod:assmod 4-天气 2-上海
        case 2-上海 3-的
        nsubj 5-很好 4-天气
        
        今天 上
        '''

         

    2. 说明
      1. stanford-corenlp-full-2018-10-05文件夹下需要stanford-chinese-corenlp-2018-10-05-models.jar,代码才可以跑中文文本
      2. 查看StanfordCoreNLP函数,其默认内存4g,可自行改动memory参数
        1. Init signature: StanfordCoreNLP(self, path_or_host, port=None, memory='4g', lang='en', timeout=1500, quiet=True, logging_level=30)
        2. 源代码路径:/anaconda2/lib/python2.7/site-packages/stanfordcorenlp/corenlp.py
      3. 注意点及坑:
        1. 执行有权限限制时:sudo ipython进入ipython,或者sudo python demo.py执行文件 
        2. 在python2.7下,输入文本需要为str编码格式,不可unicode,识别有问题
  2. 分词及POS

    1. 调用:nlp.word_tokenize(s)、nlp.pos_tag(s)
    2. 缺点:不能加载自己的分词词典,毕竟主要针对英文,未考虑中文的分词工具。
    3. 词性解释:
      1. CC   :	 conjunction, coordinatin 表示连词
        CD   :	 numeral, cardinal 表示基数词
        DT   :	 determiner 表示限定词
        EX   :	 existential there 存在句
        FW   :	 foreign word 外来词
        IN   :	 preposition or conjunction, subordinating 介词或从属连词
        JJ   :	 adjective or numeral, ordinal 形容词或序数词
        JJR  :	 adjective, comparative 形容词比较级
        JJS  :	 adjective, superlative 形容词最高级
        LS   :	 list item marker 列表标识
        MD   :	 modal auxiliary 情态助动词
        NN   :	 noun, common, singular or mass
        NNS  :	 noun, common, plural
        NNP  :	 noun, proper, singular
        NNPS :	 noun, proper, plural
        PDT  :	 pre-determiner 前位限定词
        POS  :	 genitive marker 所有格标记
        PRP  :	 pronoun, personal 人称代词
        PRP$ :	 pronoun, possessive 所有格代词
        RB   :	 adverb 副词
        RBR  :	 adverb, comparative 副词比较级
        RBS  :	 adverb, superlative 副词最高级
        RP   :	 particle 小品词
        SYM  :	 symbol 符号
        TO   :	 "to" as preposition or infinitive marker 作为介词或不定式标记
        UH   :	 interjection 插入语
        VB   :	 verb, base form
        VBD  :	 verb, past tense
        VBG  :	 verb, present participle or gerund
        VBN  :	 verb, past participle
        VBP  :	 verb, present tense, not 3rd person singular
        VBZ  :	 verb, present tense,3rd person singular
        WDT  :	 WH-determiner WH限定词
        WP   :	 WH-pronoun WH代词
        WP$  :	 WH-pronoun, possessive WH所有格代词
        WRB  :	 Wh-adverb WH副词
  3. 命名实体识别

    1. 调用:ner = nlp.ner(s)
    2. 优点:能够识别多种ner,包括:FACILITY、ORGANIZATION、NUMBER,分别为设施名、组织名、数字
    3. 识别并处理实体的demo:
      1. from stanfordcorenlp import StanfordCoreNLP
        path = '/Users/shifengmac/Downloads/myselfdoc/selflearning/stanford-corenlp-full-2018-10-05'
        nlp = StanfordCoreNLP(path, lang='zh')
        
        s = '''“滴水湖”引进了中国航海博物馆、上海天文馆、滴水湖皇冠假日酒店、豪生国际酒店、大润发购物中心等一批功能性项目'''
        ner = nlp.ner(s)
        
        indexWordNer = {}
        wordindex = 0
        wordTag   = ''
        for lineIdx, line in enumerate(ner):
        	word = line[0]
        	tag  = line[1]	
        	if tag != 'O':
        		wordindex += 1 
        		if wordindex==1:
        			begin = lineIdx
        			wordTag = tag
        	else:
        		if wordindex != 0:
        			key = (begin, lineIdx-1)
        			wordner = ''.join([i[0] for i in ner[begin:lineIdx]])
        			value = (wordner, wordTag)
        			indexWordNer[key] = value
        			wordindex = 0
        indexWordNerSorted = sorted(indexWordNer.items(), key=lambda e:e[0][0])
        for key, value in indexWordNerSorted:
        	print key, '|'.join(value)
        '''
        #识别结果:(词的分词起始下标,结束下标),实体词|词的类型
        (5, 7) 中国航海博物馆|FACILITY
        (9, 10) 上海天文馆|ORGANIZATION
        (19, 21) 豪生国际酒店|ORGANIZATION
        (28, 28) 一|NUMBER
        '''

         

  4. 句法分析

    1. 调用:nlp.parse(s)
    2. 使用:
      1. 提取chunk,也即短语、词组之类的;如NP(名词短语)
      2. 两个词之间的距离,也即一个树的两个叶子节点之间的路径
    3. 词性解释
      1. ROOT :	要处理文本的语句
        IP   :	简单从句
        NP   :	名词短语
        VP   :	动词短语
        PU   :	断句符,通常是句号、问号、感叹号等标点符号
        LCP  :	方位词短语
        PP   :	介词短语
        CP   :	由‘的’构成的表示修饰性关系的短语
        DNP  :	由‘的’构成的表示所属关系的短语
        ADVP :	副词短语
        ADJP :	形容词短语
        DP   :	限定词短语
        QP   :	量词短语
        NN   :	常用名词
        NT   :	时间名词
        PN   :	代词
        VV   :	动词
        VC   :	是
        CC   :	表示连词
        VE   :	有
        VA   :	表语形容词
        VRD  :	动补复合词
        CD   :	 表示基数词
        DT   :	 determiner 表示限定词
        EX   :	 existential there 存在句
        FW   :	 foreign word 外来词
        IN   :	 preposition or conjunction, subordinating 介词或从属连词
        JJ   :	 adjective or numeral, ordinal 形容词或序数词
        JJR  :	 adjective, comparative 形容词比较级
        JJS  :	 adjective, superlative 形容词最高级
        LS   :	 list item marker 列表标识
        MD   :	 modal auxiliary 情态助动词
        PDT  :	 pre-determiner 前位限定词
        POS  :	 genitive marker 所有格标记
        PRP  :	 pronoun, personal 人称代词
        RB   :	 adverb 副词
        RBR  :	 adverb, comparative 副词比较级
        RBS  :	 adverb, superlative 副词最高级
        RP   :	 particle 小品词
        SYM  :	 symbol 符号
        TO   :	”to” as preposition or infinitive marker 作为介词或不定式标记
        WDT  :	 WH-determiner WH限定词
        WP   :	 WH-pronoun WH代词
        WP$  :	 WH-pronoun, possessive WH所有格代词
        WRB  :	Wh-adverb WH副词

         

  5. 依存句法

    1. 调用demo:
      1. from stanfordcorenlp import StanfordCoreNLP
        path = '/Users/shifengmac/Downloads/myselfdoc/selflearning/stanford-corenlp-full-2018-10-05'
        nlp = StanfordCoreNLP(path, lang='zh')
        s = '''“滴水湖”引进了中国航海博物馆、上海天文馆、滴水湖皇冠假日酒店、豪生国际酒店、大润发购物中心等一批功能性项目'''
        token = nlp.word_tokenize(s)
        dependencyParse = nlp.dependency_parse(s)
        for i, begin, end in dependencyParse:
            print i, '-'.join([str(begin), token[begin-1]]), '-'.join([str(end),token[end-1]])
        
        '''
        # 结果:
        ROOT 0-项目 4-引进
        punct 2-滴水湖 1-“
        nsubj 4-引进 2-滴水湖
        punct 2-滴水湖 3-”
        aux:asp 4-引进 5-了
        compound:nn 8-博物馆 6-中国
        compound:nn 8-博物馆 7-航海
        conj 10-上海 8-博物馆
        punct 10-上海 9-、
        dobj 4-引进 10-上海
        dep 10-上海 11-天文馆
        punct 11-天文馆 12-、
        compound:nn 14-湖 13-滴水
        compound:nn 15-皇 14-湖
        compound:nn 18-酒店 15-皇
        compound:nn 18-酒店 16-冠
        compound:nn 18-酒店 17-假日
        root 12-、 18-酒店
        punct 18-酒店 19-、
        root 19-、 20-豪生
        compound:nn 22-酒店 21-国际
        conj 27-中心 22-酒店
        punct 27-中心 23-、
        amod 25-润发 24-大
        compound:nn 27-中心 25-润发
        compound:nn 27-中心 26-购物
        compound:nn 32-项目 27-中心
        etc 27-中心 28-等
        nummod 32-项目 29-一
        mark:clf 29-一 30-批
        amod 32-项目 31-功能性
        dobj 20-豪生 32-项目
        '''
    2. 使用:
      1. 主体词挖掘:挖掘表示该文本的主体词,作为该文本的标签词。如demo中的文本,有很多词/实体:天文馆、博物馆、大润发等,但实际上该文本讲得是“滴水湖”,给该文本打上“博物馆”的标签就扯淡了。
      2. 主要提取:名词短语、形容词短语等,即nsubj,amod、nmod:assmod、nmod:topic等
    3. 依存关系说明:
      1. abbrev    :	 abbreviation modifier,缩写
        acomp     :	 adjectival complement,形容词的补充;
        advcl     :	 adverbial clause modifier,状语从句修饰词
        advmod    :	 adverbial modifier状语
        agent     :	 agent,代理,一般有by的时候会出现这个
        amod      :	 adjectival modifier形容词
        appos     :	 appositional modifier,同位词
        attr      :	 attributive,属性
        aux       :	 auxiliary,非主要动词和助词,如BE,HAVE SHOULD/COULD等到
        auxpass   :	 passive auxiliary 被动词
        cc        :	 coordination,并列关系,一般取第一个词
        ccomp     :	 clausal complement从句补充
        complm    :	 complementizer,引导从句的词好重聚中的主要动词
        conj      :	 conjunct,连接两个并列的词。
        cop       :	 copula。系动词(如be,seem,appear等),(命题主词与谓词间的)连系
        csubj     :	 clausal subject,从主关系
        csubjpass :	 clausal passive subject 主从被动关系
        dep       :	 dependent依赖关系
        det       :	 determiner决定词,如冠词等
        dobj      :	 direct object直接宾语
        expl      :	 expletive,主要是抓取there
        infmod    :	 infinitival modifier,动词不定式
        iobj      :	 indirect object,非直接宾语,也就是所以的间接宾语;
        mark      :	 marker,主要出现在有“that” or “whether”“because”, “when”,
        mwe       :	 multi-word expression,多个词的表示
        neg       :	 negation modifier否定词
        nn        :	 noun compound modifier名词组合形式
        npadvmod  :	 noun phrase as adverbial modifier名词作状语
        nsubj     :	 nominal subject,名词主语
        nsubjpass :	 passive nominal subject,被动的名词主语
        num       :	 numeric modifier,数值修饰
        number    :	 element of compound number,组合数字
        partmod   :	 participial modifier动词形式的修饰
        pcomp     :	 prepositional complement,介词补充
        pobj      :	 object of a preposition,介词的宾语
        poss      :	 possession modifier,所有形式,所有格,所属
        possessive:	 possessive modifier,这个表示所有者和那个’S的关系
        preconj   :	 preconjunct,常常是出现在 “either”, “both”, “neither”的情况下
        predet    :	 predeterminer,前缀决定,常常是表示所有
        prep      :	 prepositional modifier
        prepc     :	 prepositional clausal modifier
        prt       :	 phrasal verb particle,动词短语
        punct     :	 punctuation,这个很少见,但是保留下来了,结果当中不会出现这个
        purpcl    :	 purpose clause modifier,目的从句
        quantmod  :	 quantifier phrase modifier,数量短语
        rcmod     :	 relative clause modifier相关关系
        ref       :	 referent,指示物,指代
        rel       :	 relative
        root      :	 root,最重要的词,从它开始,根节点
        tmod      :	 temporal modifier
        xcomp     :	 open clausal complement
        xsubj     :	 controlling subject 掌控者

         

 

三、其他

  1. 交互式链接:http://nlp.stanford.edu:8080/parser/index.jsp
  2. 缺点:
    1. 较慢

四、参考

  1. 资源链接:
    1. 文件包下载
    2. 中文jar包下载链接
    3. 安装教程
  2. StanfordNLP官方教程
  3. Stanford Parser教程
  4. stanford-cornlp的github
  5. Stanford Parser的使用——进行词法语法分析
  6. python︱六款中文分词模块尝试:jieba、THULAC、SnowNLP、pynlpir、CoreNLP、pyLTP

编辑时间:2019-03-09

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值