在Python中使用StanfordOpenIE

本文在 维基百科数据预处理的基础上进行

1、StanfordOpenIE简介:开放信息提取(open IE)是指从纯文本中提取关系元组,通常是二元关系,例如(Mark Zuckerberg;脸书))。与其他信息提取的核心区别在于,这些关系的模式不需要事先指定;通常,关系名称只是链接两个参数的文本。例如,巴拉克·奥巴马出生在夏威夷会创造一个三胞胎(巴拉克·奥巴马;出生在;夏威夷),对应于开放域关系出生(巴拉克 - 奥巴马,夏威夷)。其他内容,在官网中有详细介绍。

2、安装 StanfordOpenIE :

pip install stanford_openie

使用pip list 查看是否安装成功
在Python中使用StanfordOpenIE_第1张图片

3、StanfordOpenIE的使用:

(1)字符串数据:

from openie import StanfordOpenIE

# https://stanfordnlp.github.io/CoreNLP/openie.html#api
# Default value of openie.affinity_probability_cap was 1/3.
properties = {
    'openie.affinity_probability_cap': 2 / 3,		#提取置信度高于此值的相关性值为 1.0。默认值为 1/3。
}

with StanfordOpenIE(properties=properties) as client:
    text = 'Barack Obama was born in Hawaii. Richard Manning wrote this sentence.'
    print('Text: %s.' % text)
    for triple in client.annotate(text):
        print('|-', triple)

(2)文本数据:

from openie import StanfordOpenIE
import os
import logging
from tqdm import tqdm,trange        #打印进度条

# https://stanfordnlp.github.io/CoreNLP/openie.html#api
# Default value of openie.affinity_probability_cap was 1/3.
properties = {
    'openie.affinity_probability_cap': 2 / 3
}

def OpenIE(nlpfile,out_nlpfile):
    with StanfordOpenIE(properties=properties) as client:
        out_File = open(out_nlpfile,'a+',encoding='utf-8')
        with open(nlpfile, encoding='utf8') as r:
            corpus = r.read().replace('\n',' ').replace('\r','')	#根据自己文本的数据进行处理
            for_corpus = int(len(corpus)/10000)			#每一次识别有一个最大单词量识别,maxCharLength 100000,所以在这里处理了一下

            logger.info("实体识别 {0} 三元组".format(for_corpus))

            for n in trange(for_corpus):		
                triples_corpus = client.annotate(corpus[n*10000:(n+1)*10000])        #列表
                len_corpus = len(triples_corpus)
                for idx in range(len_corpus):
                    out_File.write(str(triples_corpus[idx]).replace('}','}\n'))

            out_File.close()

logging.basicConfig(level=logging.INFO,format='%(asctime)s - %(name)s - %(message)s')
logger = logging.getLogger(__name__)

in_nlpfile = os.path.join("../Data/enwiki/AA/res_wiki","wiki_en2.txt")		
out_nlpfile = os.path.join("../Data/enwiki/result","res_wiki_en.txt")
OpenIE(in_nlpfile,out_nlpfile)

注:

  • 在我的代码中可能会有一些包需要安装:pip install tqdm,或者其他库,根据环境情况安装

(3)修改安装路径:在运行过程中,会下载stanfordnlp等资源包,默认安装在C盘,但也可以自定义安装路径
在Python中使用StanfordOpenIE_第2张图片
在Python中使用StanfordOpenIE_第3张图片
4、运行:
在Python中使用StanfordOpenIE_第4张图片

这是小新学习的小记录,有不对的地方希望UU们批评指正
在Python中使用StanfordOpenIE_第5张图片

你可能感兴趣的:(python,自然语言处理,开发语言)