我已经创建了一个匹配器,但是我很难进一步解析匹配器的结果。
我的匹配器如下所示:
matcher.add('ZeroToMany', None, [{'DEP':'nsubj', 'OP' : '+'}, {'LEMMA': 'can'}, {},{'DEP':'dobj', 'OP' : '+'}]
matches = matcher(doc) for match_id, start, end in matches: span = doc[start:end] print(span.text)
哪个会产生这样的输出:
客户可以下订单
现在,我想通过对某些依赖项进行分类来继续解析结果(例如,为每个结果生成标记为nsubj的标记列表,等等(基于原始句子中的依赖项)。
我已经写了一些代码来对文档中的句子执行此操作:
objects = ["nsubj", "nsubjpass"] #dependency parameters for objects
dependents1 = ["dobj"] #dependency parameters for first-order dependents
dependents2 = ["nmod", "iobj", "pobj"] #dependency parameters for second-order dependents
#identify possible objects and dependents for each sentence based on dependency parameters, for each sentence add row to dataframe
a = []
for sent in doc.sents:
obj_toks = [tok for tok in sent if (tok.dep_ in objects) ]
dep1_toks = [tok for tok in sent if (tok.dep_ in dependents1) ]
dep2_toks = [tok for tok in sent if (tok.dep_ in dependents2) ]
relation1 = [tok.head for tok in obj_toks]
relation2 = [tok.head for tok in dep2_toks]
a.append([obj_toks, relation1, dep1_toks, relation2, dep2_toks])
#create dataframe
df = pd.DataFrame(a, columns=['obj', 'rel1', 'dep1', 'rel2', 'dep2'])
#'unstack' 'objects' column
lst_col = 'obj'
df = pd.DataFrame({col:np.repeat(df[col].values, df[lst_col].str.len()) for col in df.columns.difference([lst_col])}).assign(**{lst_col:np.concatenate(df[lst_col].values)})[df.columns.tolist()]
print(df)
现在,我想回收此代码以进一步对匹配器输出的结果进行解析/分类。问题在于匹配器的输出是一个span元素,显然与句子不同。关于如何进行操作以使Matcher的输出与上面的代码兼容的任何想法吗?将结果转换回整个句子(例如通过使用span.sent)不是一种选择,因为我只对匹配器检索到的特定片段感兴趣。
关于如何进行此操作的任何想法?