首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >一种抽取文档中合法引文的算法

一种抽取文档中合法引文的算法
EN

Stack Overflow用户
提问于 2021-09-02 17:07:04
回答 1查看 93关注 0票数 1

我想训练一个机器学习模型来学习和提取文本文档中的合法引用模式。我可以使用的最佳算法是什么?我的训练数据样本法律引用集看起来像,

代码语言:javascript
复制
    sample set: 
    Brill v. Guardian Life Ins. Co. of America, 142 N.J. 520, 529 (1995)
    Della v. Guard Lifal Ins. Co. of SA, 142 N.J. 420, 549 (2011)
    Heljon Mgmt. Corp. v. DiLeo, 55 N.J. Super. 306, 312-13 (No Citations. This was 
    extracted from NJ Sup..)
    Ocean Cape Hotel Corp. v. Masefield Corp., 63 N.J. Super. 369, 383 (App. Div. 1960)

使用正则表达式代码从文档中提取引用训练样本,

代码语言:javascript
复制
r'(?:[A-Z]\w*\.? )+v\. .*?\d{4}\)'

我尝试过spaCy实体匹配,但这不起作用(我敢打赌我的代码不完美)。我的代码

代码语言:javascript
复制
import re
import en_core_web_sm
nlp = en_core_web_sm.load()

nlp = spacy.load('en_core_web_sm')

from spacy.matcher import Matcher
m_tool = Matcher(nlp.vocab)

doc = open(file='text1.txt', mode='r', encoding='utf-8').read()
#print(text)

doc = nlp(doc)
#print([(ent.text, ent.label_) for ent in doc.ents])


p1 = [{'IS_TITLE': 'NN'}, {'LOWER': 'v'}, {'IS_PUNCT': True}, {'IS_TITLE': 'NN'}]
p2 = [{'IS_TITLE': 'NN'}, {'IS_TITLE': 'NN'}, {'LOWER': 'v'}, {'IS_PUNCT': True}, 
{'IS_TITLE': 'NN'}]
p3 = [{'IS_TITLE': 'NN'}, {'LOWER': 'v'}, {'IS_PUNCT': True}, {'IS_TITLE': 'NN'}, 
{'IS_TITLE': 'NN'},]
p4 = [{'IS_TITLE': 'NN'}, {'IS_TITLE': 'NN'}, {'LOWER': 'v'}, {'IS_PUNCT': True}, 
{'IS_TITLE': 'NN'}, {'IS_TITLE': 'NN'}]
p5 = [{'IS_TITLE': 'NN'}, {'IS_TITLE': 'NN'}, {'IS_TITLE': 'NN'}, {'LOWER': 'v'}, 
{'IS_PUNCT': True}, {'IS_TITLE': 'NN'}, {'IS_TITLE': 'NN'}, {'IS_TITLE': 'NN'}]
p6 = [{'IS_TITLE': 'NN'}, {'IS_TITLE': 'NN'}, {'LOWER': 'v'}, {'IS_PUNCT': True}, 
{'IS_TITLE': 'NN'}, {'IS_TITLE': 'NN'}, {'IS_TITLE': 'NN'}]
p7 = [{'IS_TITLE': 'NN'}, {'LOWER': 'v'}, {'IS_PUNCT': True}, {'IS_TITLE': 'NN'}, 
{'IS_TITLE': 'NN'}, {'IS_TITLE': 'NN'}]
p8 = [{'IS_TITLE': 'NN'}, {'IS_TITLE': 'NN'}, {'IS_TITLE': 'NN'}, {'LOWER': 'v'}, 
{'IS_PUNCT': True}, {'IS_TITLE': 'NN'}]
p9 = [{'IS_TITLE': 'NN'}, {'IS_TITLE': 'NN'}, {'IS_TITLE': 'NN'}, {'LOWER': 'v'}, 
{'IS_PUNCT': True}, {'IS_TITLE': 'NN'}, {'IS_TITLE': 'NN'}]
p10 = [{'label': 'PERSON'}]
P11 = [{'label': 'ORG'}, {'label': 'PERSON'}]
p12 = [{'label': 'PERSON'}, {'label': 'ORG'}]
p13 = [{'label': 'ORG'}, {'label': 'ORG'}, {'label': 'ORG'}, {'label': 'ORG'}]

m_tool.add('QBF', None, p1, p2, p3, p4, p5, p6, p6, p7, p8, p9, p10, p11, p12, p13)

phrase_matches = m_tool(doc)
print(phrase_matches)
EN

回答 1

Stack Overflow用户

发布于 2021-09-07 18:43:51

Philip,我希望通过分类为您提供一种更健壮的提取方法,而不是模式匹配。我真的很喜欢Prodigy现在支持的流程(创建了spaCy的爆炸的一部分),用于开发主动学习流程,以支持数据提取经常需要的持续改进。

  • 构建模式规则,并将这些规则与Sense2Vec一起使用,以生成模式规则的良好工作集以生成模型,该模型可用于学习所提供模式的上下文。
  • 使用prodigy (或核心spaCy)创建附加标签和模型结果更新,以微调和优化提取。

使用NLTK的另一个地址示例:这是一个与您的相似的场景。https://onethinglab.com/2018/03/05/extracting-addresses-from-text/

模式和正则表达式对于您的用例来说是不够健壮的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69034525

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档