在Python中将AI管道连接到Word文档

在这里,我将向您展示如何在Web浏览器中可视化Word文档中的合约信息。

对于上下文,假设您有一个处理Word或PDF文档的AI管道。也许他们是法律文件;也许合约。

如何将结果呈现给人类用户?

当然,这是面向客户的关键UI设计选择: – 您的客户如何与您的产品互动?使用它是一种乐趣吗?文档看起来像在Word中吗?

但是文档可视化在任何初始AI培训阶段和在线学习中都同样重要。

在初始培训阶段,您需要准备培训数据集。你有多容易做到这一点?然后,当你评估结果时,同样的问题:QA能否轻松看出AI的正确与错误?

在Native Documents中,我们构建了一个API,使您可以轻松地在Web应用程序中针对Word文档显示结果。在本文中,我们将展示与LexNLP的交互,LexNLP是我们所知道的唯一一个用于处理法律文本的开源NLP库。

一般模式如下:

  • 将文档作为文本或富文本
  • 推动它通过您的NLP管道
  • 使用我们的范围API来使用NLP结果注释文档。结果将显示为Word注释

  • (可选)将任何自定义用户操作附加到评测中(例如,接受,解除,标记/争议)
  • 可选地,导出为Word注释

我们能用它做什么?

法律中有很多AI应用程序。这些包括人工智能辅助合约起草,审查和谈判。在签订合约之前,您通常需要能够对其进行编辑,这意味着您需要Word格式文档,而不是PDF。

在这里,我们将通过“实体提取”示例。

实体是文档中感兴趣的项目。例如,聚会名称或日期:如果要将合约提取到合约管理系统或清理敏感信息,则需要查找的各种事项。

输入LexNLP

在这里,我们将使用LexNLP的定义提取功能:如果您想要实现合约制定助手功能和知识管理/先行搜索应用程序,定义非常有用。

制备

我假设你有一个功能的Python安装。

要继续,您需要一个原始文档开发和秘密。在https://developers.nativedocuments.com/上找到你的

然后访问https://canary.nativedocuments.com并输入您的设备和密码。 (有几种方法可以处理你的开发和秘密,但是为了本演练的目的,这是最简单的。在生产中,你将它编译成你的Javascript。)

接下来,获取/安装我们的python工具:

pip install – 升级http://downloads.nativedocuments.com/python/ndapi.tar.gz

在Windows上创建C: Users name .ndapi config.default-config并在Linux / Mac上创建〜/ .ndapi / config.default-config

config.default-config文件应该具有以下形式:

{“dev_id”:“你的设备ID在这里”,“dev_secret”:“你的设备秘密在这里”,“service_url”:“https://canary.nativedocuments.com”,“api_ver”:“DEV”}

这是Native Documents配置完成的。

接下来,安装LexNLP,例如:

git clone https://github.com/LexPredict/lexpredict-lexnlp.gitcd lexpredict-lexnlppython setup.py install

现在你可以检查一切是否有效:

wget http://downloads.nativedocuments.com/python/extractDefinitions.pypythonexec(open("extractDefinitions.py").read())extractDefs("default-config“,”https://www.ycombinator.com/docs /YC_Form_SaaS_Agreement.doc“)

如果您在Chrome中加载生成的网址,那么您应该使用该文档及其中的定义。如果您没有看到该文档或定义,请在下面或https://helpdesk.nativedocuments.com/上发表评论

接下来,我们将介绍刚刚发生的事情。

为此,首先需要一个示例文档(Word .doc或.docx格式)。我们假设您使用了YC_Form_SaaS_Agreement.doc

概观

总结一下,这就是我们需要做的事情:

  • 将文档加载到本机文档并导出为文本
  • 获取感兴趣的项目(使用NLP)
  • 创建注释指令

然后,您可以将结果可视化,和/或将结果作为docx获取。

第1步:加载文档

$pythonPython 3.6.8(默认,2019年6月1日,16:00:10)>>> import ndapi >>> ndapi.init(user =“default-config”)True >>> mydocx = open(“./ YC_Form_SaaS_Agreement .DOC”,” RB”)>>> sessionInfo = ndapi.upload_document_to_service(mydocx)>>>打印(sessionInfo){ 'NID': 'DEV7BDVM9BGGAIMAUI487AB49QUQS000000000000000000000000002I0THD1D829MQUI4EVGNMFDM860000', '作者': 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJuYW1lIjoiTmF0aXZlIERvY3VtZW50cyIsIm5pY2tuYW1lIjoibmQifQ.tN0R0W3YjpwjnFBUmAj8dxfEMRtcNsXA677QcDtHb2s', 'RID' :'I2522'}

请注意nid。这就是我们需要与文档进行交互的内容。

>>> nid = sessionInfo('nid')

旁白:此时您可以在我们的编辑器中查看您的文档。

这是计算打开文档的URL的一个小功能。

def printEditUrl(nid,author):print(“https://canary.nativedocuments.com/edit/”+ nid +“?author =”+ author)

要获取URL:

printEditUrl(sessionInfo(“NID”),sessionInfo(“作者”))

如果要查看文档,请继续打开该URL。

没工作?你去过https://canary.nativedocuments.com并输入你的设备和秘密吗?

第2步:导出为纯文本

与大多数NLP / AI一样,LexNLP使用纯文本。所以,让我们做到这一点。

>>> ndRawText = ndapi.dow​​nload_document_from_service(nid,mime_type =“application / vnd.nativedocuments.raw.text + text”)>>> print(ndRawText.data)b“urn:nd:stream:5591RH3HVNOMMJM0LOH9DIDRTENGG00000 … Jf0seo4p6vv-sf nSAAS服务订单表格 n客户: t t n联系人: n地址: n电话: n nE-Mail: n n服务:(此处列出并简要说明服务)

您可以看到结果包含流标题,然后是文档的文本,由换行符分隔。

我们暂时将标题放在一边。

splits = ndRawText.data.decode()。split(' n',1)

第3步:与NLP交谈

在这里,我们与LexNLP讨论定义:

import lexnlp.extract.en.definitionsprint(list(lexnlp.extract.en.definitions.get_definitions_explicit(splitits(1))))(('Service(s)','Services :(姓名并在此简要描述服务)___________( “服务”)。',(140,158)),:('支持时间','附件C n支持条款 n(可选) n公司将通过电话和电子邮件向客户提供技术支持在太平洋时间上午9:00至下午5:00的工作日,排除联邦假期(“支持时间”)。',(22449,22466)))

对于LexNLP找到的每个定义,您可以看到它返回定义的术语,含义以及找到定义术语的字符范围。

我们只需重用该字符范围即可告知Native Documents附加注释的位置。

第4步:将NLP响应转换为注释指令

对于要显示注释的Native Documents,我们需要发送以下形式的JSON:

urn:nd:stream:5591RH3HVNOMMJM0LOH9DIDRTENGG00000 … Jf0seo4p6vv-sf“(140..157):0.MEANING”:{“含义”:“服务:(姓名并在此简要描述服务)..(服务)” }:“(22449..22465):17.MEANING”:{“含义”:“EXHIBIT C支持条款(可选)公司将提供..假期(支持时间)”}

为了制作它,让我们使用几个辅助函数:

class ndComment:def __init __(self,start,end,slot,mng,content):self.start = start self.end = end self.slot = slot self.mng = mng self.content = content.replace(' n ','')self.content = self.content.replace(' t','')self.content = self.content.replace('“','')def toString(self):return” “(”+ str(self.start)+“..”+ str(self.end)+“):”+ str(self.slot)+“。”+ self.mng +“”:{“含义“:”“+ str(self.content)+”“} n”def constructPayload():definitions = lexnlp.extract.en.definitions.get_definitions_explicit(splits(1))results =(ndComment(d (2)(0),d(2)(1)-1,ind,“MEANING”,d(1))。toString()表示ind,d表示枚举(定义))payload = splits(0)+“ n“+''。join((''。join(result)for results in results))返回有效负载

现在我们可以使用它将注释附加到文档:

annotations = constructPayload()ndapi.upload_document_to_service(annotations,“ranges”,nid = nid,mime_type =“application / vnd.nativedocuments.raw.text + text”)

可视化带注释的文档

现在让我们看一下编辑器中的文档。

首先,如果您还没有访问https://canary.nativedocuments.com,请输入您的开发密钥和密码。

完成后,您可以打开URL。要获取要加载的URL:

printEditUrl(sessionInfo(“NID”),sessionInfo(“作者”))

如果你在Chrome中查看它,你可能会注意到注释中的一些调试;在后续文章中,我将向您展示如何自定义注释注释的外观。

把它们放在一起

您可以在http://downloads.nativedocuments.com/python/extractDefinitions.py找到该代码

它包含一个函数extractDefs,它接受2个参数,你的.ndapi / config(例如“config-default”),以及Word文档(doc或docx)的路径或URL。例如:

pythonexec(open(“extractDefinitions.py”)。read())extractDefs(“default-config”,“https://www.ycombinator.com/docs/YC_Form_SaaS_Agreement.doc”)

它会返回您可以在Web浏览器中打开的URL。为了便于与同事共享工作URL(但不能用于生产),URL包含devid作为参数。

您可以修改它以提取LexNLP支持的其他信息,或者实际上完全替换其他一些NLP引擎。

欢迎反馈和评测。

将一个AI管道连接到Python中的Word文档最初发布在HackerNoon.com on Medium上,人们通过突出显示和回应这个故事来继续对话。

资讯来源:由0x资讯编译自BITCOININSIDER。版权归作者Anonymous所有,未经许可,不得转载
提示:投资有风险,入市需谨慎,本资讯不作为投资理财建议。请理性投资,切实提高风险防范意识;如有发现的违法犯罪线索,可积极向有关部门举报反映。
你可能还喜欢