我想训练一个机器学习模型来学习和提取文本文档中的法律引用模式。我能使用的最佳算法是什么?我的训练数据样本集的法律引用看起来像,
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)
使用正则表达式代码从文档中提取引文训练样本,
r'(?:[A-Z]w*.? )+v. .*?d{4})'
我已经尝试过空间实体匹配,但这是不工作(我打赌我的代码是不完美的)。我的代码
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)
Philip,我希望通过分类为您提供一种更强大的提取方法,而不仅仅是您能够从模式匹配中获得的方法。我真的很喜欢Prodigy现在支持的流程流(创建space的爆炸的一部分),用于开发主动学习流程,以支持数据提取通常需要的持续改进。
- 构建模式规则,并将这些规则与Sense2Vec一起使用,以生成良好的模式/注释工作集。
- 使用模式规则生成模型,该模型可用于学习所提供模式的上下文。
- 使用prodigy(或core space)创建额外的标签和更新模型结果,以微调和优化提取。
使用NLTK的另一个地址示例:这与您的场景类似。https://onethinglab.com/2018/03/05/extracting-addresses-from-text/
模式和正则表达式对于你的用例来说不够健壮。