自然语言处理

基于LTP的分句、分词、POS和依存句法分析

2019-01-04  本文已影响0人  京漂的小程序媛儿

分句

#分句

from pyltpimport SentenceSplitter

sentence = SentenceSplitter.split('我是逗号,我是句号。我是问号?我是感叹号!')

print('\n'.join(sentence))

分词+自定义词典

没加入自定义词典之前的结果如下:

火箭|少女|是|国内|新生|少女|组合|。

新建词典文件lexicon(自定义),每个自定义词一行。如下:

自定义词典

加入自定义词典之后的分词结果:

火箭少女|是|国内|新生|少女|组合|。

参考代码:

#分词

import os

LTP_DATA_DIR ='/Users/***/ltp_data'  # ltp模型目录的路径

cws_model_path = os.path.join(LTP_DATA_DIR, 'cws.model')# 分词模型路径,模型名称为`cws.model`

lexicon_path = os.path.join(LTP_DATA_DIR, 'lexicon')# 分词词典lexicon

from pyltpimport Segmentor

segmentor = Segmentor()# 初始化实例

# segmentor.load(cws_model_path)  # 加载模型,如果不想自定义词典,就用这一句load模型即可

segmentor.load_with_lexicon(cws_model_path,lexicon_path)# 加载模型,参数lexicon是自定义词典的文件路径

words = segmentor.segment('火箭少女是国内新生少女组合。')# 分词

print('|'.join(words))#打印分词结果

segmentor.release()# 释放模型

词性标注POS

结果:

火箭少女|是|国内|新生|少女|组合|。

n | v | nl | n | n | v | wp

代码:

#词性标注

pos_model_path = os.path.join(LTP_DATA_DIR, 'pos.model')# 词性标注模型路径,模型名称为`pos.model`

from pyltpimport Postagger

postagger = Postagger()# 初始化实例

postagger.load(pos_model_path)# 加载模型

postags = postagger.postag(words)# 词性标注,这里words是分词后的list

print(' | '.join(postags))

postagger.release()# 释放模型

更多词性标注结果,见下图,截图自LTP

词性标注解释

命名实体识别

LTP提供最基本的三种实体类型人名、地名、机构名的识别。 

代码:

#命名实体识别

ner_model_path = os.path.join(LTP_DATA_DIR, 'ner.model')# 命名实体识别模型路径,模型名称为`ner.model`

from pyltpimport NamedEntityRecognizer

recognizer = NamedEntityRecognizer()# 初始化实例

recognizer.load(ner_model_path)# 加载模型

nertags = recognizer.recognize(words, postags)# 命名实体识别,其中words, postags分别是分词和词性标注的结果List

print(' | '.join(nertags))

recognizer.release()# 释放模型

依存句法分析

依存句法分析结果

代码:

#依存句法分析

par_model_path = os.path.join(LTP_DATA_DIR, 'parser.model')# 依存句法分析模型路径,模型名称为`parser.model`

from pyltpimport Parser

parser = Parser()# 初始化实例

parser.load(par_model_path)# 加载模型

arcs = parser.parse(words, postags)# 句法分析

#信息提取,结果展示

rely_id = [arc.headfor arcin arcs]# 提取依存父节点id

relation = [arc.relationfor arcin arcs]# 提取依存关系

heads = ['Root' if id ==0 else words[id-1]for idin rely_id]# 匹配依存父节点词语

for iin range(len(words)):

print(relation[i] +'(' + words[i] +', ' + heads[i] +')')

parser.release()# 释放模型

更多依存句法分析标注结果,见下图,截图自LTP

依存句法分析参考

LTP还提供了语义角色标注和语义依存分词,项目中暂时不用,稍后再学习。

上一篇下一篇

猜你喜欢

热点阅读