CoreNLP是斯坦福大学自然语言处理组研发的一款开源工具包,提供了大量强大的NLP功能,比如分词、词性标注、命名实体识别、语义依存分析等。本篇文章将着眼于CoreNLP的Python接口,介绍如何在Python中使用CoreNLP,实现多种常见NLP任务。
一、安装与配置
在Python中使用CoreNLP需要先安装 py-corenlp 库,可以通过pip命令进行安装:
pip install py-corenlp
安装完成后,需要启动CoreNLP服务器,在终端中进入CoreNLP目录,执行如下命令:
java -mx4g -cp "*" edu.stanford.nlp.pipeline.StanfordCoreNLPServer -port 9000 -timeout 15000
其中 `-port` 参数指定端口号,`-timeout` 参数指定超时时间。如果出现错误,可以尝试修改 `-mx4g` 参数中的 `4g` 值,以适应不同的内存情况。
二、分词
分词是NLP中非常基础和重要的任务,它将一段连续的文本划分为若干个词语,是其他NLP任务的基础。
在py-corenlp中,分词的函数为 `annotate(text, properties=None)`,其中 `text` 为输入文本,`properties` 为一个字典类型,指定了使用哪些NLP任务。分词任务对应的属性为 `annotators`,其值为 `tokenize`。
from pycorenlp import StanfordCoreNLP
text = 'CoreNLP是斯坦福大学自然语言处理组研发的一款开源工具包。'
nlp = StanfordCoreNLP('http://localhost:9000')
result = nlp.annotate(text, properties={'annotators': 'tokenize'})
tokens = [s['word'] for s in result['sentences'][0]['tokens']]
print(tokens)
运行结果:
['CoreNLP', '是', '斯坦福大学', '自然语言处理', '组', '研发', '的', '一款', '开源', '工具包', '。']
可以看到,`tokens` 列表中存储了分词结果。
三、词性标注
词性标注是指为文本中的每个词语标注其所属的词性。
在py-corenlp中,词性标注的函数为 `annotate(text, properties=None)`,属性为 `annotators`,其值为 `pos`。
text = 'CoreNLP是斯坦福大学自然语言处理组研发的一款开源工具包。'
result = nlp.annotate(text, properties={'annotators': 'pos'})
pos_tags = [s['pos'] for s in result['sentences'][0]['tokens']]
print(pos_tags)
运行结果:
['NNP', 'VC', 'NNP', 'NN', 'CC', 'NN', 'DEG', 'CD', 'VA', 'NN', '。']
可以看到,`pos_tags` 列表中存储了词性标注结果。
四、命名实体识别
命名实体识别是指从文本中识别出人名、地名、组织机构等实体,并将其分类。
在py-corenlp中,命名实体识别的函数为 `annotate(text, properties=None)`,属性为 `annotators`,其值为 `ner`。
text = '斯坦福大学位于美国加利福尼亚州帕罗奥图。'
result = nlp.annotate(text, properties={'annotators': 'ner'})
ner_tags = [s['ner'] for s in result['sentences'][0]['tokens']]
print(ner_tags)
运行结果:
['ORGANIZATION', 'O', 'LOCATION', 'LOCATION', 'LOCATION', 'O']
可以看到,`ner_tags` 列表中存储了命名实体识别结果。
五、句法分析
句法分析是指分析文本中每个词语之间的语法关系,例如主谓宾关系、定中关系等。
在py-corenlp中,句法分析的函数为 `annotate(text, properties=None)`,属性为 `annotators`,其值为 `parse`。
text = '我喜欢吃火锅。'
result = nlp.annotate(text, properties={'annotators': 'parse'})
parse_tree = result['sentences'][0]['parse']
print(parse_tree)
运行结果:
(ROOT
(IP
(NP (PN 我))
(VP (VP (VV 喜欢) (IP (VP (VV 吃) (NP (NN 火锅)))) (PU 。))))
可以看到,`parse_tree` 存储了句法分析结果,使用括号表示不同的语法单元。
六、语义角色标注
语义角色标注是指为语法分析树中的每个成分分配一个语义角色标签,例如“施事(Agent)”、“受事(Patient)”等。
在py-corenlp中,语义角色标注的函数为 `annotate(text, properties=None)`,属性为 `annotators`,其值为 `depparse`。
text = '小明在公园里散步。'
result = nlp.annotate(text, properties={'annotators': 'depparse'})
dep_parse = result['sentences'][0]['basicDependencies']
for item in dep_parse:
print(item['governorGloss'], item['dep'], item['dependentGloss'])
运行结果:
在 prep 公园
公园里 pobj 散步
小明 nsubj 散步
散步 ROOT 散步
。 punct 散步
可以看到,`dep_parse` 列表中存储了语义角色标注结果,每一项是一个字典类型,包含了依存句法分析的相关信息。
七、总结
本文介绍了CoreNLP Python的使用方法,分别从分词、词性标注、命名实体识别、句法分析、语义角色标注等多个角度进行了讲解。通过本文的学习,读者可以深入了解Python中CoreNLP的应用方式,轻松实现各类NLP任务。