Neo4j 中多域 sentence/word 图的最佳结构是什么?
What's the optimal structure for a multi-domain sentence/word graph in Neo4j?
我正在实施基于 this paper 的抽象摘要,但我无法确定实施图表的最佳方式,以便将其用于多领域分析。让我们从 Twitter 作为示例域开始。
对于每条推文,每个句子都会像这样绘制(例如:“@Whosebug 是获得帮助的好地方#graphsftw”):
(@Whosebug)-[next]->(is)
-[next]->(a)
-[next]->(great)
-[next]->(place)
-[next]->(for)
-[next]->(getting)
-[next]->(help)
-[next]->(#graphsftw)
这将生成类似于论文中概述的图表:
为了让每个词都有一种域层,我将它们添加到图表中,如下所示(具有包括词性等属性):
MERGE (w:Word:TwitterWord {orth: "word" }) ON CREATE SET ... ON MATCH SET ...
在论文中,他们在每个单词{SID:PID}上设置了一个属性,它描述了单词的句子id(SID)以及每个单词在句子中的位置(PID) ;所以在例句中,“@Whosebug”的 属性 为 {1:1},"is" 为 {1:2},“#graphsftw”{1:9} 等。每个随后在另一个句子中引用该词会向 {SID:PID} 属性 数组添加一个元素:[{1:x}, {n:n}].
将句子和位置信息作为包含在每个节点的 属性 中的元素数组似乎并不高效,尤其是在处理每个词中的多个词域和子域时层。
对于像 Twitter 这样的每个词层或域,我想做的是了解围绕特定 domain/layer 实体(如提及和主题标签)发生的事情;在此示例中,@Whosebug 和 #graphsftw.
在 'Twitter' 层之上添加子域层的最佳方式是什么,这样不同的词就可以指向特定的域实体,如#hashtags 和@mentions?我可以为每个子域使用单独的标签,例如 :Word:TwitterWord:Whosebug
,但这会给我的图表提供大量单独的标签。
如果我在节点 属性 数组中包含子域实体,那么遍历似乎会成为一个问题。
由于所有推文和提取的实体(如@mentions 和#hashtags)在词图步骤之前都被绘制为 nodes/vertices,所以我可以从#hashtags 和@mentions 到词的边缘。或者,我可以让从推文到单词的边以实体为边 属性。基本上,我正在寻找一种在存储和遍历方面都是 "cheapest" 的结构。
如果您能提供有关如何大致构造此图的任何意见,我们将不胜感激。谢谢!
您还可以将域/位置放在关系上(也许还可以添加源 ID)。
OTOH,只要您的关系代表原始句子,您也可以推断出该信息。
然后您可以动态聚合这些关系以计算强度,或者有一个单独的 "composite" 关系将所有其他关系聚合成一个计数器或总和。
我正在实施基于 this paper 的抽象摘要,但我无法确定实施图表的最佳方式,以便将其用于多领域分析。让我们从 Twitter 作为示例域开始。
对于每条推文,每个句子都会像这样绘制(例如:“@Whosebug 是获得帮助的好地方#graphsftw”):
(@Whosebug)-[next]->(is)
-[next]->(a)
-[next]->(great)
-[next]->(place)
-[next]->(for)
-[next]->(getting)
-[next]->(help)
-[next]->(#graphsftw)
这将生成类似于论文中概述的图表:
为了让每个词都有一种域层,我将它们添加到图表中,如下所示(具有包括词性等属性):
MERGE (w:Word:TwitterWord {orth: "word" }) ON CREATE SET ... ON MATCH SET ...
在论文中,他们在每个单词{SID:PID}上设置了一个属性,它描述了单词的句子id(SID)以及每个单词在句子中的位置(PID) ;所以在例句中,“@Whosebug”的 属性 为 {1:1},"is" 为 {1:2},“#graphsftw”{1:9} 等。每个随后在另一个句子中引用该词会向 {SID:PID} 属性 数组添加一个元素:[{1:x}, {n:n}].
将句子和位置信息作为包含在每个节点的 属性 中的元素数组似乎并不高效,尤其是在处理每个词中的多个词域和子域时层。
对于像 Twitter 这样的每个词层或域,我想做的是了解围绕特定 domain/layer 实体(如提及和主题标签)发生的事情;在此示例中,@Whosebug 和 #graphsftw.
在 'Twitter' 层之上添加子域层的最佳方式是什么,这样不同的词就可以指向特定的域实体,如#hashtags 和@mentions?我可以为每个子域使用单独的标签,例如 :Word:TwitterWord:Whosebug
,但这会给我的图表提供大量单独的标签。
如果我在节点 属性 数组中包含子域实体,那么遍历似乎会成为一个问题。
由于所有推文和提取的实体(如@mentions 和#hashtags)在词图步骤之前都被绘制为 nodes/vertices,所以我可以从#hashtags 和@mentions 到词的边缘。或者,我可以让从推文到单词的边以实体为边 属性。基本上,我正在寻找一种在存储和遍历方面都是 "cheapest" 的结构。
如果您能提供有关如何大致构造此图的任何意见,我们将不胜感激。谢谢!
您还可以将域/位置放在关系上(也许还可以添加源 ID)。
OTOH,只要您的关系代表原始句子,您也可以推断出该信息。
然后您可以动态聚合这些关系以计算强度,或者有一个单独的 "composite" 关系将所有其他关系聚合成一个计数器或总和。