空间依赖匹配器对长动词短语有问题且敏感

2024-09-30 22:19:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图构造一个依赖项匹配器,它捕获文档中的某些短语并打印出包含这些短语的段落。这些是已经存在的一长串动词-名词组合

本练习更广泛的目的是仔细阅读大量PDF文档,以分析哪些类型的活动是由谁进行的,以及以何种频率进行的。这项任务分为两部分。第一种方法是提取包含这些短语(动词-名词等)的段落,供人类查看并验证这些短语的随机样本,以便我们知道解析工作正常。然后使用与每个PDF相关的其他特征,进一步分析正在执行的任务类型(起草/创建/执行>;文档/任务类型“x”),由谁、何时等执行

一个例子是“起草/准备”>;“采购和市场风险评估”

我查看了一个示例句子的依赖关系树,然后设置了依赖关系匹配器来处理它。请参见下面的示例

示例句子是“他起草了采购和市场风险评估”。相关性似乎是草稿>;评估>;采购>;风险>;市场

enter image description here

    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)

当我这样做的时候,它就起作用了

enter image description here

然而,这里有很多问题

  1. 当我尝试在匹配器中添加“风险”和“市场”术语时,它就不再起作用了:

    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"}}
             ]
    
  2. 此外,当我稍微更改句子文本时,通过替换“&;”by”和“然后依赖项会更改,因此依赖项匹配器不再工作。依赖项变为草稿>;采购>;评估>而在前面的示例句中,它是草稿>;评估>;采购>

enter image description here

  1. 当我将其他文本添加到句子中时,依赖关系会发生变化

enter image description here

找到对句子结构的细微变化不敏感的匹配项的好方法是什么


Tags: name文档gtnode示例市场句子pattern