CoolFace
Apppublic

CultriX/Generate-Knowledge-Graphs

sourceHugging Facemitupdated 1y agoView on Hugging Face
3likes
graph_builder.cpython-312.pyc68 linesDownload Raw Back to __pycache__
12��oh�#��@�ddlZddlmZmZmZmZddlZGd�d�Zy)�N)�List�Dict�Any�Tuplec	�v�eZdZd�Zdeeeefdeeeefdejfd�Z3dedefd�Z
deeeffd�Zdd	edeeeeffd4�Z			ddeed
edeedejfd�Zddedefd�Zdefd�Zdefd�Zdefd�Zddededejfd�Zdededeefd�Zdedeeeffd�Zy) �GraphBuilderc�6�tj�|_y)N)�nx�DiGraph�graph)�selfs �DC:\Users\jesse\Documents\Cline\knowledge-graphs\src\graph_builder.py�__init__zGraphBuilder.__init__s���Z�Z�\��5��entities�
relationships�returnc
��|jj�|D]�}|jdd�j�}|s�&|jj	||jdd�|jdd�|jdd�|j|jdd������|D]�}|jd	d�j�}|jd6d�j�}|jdd�}|jdd�}	|s�j|s�m||jjvs��||jjvs��|jj||||	d
����|jS)z5Build NetworkX graph from entities and relationships.�name��type�UNKNOWN�7importance��description)rrr�size�source�target�relationship�8related_to��?)rr�weight)r�clear�get�strip�add_node�_calculate_node_size�nodes�add_edge)9r
rr�entity�node_idrrr�rel_typers10          r�build_graphzGraphBuilder.build_graph	sV���1112�����F��j�j���,�2�2�4�G���1314�#�#�����F�I�6�%�z�z�,��<� &�1516�=�"� =��2�2�6�:�:�l�C�3P�Q�$���*�L�!�%�%�h��3�9�9�;�F�!�%�%�h��3�9�9�;�F�#�'�'���E�H�&�*�*�=�"�=�K��&�V�t�z�z�/?�/?�%?�F�d�j�j�N^�N^�D^��1718�#�#���!)� +��$��*��z�z�rrc�4�d\}}t|||z19|zz�S)z.Calculate node size based on importance score.)�20�2)�int)r
r�min_size�max_sizes    rr'z!GraphBuilder._calculate_node_size+s(��$���(��8�x�(�2�j�@�@�A�Arc�Z�|jj�sdddddd�S|jj�}|jj�|jj	�tj|j�tj|�tj|�|jj�dkDrWtt|jj��j��|jj�zd�Sdd�S)z%Get basic statistics about the graph.rrF)�	num_nodes�	num_edges�density�is_connected�num_components)r5r6r7r8r9�21avg_degree)
rr(�
to_undirected�number_of_nodes�number_of_edgesr22r7r8�number_connected_components�sum�dict�degree�values)r
�23undirecteds  r�get_graph_statisticsz!GraphBuilder.get_graph_statistics1s����z�z���!���� %�"#��
��Z�Z�-�-�/�24����3�3�5����3�3�5��z�z�$�*�*�-��O�O�J�7� �<�<�Z�H�dh�dn�dn�d~�d~�eA�DE�eE�#�d�4�:�:�#4�#4�#6�7�>�>�@�A�D�J�J�D^�D^�D`�`�
25�	26�KL�
27�	28r�top_kc��|jj�sgSi}tj|j�}|jj	�dkDr tj29|j�}n(|jj�D�cic]}|d��}}	tj|j�}|jj�D]w}|jj|jdd�}d|j|d�zd|j|d�zzd|j|d�zzd|zz}|||<�yt|j�d�d�	�}	|	d30|Scc}w#|jj�D�cic] }|d|jj	�z��"ncc}w}}Y��	xYw)z9Get most central nodes using various centrality measures.�rr!rg333333�?g�������?c��|dS)N��)�xs r�<lambda>z0GraphBuilder.get_central_nodes.<locals>.<lambda>js��!�A�$rT)�key�reverseN)31rr(r32�degree_centralityr<�betweenness_centrality�pagerankr$�sorted�items)33r
rE�centralitiesrOrP�noderQr�combined_score�sorted_nodess34          r�get_central_nodeszGraphBuilder.get_central_nodesHs����z�z���!��I����0�0����<���:�:�%�%�'�!�+�%'�%>�%>�t�z�z�%J�"�<@�J�J�<L�<L�<N�%O�<N�D�d�C�i�<N�"�%O�	_��{�{�4�:�:�.�H�35�J�J�$�$�&�D����)�)�$�/�3�3�L�#�F�J��'�+�+�D�#�6�6��,�0�0��s�;�;�<��h�l�l�4��-�-�.��j� �!�
�"0�L���'��l�0�0�2��PT�U���F�U�#�#��+&P��36	_�KO�:�:�K[�K[�K]�^�K]�4��c�$�*�*�"<�"<�">�>�>�K]��^�H�^�s�37E9�$E>�>G�%G�GN�entity_types�min_importance�relationship_typesc���|jj�}g}|jd��D]V\}}|r%|jd�|vr|j	|��-|s�0|jdd�|ks�F|j	|��X|j|�|rUg}|j
d��D]-\}	}38}|jd�|vs�|j	|	|39f��/|j|�|S)z@Filter graph by entity types, importance, or relationship types.T��datarrrr)r�copyr(r$�append�remove_nodes_from�edges�remove_edges_from)r
rYrZr[�filtered_graph�nodes_to_removerUr^�edges_to_remove�u�vs           r�filter_graphzGraphBuilder.filter_graphms���40�����*����(�.�.�D�.�9�J�D�$������ 0�� D��&�&�t�,��D�H�H�\�3�$?�.�$P��&�&�t�,�	:�	�(�(��9�� �O�,�2�2��2�=�41��1�d��8�8�N�+�3E�E�#�*�*�A�q�6�2�>�
�,�,�_�=��r�format_typec���|j�dk(r|j�S|j�dk(r|j�S|j�dk(r|j�St	d|����)z Export graph in various formats.�json�graphml�gexfzUnsupported export format: )�lower�_export_json�_export_graphml�_export_gexf�42ValueError)r
rjs  r�export_graphzGraphBuilder.export_graph�su������&�(��$�$�&�&�
�
�
�
 �I�
-��'�'�)�)�
�
�
�
 �F�
*��$�$�&�&��:�;�-�H�I�Irc�r�ggd�}|jjd��D].\}}d|i}|j|�|dj|��0|jj	d��D]0\}}}||d�}|j|�|dj|��2tj|d�	�S)43zExport graph as JSON.)r(rbTr]�idr()rrrbrG)�indent)rr(�updater`rbrl�dumps)r
r^rU�attrs�	node_datargrh�	edge_datas        rrpzGraphBuilder._export_json�s�����44�� �:�:�+�+��+�6�K�D�%��t��I����U�#���M� � ��+�7� �:�:�+�+��+�6�K�A�q�%�#$��2�I����U�#���M� � ��+�7�45�z�z�$�q�)�)rc��ddl}|j�}tj|j|�|j�S)zExport graph as GraphML.rN)�io�StringIOr46�
write_graphmlr�getvalue�r
r~�outputs   rrqzGraphBuilder._export_graphml�s1��������47������V�,���� � rc��ddl}|j�}tj|j|�|j�S)zExport graph as GEXF.rN)r~rr4849write_gexfrr�r�s   rrrzGraphBuilder._export_gexf�s/��������50�
�
�d�j�j�&�)���� � rrU�radiusc���||jvrtj�St|g�}t|g�}t	|�D]�}t�}|D]V}|j|jj
|��|j|jj|���X|j|�||z51}|r��n|jj|�j�S)z/Get subgraph within specified radius of a node.)52rr53r�set�rangerx�54successors�predecessors�subgraphr_)r
rUr��nodes_in_radius�
current_nodes�_�55next_nodes�ns        r�get_subgraph_around_nodez%GraphBuilder.get_subgraph_around_node�s����t�z�z�!��:�:�<���t�f�+���T�F��
��v��A���J�"���!�!�$�*�*�"7�"7��":�;��!�!�$�*�*�"9�"9�!�"<�=�#�56
�"�"�:�.�&��8�M� ����z�z�"�"�?�3�8�8�:�:rrrc��	|jj�}tj|||�S#tjtj57f$rgcYSwxYw)z$Get shortest path between two nodes.)rr;r58�
shortest_path�NetworkXNoPath�NodeNotFound)r
rrrCs    r�get_shortest_pathzGraphBuilder.get_shortest_path�sQ��	����1�1�3�J��#�#�J���?�?���!�!�2�?�?�3�	��I�	�s�03�%A�Ac59��||jvriSt|jj|�}t|jj	|��}t|jj|��}|j
|jj|�|jj|�||t|�t|�zd��|S)z/Get detailed information about a specific node.)�	in_degree�60out_degreer�r��total_connections)61rr@r(�listr�r�rxr�r��len)r
rUr{r�r�s     r�
get_node_infozGraphBuilder.get_node_info�s����t�z�z�!��I�����)�)�$�/�0�	��D�J�J�3�3�D�9�:���$�*�*�/�/��5�6�62�������-�-�d�3��*�*�/�/��5�(�$�!$�\�!2�S��_�!D�63�	��r)�)NNN)rl)rI)�__name__�64__module__�__qualname__rrr�strrr65rr-�floatr1r'rDrrXrirtrprqrrr�r�r�rJrrrrsd��"� �D��c�3�h��$8� ��d�SV�X[�S[�n�I]� �bd�bl�bl� �DB�u�B��B�66�d�3��8�n�67�.#$�s�#$�4��c�5�j�8I�3J�#$�L/3�,0�48��"&�s�)��$)��)-�S�	��>@�Z�Z��6	J��	J��	J�*�c�*�*!��!�!�c�!�;�S�;�#�;�b�j�j�;�0���S��T�#�Y���#��$�s�C�x�.�rr)	�networkxr68�typingrrrrrlrrJrr�<module>r�s���)�)��e�er