2015-01-31 3 views
0

나는 Java와 Neo4j로 간단한 소셜 네트워크를 개발 중이다.Neo4j와의 관계

사용자는 이미 수행 한 작업을 제출하고 태그로 태그를 지정할 수 있습니다. 또한 사용자는 관심 분야 (태그도 있음)를 추가 할 수 있습니다. 시스템은 아직 사용자가 수행하지 않은 것을 사용자에게 권장해야합니다. 사용자간에 유사도가 계산되는 협업 필터링에 대한 기사를 읽었습니다. 유사한 사용자가 발견 된 후에도 사용자가 수행했지만 로그인 한 사용자가 아직 수행하지 않은 작업 중 일부는 권장 사항과 완벽하게 일치합니다. 여기

는 데이터 모델 :

(me)-[:HAS_DONE]->(thing)-[:IS_TAGGED_WITH]->(tag)<-[:IS_TAGGED_WITH]-(theirThing)<-[:HAS_DONE]-(people) 

(me)-[:HAS_DONE]->(thing)-[:IS_TAGGED_WITH]->(tag)<-[:IS_INTERESTED_IN]-(people) 

(me)-[:IS_INTERESTED_IN]->(tag)<-[:IS_TAGGED_WITH]-(theirThing)<-[:HAS_DONE]-(people) 

(me)-[:IS_INTERESTED_IN]->(tag)<-[:IS_INTERESTED_IN]-(people) 

Collaborative filtering usually deals with some ratings.

태그의 경우를 들어, 다음과 같은 표기법을 만들 수 있습니다 :

U={u_1, u_2,..., u_n} - users 

I={i_1, i_2,..., i_m} - interests 

T={t_1, t_2,..., t_k} - things 

UIsim을 (u_i, u_j) - 유사성을 2 명의 사용자의 이익을 공통 관심 수를 한 사용자가 추가 한 최대 관심사 수로 나눈 값입니다.

UTsim (u_i, u_j) - 두 명의 사용자의 유사점. 사물에 대한 공통 태그 수를 한 명의 사용자가 추가 한 최대 태그 수로 나눈 값입니다.

두 사용자 간의 최종 유사도는 w1 * UIsim (u_i, u_j) + w2 * UTsim (u_i, u_j)입니다. 여기서 w1 + w2 = 1입니다.

이 공식을 Cypher로 구현할 수 있습니까? 내 말은 max 함수가 있습니까? 그리고 UNION은 네 가지 경우를 그룹화하는 데 적절합니까?

답변

2

예 사이퍼의 max 기능이 여기를 참조 : http://neo4j.com/docs/stable/query-aggregation.html#aggregation-max

그러나 그래프의 크기에 따라보다 효율적으로 될 수있는 자바 API를 사용하여.

UNION 모든 결과를 반환하는 데 사용할 수 있습니다.

recommandation의 필터링 및 프로세스에 대한 고급 가능성을 제공하는 neo4j의 RECO 플러그인도있다 : 당신은 여기에 슬라이드를 찾을 수 있습니다

https://github.com/graphaware/neo4j-reco

: http://www.slideshare.net/bachmanm/recommendations-with-neo4j-fosdem-2015

가 그리고 웹 세미나는이 플러그인에 대한이 목요일 : http://info.neo4j.com/0205-register.html?_ga=1.197373423.1723877819.1422809612