내 목표는 용어의 지식 그래프를 작성하는 것입니다. 각 학기마다; 나는 (어쨌든 쉽게) 그 용어에서 다른 모든 용어로 즉시 연결을 추출 할 수있다. (MySQL을 내에 저장 될 수있다) 다음의 테이블 I은 추출 할 수 있는지의 예이다 : 상기 테이블의 각 행지식 그래프 데이터 구조 간의 연결 추출
; 즉각적인 (UNDIRECTED) 연결과 그 무게 (또는 강도)를 봅니다. 모든 연결은 방향이 지정되지 않습니다.
그래서 질문은; 우리는 간접적 인 인 기간 사이 연결을 알아낼 수 있습니까? 예를 들어; 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 -- Renaissance -- Leonardo Da Vinci -- Italy -- Michelangelo
것은 무엇 모든 용어 사이의 모든 연결을 추출하는 가장 좋은 방법이 될 것입니다 : 예를 들어 다음을 통해 Lorenzo de’ Medici
와 Michelangelo
사이의 연결이 존재 하는가? 나는 이것이 해결되어야 할 매우 복잡한 문제 일 수 있음을 이해한다; 그러나 나는 모든 연결을 다소 효율적으로 추출하는 데 사용할 수있는 데이터 구조를 만들 수있는 제안을하고 있습니다 ...
[일시적 폐쇄] (http://en.wikipedia.org/wiki/Transitive_closure) 및 [이 답변들] (http://stackoverflow.com/questions/3517524/best-known-transitive-closure)을 확인하십시오. 그래프 용 알고리즘) –