Python+StanfordCoreNLP实现中文命名实体识别(NER)

环境配置

  1. 安装配置jdk环境
  2. https://nlp.stanford.edu/software/corenlp-backup-download.html
    在此下载CoreNLP以及Chinese model jar
  3. 将Chinese model的jar文件放在CoreNLP解压后的文件夹下
  4. pip安装pip install stanfordcorenlp
    pip install stanfordcorenlp -i http://pypi.douban.com/simple --trusted-host pypi.douban.com
import sys
print(sys.version)
print(sys.executable)

##3.7.6 (default, Jan  8 2020, 20:23:39) [MSC v.1916 64 bit (AMD64)]
##E:\anaconda3\envs\tensorflow\python.exe

NER

  1. 加载库
import logging
from stanfordcorenlp import StanfordCoreNLP
nlp = StanfordCoreNLP(r'E:\xzk\python工程\stanford-corenlp-full-2018-02-27',lang='zh')

a. 这里原本使用的是
nlp = StanfordCoreNLP(r’E:\xzk\python工程\stanford-corenlp-full-2018-02-27’,port=9011,lang=‘zh’,logging_level=logging.DEBUG)
对年报文本的处理速度极慢(每一句话会print一次INFO、DEBUG等信息),加上jieba分词,一分钟仅能处理完2个公司—年度文本。而删除port和logging_level后,速度提升为1分钟15个。
b. 将电脑电源计划更改为高性能,速度提升至1分钟20-30个。

  1. 对句子列表sentence_list中每一个句子进行NER,用命名实体标识替换实体原名
for sentence in sentence_list:
	#若句子子数小于1,剔除
	if len(sentence)<1:
		continue
	#NER结果列表               
    ner_list=nlp.ner(sentence)
    #Sentence After NER列表,及将句子中的命名实体替换成对应的实体标识后,这句话内的词语组成的列表
    SAN_list=[]
    for n in ner_list:
    	if n[1]=="O":
           SAN_list.append(n[0])
        else:
           if SAN_list==[] or SAN_list[-1]!=n[1]:
           	SAN_list.append(n[1])
           else:
           	continue

     SAN=''.join(SAN_list)   ##Sentence After Ner
  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,下面是对一篇英语新闻进行数据预处理、词性标注、命名实体识别、句法依存分析和关系提取的 Python 代码,使用的是 Stanford CoreNLP 模型: ```python import json from stanfordcorenlp import StanfordCoreNLP # 启动StanfordCoreNLP模型 nlp = StanfordCoreNLP(r'stanford-corenlp-full-2018-10-05') # 加载停用词 with open('stopwords.txt', 'r') as f: stopwords = set(f.read().split()) # 加载文章 with open('news.txt', 'r', encoding='utf-8') as f: text = f.read() # 分句 sentences = nlp.sent_tokenize(text) # 分词、去停用词和标点 tokens = [] for sentence in sentences: words = nlp.word_tokenize(sentence) words = [word.lower() for word in words if word.isalpha() and word.lower() not in stopwords] tokens.append(words) # 词性标注、命名实体识别、句法依存分析 pos_tags = [] ner_tags = [] dep_parse = [] for sentence in sentences: pos_tags.append(json.loads(nlp.pos_tag(sentence))) ner_tags.append(json.loads(nlp.ner(sentence))) dep_parse.append(json.loads(nlp.dependency_parse(sentence))) # 关系提取 relations = [] for dep in dep_parse: for i in range(len(dep)): if dep[i][0] == 'nsubj' and dep[i][1] != 0 and dep[dep[i][1] - 1][0] == 'dobj': relation = (tokens[dep[i][1] - 1][0], tokens[i][0], tokens[dep[dep[i][1] - 1][1] - 1][0]) relations.append(relation) # 关系可视化 # ... # 关闭StanfordCoreNLP模型 nlp.close() ``` 其中 `news.txt` 是要处理的英语新闻文件,`stopwords.txt` 是停用词文件,`stanford-corenlp-full-2018-10-05` 是 Stanford CoreNLP 模型文件夹路径,需要下载对应版本的 Stanford CoreNLP 模型。关于如何对关系进行可视化,可以使用图数据库和可视化工具,比如 Neo4j 和 Gephi。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值