我试图构造一个依赖项匹配器,它捕获文档中的某些短语并打印出包含这些短语的段落。这些是已经存在的一长串动词-名词组合
本练习更广泛的目的是仔细阅读大量PDF文档,以分析哪些类型的活动是由谁进行的,以及以何种频率进行的。这项任务分为两部分。第一种方法是提取包含这些短语(动词-名词等)的段落,供人类查看并验证这些短语的随机样本,以便我们知道解析工作正常。然后使用与每个PDF相关的其他特征,进一步分析正在执行的任务类型(起草/创建/执行>;文档/任务类型“x”),由谁、何时等执行
一个例子是“起草/准备”>;“采购和市场风险评估”
我查看了一个示例句子的依赖关系树,然后设置了依赖关系匹配器来处理它。请参见下面的示例
示例句子是“他起草了采购和市场风险评估”。相关性似乎是草稿>;评估>;采购>;风险>;市场
import spacy
nlp = spacy.load('en_core_web_sm')
from spacy.matcher import DependencyMatcher
dmatcher = DependencyMatcher(nlp.vocab)
doc = nlp("""He drafted the procurement & market risk assessment.""")
lemma_list_drpr = ['draft', 'prepare']
print("----- Using Dependency Matcher -----")
deppattern22 = [
{'SPEC' : {"NODE_NAME": "drpr"}, "PATTERN":{"LEMMA": {"IN": lemma_list_drpr}}},
{"SPEC": {"NBOR_NAME": "drpr", "NBOR_RELOP": ">", "NODE_NAME": "ass2"}, "PATTERN":
{"LEMMA": "assessment"}},
{"SPEC": {"NBOR_NAME": "ass2", "NBOR_RELOP": ">", "NODE_NAME": "proc2"}, "PATTERN":
{"LEMMA": "procurement"}}
]
dmatcher.add("Pat22", patterns = [deppattern22])
for number, mylist in dmatcher(doc):
for item in mylist:
print(doc[item[0]].sent)
当我这样做的时候,它就起作用了
然而,这里有很多问题
当我尝试在匹配器中添加“风险”和“市场”术语时,它就不再起作用了:
deppattern22a = [
{'SPEC' : {"NODE_NAME": "drpr"}, "PATTERN":{"LEMMA": {"IN": lemma_list_drpr}}},
{"SPEC": {"NBOR_NAME": "drpr", "NBOR_RELOP": ">", "NODE_NAME": "ass2"}, "PATTERN":
{"LEMMA": "assessment"}},
{"SPEC": {"NBOR_NAME": "ass2", "NBOR_RELOP": ">", "NODE_NAME": "proc2"}, "PATTERN":
{"LEMMA": "procurement"}},
{"SPEC": {"NBOR_NAME": "proc2", "NBOR_RELOP": ">", "NODE_NAME": "risk2"}, "PATTERN":
{"LEMMA": "risk"}},
{"SPEC": {"NBOR_NAME": "risk2", "NBOR_RELOP": ">", "NODE_NAME": "mkt2"}, "PATTERN":
{"LEMMA": "market"}}
]
此外,当我稍微更改句子文本时,通过替换“&;”by”和“然后依赖项会更改,因此依赖项匹配器不再工作。依赖项变为草稿>;采购>;评估>而在前面的示例句中,它是草稿>;评估>;采购>
找到对句子结构的细微变化不敏感的匹配项的好方法是什么
目前没有回答
相关问题 更多 >
编程相关推荐