我的目标是建立术语知识图;每学期;我可以(以某种方式轻松地)从该术语中提取所有其他术语的直接联系;下表(可以存储在MySQL)是什么我可以提取一个例子:提取知识图数据结构之间的连接
在从上面的表中的每一行;我们会看到一个直接(不受指控)的连接,以及它的重量(或强度)。 请注意,所有连接都是无向的。
所以问题是;我们能否找出间接的术语之间的关系?例如; Leonardo Da Vinci
和Michelangelo
之间的一个链接是通过术语Italy
;这可以表示为:
Leonardo Da Vinci -- 4 (weight) -- Italy -- 6 (weight) -- Michelangelo
使用PHP和MySQL,我们可以简单地做了以下内容:
<? include('db_settings.php'); ?>
<?php
$con = mysqli_connect($myDB_server, $myDB_userName, $myDB_password, $myDB_name);
if (mysqli_connect_errno($con))
echo "Error :(<BR/>";
$connectionFrom = 'Leonardo Da Vinci';
$result = mysqli_query($con, "SELECT * FROM termLinks WHERE termLinks_t1 = '$connectionFrom'");
while($row = mysqli_fetch_array($result))
{
$currConnection = $row[2];
$newResult = mysqli_query($con, "SELECT * FROM termLinks WHERE termLinks_t2 = '$currConnection'");
while ($newRow = mysqli_fetch_array($newResult))
{
if (strcmp($newRow[1], $connectionFrom) != 0)
echo "There is a connection between " . $connectionFrom . " and " . $newRow[1] . " through " . $currConnection;
}
echo "<BR/>";
}
mysqli_close($con);
?>
这将导致以下:
There is a connection between Leonardo Da Vinci and Michelangelo through Italy
There is a connection between Leonardo Da Vinci and Lorenzo de’ Medici through Renaissance
但在其他情况;我们可能需要通过多个链接才能找到连接;例如存在通过以下Lorenzo de’ Medici
和Michelangelo
之间的连接:
Lorenzo de’ Medici -- Renaissance -- Leonardo Da Vinci -- Italy -- Michelangelo
什么是提取所有条款之间的所有连接的最佳方法?我明白这可能是一个非常复杂的问题,但我开放中,我也许可以建立一个我可以使用,而高效地提取所有连接的数据结构中的任何建议...
查看[transitive closure](http://en.wikipedia.org/wiki/Transitive_closure)和[这些答案](http://stackoverflow.com/questions/3517524/best-known-transitive-closure -algorithm换图表) –