赞
踩
近年来,随着互联网的发展,计算机处理自然语言的需求变得越来越迫切,除了比较悠久的机器翻译外,自然语言处理在信息检索、信息抽取、数据挖掘、舆情分析、文本摘要、自动问答系统等方面都获得了很广泛的应用。
有关自然语言,特别是语义方面的诸多问题仍未得到解决。目前,完全句法分析、浅层句法分析、信息抽取、词义消歧、潜在语义分析、文本蕴含和指代消解。这些技术都不能完美或者完全的翻译出语言的本义。与程序语言不同,人类语言不具备完整的逻辑结构。
右侧偏重于语义方面,命名实体识别主要用来用识别语料中的专有名词和未登录词的成词情况,如人名、地名、组织结构。但是准确的命名实体识别是以准确的分词和词性标注为前提的。
语义组块用来确定一个以上的词汇构成的短语结构,即短语级别的标注。主要识别名词性短语、动词性短语、介词短语以及其他类型的短语结构。即语义组块的识别特征必须包含中文分词(命名实体识别)和词性标注。
语义角色标注是以句子中的谓语动词为中心预测出句子的各个语法成分的语义特征,是句子解析的最后一个环节。语义组块、语义角色标注等分析结果,可以通过机器学习方法转换为知识库的RDF三元组形式,并直接用于自动问答系统。
在详细讲解NLP的各个模块之前,首先要介绍几个开源的中文类NLP系统。
优秀的中文分词系统:ICTCLAS分词系统(C++),Ansj中文分词系统(Java),结巴分词(python)
按照使用的算法不同,下面介绍两大类中文分词模块
哈工大提供的pyltp扩展包,扩展包的源码和案例可以从https://github.com/HIT-SCIR/pyltp 下载。下面介绍部署过程
(1)pyltp安装
pip install pyltp
(2)部署语言模型库
https://pan.baidu.com/share/link?shareid=1988562907&uk=2738088569#list/path=%2F&parentPath=%2F
(1)Ltp3.3安装成功后,新建一个Python文件:
from pyltp import Segmentor #导入ltp库
model_path = "ltp_data_v3.4.0/cws.model" #Ltp3.3分词模型库
segmentor = Segmentor() #实例化分词模块
segmentor.load(model_path) #加载分词库
#这里不使用外部词典,仅用Ltp3.3进行中文分词
words = segmentor.segment("在包含问题的所有解的解空间树中,按照深度优先搜索的策略,从根节点出发深度探索解空间树")
print("|".join(words)) #分词后的结果
在|包含|问题|的|所有|解|的|解|空间|树|中|,|按照|深度|优先|搜索|的|策略|,|从|根节点|出发|深度|探索|解|空间|树
(2) 分词结果的后处理
观察上述分析结果。“解|空间”、“解|空间|树”、“深度优先”都可以看做一个完整的专有名称:解空间、解空间树、深度优先,而分词器划分的粒度过细。为了获得更精确的结果,可以讲错分的结果合并为专有名词。这就是分词结果的后处理过程。
postdict={"解|空间":"解空间","深度|优先":"深度优先"}
#分词后处理--矫正一些错误的记过
seg_sent = "|".join(words)
for key in postdict:
seg_sent=seg_sent.replace(key,postdict[key])
print(seg_sent)
在|包含|问题|的|所有|解|的|解空间|树|中|,|按照|深度优先|搜索|的|策略|,|从|根节点|出发|深度|探索|解空间|树
张华平NShort的中文分词算法是目前大规模中文分词的主流算法。在商用领域,大多数搜索引擎公司都使用该算法作为主要的分词算法。具有算法原理简单、容易理解、便于训练、大规模分词的效率高、模型支持增量扩展、模型占用资源低等优势。
结巴分词可以支持以下三种分词模式:
# -*- coding: UTF-8 -*- import sys import os import jieba #导入结巴分词库 #结巴分词--全模式 sent = "在包含问题的所有解的解空间树中,按照深度优先搜索的策略,从根节点出发深度探索解空间树" wordlist = jieba.cut(sent,cut_all=True) print("|".join(wordlist)) print(type(wordlist)) #结巴分词--精确切分 wordlist1 = jieba.cut(sent) #cut_all=False print("|".join(wordlist1)) #结巴分词--搜索引擎模式 wordlist2 = jieba.cut_for_search(sent) print("|".join(wordlist2)) # jieba.load_userdict('data/userdict.txt') #加载外部词典 # wordlist3 = jieba.cut(sent) #结巴分词--精确切分 # print("|".join(wordlist3))
在|包含|问题|的|所有|解|的|解空|空间|树|中|||按照|深度|优先|搜索|的|策略|||从|根|节点|点出|出发|深度|探索|索解|解空|空间|树
<class ‘generator’>
在|包含|问题|的|所有|解|的|解|空间|树中|,|按照|深度|优先|搜索|的|策略|,|从根|节点|出发|深度|探索|解|空间|树
在|包含|问题|的|所有|解|的|解|空间|树中|,|按照|深度|优先|搜索|的|策略|,|从根|节点|出发|深度|探索|解|空间|树
中文的词性标注比较统一,大多数使用HMM(隐马尔科夫模型)或者最大熵算法,如前文的结巴分词的词性标注实现。为了提高精度,也有使用CRF算法的,如Ltp3.4中的词性标注。
# -*- coding: UTF-8 -*- from pyltp import *#导入ltp库 model_path = "ltp_data_v3.4.0/cws.model" #Ltp3.3分词模型库 segmentor = Segmentor() #实例化分词模块 segmentor.load(model_path) #加载分词库 words = segmentor.segment("在包含问题的所有解的解空间树中,按照深度优先搜索的策略,从根节点出发深度探索解空间树") postdict={"解|空间":"解空间","深度|优先":"深度优先"} #分词后处理--矫正一些错误的记过 seg_sent = "|".join(words) for key in postdict: seg_sent=seg_sent.replace(key,postdict[key]) print(seg_sent) words_tag = seg_sent.split("|") postagger = Postagger() #实例化词性标注类 postagger.load("ltp_data_v3.4.0/pos.model") #导入词性标注库 postags = postagger.postag(words_tag) for word,postag in zip(words_tag,postags): print(word+"/"+postag)
在|包含|问题|的|所有|解|的|解空间|树|中|,|按照|深度优先|搜索|的|策略|,|从|根节点|出发|深度|探索|解空间|树
在/p
包含/v
问题/n
的/u
所有/b
解/v
的/u
解空间/n
树/n
中/nd
,/wp
按照/p
深度优先/d
搜索/v
的/u
策略/n
,/wp
从/p
根节点/n
出发/v
深度/n
探索/v
解空间/v
树/n
# -*- coding: UTF-8 -*-
import jieba.posseg as pseg
import jieba
sent = "在包含问题的所有解的解空间树中,按照深度优先搜索的策略,从根节点出发深度探索解空间树"
# jieba.load_userdict('data/userdict.txt') #加载外部词典
words = pseg.cut(sent)
for word,flag in words:
print('%s %s'%(word,flag))
在 p
包含 v
问题 n
的 uj
所有 b
解 v
的 uj
解 v
空间 n
树中 s
, x
按照 p
深度 ns
优先 vn
搜索 v
的 uj
策略 n
, x
从 p
根 a
节点 n
出发 v
深度 ns
探索 v
解 v
空间 n
树 v
在使用StandfordNLP系统进行中文词性标注之前,需要安装JDK环境。然后在https://nlp.stanford.edu/software/CRF-NER.shtml 中的https://stanfordnlp.github.io/CoreNLP/index.html#download 中下载两个文件。分别是stanford-chinese-corenlp-2018-10-05-models.jar和stanford-corenlp-full-2018-10-05.zip。
将stanford-chinese-corenlp-2018-10-05-models.jar复制到stanford-corenlp-full-2018-10-05中
在Python环境下调用Stanfordcorenlp(要事先安装jdk1.8)
pip install stanfordcorenlp
from stanfordcorenlp import StanfordCoreNLP
nlp = StanfordCoreNLP(r'/root/pyspark/NLP/stanford-corenlp-full-2018-10-05')
#这里改成你stanford-corenlp所在的目录
sentence = 'Guangdong University of Foreign Studies is located in Guangzhou.'
print('Tokenize:', nlp.word_tokenize(sentence))
print('Part of Speech:', nlp.pos_tag(sentence))
print('Named Entities:', nlp.ner(sentence))
print('Constituency Parsing:', nlp.parse(sentence))
print('Dependency Parsing:', nlp.dependency_parse(sentence))
nlp.close() # Do not forget to close! The backend server will consume a lot memery.
Tokenize: [‘Guangdong’, ‘University’, ‘of’, ‘Foreign’, ‘Studies’, ‘is’, ‘located’, ‘in’, ‘Guangzhou’, ‘.’]
Part of Speech: [(‘Guangdong’, ‘NNP’), (‘University’, ‘NNP’), (‘of’, ‘IN’), (‘Foreign’, ‘NNP’), (‘Studies’, ‘NNPS’), (‘is’, ‘VBZ’), (‘located’, ‘JJ’), (‘in’, ‘IN’), (‘Guangzhou’, ‘NNP’), (’.’, ‘.’)]
Named Entities: [(‘Guangdong’, ‘ORGANIZATION’), (‘University’, ‘ORGANIZATION’), (‘of’, ‘ORGANIZATION’), (‘Foreign’, ‘ORGANIZATION’), (‘Studies’, ‘ORGANIZATION’), (‘is’, ‘O’), (‘located’, ‘O’), (‘in’, ‘O’), (‘Guangzhou’, ‘CITY’), (’.’, ‘O’)]
Constituency Parsing: (ROOT
(S
(NP
(NP (NNP Guangdong) (NNP University))
(PP (IN of)
(NP (NNP Foreign) (NNPS Studies))))
(VP (VBZ is)
(ADJP (JJ located)
(PP (IN in)
(NP (NNP Guangzhou)))))
(. .)))
Dependency Parsing: [(‘ROOT’, 0, 7), (‘compound’, 2, 1), (‘nsubjpass’, 7, 2), (‘case’, 5, 3), (‘compound’, 5, 4), (‘nmod’, 2, 5), (‘auxpass’, 7, 6), (‘case’, 9, 8), (‘nmod’, 7, 9), (‘punct’, 7, 10)]
# coding=utf-8
from stanfordcorenlp import StanfordCoreNLP
nlp = StanfordCoreNLP('http://localhost', port=9001)
#这里改成了我们server的地址
sentence = 'Functions shall be declared at file scope.'
print(nlp.word_tokenize(sentence))
print(nlp.pos_tag(sentence))
print(nlp.ner(sentence))
print(nlp.parse(sentence))
print(nlp.dependency_parse(sentence))
nlp.close()
[‘Functions’, ‘shall’, ‘be’, ‘declared’, ‘at’, ‘file’, ‘scope’, ‘.’]
[(‘Functions’, ‘NNS’), (‘shall’, ‘MD’), (‘be’, ‘VB’), (‘declared’, ‘VBN’), (‘at’, ‘IN’), (‘file’, ‘NN’), (‘scope’, ‘NN’), (’.’, ‘.’)]
[(‘Functions’, ‘O’), (‘shall’, ‘O’), (‘be’, ‘O’), (‘declared’, ‘O’), (‘at’, ‘O’), (‘file’, ‘O’), (‘scope’, ‘O’), (’.’, ‘O’)]
(ROOT
(S
(NP (NNS Functions))
(VP (MD shall)
(VP (VB be)
(VP (VBN declared)
(PP (IN at)
(NP (NN file) (NN scope))))))
(. .)))
[(‘ROOT’, 0, 4), (‘nsubjpass’, 4, 1), (‘aux’, 4, 2), (‘auxpass’, 4, 3), (‘case’, 7, 5), (‘compound’, 7, 6), (‘nmod’, 4, 7), (‘punct’, 4, 8)]
ROOT:要处理文本的语句 IP:简单从句 NP:名词短语 VP:动词短语 PU:断句符,通常是句号、问号、感叹号等标点符号 LCP:方位词短语 PP:介词短语 CP:由‘的’构成的表示修饰性关系的短语 DNP:由‘的’构成的表示所属关系的短语 ADVP:副词短语 ADJP:形容词短语 DP:限定词短语 QP:量词短语 NN:常用名词 NR:固有名词 NT:时间名词 PN:代词 VV:动词 VC:是 CC:表示连词 VE:有 VA:表语形容词 AS:内容标记(如:了) 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副词 关系表示 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,组合数字 parataxis: parataxis: parataxis,并列关系 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 掌控者 中心语为谓词 subj — 主语 nsubj — 名词性主语(nominal subject) (同步,建设) top — 主题(topic) (是,建筑) npsubj — 被动型主语(nominal passive subject),专指由“被”引导的被动句中的主语,一般是谓词语义上的受事 (称作,镍) csubj — 从句主语(clausal subject),中文不存在 xsubj — x主语,一般是一个主语下面含多个从句 (完善,有些) 中心语为谓词或介词 obj — 宾语 dobj — 直接宾语 (颁布,文件) iobj — 间接宾语(indirect object),基本不存在 range — 间接宾语为数量词,又称为与格 (成交,元) pobj — 介词宾语 (根据,要求) lobj — 时间介词 (来,近年) 中心语为谓词 comp — 补语 ccomp — 从句补语,一般由两个动词构成,中心语引导后一个动词所在的从句(IP) (出现,纳入) xcomp — x从句补语(xclausal complement),不存在 acomp — 形容词补语(adjectival complement) tcomp — 时间补语(temporal complement) (遇到,以前) lccomp — 位置补语(localizer complement) (占,以上) — 结果补语(resultative complement) 中心语为名词 mod — 修饰语(modifier) pass — 被动修饰(passive) tmod — 时间修饰(temporal modifier) rcmod — 关系从句修饰(relative clause modifier) (问题,遇到) numod — 数量修饰(numeric modifier) (规定,若干) ornmod — 序数修饰(numeric modifier) clf — 类别修饰(classifier modifier) (文件,件) nmod — 复合名词修饰(noun compound modifier) (浦东,上海) amod — 形容词修饰(adjetive modifier) (情况,新) advmod — 副词修饰(adverbial modifier) (做到,基本) vmod — 动词修饰(verb modifier,participle modifier) prnmod — 插入词修饰(parenthetical modifier) neg — 不定修饰(negative modifier) (遇到,不) det — 限定词修饰(determiner modifier) (活动,这些) possm — 所属标记(possessive marker),NP poss — 所属修饰(possessive modifier),NP dvpm — DVP标记(dvp marker),DVP (简单,的) dvpmod — DVP修饰(dvp modifier),DVP (采取,简单) assm — 关联标记(associative marker),DNP (开发,的) assmod — 关联修饰(associative modifier),NP|QP (教训,特区) prep — 介词修饰(prepositional modifier) NP|VP|IP(采取,对) clmod — 从句修饰(clause modifier) (因为,开始) plmod — 介词性地点修饰(prepositional localizer modifier) (在,上) asp — 时态标词(aspect marker) (做到,了) partmod– 分词修饰(participial modifier) 不存在 etc — 等关系(etc) (办法,等) 中心语为实词 conj — 联合(conjunct) cop — 系动(copula) 双指助动词???? cc — 连接(coordination),指中心词与连词 (开发,与) 其它 attr — 属性关系 (是,工程) cordmod– 并列联合动词(coordinated verb compound) (颁布,实行) mmod — 情态动词(modal verb) (得到,能) ba — 把字关系 tclaus — 时间从句 (以后,积累) — semantic dependent cpm — 补语化成分(complementizer),一般指“的”引导的CP (振兴,的)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。