python - 用 spaCy 判断一个词是否在两个实体的依赖路径上
问题描述
我正在研究一个 nlp 问题,给定一个包含两个实体的句子,我需要为每个单词生成布尔值,指示它是否位于这些实体之间的依赖路径上。
例如:
'一个朦胧的<e1>山脊</e1>从<e2>浪涌</e2>中升起'
我想迭代每个单词并判断它是否在 e1 和 e2 之间的依赖路径上
两个重要说明:
- 如果您尝试帮助我(首先感谢),请不要费心考虑带有 < e1 > 和 < e2 > 的 xml 标记,我真的很感兴趣如何查找一个单词是否在任何两个给定单词之间的依赖路径上使用 spaCy,我自己处理哪些单词
- 因为我不是nlp专家,所以我对“依赖路径”的含义有点困惑,如果不够清楚,我很抱歉(这些是我导师使用的词)
提前致谢
解决方案
所以我的解决方案是使用那个帖子找到的
有一个专门针对 spaCy 的答案
我在给定句子中查找两个单词之间的依赖路径的实现:
import networkx as nx
import spacy
enter code here
doc = nlp("Ships carrying equipment for US troops are already waiting off the Turkish coast")
def shortest_dependency_path(doc, e1=None, e2=None):
edges = []
for token in doc:
for child in token.children:
edges.append(('{0}'.format(token),
'{0}'.format(child)))
graph = nx.Graph(edges)
try:
shortest_path = nx.shortest_path(graph, source=e1, target=e2)
except nx.NetworkXNoPath:
shortest_path = []
return shortest_path
print(shortest_dependency_path(doc,'Ships','troops'))
输出:
['Ships', 'carrying', 'for', 'troops']
它实际上所做的是首先为句子构建一个无向图,其中单词是节点,单词之间的依赖关系是边,然后找到两个节点之间的最短路径
为了我的需要,我只是检查每个单词是否在生成的依赖路径(最短路径)上
推荐阅读
- node.js - 安装 graphql-tools 和 graphql-express 之后。控制台'找不到名称'AsyncIterator'中的错误消息
- excel - VBa vlookup,将范围替换为变量
- google-apps-script - 通过单击可以存储在书签中的链接在谷歌应用程序脚本中运行触发器?
- r - Rvest 将论坛线程中的所有评论绑定到一个 data.frame
- python-3.x - sqlalchemy server_side_cursors 模式不能重复执行
- python - Python 多线程 COM 对象
- ruby - 如何使“何时”字符串不区分大小写?
- java - java InputStream最后不返回-1
- jquery - 将对象添加到 ajax 发布成功列表的最佳实践
- design-patterns - 装饰器设计模式用例