Arthur-75's picture
Upload 24 files
60d3c71 verified
Raw
History Blame Contribute Delete
2.4 kB
from ..graph import Graph
from ..retriever import Retriever
__all__ = ["Pipeline"]
class Pipeline:
"""Knowledge Pipeline.
Example:
--------
>>> import json
>>> from knowledge_database import pipeline
>>> with open("database/database.json", "r") as f:
... documents = json.load(f)
>>> with open("database/triples.json", "r") as f:
... triples = json.load(f)
>>> knowledge_pipeline = pipeline.Pipeline(documents=documents, triples=triples)
>>> documents, nodes, links = knowledge_pipeline("knowledge graph embeddings")
>>> nodes, links = knowledge_pipeline.plot("knowledge graph embeddings")
>>> documents = knowledge_pipeline.search("knowledge graph embeddings")
>>> documents = knowledge_pipeline.search_documents_tags("knowledge graph embeddings")
"""
def __init__(self, documents, triples, excluded_tags=None):
self.retriever = Retriever(documents=documents)
self.graph = Graph(triples=triples)
self.excluded_tags = {} if excluded_tags is None else excluded_tags
def search(self, q: str, tags: bool = False):
"""Search for documents.
Parameters
----------
q
Query.
tags
If tags is set to True, documents returned will have tags and extra-tags that match the
query.
"""
if tags:
return self.retriever.documents_tags(q)
return self.retriever.documents(q)
def __call__(
self,
q: str,
k_tags: int = 20,
k_yens: int = 3,
k_walk: int = 3,
):
"""Search for documents and tags."""
documents = self.retriever.documents(q)
retrieved_tags = self.retriever.tags(q)
tags = {}
for document in documents:
for tag in document["tags"] + document["extra-tags"]:
if tag not in self.excluded_tags:
tags[tag] = True
nodes, links = self.graph(
tags=list(tags)[:k_tags],
retrieved_tags=retrieved_tags,
k_yens=k_yens,
k_walk=k_walk,
)
return documents, nodes, links
def plot(self, q: str, k_tags: int = 20, k_yens: int = 3, k_walk: int = 3):
"""Search for tags."""
_, nodes, links = self(q=q, k_tags=k_tags, k_yens=k_yens, k_walk=k_walk)
return nodes, links