Skip to content

Readme

ReadmeReader #

Bases: BaseReader

读取Readme.com文档的读取器。从Readme.com文档中读取数据。

Parameters:

Name Type Description Default
api_key str

Readme.com API密钥

required
Source code in llama_index/readers/readme/base.py
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
class ReadmeReader(BaseReader):
    """读取Readme.com文档的读取器。从Readme.com文档中读取数据。

    Args:
        api_key (str): Readme.com API密钥"""

    def __init__(self, api_key: str) -> None:
        """初始化Readme阅读器。"""
        self.api_key = base64.b64encode(bytes(f"{api_key}:", "utf-8")).decode("utf-8")
        self._headers = {
            "accept": "*/*",
            "authorization": f"Basic {self.api_key}",
            "Content-Type": "application/json",
        }

    def load_data(self) -> List[Document]:
        """从文档(页面)加载数据。

返回:
    List[Document]: 文档列表。
"""
        from bs4 import BeautifulSoup

        results = []

        docs = self.get_all_docs()
        for doc in docs:
            body = doc["body_html"]
            if body is None:
                continue
            soup = BeautifulSoup(body, "html.parser")
            body = soup.get_text()
            extra_info = {
                "id": doc["id"],
                "title": doc["title"],
                "type": doc["title"],
                "slug": doc["slug"],
                "updated_at": doc["updatedAt"],
            }

            results.append(
                Document(
                    text=body,
                    extra_info=extra_info,
                )
            )

        return results

    def get_all_docs(self):
        """检索所有文档,并按类别分类,同时包含它们的信息。

返回:
    list: 包含文档信息的字典列表。
"""
        categories = self.get_all_categories()
        docs = []
        for category in categories:
            category_docs = self.get_docs_in_category(category.get("slug"))
            documents_slugs = [
                category_doc.get("slug") for category_doc in category_docs
            ]
            for document_slug in documents_slugs:
                doc = self.get_document_info(document_slug)
                doc["category_name"] = category["title"]
                docs.append(doc)

        return docs

    def get_docs_in_category(self, category_slug):
        """获取属于特定类别的文档。

Args:
    category_slug(str):类别的slug。

Returns:
    list:包含文档信息的字典列表。
"""
        url = f"https://dash.readme.com/api/v1/categories/{category_slug}/docs"
        response = requests.get(url, headers=self._headers)

        docs = response.json()

        # Filter documents hidden=False
        return [doc for doc in docs if not doc.get("hidden", True)]

    def get_document_info(self, document_slug):
        """获取特定文档的信息。

Args:
    document_slug (str): 文档的slug。

Returns:
    dict: 包含文档信息的字典。
"""
        url = f"https://dash.readme.com/api/v1/docs/{document_slug}"
        response = requests.get(url, headers=self._headers)

        return response.json()

    def get_categories_page(self, params, page):
        """发送一个GET请求到特定页面的类别。

Args:
    params (dict): 请求的参数,比如perPage等。
    page (int): 要获取的页面号。

Returns:
    tuple: 包含总项目数和获取的类别的元组。
"""
        url = "https://dash.readme.com/api/v1/categories"
        params["page"] = page
        response = requests.get(url, params=params, headers=self._headers)
        # total counts and categories
        return int(response.headers.get("x-total-count", 0)), response.json()

    def get_all_categories(self):
        """从API中检索所有类别。

返回:
    列表:包含所有类型为“guide”的类别的列表。
"""
        perPage = 100
        page = 1
        params = {
            "perPage": perPage,
            "page": page,
        }

        total_count, categories = self.get_categories_page(params=params, page=1)
        remaining_pages = math.ceil(total_count / perPage) - 1

        for i in range(2, remaining_pages + 2):
            categories.extend(self.get_categories_page(params=params, page=i))

        # Include just categories with type: "guide"
        return [category for category in categories if category.get("type") == "guide"]

load_data #

load_data() -> List[Document]

从文档(页面)加载数据。

返回: List[Document]: 文档列表。

Source code in llama_index/readers/readme/base.py
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
    def load_data(self) -> List[Document]:
        """从文档(页面)加载数据。

返回:
    List[Document]: 文档列表。
"""
        from bs4 import BeautifulSoup

        results = []

        docs = self.get_all_docs()
        for doc in docs:
            body = doc["body_html"]
            if body is None:
                continue
            soup = BeautifulSoup(body, "html.parser")
            body = soup.get_text()
            extra_info = {
                "id": doc["id"],
                "title": doc["title"],
                "type": doc["title"],
                "slug": doc["slug"],
                "updated_at": doc["updatedAt"],
            }

            results.append(
                Document(
                    text=body,
                    extra_info=extra_info,
                )
            )

        return results

get_all_docs #

get_all_docs()

检索所有文档,并按类别分类,同时包含它们的信息。

返回: list: 包含文档信息的字典列表。

Source code in llama_index/readers/readme/base.py
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
    def get_all_docs(self):
        """检索所有文档,并按类别分类,同时包含它们的信息。

返回:
    list: 包含文档信息的字典列表。
"""
        categories = self.get_all_categories()
        docs = []
        for category in categories:
            category_docs = self.get_docs_in_category(category.get("slug"))
            documents_slugs = [
                category_doc.get("slug") for category_doc in category_docs
            ]
            for document_slug in documents_slugs:
                doc = self.get_document_info(document_slug)
                doc["category_name"] = category["title"]
                docs.append(doc)

        return docs

get_docs_in_category #

get_docs_in_category(category_slug)

获取属于特定类别的文档。

Returns:

Type Description

list:包含文档信息的字典列表。

Source code in llama_index/readers/readme/base.py
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
    def get_docs_in_category(self, category_slug):
        """获取属于特定类别的文档。

Args:
    category_slug(str):类别的slug。

Returns:
    list:包含文档信息的字典列表。
"""
        url = f"https://dash.readme.com/api/v1/categories/{category_slug}/docs"
        response = requests.get(url, headers=self._headers)

        docs = response.json()

        # Filter documents hidden=False
        return [doc for doc in docs if not doc.get("hidden", True)]

get_document_info #

get_document_info(document_slug)

获取特定文档的信息。

Parameters:

Name Type Description Default
document_slug str

文档的slug。

required

Returns:

Name Type Description
dict

包含文档信息的字典。

Source code in llama_index/readers/readme/base.py
 98
 99
100
101
102
103
104
105
106
107
108
109
110
    def get_document_info(self, document_slug):
        """获取特定文档的信息。

Args:
    document_slug (str): 文档的slug。

Returns:
    dict: 包含文档信息的字典。
"""
        url = f"https://dash.readme.com/api/v1/docs/{document_slug}"
        response = requests.get(url, headers=self._headers)

        return response.json()

get_categories_page #

get_categories_page(params, page)

发送一个GET请求到特定页面的类别。

Parameters:

Name Type Description Default
params dict

请求的参数,比如perPage等。

required
page int

要获取的页面号。

required

Returns:

Name Type Description
tuple

包含总项目数和获取的类别的元组。

Source code in llama_index/readers/readme/base.py
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
    def get_categories_page(self, params, page):
        """发送一个GET请求到特定页面的类别。

Args:
    params (dict): 请求的参数,比如perPage等。
    page (int): 要获取的页面号。

Returns:
    tuple: 包含总项目数和获取的类别的元组。
"""
        url = "https://dash.readme.com/api/v1/categories"
        params["page"] = page
        response = requests.get(url, params=params, headers=self._headers)
        # total counts and categories
        return int(response.headers.get("x-total-count", 0)), response.json()

get_all_categories #

get_all_categories()

从API中检索所有类别。

返回: 列表:包含所有类型为“guide”的类别的列表。

Source code in llama_index/readers/readme/base.py
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
    def get_all_categories(self):
        """从API中检索所有类别。

返回:
    列表:包含所有类型为“guide”的类别的列表。
"""
        perPage = 100
        page = 1
        params = {
            "perPage": perPage,
            "page": page,
        }

        total_count, categories = self.get_categories_page(params=params, page=1)
        remaining_pages = math.ceil(total_count / perPage) - 1

        for i in range(2, remaining_pages + 2):
            categories.extend(self.get_categories_page(params=params, page=i))

        # Include just categories with type: "guide"
        return [category for category in categories if category.get("type") == "guide"]