Preface:工作两年多了,陆续接触过蛮多工具,时常没有时间整理整理,最近接触得多了,整理整理自己接触到的NLP这块工具
环境:
- macOS
- anaconda2
目录
一、下载
-
安装
- pip install stanfordcorenlp
-
资源
- 下载模型及文件:wget http://nlp.stanford.edu/software/stanford-corenlp-full-2018-10-05.zip
- 下载中文jar包:https://stanfordnlp.github.io/CoreNLP/download.html
- 解压stanford-corenlp-full-2018-10-05.zip,并将stanford-chinese-corenlp-2018-10-05-models.jar,放入文件夹中
二、使用
-
运行配置及栗子
- demo
-
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-天气 今天 上 '''
-
- 说明
- stanford-corenlp-full-2018-10-05文件夹下需要stanford-chinese-corenlp-2018-10-05-models.jar,代码才可以跑中文文本
- 查看StanfordCoreNLP函数,其默认内存4g,可自行改动memory参数
- Init signature: StanfordCoreNLP(self, path_or_host, port=None, memory='4g', lang='en', timeout=1500, quiet=True, logging_level=30)
- 源代码路径:/anaconda2/lib/python2.7/site-packages/stanfordcorenlp/corenlp.py
- 注意点及坑:
- 执行有权限限制时:sudo ipython进入ipython,或者sudo python demo.py执行文件
- 在python2.7下,输入文本需要为str编码格式,不可unicode,识别有问题
- demo
-
分词及POS
- 调用:nlp.word_tokenize(s)、nlp.pos_tag(s)
- 缺点:不能加载自己的分词词典,毕竟主要针对英文,未考虑中文的分词工具。
- 词性解释:
-
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副词
-
-
命名实体识别
- 调用:ner = nlp.ner(s)
- 优点:能够识别多种ner,包括:FACILITY、ORGANIZATION、NUMBER,分别为设施名、组织名、数字
- 识别并处理实体的demo:
-
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 '''
-
-
句法分析
- 调用:nlp.parse(s)
- 使用:
- 提取chunk,也即短语、词组之类的;如NP(名词短语)
- 两个词之间的距离,也即一个树的两个叶子节点之间的路径
- 词性解释
-
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副词
-
-
依存句法
- 调用demo:
-
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-项目 '''
-
- 使用:
- 主体词挖掘:挖掘表示该文本的主体词,作为该文本的标签词。如demo中的文本,有很多词/实体:天文馆、博物馆、大润发等,但实际上该文本讲得是“滴水湖”,给该文本打上“博物馆”的标签就扯淡了。
- 主要提取:名词短语、形容词短语等,即nsubj,amod、nmod:assmod、nmod:topic等
- 依存关系说明:
-
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 掌控者
-
- 调用demo:
三、其他
- 交互式链接:http://nlp.stanford.edu:8080/parser/index.jsp
- 缺点:
- 较慢
四、参考
- 资源链接:
- StanfordNLP官方教程
- Stanford Parser教程
- stanford-cornlp的github
- Stanford Parser的使用——进行词法语法分析
- python︱六款中文分词模块尝试:jieba、THULAC、SnowNLP、pynlpir、CoreNLP、pyLTP
编辑时间:2019-03-09