1. NLP流程和开元框架

近年来,随着互联网的发展,计算机处理自然语言的需求变得越来越迫切,除了比较悠久的机器翻译外,自然语言处理在信息检索、信息抽取、数据挖掘、舆情分析、文本摘要、自动问答系统等方面都获得了很广泛的应用。
  有关自然语言,特别是语义方面的诸多问题仍未得到解决。目前,完全句法分析、浅层句法分析、信息抽取、词义消歧、潜在语义分析、文本蕴含和指代消解。这些技术都不能完美或者完全的翻译出语言的本义。与程序语言不同,人类语言不具备完整的逻辑结构。

右侧偏重于语义方面,命名实体识别主要用来用识别语料中的专有名词和未登录词的成词情况,如人名、地名、组织结构。但是准确的命名实体识别是以准确的分词和词性标注为前提的。

语义组块用来确定一个以上的词汇构成的短语结构,即短语级别的标注。主要识别名词性短语、动词性短语、介词短语以及其他类型的短语结构。即语义组块的识别特征必须包含中文分词(命名实体识别)和词性标注。

语义角色标注是以句子中的谓语动词为中心预测出句子的各个语法成分的语义特征,是句子解析的最后一个环节。语义组块、语义角色标注等分析结果,可以通过机器学习方法转换为知识库的RDF三元组形式,并直接用于自动问答系统。

在详细讲解NLP的各个模块之前,首先要介绍几个开源的中文类NLP系统。

  • 哈工大Ltp3.x:中文分词、词性标注、未登录词识别、句法分析、语义角色标注。网址:https://github.com/HIT-SCIR/ltp/release
  • Stanford NLP:中文分词、词性标注、未登录词识别、句法分析。网址:http://nlp.stanford.edu/software/index.html
  • FufanNLP:中文分词、句法分析等。网址:https//code.google.com/p/fudannlp

优秀的中文分词系统:ICTCLAS分词系统(C++),Ansj中文分词系统(Java),结巴分词(python)

按照使用的算法不同,下面介绍两大类中文分词模块

  • 基于条件随机场(CRF)的中文分词算法的开源系统
  • 基于张华平NShort的中文分词算法的开源系统

2. pyltp安装部署

哈工大提供的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

2.1使用Ltp3.3进行中文分词

(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)

在|包含|问题|的|所有|解|的|解空间|树|中|,|按照|深度优先|搜索|的|策略|,|从|根节点|出发|深度|探索|解空间|树

2.2使用jieba分词模块

张华平NShort的中文分词算法是目前大规模中文分词的主流算法。在商用领域,大多数搜索引擎公司都使用该算法作为主要的分词算法。具有算法原理简单、容易理解、便于训练、大规模分词的效率高、模型支持增量扩展、模型占用资源低等优势。

结巴分词可以支持以下三种分词模式:

  • 精确模式:试图将句子最精确的分开,适合文本分析(类似Ltp的分词模式)
  • 全模式,把句子中所有可以成词的词语都扫描出来,速度非常快,但不能解决歧义
  • 搜索引擎模式,在精确模式的基础上对长词再次切分,提高召回率,适合用户搜索引擎分词
  • 支持繁体分词
  • 支持基于概率的用户词典
# -*- 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’>
在|包含|问题|的|所有|解|的|解|空间|树中|,|按照|深度|优先|搜索|的|策略|,|从根|节点|出发|深度|探索|解|空间|树
在|包含|问题|的|所有|解|的|解|空间|树中|,|按照|深度|优先|搜索|的|策略|,|从根|节点|出发|深度|探索|解|空间|树

2.3词性标注

中文的词性标注比较统一,大多数使用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

3 StandfordNLP

在使用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 StanfordCoreNLPnlp = 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)]

  • 启动CoreNLP服务器命令
    java -mx4g -cp “*” edu.stanford.nlp.pipeline.StanfordCoreNLPServer -port 9001 -timeout 15000
# coding=utf-8from 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),NPposs — 所属修饰(possessive modifier),NPdvpm — 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 dependentcpm — 补语化成分(complementizer),一般指“的”引导的CP (振兴,的)

中文自然语言处理NLP相关推荐

  1. 中文自然语言处理(NLP)(三)运用python jieba模块计算知识点当中关键词的词频

    前两次链接:中文自然语言处理(NLP)(一)python jieba模块的初步使用       中文自然语言处理(NLP)(二)python jieba模块的进一步学习和xlrd模块 续上次的随笔之后 ...

  2. 【NLP】N-LTP:基于预训练模型的中文自然语言处理平台

    论文名称:N-LTP: A Open-source Neural Chinese Language Technology Platform with Pretrained Models 论文作者:车万 ...

  3. NLP Chinese Corpus:大规模中文自然语言处理语料

    中文的信息无处不在,但如果想要获得大量的中文语料,却是不太容易,有时甚至非常困难.在 2019 年初这个时点上,普通的从业者.研究人员或学生,并没有一个比较好的渠道获得极大量的中文语料. 笔者想要训练 ...

  4. 自然语言处理NLP中文分词,词性标注,关键词提取和文本摘要

    NLP相关工具包的介绍 1.1 jieba "结巴"中文分词,理念是做最好的 Python 中文分词组件. 支持三种分词模式: (1)精确模式,试图将句子最精确地切开,适合文本分析 ...

  5. 中文自然语言处理可能是 NLP 中最难的?

    现如今,在更多情况下,我们通过传感器和字节来与机器获得交流,而不是依靠交换情感,那如何让超级智能机器能够和人类正常交流沟通呢? 在人工智能背景技术下,自然语言处理(NLP)技术被越来越多的人看好,并受 ...

  6. NLP之中文自然语言处理工具库:SnowNLP(情感分析/分词/自动摘要)

    NLP之中文自然语言处理工具库:SnowNLP(情感分析/分词/自动摘要) 作者:虚坏叔叔 博客:https://xuhss.com 早餐店不会开到晚上,想吃的人早就来了!

  7. 「自然语言处理(NLP)」中文自然语言处理可能用到的数据集

    来源: AINLPer 微信公众号(每日更新-) 编辑: ShuYini 校稿: ShuYini 时间: 2020-08-08 引言: 给大家分享一下中文自然语言处理可能用到的数据集,感兴趣的小伙伴可 ...

  8. 中文自然语言处理数据集:ChineseNLPCorpus(附链接)

    来源:AINLP 本文约1300字,建议阅读5分钟. 本文为你推荐中文自然语言处理数据集. 推荐一个Github项目:ChineseNLPCorpus,该项目收集了一批中文自然语言处理数据集的相关链接 ...

  9. N-LTP:基于预训练模型的中文自然语言处理平台

    2021-05-03 18:12:52 论文名称:N-LTP: A Open-source Neural Chinese Language Technology Platform with Pretr ...

最新文章

  1. joc杂志影响因子2019_2019年放射学领域SCI主要杂志影响因子汇总
  2. Spring中@Value用法收集
  3. Nginx禁止通过IP,未绑定域名访问服务器
  4. java居中的命令_用JAVA把语句排列成左对齐、右对齐、居中
  5. 浅析网站页面设计需要注意哪些细节问题?
  6. python飞机大战源代码-python版飞机大战代码分享
  7. ios math 那个头文件_iOS math.h数学函数
  8. 规范化的递归转换成非递归
  9. 【NLP】 理解NLP中网红特征抽取器Tranformer
  10. 10-关于DOM的事件操作
  11. 利用Visual Studio Project自动将数据加载到SQL Server数据库中
  12. python scikit learn 关闭开源_Python机器学习工具:Scikit-Learn介绍与实践
  13. App 更换应用图标
  14. H264/H265/YUV码流分析工具推荐(一)
  15. HDU-5441-离线化并查集
  16. 网络对抗——web基础
  17. HTML5实践 -- 可伸缩的mobile搜索框
  18. C# Dictionary 使用;增加、移除的各种方法
  19. 如何将两个pdf合成一个?
  20. gradle排除jar依赖

热门文章

  1. cisco 导入lincense文件
  2. 『言善信』Fiddler工具 — 3、Fiddler页面布局(菜单栏)
  3. 像用Oracle一样用openGauss - 云和恩墨开源项目compat-tools介绍
  4. 计算机内存配置选型,电脑内存条如何选择 电脑内存条选择方法【详细介绍】...
  5. IT名企实习资本是什么?超级实习生保offer靠谱吗?
  6. php上传和导出excel文件,(进阶篇)使用PHP导入Excel和导出数据为Excel文件
  7. 利用COORD软件进行坐标七参数转换
  8. 奇艺网视频站外调用的方法
  9. 【技术白皮书】第二章:文本检测与识别技术发展历程
  10. QQ2009性能优化测试版 会员补丁