问题描述
我正在尝试构建一个依赖匹配器来捕获文档中的某些短语并打印出包含这些短语的段落。这些是预先存在的一长串动名词组合。
此练习的更广泛目的是通过大量 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","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": "assessment"}},"PATTERN": {"LemmA": "procurement"}},{"SPEC": {"NBOR_NAME": "proc2","NODE_NAME": "risk2"},"PATTERN": {"LemmA": "risk"}},{"SPEC": {"NBOR_NAME": "risk2","NODE_NAME": "mkt2"},"PATTERN": {"LemmA": "market"}} ]
-
此外,当我稍微更改句子文本时,通过将“&”替换为“and”,依赖项会发生变化,因此我的依赖项匹配器不再起作用。依赖关系变为draft > purchase > Assessment > ... 而在前面的例句中它是draft > Assessment > purchase > ...
- 当我在句子中添加其他文本时,依赖性会变回来。
找到这种对句子结构的细微变化不敏感的匹配的好方法是什么?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)