| from typing import Union |
|
|
| from langchain.docstore.base import Docstore |
| from langchain.docstore.document import Document |
|
|
|
|
|
|
| class Wiki(Docstore): |
| """ |
| Wrapper around wikipedia API. |
| """ |
|
|
| def __init__(self) -> None: |
| """Check that wikipedia package is installed.""" |
| try: |
| import wikipedia |
| except ImportError: |
| raise ValueError( |
| "Could not import wikipedia python package. " |
| "Please install it with `pip install wikipedia`." |
| ) |
|
|
| @staticmethod |
| def fetch(searched_page: str) -> Union[str, Document]: |
| """ |
| Try to fetch for wiki page. |
| |
| If page exists, return the page summary, and a PageWithLookups object. |
| If page does not exist, return similar entries. |
| """ |
| import wikipedia |
|
|
| try: |
| |
| page_content = wikipedia.page(searched_page).content |
| url = wikipedia.page(searched_page).url |
| result: Union[str, Document] = Document( |
| page_content=page_content, metadata={"page": url} |
| ) |
| except wikipedia.PageError: |
| result = f"Could not find [{searched_page}]. Similar: {wikipedia.search(searched_page)}" |
|
|
| except wikipedia.DisambiguationError: |
| result = f"Could not find [{searched_page}]. Similar: {wikipedia.search(searched_page)}" |
| return result |
|
|
| def search(searched_context: str) -> [str]: |
| """ |
| Finds wiki page title in relation with the given context |
| """ |
| import wikipedia |
|
|
| try: |
| |
| page_title_list = wikipedia.search(searched_context) |
| result = page_title_list |
| except wikipedia.PageError: |
| result = f"Could not find [{searched_context}]." |
| return result |
|
|
|
|
|
|