diff --git a/docs/self-hosting/server-database/vercel.mdx b/docs/self-hosting/server-database/vercel.mdx index 32d750c8b8c2..1dd753f5f3d3 100644 --- a/docs/self-hosting/server-database/vercel.mdx +++ b/docs/self-hosting/server-database/vercel.mdx @@ -1,8 +1,7 @@ --- title: Deploy LobeChat with database on Vercel description: >- - Learn how to deploy LobeChat with database on Vercel with ease, including: - database, authentication and S3 storage service. + Learn how to deploy LobeChat with database on Vercel with ease, including: database, authentication and S3 storage service. tags: - Deploy LobeChat - Vercel Deployment @@ -44,55 +43,64 @@ In Vercel's deployment environment variables, add `DATABASE_URL` and other envir - - Please confirm the `Postgres` type provided by your vendor. If it is `Node Postgres`, switch to the `Node Postgres` Tab. + + Please confirm the `Postgres` type provided by your vendor. If it is `Node Postgres`, switch to + the `Node Postgres` Tab. - Variables to be filled for Serverless Postgres are as follows: +Variables to be filled for Serverless Postgres are as follows: - ```shell - # Serverless Postgres DB Url - DATABASE_URL= +```shell +# Serverless Postgres DB Url +DATABASE_URL= - # Specify service mode as server, otherwise it will not enter the server-side database - NEXT_PUBLIC_SERVICE_MODE=server - ``` +# Specify service mode as server, otherwise it will not enter the server-side database +NEXT_PUBLIC_SERVICE_MODE=server +``` - An example of filling in Vercel is as follows: +An example of filling in Vercel is as follows: - {'Add +{'Add Variables to be filled for Node Postgres are as follows: - ```shell - # Node Postgres DB Url - DATABASE_URL= +```shell +# Node Postgres DB Url +DATABASE_URL= - # Specify Postgres database driver as node - DATABASE_DRIVER=node +# Specify Postgres database driver as node +DATABASE_DRIVER=node - # Specify service mode as server, otherwise it will not enter the server-side database - NEXT_PUBLIC_SERVICE_MODE=server - ``` +# Specify service mode as server, otherwise it will not enter the server-side database +NEXT_PUBLIC_SERVICE_MODE=server +``` - An example of filling in Vercel is as follows: +An example of filling in Vercel is as follows: - {'Add +{'Add -If you wish to enable SSL when connecting to the database, please refer to the [link](https://stackoverflow.com/questions/14021998/using-psql-to-connect-to-postgresql-in-ssl-mode) for setup instructions. + If you wish to enable SSL when connecting to the database, please refer to the + [link](https://stackoverflow.com/questions/14021998/using-psql-to-connect-to-postgresql-in-ssl-mode) + for setup instructions. ### Add the `KEY_VAULTS_SECRET` Environment Variable -After adding the DATABASE\_URL environment variable for the database, you need to add a `KEY_VAULTS_SECRET` environment variable. This variable is used to encrypt sensitive information such as apikeys stored by users. You can generate a random 32-character string as the key using `openssl rand -base64 32`. +After adding the DATABASE_URL environment variable for the database, you need to add a `KEY_VAULTS_SECRET` environment variable. This variable is used to encrypt sensitive information such as apikeys stored by users. You can generate a random 32-character string as the key using `openssl rand -base64 32`. ```shell KEY_VAULTS_SECRET=jgwsK28dspyVQoIf8/M3IIHl1h6LYYceSYNXeLpy6uk= @@ -110,10 +118,11 @@ The server-side database needs to be paired with a user authentication service t ### Prepare Clerk Authentication Service -Go to [Clerk](https://clerk.com?utm_source=lobehub\&utm_medium=docs) to register and create an application to obtain the corresponding Public Key and Secret Key. +Go to [Clerk](https://clerk.com?utm_source=lobehub&utm_medium=docs) to register and create an application to obtain the corresponding Public Key and Secret Key. -If you are not familiar with Clerk, you can refer to [Authentication Service-Clerk](/en/docs/self-hosting/advanced/authentication#clerk) for details on using Clerk. + If you are not familiar with Clerk, you can refer to [Authentication + Service-Clerk](/en/docs/self-hosting/advanced/authentication#clerk) for details on using Clerk. ### Add Public and Private Key Environment Variables in Vercel @@ -121,11 +130,9 @@ If you are not familiar with Clerk, you can refer to [Authentication Service-Cle In Vercel's deployment environment variables, add the `NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY` and `CLERK_SECRET_KEY` environment variables. You can click on "API Keys" in the menu, then copy the corresponding values and paste them into Vercel's environment variables. - -> - + alt={'Find the corresponding public and private key environment variables in Clerk'} + src={'https://github.com/lobehub/lobe-chat/assets/28616219/89883703-7a1a-4a11-b944-5d804544e57c'} +/> The environment variables required for this step are as follows: @@ -137,11 +144,9 @@ CLERK_SECRET_KEY=sk_live_xxxxxxxxxxxxxxxxxxxxxx Add the above variables to Vercel: - -> - + alt={'Add Clerk public and private key environment variables in Vercel'} + src={'https://github.com/lobehub/lobe-chat/assets/28616219/2bfa13df-6e20-4768-97c0-4dad06c85a2f'} +/> ### Create and Configure Webhook in Clerk @@ -150,21 +155,22 @@ Since we let Clerk fully handle user authentication and management, we need Cler We need to add an endpoint in Clerk's Webhooks to inform Clerk to send notifications to this endpoint when a user's information changes. - -> - + alt={'Add Webhooks endpoint in Clerk'} + src={'https://github.com/lobehub/lobe-chat/assets/28616219/f50f47fb-5e8e-4930-bf4e-8cf6f5b8afb9'} +/> Fill in the endpoint with the URL of your Vercel project, such as `https://your-project.vercel.app/api/webhooks/clerk`. Then, subscribe to events by checking the three user events (`user.created`, `user.deleted`, `user.updated`), and click create. -The `https://` in the URL is essential to maintain the integrity of the URL. + + The `https://` in the URL is essential to maintain the integrity of the URL. + {'Configure > + ### Add Webhook Secret to Vercel Environment Variables @@ -176,6 +182,7 @@ alt={'View Clerk Webhooks secret'} src={'https://github.com/lobehub/lobe-chat/assets/28616219/fab4abb2-584b-49de-9340-813382951635'}> > + The environment variable corresponding to this secret is `CLERK_WEBHOOK_SECRET`: @@ -187,11 +194,9 @@ CLERK_WEBHOOK_SECRET=whsec_xxxxxxxxxxxxxxxxxxxxxx Add it to Vercel's environment variables: - -> - + alt={'Add Clerk Webhooks secret in Vercel'} + src={'https://github.com/lobehub/lobe-chat/assets/28616219/5fdc9479-007f-46ab-9d6e-a9603e949116'} +/> @@ -202,7 +207,9 @@ By completing these steps, you have successfully configured the Clerk authentica In the server-side database, we need to configure the S3 storage service to store files. -In this article, S3 refers to a compatible S3 storage solution, which supports object storage systems that comply with the Amazon S3 API. Common examples include Cloudflare R2, Alibaba Cloud OSS, etc., all of which support S3-compatible APIs. + In this article, S3 refers to a compatible S3 storage solution, which supports object storage + systems that comply with the Amazon S3 API. Common examples include Cloudflare R2, Alibaba Cloud + OSS, etc., all of which support S3-compatible APIs. @@ -216,13 +223,14 @@ The interface of Cloudflare R2 is shown below: {'Cloudflare +/> When creating a storage bucket, specify its name and then click create. + {'Create +/> ### Obtain Environment Variables for the Bucket @@ -231,7 +239,7 @@ In the settings of the R2 storage bucket, you can view the bucket configuration {'View +/> The corresponding environment variables are: @@ -244,7 +252,9 @@ S3_ENDPOINT=https://0b33a03b5c993fd2f453379dc36558e5.r2.cloudflarestorage.com NEXT_PUBLIC_S3_DOMAIN=https://s3-for-lobechat.your-domain.com ``` -`S3_ENDPOINT` must have its path removed, otherwise uploaded files will not be accessible + + `S3_ENDPOINT` must have its path removed, otherwise uploaded files will not be accessible + ### Obtain S3 Key Environment Variables @@ -253,28 +263,28 @@ You need to obtain the access key for S3 so that the LobeChat server has permiss {'View +/> Click the button in the upper right corner to create an API token and enter the create API Token page. {'Create +/> Since our server-side database needs to read and write to the S3 storage service, the permission needs to be set to `Object Read and Write`, then click create. {'Configure +/> After creation, you can see the corresponding S3 API token. {'Copy +/> The corresponding environment variables are: @@ -287,7 +297,9 @@ S3_SECRET_ACCESS_KEY=55af75d8eb6b99f189f6a35f855336ea62cd9c4751a5cf4337c53c1d3f4 The steps to obtain the required environment variables may vary for different S3 service providers, but the obtained environment variables should be consistent: -The `https://` in the URL is essential and must be maintained for the completeness of the URL. + + The `https://` in the URL is essential and must be maintained for the completeness of the URL. + ```shell # S3 Keys @@ -310,7 +322,7 @@ Then, insert the above environment variables into Vercel's environment variables {'Adding +/> ### Configuring Cross-Origin Resource Sharing (CORS) @@ -328,7 +340,7 @@ Add a CORS rule to allow requests from your domain (in this case, `https://your- {'Configuring +/> Example configuration: @@ -356,11 +368,9 @@ After completing the steps above, the configuration of the server-side database After configuring the environment variables, you need to redeploy the latest commit and wait for the deployment to complete. - -> - + alt={'Redeploy the latest commit'} + src={'https://github.com/lobehub/lobe-chat/assets/28616219/b3a78112-adc8-4837-b4e3-48f67058f16e'} +/> ### Check if the features are working properly @@ -368,18 +378,12 @@ If you click on the login button in the top left corner and the login popup appe {'User - -> - +src={'https://github.com/lobehub/lobe-chat/assets/28616219/da84edc3-46f7-4e2b-a0cd-dc33a98bf5cb'}/> {'Login - -> - - +src={'https://github.com/lobehub/lobe-chat/assets/28616219/9cb5150d-6e1e-4c59-9a18-4e418dce1a5d'}/> + ## Appendix @@ -415,4 +419,3 @@ NEXT_PUBLIC_S3_DOMAIN=https://s3-for-lobechat.your-domain.com # Bucket region, such as us-west-1, generally not needed to add, but some service providers may require configuration # S3_REGION=us-west-1 ``` - diff --git a/docs/self-hosting/start.zh-CN.mdx b/docs/self-hosting/start.zh-CN.mdx index 50856640053f..26c31a9c594c 100644 --- a/docs/self-hosting/start.zh-CN.mdx +++ b/docs/self-hosting/start.zh-CN.mdx @@ -32,6 +32,6 @@ LobeChat 支持多种部署平台,包括 Vercel、Docker 和 Docker Compose 针对已经了解 LobeChat 的用户,或需要多端同步的用户,可以自行部署带有服务端数据库的版本,进而获得更完整、功能更强大的 LobeChat。 - - + + diff --git a/docs/usage/providers/siliconcloud.mdx b/docs/usage/providers/siliconcloud.mdx index baae7535cef4..4d5ab5bcf3ad 100644 --- a/docs/usage/providers/siliconcloud.mdx +++ b/docs/usage/providers/siliconcloud.mdx @@ -1,6 +1,8 @@ --- title: Using SiliconCloud API Key in LobeChat -description: Learn how to configure and use SiliconCloud's large language models in LobeChat, get your API key, and start chatting. +description: >- + Learn how to configure and use SiliconCloud's large language models in + LobeChat, get your API key, and start chatting. tags: - LobeChat - SiliconCloud @@ -10,7 +12,6 @@ tags: # Using SiliconCloud in LobeChat - [SiliconCloud](https://siliconflow.cn/zh-cn/siliconcloud) is a cost-effective large model service provider, offering various services such as text generation and image generation. This document will guide you on how to use SiliconCloud in LobeChat: @@ -43,4 +44,4 @@ This document will guide you on how to use SiliconCloud in LobeChat: -Now you can use the models provided by SiliconCloud for conversation in LobeChat. \ No newline at end of file +Now you can use the models provided by SiliconCloud for conversation in LobeChat. diff --git a/docs/usage/providers/siliconcloud.zh-CN.mdx b/docs/usage/providers/siliconcloud.zh-CN.mdx index c3476721f3a6..0d4b13c0e54a 100644 --- a/docs/usage/providers/siliconcloud.zh-CN.mdx +++ b/docs/usage/providers/siliconcloud.zh-CN.mdx @@ -10,7 +10,6 @@ tags: # 在 LobeChat 中使用 SiliconCloud - [SiliconCloud](https://siliconflow.cn/zh-cn/siliconcloud) 是高性价比的大模型服务提供商,提供文本生成与图片生成等多种服务。 本文档将指导你如何在 LobeChat 中使用 SiliconCloud: diff --git a/locales/ar/components.json b/locales/ar/components.json index 909080c9bca5..3637ad1f87d1 100644 --- a/locales/ar/components.json +++ b/locales/ar/components.json @@ -5,6 +5,66 @@ "dragFileTitle": "تحميل الملفات", "dragTitle": "تحميل الصور" }, + "FileManager": { + "actions": { + "addToKnowledgeBase": "إضافة إلى قاعدة المعرفة", + "addToOtherKnowledgeBase": "إضافة إلى قاعدة معرفة أخرى", + "batchChunking": "تقسيم دفعي", + "chunking": "تقسيم", + "chunkingTooltip": "قم بتقسيم الملف إلى عدة كتل نصية وتحويلها إلى متجهات، يمكن استخدامها في البحث الدلالي والمحادثة حول الملفات", + "confirmDelete": "سيتم حذف هذا الملف، ولن يمكن استعادته بعد الحذف، يرجى تأكيد العملية", + "confirmDeleteMultiFiles": "سيتم حذف {{count}} ملفًا محددًا، ولن يمكن استعادته بعد الحذف، يرجى تأكيد العملية", + "confirmRemoveFromKnowledgeBase": "سيتم إزالة {{count}} ملفًا محددًا من قاعدة المعرفة، لا يزال بإمكانك رؤية الملفات في جميع الملفات، يرجى تأكيد العملية", + "copyUrl": "نسخ الرابط", + "copyUrlSuccess": "تم نسخ عنوان الملف بنجاح", + "createChunkingTask": "جارٍ التحضير...", + "deleteSuccess": "تم حذف الملف بنجاح", + "downloading": "جارٍ تحميل الملف...", + "removeFromKnowledgeBase": "إزالة من قاعدة المعرفة", + "removeFromKnowledgeBaseSuccess": "تمت إزالة الملف بنجاح" + }, + "bottom": "لقد وصلت إلى النهاية", + "config": { + "showFilesInKnowledgeBase": "عرض المحتوى في قاعدة المعرفة" + }, + "emptyStatus": { + "actions": { + "file": "رفع ملف", + "folder": "رفع مجلد", + "knowledgeBase": "إنشاء قاعدة معرفة جديدة" + }, + "or": "أو", + "title": "قم بسحب الملف أو المجلد هنا" + }, + "title": { + "createdAt": "تاريخ الإنشاء", + "size": "الحجم", + "title": "ملف" + }, + "total": { + "fileCount": "إجمالي {{count}} عنصر", + "selectedCount": "تم تحديد {{count}} عنصر" + } + }, + "FileParsingStatus": { + "chunks": { + "embeddingStatus": { + "empty": "لم يتم تحويل كتل النص بالكامل إلى متجهات، مما سيؤدي إلى عدم توفر وظيفة البحث الدلالي، لتحسين جودة البحث، يرجى تحويل كتل النص إلى متجهات", + "processing": "يتم تحويل كتل النص إلى متجهات، يرجى الانتظار", + "success": "تم تحويل جميع كتل النص الحالية إلى متجهات" + }, + "embeddings": "تحويل إلى متجهات", + "status": { + "error": "فشل في التقسيم", + "errorResult": "فشل في التقسيم، يرجى التحقق والمحاولة مرة أخرى. سبب الفشل:", + "processing": "جارٍ التقسيم", + "processingTip": "الخادم يقوم بتقسيم كتل النص، إغلاق الصفحة لا يؤثر على تقدم التقسيم" + } + } + }, + "GoBack": { + "back": "عودة" + }, "ModelSelect": { "featureTag": { "custom": "نموذج مخصص، الإعداد الافتراضي يدعم الاستدعاء الوظيفي والتعرف البصري، يرجى التحقق من قدرة النموذج على القيام بذلك بناءً على الحالة الفعلية", diff --git a/locales/bg-BG/components.json b/locales/bg-BG/components.json index ff90904ca1ee..89287d116aa9 100644 --- a/locales/bg-BG/components.json +++ b/locales/bg-BG/components.json @@ -5,6 +5,66 @@ "dragFileTitle": "Качване на файл", "dragTitle": "Качване на изображение" }, + "FileManager": { + "actions": { + "addToKnowledgeBase": "Добави в базата знания", + "addToOtherKnowledgeBase": "Добави в друга база знания", + "batchChunking": "Партидно разделяне", + "chunking": "Разделяне", + "chunkingTooltip": "Разделете файла на множество текстови блокове и ги векторизирайте, за да се използват за семантично търсене и диалог с файла", + "confirmDelete": "Ще изтриете този файл. След изтриването му няма да може да бъде възстановен. Моля, потвърдете действието си.", + "confirmDeleteMultiFiles": "Ще изтриете избраните {{count}} файла. След изтриването им няма да могат да бъдат възстановени. Моля, потвърдете действието си.", + "confirmRemoveFromKnowledgeBase": "Ще премахнете избраните {{count}} файла от базата знания. След премахването им файловете все още могат да бъдат видяни в списъка с всички файлове. Моля, потвърдете действието си.", + "copyUrl": "Копирай линк", + "copyUrlSuccess": "Адресът на файла е копиран успешно", + "createChunkingTask": "Подготовка...", + "deleteSuccess": "Файлът е изтрит успешно", + "downloading": "Изтегляне на файла...", + "removeFromKnowledgeBase": "Премахни от базата знания", + "removeFromKnowledgeBaseSuccess": "Файлът е премахнат успешно" + }, + "bottom": "Достигнахте края", + "config": { + "showFilesInKnowledgeBase": "Покажи съдържанието в базата знания" + }, + "emptyStatus": { + "actions": { + "file": "Качи файл", + "folder": "Качи папка", + "knowledgeBase": "Създай нова база знания" + }, + "or": "или", + "title": "Плъзнете файл или папка тук" + }, + "title": { + "createdAt": "Дата на създаване", + "size": "Размер", + "title": "Файл" + }, + "total": { + "fileCount": "Общо {{count}} елемента", + "selectedCount": "Избрани {{count}} елемента" + } + }, + "FileParsingStatus": { + "chunks": { + "embeddingStatus": { + "empty": "Текстовите блокове все още не са напълно векторизирани, което ще доведе до недостъпност на семантичното търсене. За подобряване на качеството на търсенето, моля, векторизирайте текстовите блокове.", + "processing": "Текстовите блокове се векторизират, моля, бъдете търпеливи.", + "success": "Текущите текстови блокове са напълно векторизирани." + }, + "embeddings": "Векторизация", + "status": { + "error": "Разделянето е неуспешно", + "errorResult": "Разделянето е неуспешно, моля, проверете и опитайте отново. Причина за неуспеха:", + "processing": "Разделяне на блокове", + "processingTip": "Сървърът в момента разделя текстовите блокове, затварянето на страницата не влияе на напредъка на разделянето." + } + } + }, + "GoBack": { + "back": "Назад" + }, "ModelSelect": { "featureTag": { "custom": "Потребителски модел, по подразбиране поддържа функционалност за функционални обаждания и визуално разпознаване, моля, потвърдете наличието на тези възможности спрямо реалните условия", diff --git a/locales/de-DE/components.json b/locales/de-DE/components.json index c22b3b0cdb89..1d50ef7e791d 100644 --- a/locales/de-DE/components.json +++ b/locales/de-DE/components.json @@ -5,6 +5,66 @@ "dragFileTitle": "Dateien hochladen", "dragTitle": "Bilder hochladen" }, + "FileManager": { + "actions": { + "addToKnowledgeBase": "Zur Wissensdatenbank hinzufügen", + "addToOtherKnowledgeBase": "Zur anderen Wissensdatenbank hinzufügen", + "batchChunking": "Batch-Zerteilung", + "chunking": "Zerteilung", + "chunkingTooltip": "Teilen Sie die Datei in mehrere Textblöcke und vektorisieren Sie sie, um sie für die semantische Suche und Dateidialoge zu verwenden.", + "confirmDelete": "Die Datei wird gelöscht. Nach dem Löschen kann sie nicht wiederhergestellt werden. Bitte bestätigen Sie Ihre Aktion.", + "confirmDeleteMultiFiles": "Die ausgewählten {{count}} Dateien werden gelöscht. Nach dem Löschen können sie nicht wiederhergestellt werden. Bitte bestätigen Sie Ihre Aktion.", + "confirmRemoveFromKnowledgeBase": "Die ausgewählten {{count}} Dateien werden aus der Wissensdatenbank entfernt. Die Dateien sind weiterhin in allen Dateien sichtbar. Bitte bestätigen Sie Ihre Aktion.", + "copyUrl": "Link kopieren", + "copyUrlSuccess": "Dateiadresse erfolgreich kopiert", + "createChunkingTask": "Wird vorbereitet...", + "deleteSuccess": "Datei erfolgreich gelöscht", + "downloading": "Datei wird heruntergeladen...", + "removeFromKnowledgeBase": "Aus der Wissensdatenbank entfernen", + "removeFromKnowledgeBaseSuccess": "Datei erfolgreich entfernt" + }, + "bottom": "Das Ende ist erreicht", + "config": { + "showFilesInKnowledgeBase": "In der Wissensdatenbank angezeigte Inhalte" + }, + "emptyStatus": { + "actions": { + "file": "Datei hochladen", + "folder": "Ordner hochladen", + "knowledgeBase": "Neue Wissensdatenbank erstellen" + }, + "or": "oder", + "title": "Ziehen Sie Dateien oder Ordner hierher" + }, + "title": { + "createdAt": "Erstellungsdatum", + "size": "Größe", + "title": "Datei" + }, + "total": { + "fileCount": "Insgesamt {{count}} Elemente", + "selectedCount": "Ausgewählt {{count}} Elemente" + } + }, + "FileParsingStatus": { + "chunks": { + "embeddingStatus": { + "empty": "Textblöcke sind noch nicht vollständig vektorisiert, was die Funktion der semantischen Suche beeinträchtigen kann. Um die Suchqualität zu verbessern, vektorisieren Sie die Textblöcke.", + "processing": "Textblöcke werden vektorisiert, bitte haben Sie Geduld.", + "success": "Alle aktuellen Textblöcke sind vektorisiert." + }, + "embeddings": "Vektorisierung", + "status": { + "error": "Zerteilung fehlgeschlagen", + "errorResult": "Zerteilung fehlgeschlagen, bitte überprüfen Sie und versuchen Sie es erneut. Grund für das Scheitern:", + "processing": "Zerteilung läuft", + "processingTip": "Der Server zerteilt die Textblöcke. Das Schließen der Seite hat keinen Einfluss auf den Zerteilungsfortschritt." + } + } + }, + "GoBack": { + "back": "Zurück" + }, "ModelSelect": { "featureTag": { "custom": "Benutzerdefiniertes Modell, standardmäßig unterstützt es sowohl Funktionsaufrufe als auch visuelle Erkennung. Bitte überprüfen Sie die Verfügbarkeit dieser Fähigkeiten basierend auf den tatsächlichen Gegebenheiten.", diff --git a/locales/en-US/components.json b/locales/en-US/components.json index f83ea9a58e03..eaf5bc2748db 100644 --- a/locales/en-US/components.json +++ b/locales/en-US/components.json @@ -5,6 +5,66 @@ "dragFileTitle": "Upload Files", "dragTitle": "Upload Images" }, + "FileManager": { + "actions": { + "addToKnowledgeBase": "Add to Knowledge Base", + "addToOtherKnowledgeBase": "Add to Other Knowledge Base", + "batchChunking": "Batch Chunking", + "chunking": "Chunking", + "chunkingTooltip": "Split the file into multiple text chunks and vectorize them for semantic search and file dialogue.", + "confirmDelete": "You are about to delete this file. Once deleted, it cannot be recovered. Please confirm your action.", + "confirmDeleteMultiFiles": "You are about to delete the selected {{count}} files. Once deleted, they cannot be recovered. Please confirm your action.", + "confirmRemoveFromKnowledgeBase": "You are about to remove the selected {{count}} files from the knowledge base. They will still be viewable in all files. Please confirm your action.", + "copyUrl": "Copy Link", + "copyUrlSuccess": "File address copied successfully.", + "createChunkingTask": "Preparing...", + "deleteSuccess": "File deleted successfully.", + "downloading": "Downloading file...", + "removeFromKnowledgeBase": "Remove from Knowledge Base", + "removeFromKnowledgeBaseSuccess": "File removed successfully." + }, + "bottom": "You've reached the end.", + "config": { + "showFilesInKnowledgeBase": "Show content in Knowledge Base" + }, + "emptyStatus": { + "actions": { + "file": "Upload File", + "folder": "Upload Folder", + "knowledgeBase": "Create New Knowledge Base" + }, + "or": "or", + "title": "Drag files or folders here" + }, + "title": { + "createdAt": "Created At", + "size": "Size", + "title": "File" + }, + "total": { + "fileCount": "Total {{count}} items", + "selectedCount": "Selected {{count}} items" + } + }, + "FileParsingStatus": { + "chunks": { + "embeddingStatus": { + "empty": "Text chunks have not been fully vectorized, which will render the semantic search feature unavailable. To improve search quality, please vectorize the text chunks.", + "processing": "Text chunks are being vectorized, please be patient.", + "success": "All current text chunks have been vectorized." + }, + "embeddings": "Vectorization", + "status": { + "error": "Chunking failed.", + "errorResult": "Chunking failed, please check and try again. Reason for failure:", + "processing": "Chunking in progress.", + "processingTip": "The server is splitting text chunks; closing the page will not affect the chunking progress." + } + } + }, + "GoBack": { + "back": "Back" + }, "ModelSelect": { "featureTag": { "custom": "Custom model, by default, supports both function call and visual recognition. Please verify the availability of the above capabilities based on actual situations.", diff --git a/locales/es-ES/components.json b/locales/es-ES/components.json index f71a08054cac..c422337423df 100644 --- a/locales/es-ES/components.json +++ b/locales/es-ES/components.json @@ -5,6 +5,66 @@ "dragFileTitle": "Subir archivo", "dragTitle": "Subir imagen" }, + "FileManager": { + "actions": { + "addToKnowledgeBase": "Agregar a la base de conocimientos", + "addToOtherKnowledgeBase": "Agregar a otra base de conocimientos", + "batchChunking": "División por lotes", + "chunking": "División", + "chunkingTooltip": "Divida el archivo en múltiples bloques de texto y vectorícelos para su uso en búsqueda semántica y diálogo de archivos", + "confirmDelete": "Está a punto de eliminar este archivo. Una vez eliminado, no podrá recuperarlo. Por favor, confirme su acción.", + "confirmDeleteMultiFiles": "Está a punto de eliminar los {{count}} archivos seleccionados. Una vez eliminados, no podrá recuperarlos. Por favor, confirme su acción.", + "confirmRemoveFromKnowledgeBase": "Está a punto de eliminar los {{count}} archivos seleccionados de la base de conocimientos. Los archivos seguirán siendo visibles en todos los archivos. Por favor, confirme su acción.", + "copyUrl": "Copiar enlace", + "copyUrlSuccess": "Dirección del archivo copiada con éxito", + "createChunkingTask": "Preparando...", + "deleteSuccess": "Archivo eliminado con éxito", + "downloading": "Descargando archivo...", + "removeFromKnowledgeBase": "Eliminar de la base de conocimientos", + "removeFromKnowledgeBaseSuccess": "Archivo eliminado con éxito" + }, + "bottom": "Ya has llegado al final", + "config": { + "showFilesInKnowledgeBase": "Mostrar contenido en la base de conocimientos" + }, + "emptyStatus": { + "actions": { + "file": "Subir archivo", + "folder": "Subir carpeta", + "knowledgeBase": "Crear nueva base de conocimientos" + }, + "or": "o", + "title": "Arrastra archivos o carpetas aquí" + }, + "title": { + "createdAt": "Fecha de creación", + "size": "Tamaño", + "title": "Archivo" + }, + "total": { + "fileCount": "Total {{count}} elementos", + "selectedCount": "Seleccionados {{count}} elementos" + } + }, + "FileParsingStatus": { + "chunks": { + "embeddingStatus": { + "empty": "Los bloques de texto aún no están completamente vectorizados, lo que hará que la función de búsqueda semántica no esté disponible. Para mejorar la calidad de búsqueda, por favor vectorice los bloques de texto.", + "processing": "Los bloques de texto están siendo vectorizados, por favor, tenga paciencia.", + "success": "Todos los bloques de texto actuales han sido vectorizados." + }, + "embeddings": "Vectorización", + "status": { + "error": "Error en la división", + "errorResult": "Error en la división, por favor revise y vuelva a intentarlo. Razón del fallo:", + "processing": "Dividiendo", + "processingTip": "El servidor está dividiendo los bloques de texto, cerrar la página no afectará el progreso de la división." + } + } + }, + "GoBack": { + "back": "Regresar" + }, "ModelSelect": { "featureTag": { "custom": "Modelo personalizado: admite llamadas de función y reconocimiento visual. Verifique la disponibilidad de estas capacidades según sea necesario.", diff --git a/locales/fr-FR/components.json b/locales/fr-FR/components.json index 255954af9d98..27db72c96c3d 100644 --- a/locales/fr-FR/components.json +++ b/locales/fr-FR/components.json @@ -5,6 +5,66 @@ "dragFileTitle": "Télécharger des fichiers", "dragTitle": "Télécharger des images" }, + "FileManager": { + "actions": { + "addToKnowledgeBase": "Ajouter à la base de connaissances", + "addToOtherKnowledgeBase": "Ajouter à une autre base de connaissances", + "batchChunking": "Découpage par lots", + "chunking": "Découpage", + "chunkingTooltip": "Divisez le fichier en plusieurs blocs de texte et vectorisez-les pour une recherche sémantique et un dialogue sur le fichier", + "confirmDelete": "Vous allez supprimer ce fichier. Une fois supprimé, il ne pourra pas être récupéré. Veuillez confirmer votre action.", + "confirmDeleteMultiFiles": "Vous allez supprimer les {{count}} fichiers sélectionnés. Une fois supprimés, ils ne pourront pas être récupérés. Veuillez confirmer votre action.", + "confirmRemoveFromKnowledgeBase": "Vous allez retirer les {{count}} fichiers sélectionnés de la base de connaissances. Une fois retirés, les fichiers resteront visibles dans tous les fichiers. Veuillez confirmer votre action.", + "copyUrl": "Copier le lien", + "copyUrlSuccess": "Adresse du fichier copiée avec succès", + "createChunkingTask": "Préparation en cours...", + "deleteSuccess": "Fichier supprimé avec succès", + "downloading": "Téléchargement du fichier en cours...", + "removeFromKnowledgeBase": "Retirer de la base de connaissances", + "removeFromKnowledgeBaseSuccess": "Fichier retiré avec succès" + }, + "bottom": "C'est tout", + "config": { + "showFilesInKnowledgeBase": "Afficher le contenu dans la base de connaissances" + }, + "emptyStatus": { + "actions": { + "file": "Télécharger un fichier", + "folder": "Télécharger un dossier", + "knowledgeBase": "Créer une nouvelle base de connaissances" + }, + "or": "ou", + "title": "Faites glisser un fichier ou un dossier ici" + }, + "title": { + "createdAt": "Date de création", + "size": "Taille", + "title": "Fichier" + }, + "total": { + "fileCount": "Total {{count}} éléments", + "selectedCount": "Sélectionné {{count}} éléments" + } + }, + "FileParsingStatus": { + "chunks": { + "embeddingStatus": { + "empty": "Les blocs de texte n'ont pas encore été entièrement vectorisés, ce qui rendra la fonction de recherche sémantique indisponible. Pour améliorer la qualité de la recherche, veuillez vectoriser les blocs de texte.", + "processing": "Les blocs de texte sont en cours de vectorisation, veuillez patienter.", + "success": "Tous les blocs de texte sont maintenant vectorisés." + }, + "embeddings": "Vectorisation", + "status": { + "error": "Échec du découpage", + "errorResult": "Échec du découpage, veuillez vérifier et réessayer. Raison de l'échec :", + "processing": "Découpage en cours", + "processingTip": "Le serveur est en train de diviser les blocs de texte, fermer la page n'affectera pas le progrès du découpage." + } + } + }, + "GoBack": { + "back": "Retour" + }, "ModelSelect": { "featureTag": { "custom": "Modèle personnalisé par défaut prenant en charge à la fois les appels de fonction et la reconnaissance visuelle. Veuillez vérifier la disponibilité de ces capacités en fonction de vos besoins réels.", diff --git a/locales/it-IT/components.json b/locales/it-IT/components.json index 0238a269e1f8..d7be364dcd59 100644 --- a/locales/it-IT/components.json +++ b/locales/it-IT/components.json @@ -5,6 +5,66 @@ "dragFileTitle": "Carica file", "dragTitle": "Carica immagini" }, + "FileManager": { + "actions": { + "addToKnowledgeBase": "Aggiungi alla base di conoscenza", + "addToOtherKnowledgeBase": "Aggiungi a un'altra base di conoscenza", + "batchChunking": "Suddivisione in batch", + "chunking": "Suddivisione", + "chunkingTooltip": "Dividi il file in più blocchi di testo e vettorizzali, utilizzabili per la ricerca semantica e il dialogo sui file", + "confirmDelete": "Stai per eliminare questo file. Una volta eliminato, non sarà possibile recuperarlo. Ti preghiamo di confermare l'operazione.", + "confirmDeleteMultiFiles": "Stai per eliminare i {{count}} file selezionati. Una volta eliminati, non sarà possibile recuperarli. Ti preghiamo di confermare l'operazione.", + "confirmRemoveFromKnowledgeBase": "Stai per rimuovere i {{count}} file selezionati dalla base di conoscenza. I file rimarranno visibili in tutti i file. Ti preghiamo di confermare l'operazione.", + "copyUrl": "Copia link", + "copyUrlSuccess": "Indirizzo del file copiato con successo", + "createChunkingTask": "Preparazione in corso...", + "deleteSuccess": "File eliminato con successo", + "downloading": "Download del file in corso...", + "removeFromKnowledgeBase": "Rimuovi dalla base di conoscenza", + "removeFromKnowledgeBaseSuccess": "File rimosso con successo" + }, + "bottom": "Hai raggiunto il fondo", + "config": { + "showFilesInKnowledgeBase": "Mostra contenuti nella base di conoscenza" + }, + "emptyStatus": { + "actions": { + "file": "Carica file", + "folder": "Carica cartella", + "knowledgeBase": "Crea nuova base di conoscenza" + }, + "or": "oppure", + "title": "Trascina qui file o cartelle" + }, + "title": { + "createdAt": "Data di creazione", + "size": "Dimensione", + "title": "File" + }, + "total": { + "fileCount": "Totale {{count}} elementi", + "selectedCount": "Selezionati {{count}} elementi" + } + }, + "FileParsingStatus": { + "chunks": { + "embeddingStatus": { + "empty": "I blocchi di testo non sono stati completamente vettorizzati, il che comporterà l'impossibilità di utilizzare la funzione di ricerca semantica. Per migliorare la qualità della ricerca, si prega di vettorizzare i blocchi di testo.", + "processing": "I blocchi di testo sono in fase di vettorizzazione, ti preghiamo di attendere", + "success": "Attualmente tutti i blocchi di testo sono stati vettorizzati" + }, + "embeddings": "Vettorizzazione", + "status": { + "error": "Suddivisione fallita", + "errorResult": "Suddivisione fallita, controlla e riprova. Motivo del fallimento:", + "processing": "In fase di suddivisione", + "processingTip": "Il server sta suddividendo i blocchi di testo, chiudere la pagina non influisce sul progresso della suddivisione" + } + } + }, + "GoBack": { + "back": "Indietro" + }, "ModelSelect": { "featureTag": { "custom": "Modello personalizzato: di default supporta sia la chiamata di funzioni che il riconoscimento visivo. Verifica l'effettiva disponibilità di tali funzionalità.", diff --git a/locales/ja-JP/components.json b/locales/ja-JP/components.json index e896273bc2f6..7ec75ae63539 100644 --- a/locales/ja-JP/components.json +++ b/locales/ja-JP/components.json @@ -5,6 +5,66 @@ "dragFileTitle": "ファイルをアップロード", "dragTitle": "画像をアップロード" }, + "FileManager": { + "actions": { + "addToKnowledgeBase": "知識ベースに追加", + "addToOtherKnowledgeBase": "他の知識ベースに追加", + "batchChunking": "バッチ分割", + "chunking": "分割", + "chunkingTooltip": "ファイルを複数のテキストブロックに分割し、ベクトル化した後、意味検索やファイル対話に使用できます", + "confirmDelete": "このファイルを削除しようとしています。削除後は復元できませんので、操作を確認してください", + "confirmDeleteMultiFiles": "選択した {{count}} 個のファイルを削除しようとしています。削除後は復元できませんので、操作を確認してください", + "confirmRemoveFromKnowledgeBase": "選択した {{count}} 個のファイルを知識ベースから削除しようとしています。削除後もファイルはすべてのファイルで表示できますので、操作を確認してください", + "copyUrl": "リンクをコピー", + "copyUrlSuccess": "ファイルのアドレスがコピーされました", + "createChunkingTask": "準備中...", + "deleteSuccess": "ファイルが正常に削除されました", + "downloading": "ファイルをダウンロード中...", + "removeFromKnowledgeBase": "知識ベースから削除", + "removeFromKnowledgeBaseSuccess": "ファイルが正常に削除されました" + }, + "bottom": "これ以上ありません", + "config": { + "showFilesInKnowledgeBase": "知識ベースの内容を表示" + }, + "emptyStatus": { + "actions": { + "file": "ファイルをアップロード", + "folder": "フォルダーをアップロード", + "knowledgeBase": "新しい知識ベースを作成" + }, + "or": "または", + "title": "ここにファイルまたはフォルダーをドラッグしてください" + }, + "title": { + "createdAt": "作成日時", + "size": "サイズ", + "title": "ファイル" + }, + "total": { + "fileCount": "合計 {{count}} 件", + "selectedCount": "選択済み {{count}} 件" + } + }, + "FileParsingStatus": { + "chunks": { + "embeddingStatus": { + "empty": "テキストブロックはまだ完全にベクトル化されていません。これにより意味検索機能が使用できなくなります。検索品質を向上させるために、テキストブロックをベクトル化してください", + "processing": "テキストブロックをベクトル化中です。しばらくお待ちください", + "success": "現在のテキストブロックはすべてベクトル化されています" + }, + "embeddings": "ベクトル化", + "status": { + "error": "分割に失敗しました", + "errorResult": "分割に失敗しました。再試行する前に確認してください。失敗の理由:", + "processing": "分割中", + "processingTip": "サーバーがテキストブロックを分割しています。ページを閉じても分割の進行には影響しません" + } + } + }, + "GoBack": { + "back": "戻る" + }, "ModelSelect": { "featureTag": { "custom": "カスタムモデル、デフォルトでは関数呼び出しとビジョン認識の両方をサポートしています。上記機能の有効性を確認してください。", diff --git a/locales/ko-KR/components.json b/locales/ko-KR/components.json index 85afd5131ea5..aceccf1a7c51 100644 --- a/locales/ko-KR/components.json +++ b/locales/ko-KR/components.json @@ -5,6 +5,66 @@ "dragFileTitle": "파일 업로드", "dragTitle": "이미지 업로드" }, + "FileManager": { + "actions": { + "addToKnowledgeBase": "지식 베이스에 추가", + "addToOtherKnowledgeBase": "다른 지식 베이스에 추가", + "batchChunking": "배치 청크 분할", + "chunking": "청크 분할", + "chunkingTooltip": "파일을 여러 텍스트 블록으로 분할하고 벡터화한 후, 의미 검색 및 파일 대화에 사용할 수 있습니다.", + "confirmDelete": "해당 파일을 삭제하려고 합니다. 삭제 후에는 복구할 수 없으니, 작업을 확인해 주세요.", + "confirmDeleteMultiFiles": "선택한 {{count}} 개 파일을 삭제하려고 합니다. 삭제 후에는 복구할 수 없으니, 작업을 확인해 주세요.", + "confirmRemoveFromKnowledgeBase": "선택한 {{count}} 개 파일을 지식 베이스에서 제거하려고 합니다. 제거 후에도 파일은 모든 파일에서 볼 수 있으니, 작업을 확인해 주세요.", + "copyUrl": "링크 복사", + "copyUrlSuccess": "파일 주소가 성공적으로 복사되었습니다.", + "createChunkingTask": "준비 중...", + "deleteSuccess": "파일이 성공적으로 삭제되었습니다.", + "downloading": "파일 다운로드 중...", + "removeFromKnowledgeBase": "지식 베이스에서 제거", + "removeFromKnowledgeBaseSuccess": "파일이 성공적으로 제거되었습니다." + }, + "bottom": "끝까지 도달했습니다.", + "config": { + "showFilesInKnowledgeBase": "지식 베이스의 내용 표시" + }, + "emptyStatus": { + "actions": { + "file": "파일 업로드", + "folder": "폴더 업로드", + "knowledgeBase": "새 지식 베이스 만들기" + }, + "or": "또는", + "title": "파일 또는 폴더를 여기에 드래그하세요." + }, + "title": { + "createdAt": "생성 시간", + "size": "크기", + "title": "파일" + }, + "total": { + "fileCount": "총 {{count}} 항목", + "selectedCount": "선택된 {{count}} 항목" + } + }, + "FileParsingStatus": { + "chunks": { + "embeddingStatus": { + "empty": "텍스트 블록이 완전히 벡터화되지 않았습니다. 이는 의미 검색 기능을 사용할 수 없게 만듭니다. 검색 품질을 향상시키기 위해 텍스트 블록을 벡터화해 주세요.", + "processing": "텍스트 블록이 벡터화되고 있습니다. 잠시 기다려 주세요.", + "success": "현재 텍스트 블록이 모두 벡터화되었습니다." + }, + "embeddings": "벡터화", + "status": { + "error": "청크 분할 실패", + "errorResult": "청크 분할에 실패했습니다. 다시 시도하기 전에 확인해 주세요. 실패 원인:", + "processing": "청크 분할 중", + "processingTip": "서버에서 텍스트 블록을 분할하고 있습니다. 페이지를 닫아도 분할 진행에는 영향을 미치지 않습니다." + } + } + }, + "GoBack": { + "back": "뒤로 가기" + }, "ModelSelect": { "featureTag": { "custom": "사용자 정의 모델, 기본적으로 함수 호출 및 시각 인식을 모두 지원하며, 실제 기능을 확인하세요", diff --git a/locales/nl-NL/components.json b/locales/nl-NL/components.json index e6ccbb132b38..7c99456a40ee 100644 --- a/locales/nl-NL/components.json +++ b/locales/nl-NL/components.json @@ -5,6 +5,66 @@ "dragFileTitle": "Bestanden uploaden", "dragTitle": "Afbeeldingen uploaden" }, + "FileManager": { + "actions": { + "addToKnowledgeBase": "Toevoegen aan kennisbank", + "addToOtherKnowledgeBase": "Toevoegen aan andere kennisbank", + "batchChunking": "Batchverdeling", + "chunking": "Verdeling", + "chunkingTooltip": "Splits het bestand in meerdere tekstblokken en vectoriseer deze voor semantische zoekopdrachten en bestandsdialoog", + "confirmDelete": "Je staat op het punt dit bestand te verwijderen. Na verwijdering kan het niet meer worden hersteld. Bevestig je actie.", + "confirmDeleteMultiFiles": "Je staat op het punt de geselecteerde {{count}} bestanden te verwijderen. Na verwijdering kunnen ze niet meer worden hersteld. Bevestig je actie.", + "confirmRemoveFromKnowledgeBase": "Je staat op het punt de geselecteerde {{count}} bestanden uit de kennisbank te verwijderen. Na verwijdering zijn de bestanden nog steeds zichtbaar in alle bestanden. Bevestig je actie.", + "copyUrl": "Kopieer link", + "copyUrlSuccess": "Bestandsadres succesvol gekopieerd", + "createChunkingTask": "Voorbereiden...", + "deleteSuccess": "Bestand succesvol verwijderd", + "downloading": "Bestand aan het downloaden...", + "removeFromKnowledgeBase": "Verwijderen uit kennisbank", + "removeFromKnowledgeBaseSuccess": "Bestand succesvol verwijderd" + }, + "bottom": "Je bent onderaan aangekomen", + "config": { + "showFilesInKnowledgeBase": "Toon inhoud in kennisbank" + }, + "emptyStatus": { + "actions": { + "file": "Bestand uploaden", + "folder": "Map uploaden", + "knowledgeBase": "Nieuwe kennisbank aanmaken" + }, + "or": "of", + "title": "Sleep bestanden of mappen hierheen" + }, + "title": { + "createdAt": "Aangemaakt op", + "size": "Grootte", + "title": "Bestand" + }, + "total": { + "fileCount": "Totaal {{count}} items", + "selectedCount": "Geselecteerd {{count}} items" + } + }, + "FileParsingStatus": { + "chunks": { + "embeddingStatus": { + "empty": "Tekstblokken zijn nog niet volledig gevectoriseerd, wat de semantische zoekfunctie kan uitschakelen. Om de zoekkwaliteit te verbeteren, vectoriseer de tekstblokken.", + "processing": "Tekstblokken worden gevectoriseerd, graag even geduld.", + "success": "Huidige tekstblokken zijn allemaal gevectoriseerd" + }, + "embeddings": "Vectorisatie", + "status": { + "error": "Verdeling mislukt", + "errorResult": "Verdeling mislukt, controleer en probeer het opnieuw. Reden van falen:", + "processing": "Bezig met verdelen", + "processingTip": "De server is bezig met het splitsen van tekstblokken, het sluiten van de pagina heeft geen invloed op de voortgang van de verdeling." + } + } + }, + "GoBack": { + "back": "Terug" + }, "ModelSelect": { "featureTag": { "custom": "Custom model, by default, supports both function call and visual recognition. Please verify the availability of the above capabilities based on actual needs.", diff --git a/locales/pl-PL/components.json b/locales/pl-PL/components.json index 019f18d7d5fa..1dd2c77f53c2 100644 --- a/locales/pl-PL/components.json +++ b/locales/pl-PL/components.json @@ -5,6 +5,66 @@ "dragFileTitle": "Prześlij plik", "dragTitle": "Prześlij obraz" }, + "FileManager": { + "actions": { + "addToKnowledgeBase": "Dodaj do bazy wiedzy", + "addToOtherKnowledgeBase": "Dodaj do innej bazy wiedzy", + "batchChunking": "Partycjonowanie wsadowe", + "chunking": "Partycjonowanie", + "chunkingTooltip": "Podziel plik na wiele bloków tekstowych i wektoryzuj, aby umożliwić wyszukiwanie semantyczne i rozmowy o plikach", + "confirmDelete": "Zaraz usuniesz ten plik. Po usunięciu nie będzie można go odzyskać, proszę potwierdź swoje działanie", + "confirmDeleteMultiFiles": "Zaraz usuniesz wybrane {{count}} plików. Po usunięciu nie będzie można ich odzyskać, proszę potwierdź swoje działanie", + "confirmRemoveFromKnowledgeBase": "Zaraz usuniesz wybrane {{count}} plików z bazy wiedzy. Po usunięciu pliki będą nadal widoczne wśród wszystkich plików, proszę potwierdź swoje działanie", + "copyUrl": "Kopiuj link", + "copyUrlSuccess": "Adres pliku skopiowany pomyślnie", + "createChunkingTask": "Przygotowywanie...", + "deleteSuccess": "Plik usunięty pomyślnie", + "downloading": "Pobieranie pliku...", + "removeFromKnowledgeBase": "Usuń z bazy wiedzy", + "removeFromKnowledgeBaseSuccess": "Plik usunięty pomyślnie" + }, + "bottom": "To już wszystko", + "config": { + "showFilesInKnowledgeBase": "Pokaż zawartość w bazie wiedzy" + }, + "emptyStatus": { + "actions": { + "file": "Prześlij plik", + "folder": "Prześlij folder", + "knowledgeBase": "Utwórz nową bazę wiedzy" + }, + "or": "lub", + "title": "Przeciągnij plik lub folder tutaj" + }, + "title": { + "createdAt": "Data utworzenia", + "size": "Rozmiar", + "title": "Plik" + }, + "total": { + "fileCount": "Łącznie {{count}} pozycji", + "selectedCount": "Wybrano {{count}} pozycji" + } + }, + "FileParsingStatus": { + "chunks": { + "embeddingStatus": { + "empty": "Bloki tekstowe nie zostały w pełni wektoryzowane, co spowoduje, że funkcja wyszukiwania semantycznego będzie niedostępna. Aby poprawić jakość wyszukiwania, proszę wektoryzować bloki tekstowe", + "processing": "Bloki tekstowe są wektoryzowane, proszę czekać", + "success": "Obecne bloki tekstowe zostały w pełni wektoryzowane" + }, + "embeddings": "Wektoryzacja", + "status": { + "error": "Partycjonowanie nie powiodło się", + "errorResult": "Partycjonowanie nie powiodło się, proszę sprawdzić i spróbować ponownie. Powód niepowodzenia:", + "processing": "Partycjonowanie w toku", + "processingTip": "Serwer jest w trakcie dzielenia bloków tekstowych, zamknięcie strony nie wpłynie na postęp partycjonowania" + } + } + }, + "GoBack": { + "back": "Wróć" + }, "ModelSelect": { "featureTag": { "custom": "Niestandardowy model, domyślnie obsługujący zarówno wywołania funkcji, jak i rozpoznawanie wizualne. Proszę zweryfikować możliwość użycia tych funkcji w praktyce.", diff --git a/locales/pt-BR/components.json b/locales/pt-BR/components.json index cc93cbbdfb36..05804fdde240 100644 --- a/locales/pt-BR/components.json +++ b/locales/pt-BR/components.json @@ -5,6 +5,66 @@ "dragFileTitle": "Enviar arquivo", "dragTitle": "Enviar imagem" }, + "FileManager": { + "actions": { + "addToKnowledgeBase": "Adicionar ao banco de conhecimento", + "addToOtherKnowledgeBase": "Adicionar a outro banco de conhecimento", + "batchChunking": "Divisão em lotes", + "chunking": "Divisão", + "chunkingTooltip": "Divida o arquivo em vários blocos de texto e vetorize, podendo ser usado para busca semântica e diálogo sobre o arquivo", + "confirmDelete": "Você está prestes a excluir este arquivo. Após a exclusão, ele não poderá ser recuperado. Por favor, confirme sua ação.", + "confirmDeleteMultiFiles": "Você está prestes a excluir {{count}} arquivos selecionados. Após a exclusão, eles não poderão ser recuperados. Por favor, confirme sua ação.", + "confirmRemoveFromKnowledgeBase": "Você está prestes a remover {{count}} arquivos selecionados do banco de conhecimento. Após a remoção, os arquivos ainda poderão ser visualizados em todos os arquivos. Por favor, confirme sua ação.", + "copyUrl": "Copiar link", + "copyUrlSuccess": "Endereço do arquivo copiado com sucesso", + "createChunkingTask": "Preparando...", + "deleteSuccess": "Arquivo excluído com sucesso", + "downloading": "Baixando arquivo...", + "removeFromKnowledgeBase": "Remover do banco de conhecimento", + "removeFromKnowledgeBaseSuccess": "Arquivo removido com sucesso" + }, + "bottom": "Você chegou ao final", + "config": { + "showFilesInKnowledgeBase": "Mostrar conteúdo no banco de conhecimento" + }, + "emptyStatus": { + "actions": { + "file": "Carregar arquivo", + "folder": "Carregar pasta", + "knowledgeBase": "Criar novo banco de conhecimento" + }, + "or": "ou", + "title": "Arraste arquivos ou pastas para cá" + }, + "title": { + "createdAt": "Data de criação", + "size": "Tamanho", + "title": "Arquivo" + }, + "total": { + "fileCount": "Total de {{count}} itens", + "selectedCount": "Selecionados {{count}} itens" + } + }, + "FileParsingStatus": { + "chunks": { + "embeddingStatus": { + "empty": "Os blocos de texto ainda não foram completamente vetorizados, o que resultará na funcionalidade de busca semântica indisponível. Para melhorar a qualidade da busca, por favor, vetorize os blocos de texto.", + "processing": "Os blocos de texto estão sendo vetorizados, por favor, aguarde.", + "success": "Atualmente, todos os blocos de texto foram vetorizados." + }, + "embeddings": "Vetorizar", + "status": { + "error": "Falha na divisão", + "errorResult": "Falha na divisão, por favor, verifique e tente novamente. Motivo da falha:", + "processing": "Dividindo", + "processingTip": "O servidor está dividindo os blocos de texto, fechar a página não afetará o progresso da divisão." + } + } + }, + "GoBack": { + "back": "Voltar" + }, "ModelSelect": { "featureTag": { "custom": "Modelo personalizado, por padrão, suporta chamadas de função e reconhecimento visual. Por favor, verifique a disponibilidade dessas capacidades de acordo com a situação real.", diff --git a/locales/ru-RU/components.json b/locales/ru-RU/components.json index b3ff7c6ebaa6..6e37381b2e52 100644 --- a/locales/ru-RU/components.json +++ b/locales/ru-RU/components.json @@ -5,6 +5,66 @@ "dragFileTitle": "Загрузить файл", "dragTitle": "Загрузить изображение" }, + "FileManager": { + "actions": { + "addToKnowledgeBase": "Добавить в базу знаний", + "addToOtherKnowledgeBase": "Добавить в другую базу знаний", + "batchChunking": "Пакетная разбивка", + "chunking": "Разбивка", + "chunkingTooltip": "Разделите файл на несколько текстовых блоков и векторизуйте их для семантического поиска и диалога с файлом", + "confirmDelete": "Вы собираетесь удалить этот файл. После удаления его нельзя будет восстановить. Пожалуйста, подтвердите ваше действие.", + "confirmDeleteMultiFiles": "Вы собираетесь удалить выбранные {{count}} файлов. После удаления их нельзя будет восстановить. Пожалуйста, подтвердите ваше действие.", + "confirmRemoveFromKnowledgeBase": "Вы собираетесь удалить выбранные {{count}} файлов из базы знаний. После удаления файлы все еще будут доступны во всех файлах. Пожалуйста, подтвердите ваше действие.", + "copyUrl": "Скопировать ссылку", + "copyUrlSuccess": "Адрес файла успешно скопирован", + "createChunkingTask": "Подготовка...", + "deleteSuccess": "Файл успешно удален", + "downloading": "Загрузка файла...", + "removeFromKnowledgeBase": "Удалить из базы знаний", + "removeFromKnowledgeBaseSuccess": "Файл успешно удален" + }, + "bottom": "Вы достигли конца", + "config": { + "showFilesInKnowledgeBase": "Показать содержимое в базе знаний" + }, + "emptyStatus": { + "actions": { + "file": "Загрузить файл", + "folder": "Загрузить папку", + "knowledgeBase": "Создать новую базу знаний" + }, + "or": "или", + "title": "Перетащите файл или папку сюда" + }, + "title": { + "createdAt": "Дата создания", + "size": "Размер", + "title": "Файл" + }, + "total": { + "fileCount": "Всего {{count}} элементов", + "selectedCount": "Выбрано {{count}} элементов" + } + }, + "FileParsingStatus": { + "chunks": { + "embeddingStatus": { + "empty": "Текстовые блоки еще не полностью векторизованы, что приведет к недоступности функции семантического поиска. Для повышения качества поиска, пожалуйста, векторизуйте текстовые блоки.", + "processing": "Текстовые блоки векторизуются, пожалуйста, подождите.", + "success": "Все текущие текстовые блоки успешно векторизованы." + }, + "embeddings": "Векторизация", + "status": { + "error": "Ошибка разбивки", + "errorResult": "Ошибка разбивки, пожалуйста, проверьте и повторите попытку. Причина ошибки:", + "processing": "В процессе разбивки", + "processingTip": "Сервер разбивает текстовые блоки, закрытие страницы не повлияет на процесс разбивки." + } + } + }, + "GoBack": { + "back": "Назад" + }, "ModelSelect": { "featureTag": { "custom": "Пользовательская модель по умолчанию поддерживает как вызов функций, так и распознавание изображений. Пожалуйста, проверьте доступность указанных возможностей в вашем случае", diff --git a/locales/tr-TR/components.json b/locales/tr-TR/components.json index d4e928b5b66d..4d58d7f04681 100644 --- a/locales/tr-TR/components.json +++ b/locales/tr-TR/components.json @@ -5,6 +5,66 @@ "dragFileTitle": "Dosya Yükle", "dragTitle": "Resim Yükle" }, + "FileManager": { + "actions": { + "addToKnowledgeBase": "Bilgi tabanına ekle", + "addToOtherKnowledgeBase": "Diğer bilgi tabanına ekle", + "batchChunking": "Toplu parçalara ayırma", + "chunking": "Parçalara ayırma", + "chunkingTooltip": "Dosyayı birden fazla metin parçasına ayırıp vektörleştirdikten sonra, anlamsal arama ve dosya diyalogları için kullanılabilir", + "confirmDelete": "Bu dosya silinecek, silindikten sonra geri alınamaz, lütfen işleminizi onaylayın", + "confirmDeleteMultiFiles": "Seçilen {{count}} dosya silinecek, silindikten sonra geri alınamaz, lütfen işleminizi onaylayın", + "confirmRemoveFromKnowledgeBase": "Seçilen {{count}} dosya bilgi tabanından kaldırılacak, kaldırıldıktan sonra dosyalar tüm dosyalar arasında görüntülenebilir, lütfen işleminizi onaylayın", + "copyUrl": "Bağlantıyı kopyala", + "copyUrlSuccess": "Dosya adresi başarıyla kopyalandı", + "createChunkingTask": "Hazırlanıyor...", + "deleteSuccess": "Dosya başarıyla silindi", + "downloading": "Dosya indiriliyor...", + "removeFromKnowledgeBase": "Bilgi tabanından kaldır", + "removeFromKnowledgeBaseSuccess": "Dosya başarıyla kaldırıldı" + }, + "bottom": "Artık sona geldik", + "config": { + "showFilesInKnowledgeBase": "Bilgi tabanındaki içeriği göster" + }, + "emptyStatus": { + "actions": { + "file": "Dosya yükle", + "folder": "Klasör yükle", + "knowledgeBase": "Yeni bilgi tabanı oluştur" + }, + "or": "veya", + "title": "Dosyayı veya klasörü buraya sürükleyin" + }, + "title": { + "createdAt": "Oluşturulma zamanı", + "size": "Boyut", + "title": "Dosya" + }, + "total": { + "fileCount": "Toplam {{count}} öğe", + "selectedCount": "Seçilen {{count}} öğe" + } + }, + "FileParsingStatus": { + "chunks": { + "embeddingStatus": { + "empty": "Metin parçaları henüz tamamen vektörleştirilmedi, bu durum anlamsal arama işlevinin kullanılamamasına neden olabilir, arama kalitesini artırmak için lütfen metin parçalarını vektörleştirin", + "processing": "Metin parçaları vektörleştiriliyor, lütfen bekleyin", + "success": "Mevcut metin parçaları tamamen vektörleştirildi" + }, + "embeddings": "Vektörleştirme", + "status": { + "error": "Parçalara ayırma başarısız oldu", + "errorResult": "Parçalara ayırma başarısız oldu, lütfen kontrol edip tekrar deneyin. Başarısız olma nedeni:", + "processing": "Parçalara ayırma işlemi devam ediyor", + "processingTip": "Sunucu metin parçalarını ayırıyor, sayfayı kapatmak parçalama ilerlemesini etkilemez" + } + } + }, + "GoBack": { + "back": "Geri dön" + }, "ModelSelect": { "featureTag": { "custom": "Özel model, varsayılan olarak hem fonksiyon çağrısını hem de görüntü tanımayı destekler, yukarıdaki yeteneklerin kullanılabilirliğini doğrulamak için lütfen gerçek durumu kontrol edin", diff --git a/locales/vi-VN/components.json b/locales/vi-VN/components.json index cfdbe4d156a9..47803cf9a935 100644 --- a/locales/vi-VN/components.json +++ b/locales/vi-VN/components.json @@ -5,6 +5,66 @@ "dragFileTitle": "Tải lên tệp", "dragTitle": "Tải lên hình ảnh" }, + "FileManager": { + "actions": { + "addToKnowledgeBase": "Thêm vào kho tri thức", + "addToOtherKnowledgeBase": "Thêm vào kho tri thức khác", + "batchChunking": "Chia nhỏ theo lô", + "chunking": "Chia nhỏ", + "chunkingTooltip": "Chia tách tệp thành nhiều khối văn bản và vector hóa, có thể sử dụng cho tìm kiếm ngữ nghĩa và đối thoại tệp", + "confirmDelete": "Bạn sắp xóa tệp này, sau khi xóa sẽ không thể khôi phục, vui lòng xác nhận hành động của bạn", + "confirmDeleteMultiFiles": "Bạn sắp xóa {{count}} tệp đã chọn, sau khi xóa sẽ không thể khôi phục, vui lòng xác nhận hành động của bạn", + "confirmRemoveFromKnowledgeBase": "Bạn sắp xóa {{count}} tệp đã chọn khỏi kho tri thức, sau khi xóa tệp vẫn có thể xem trong tất cả các tệp, vui lòng xác nhận hành động của bạn", + "copyUrl": "Sao chép liên kết", + "copyUrlSuccess": "Địa chỉ tệp đã được sao chép thành công", + "createChunkingTask": "Đang chuẩn bị...", + "deleteSuccess": "Tệp đã được xóa thành công", + "downloading": "Đang tải tệp...", + "removeFromKnowledgeBase": "Xóa khỏi kho tri thức", + "removeFromKnowledgeBaseSuccess": "Tệp đã được xóa thành công" + }, + "bottom": "Đã đến cuối rồi", + "config": { + "showFilesInKnowledgeBase": "Hiển thị nội dung trong kho tri thức" + }, + "emptyStatus": { + "actions": { + "file": "Tải lên tệp", + "folder": "Tải lên thư mục", + "knowledgeBase": "Tạo kho tri thức mới" + }, + "or": "hoặc", + "title": "Kéo tệp hoặc thư mục vào đây" + }, + "title": { + "createdAt": "Thời gian tạo", + "size": "Kích thước", + "title": "Tệp" + }, + "total": { + "fileCount": "Tổng cộng {{count}} mục", + "selectedCount": "Đã chọn {{count}} mục" + } + }, + "FileParsingStatus": { + "chunks": { + "embeddingStatus": { + "empty": "Các khối văn bản chưa được vector hóa hoàn toàn, sẽ dẫn đến chức năng tìm kiếm ngữ nghĩa không khả dụng, để nâng cao chất lượng tìm kiếm, vui lòng vector hóa các khối văn bản", + "processing": "Các khối văn bản đang được vector hóa, vui lòng chờ", + "success": "Hiện tại tất cả các khối văn bản đã được vector hóa" + }, + "embeddings": "Vector hóa", + "status": { + "error": "Chia nhỏ thất bại", + "errorResult": "Chia nhỏ thất bại, vui lòng kiểm tra và thử lại. Nguyên nhân thất bại:", + "processing": "Đang chia nhỏ", + "processingTip": "Máy chủ đang chia tách các khối văn bản, đóng trang không ảnh hưởng đến tiến trình chia nhỏ" + } + } + }, + "GoBack": { + "back": "Quay lại" + }, "ModelSelect": { "featureTag": { "custom": "Mô hình tùy chỉnh, mặc định hỗ trợ cả cuộc gọi hàm và nhận diện hình ảnh, vui lòng xác minh khả năng sử dụng của chúng theo tình hình cụ thể", diff --git a/locales/zh-CN/components.json b/locales/zh-CN/components.json index 6f5f2d6d5145..5d022c40859e 100644 --- a/locales/zh-CN/components.json +++ b/locales/zh-CN/components.json @@ -5,6 +5,66 @@ "dragFileTitle": "上传文件", "dragTitle": "上传图片" }, + "FileManager": { + "actions": { + "addToKnowledgeBase": "添加到知识库", + "addToOtherKnowledgeBase": "添加到其他知识库", + "batchChunking": "批量分块", + "chunking": "分块", + "chunkingTooltip": "将文件拆分为多个文本块并向量化后,可用于语义检索和文件对话", + "confirmDelete": "即将删除该文件,删除后该将无法找回,请确认你的操作", + "confirmDeleteMultiFiles": "即将删除选中的 {{count}} 个文件,删除后该将无法找回,请确认你的操作", + "confirmRemoveFromKnowledgeBase": "即将从知识库中移除选中的 {{count}} 个文件,移除后文件仍然可以在全部文件中查看,请确认你的操作", + "copyUrl": "复制链接", + "copyUrlSuccess": "文件地址复制成功", + "createChunkingTask": "准备中...", + "deleteSuccess": "文件删除成功", + "downloading": "文件下载中...", + "removeFromKnowledgeBase": "从知识库中移除", + "removeFromKnowledgeBaseSuccess": "文件移除成功" + }, + "bottom": "已经到底啦", + "config": { + "showFilesInKnowledgeBase": "显示知识库中内容" + }, + "emptyStatus": { + "actions": { + "file": "上传文件", + "folder": "上传文件夹", + "knowledgeBase": "新建知识库" + }, + "or": "或者", + "title": "将文件或文件夹拖到这里" + }, + "title": { + "createdAt": "创建时间", + "size": "大小", + "title": "文件" + }, + "total": { + "fileCount": "共 {{count}} 项", + "selectedCount": "已选 {{count}} 项" + } + }, + "FileParsingStatus": { + "chunks": { + "embeddingStatus": { + "empty": "文本块尚未完全向量化,将导致语义检索功能不可用,为提升检索质量,请对文本块向量化", + "processing": "文本块正在向量化,请耐心等待", + "success": "当前文本块均已向量化" + }, + "embeddings": "向量化", + "status": { + "error": "分块失败", + "errorResult": "分块失败,请检查后重试。失败原因:", + "processing": "分块中", + "processingTip": "服务端正在拆分文本块,关闭页面不影响分块进度" + } + } + }, + "GoBack": { + "back": "返回" + }, "ModelSelect": { "featureTag": { "custom": "自定义模型,默认设定同时支持函数调用与视觉识别,请根据实际情况验证上述能力的可用性", diff --git a/locales/zh-TW/components.json b/locales/zh-TW/components.json index 4cc0d9f6ea09..e4322e5d1215 100644 --- a/locales/zh-TW/components.json +++ b/locales/zh-TW/components.json @@ -5,6 +5,66 @@ "dragFileTitle": "上傳檔案", "dragTitle": "上傳圖片" }, + "FileManager": { + "actions": { + "addToKnowledgeBase": "添加到知識庫", + "addToOtherKnowledgeBase": "添加到其他知識庫", + "batchChunking": "批量分塊", + "chunking": "分塊", + "chunkingTooltip": "將文件拆分為多個文本塊並向量化後,可用於語義檢索和文件對話", + "confirmDelete": "即將刪除該文件,刪除後將無法找回,請確認你的操作", + "confirmDeleteMultiFiles": "即將刪除選中的 {{count}} 個文件,刪除後將無法找回,請確認你的操作", + "confirmRemoveFromKnowledgeBase": "即將從知識庫中移除選中的 {{count}} 個文件,移除後文件仍然可以在全部文件中查看,請確認你的操作", + "copyUrl": "複製鏈接", + "copyUrlSuccess": "文件地址複製成功", + "createChunkingTask": "準備中...", + "deleteSuccess": "文件刪除成功", + "downloading": "文件下載中...", + "removeFromKnowledgeBase": "從知識庫中移除", + "removeFromKnowledgeBaseSuccess": "文件移除成功" + }, + "bottom": "已經到底啦", + "config": { + "showFilesInKnowledgeBase": "顯示知識庫中內容" + }, + "emptyStatus": { + "actions": { + "file": "上傳文件", + "folder": "上傳文件夾", + "knowledgeBase": "新建知識庫" + }, + "or": "或者", + "title": "將文件或文件夾拖到這裡" + }, + "title": { + "createdAt": "創建時間", + "size": "大小", + "title": "文件" + }, + "total": { + "fileCount": "共 {{count}} 項", + "selectedCount": "已選 {{count}} 項" + } + }, + "FileParsingStatus": { + "chunks": { + "embeddingStatus": { + "empty": "文本塊尚未完全向量化,將導致語義檢索功能不可用,為提升檢索質量,請對文本塊向量化", + "processing": "文本塊正在向量化,請耐心等待", + "success": "當前文本塊均已向量化" + }, + "embeddings": "向量化", + "status": { + "error": "分塊失敗", + "errorResult": "分塊失敗,請檢查後重試。失敗原因:", + "processing": "分塊中", + "processingTip": "服務端正在拆分文本塊,關閉頁面不影響分塊進度" + } + } + }, + "GoBack": { + "back": "返回" + }, "ModelSelect": { "featureTag": { "custom": "自訂模型,預設支援函式呼叫與視覺辨識,請根據實際情況驗證上述能力的可用性", diff --git a/src/app/(main)/settings/_layout/Desktop/SideBar.tsx b/src/app/(main)/settings/_layout/Desktop/SideBar.tsx index aa6bce37a967..930843ed85bd 100644 --- a/src/app/(main)/settings/_layout/Desktop/SideBar.tsx +++ b/src/app/(main)/settings/_layout/Desktop/SideBar.tsx @@ -5,31 +5,15 @@ import { useTranslation } from 'react-i18next'; import { Flexbox, FlexboxProps } from 'react-layout-kit'; import BrandWatermark from '@/components/BrandWatermark'; +import PanelTitle from '@/components/PanelTitle'; const useStyles = createStyles(({ token, css }) => ({ container: css` - padding-block: 24px 16px; + padding-block: 0 16px; padding-inline: 12px; background: ${token.colorBgContainer}; border-inline-end: 1px solid ${token.colorBorder}; `, - desc: css` - line-height: 1.4; - color: ${token.colorTextDescription}; - `, - header: css` - padding-block: 0; - padding-inline: 0.75rem; - `, - logo: css` - fill: ${token.colorText}; - `, - title: css` - margin: 0; - font-size: 26px; - font-weight: 600; - line-height: 1.3; - `, })); interface SidebarLayoutProps extends FlexboxProps { @@ -48,10 +32,7 @@ const SidebarLayout = ({ children, className, title, desc, ...rest }: SidebarLay width={280} {...rest} > - -

{title || t('header.title')}

-

{desc || t('header.desc')}

-
+ {children} diff --git a/src/components/FileIcon/config.ts b/src/components/FileIcon/config.ts new file mode 100644 index 000000000000..bd185dd8972b --- /dev/null +++ b/src/components/FileIcon/config.ts @@ -0,0 +1,12 @@ +export const mimeTypeMap: Record = { + csv: '#43aa55', + doc: '#2b56b1', + docx: '#2b56b1', + pdf: '#de2429', + ppt: '#c43e1b', + pptx: '#c43e1b', + text: '#607180', + txt: '#607180', + xls: '#2f6d3f', + xlsx: '#2f6d3f', +}; diff --git a/src/components/FileIcon/index.tsx b/src/components/FileIcon/index.tsx new file mode 100644 index 000000000000..e9d03c1dcf6c --- /dev/null +++ b/src/components/FileIcon/index.tsx @@ -0,0 +1,30 @@ +import { FileTypeIcon, MaterialFileTypeIcon } from '@lobehub/ui'; +import { memo } from 'react'; + +import { mimeTypeMap } from './config'; + +interface FileListProps { + fileName: string; + fileType: string; + size?: number; + variant?: 'pure' | 'file' | 'folder'; +} + +const FileIcon = memo(({ fileName, size, variant = 'file' }) => { + if (Object.keys(mimeTypeMap).some((key) => fileName.endsWith(`.${key}`))) { + const ext = fileName.split('.').pop() as string; + + return ( + + ); + } + + return ; +}); + +export default FileIcon; diff --git a/src/components/FunctionModal/createModalHooks.ts b/src/components/FunctionModal/createModalHooks.ts new file mode 100644 index 000000000000..fc5fce0e93b5 --- /dev/null +++ b/src/components/FunctionModal/createModalHooks.ts @@ -0,0 +1,46 @@ +import { App } from 'antd'; +import { ModalFuncProps } from 'antd/es/modal/interface'; +import { MutableRefObject, ReactNode, useRef } from 'react'; + +import { closeIcon, useStyles } from './style'; + +interface CreateModalProps extends ModalFuncProps { + content: ReactNode; +} + +interface ModalInstance { + destroy: (...args: any[]) => void; +} + +type PropsFunc = ( + instance: MutableRefObject, + props?: T, +) => CreateModalProps; + +const createModal = (params: CreateModalProps | PropsFunc) => { + const useModal = () => { + const { styles } = useStyles(); + const { modal } = App.useApp(); + const instanceRef = useRef(); + + const open = (outProps?: T) => { + const props = typeof params === 'function' ? params(instanceRef, outProps) : params; + + instanceRef.current = modal.confirm({ + className: styles.content, + closable: true, + closeIcon, + footer: false, + icon: null, + wrapClassName: styles.wrap, + ...props, + }); + }; + + return { open }; + }; + + return useModal; +}; + +export { createModal }; diff --git a/src/components/FunctionModal/index.ts b/src/components/FunctionModal/index.ts new file mode 100644 index 000000000000..757279fd9645 --- /dev/null +++ b/src/components/FunctionModal/index.ts @@ -0,0 +1 @@ +export * from './createModalHooks'; diff --git a/src/components/FunctionModal/style.tsx b/src/components/FunctionModal/style.tsx new file mode 100644 index 000000000000..8ce6b7a2aec0 --- /dev/null +++ b/src/components/FunctionModal/style.tsx @@ -0,0 +1,39 @@ +import { Icon } from '@lobehub/ui'; +import { createStyles } from 'antd-style'; +import { XIcon } from 'lucide-react'; + +export const useStyles = createStyles(({ css, token, prefixCls, isDarkMode, responsive }) => { + return { + content: css` + .${prefixCls}-modal-content { + overflow: hidden; + + width: min(90vw, 450px); + padding: 0; + + background: ${isDarkMode ? token.colorBgElevated : token.colorBgLayout}; + border: 1px solid ${token.colorSplit}; + border-radius: ${token.borderRadiusLG}px; + + ${responsive.mobile} { + width: unset; + } + } + .${prefixCls}-modal-confirm-title { + display: block; + padding-block: 16px 0; + padding-inline: 16px; + } + .${prefixCls}-modal-confirm-btns { + margin-block-start: 0; + padding: 16px; + } + `, + wrap: css` + overflow: hidden auto; + backdrop-filter: blur(2px); + `, + }; +}); + +export const closeIcon = ; diff --git a/src/components/GoBack/index.tsx b/src/components/GoBack/index.tsx new file mode 100644 index 000000000000..e5265c8ecdef --- /dev/null +++ b/src/components/GoBack/index.tsx @@ -0,0 +1,46 @@ +import { Icon } from '@lobehub/ui'; +import { createStyles } from 'antd-style'; +import { ArrowLeft } from 'lucide-react'; +import Link from 'next/link'; +import { memo } from 'react'; +import { useTranslation } from 'react-i18next'; +import { Flexbox } from 'react-layout-kit'; + +const useStyles = createStyles(({ css, token }) => { + return { + container: css` + width: fit-content; + height: 24px; + padding-inline: 8px; + + color: ${token.colorTextTertiary}; + + border-radius: 6px; + + &:hover { + color: ${token.colorTextSecondary}; + background: ${token.colorFillTertiary}; + } + `, + }; +}); + +interface GoBackProps { + href: string; +} + +const GoBack = memo(({ href }) => { + const { t } = useTranslation('components'); + const { styles } = useStyles(); + + return ( + + + +
{t('GoBack.back')}
+
+ + ); +}); + +export default GoBack; diff --git a/src/components/PanelTitle/index.tsx b/src/components/PanelTitle/index.tsx new file mode 100644 index 000000000000..b86522005fee --- /dev/null +++ b/src/components/PanelTitle/index.tsx @@ -0,0 +1,41 @@ +'use client'; + +import { createStyles } from 'antd-style'; +import { CSSProperties, memo } from 'react'; +import { Flexbox } from 'react-layout-kit'; + +const useStyles = createStyles(({ token, css }) => ({ + desc: css` + line-height: 1.4; + color: ${token.colorTextDescription}; + `, + header: css` + padding-block: 24px 0; + padding-inline: 0.75rem; + `, + title: css` + margin: 0; + font-size: 26px; + font-weight: 600; + line-height: 1.3; + `, +})); + +interface PanelTitleProps { + desc?: string; + style?: CSSProperties; + title?: string; +} + +const PanelTitle = memo(({ title, desc, style }: PanelTitleProps) => { + const { styles } = useStyles(); + + return ( + +

{title}

+

{desc}

+
+ ); +}); + +export default PanelTitle; diff --git a/src/components/RepoIcon/index.tsx b/src/components/RepoIcon/index.tsx new file mode 100644 index 000000000000..6f9cac3429b9 --- /dev/null +++ b/src/components/RepoIcon/index.tsx @@ -0,0 +1,22 @@ +import { Icon } from '@lobehub/ui'; +import { useTheme } from 'antd-style'; +import { BookTextIcon } from 'lucide-react'; +import { memo } from 'react'; + +interface RepoIconProps { + size?: number; +} +const RepoIcon = memo(({ size = 20 }) => { + const theme = useTheme(); + + return ( + + ); +}); + +export default RepoIcon; diff --git a/src/components/SidebarHeader/index.tsx b/src/components/SidebarHeader/index.tsx index caa3456eae37..a156ff8b341c 100644 --- a/src/components/SidebarHeader/index.tsx +++ b/src/components/SidebarHeader/index.tsx @@ -1,5 +1,5 @@ import { createStyles } from 'antd-style'; -import { type ReactNode, memo } from 'react'; +import { CSSProperties, type ReactNode, memo } from 'react'; import { Flexbox } from 'react-layout-kit'; const useStyles = createStyles(({ css }) => ({ @@ -10,10 +10,11 @@ const useStyles = createStyles(({ css }) => ({ interface SidebarHeaderProps { actions?: ReactNode; + style?: CSSProperties; title: ReactNode; } -const SidebarHeader = memo(({ title, actions }) => { +const SidebarHeader = memo(({ title, style, actions }) => { const { styles } = useStyles(); return ( @@ -24,6 +25,7 @@ const SidebarHeader = memo(({ title, actions }) => { horizontal padding={14} paddingInline={16} + style={style} > {title} diff --git a/src/components/TipGuide/index.tsx b/src/components/TipGuide/index.tsx new file mode 100644 index 000000000000..a4587eeba72d --- /dev/null +++ b/src/components/TipGuide/index.tsx @@ -0,0 +1,150 @@ +import { ActionIcon } from '@lobehub/ui'; +import { ConfigProvider, Popover, TooltipProps } from 'antd'; +import { createStyles, useTheme } from 'antd-style'; +import { XIcon } from 'lucide-react'; +import { CSSProperties, type FC, type ReactNode } from 'react'; +import { Flexbox } from 'react-layout-kit'; + +const useStyle = createStyles(({ css }) => { + return { + close: css` + color: white; + `, + container: css` + position: relative; + `, + footer: css` + display: flex; + justify-content: end; + width: 100%; + `, + overlay: css` + .ant-popover-inner { + border: none; + } + `, + tip: css` + position: absolute; + inset-inline-start: 50%; + transform: translate(-50%); + `, + }; +}); + +export interface TipGuideProps { + /** + * 引导内容 + */ + children?: ReactNode; + /** + * 类名 + */ + className?: string; + /** + * 默认时候的打开状态 + */ + defaultOpen?: boolean; + /** + * 用于自定义 footer 部分的 render api + */ + footerRender?: (dom: ReactNode) => ReactNode; + /** + * 最大宽度 + */ + maxWidth?: number; + /** + * 纵向偏移值 + */ + offsetY?: number; + /** + * 当 open 属性变化时候的触发 + */ + onOpenChange: (open: boolean) => void; + /** + * 受控的 open 属性 + */ + open?: boolean; + /** + * Tooltip 位置,默认为 bottom + */ + placement?: TooltipProps['placement']; + /** + * style + */ + style?: CSSProperties; + tip?: boolean; + /** + * 引导标题 + */ + title: string; +} + +const TipGuide: FC = ({ + children, + placement = 'bottom', + title, + offsetY, + maxWidth = 300, + className, + style, + open, + onOpenChange: setOpen, +}) => { + const token = useTheme(); + const { styles, cx } = useStyle(); + + return ( + + {open ? ( +
+
+ +
{title}
+ { + setOpen(false); + }} + size={'small'} + /> + + } + open={open} + overlayClassName={cx(className, styles.overlay)} + overlayStyle={{ maxWidth, zIndex: 1000, ...style }} + placement={placement} + trigger="hover" + > + {children} +
+
+
+ ) : ( + children + )} +
+ ); +}; + +export default TipGuide; diff --git a/src/database/client/models/message.ts b/src/database/client/models/message.ts index e2fd3263938f..0474226a5d3c 100644 --- a/src/database/client/models/message.ts +++ b/src/database/client/models/message.ts @@ -6,9 +6,14 @@ import { DB_Message, DB_MessageSchema } from '@/database/client/schemas/message' import { ChatMessage } from '@/types/message'; import { nanoid } from '@/utils/uuid'; +/** + * use `@/types/message` instead + * @deprecated + */ export interface CreateMessageParams extends Partial>, Pick { + files?: string[]; fromModel?: string; fromProvider?: string; sessionId: string; diff --git a/src/features/Conversation/Messages/Default.tsx b/src/features/Conversation/Messages/Default.tsx index 67c9228c3380..e06850ae854e 100644 --- a/src/features/Conversation/Messages/Default.tsx +++ b/src/features/Conversation/Messages/Default.tsx @@ -1,10 +1,9 @@ import { ReactNode, memo } from 'react'; +import BubblesLoading from '@/components/BubblesLoading'; import { LOADING_FLAT } from '@/const/message'; import { ChatMessage } from '@/types/message'; -import BubblesLoading from '@/components/BubblesLoading'; - export const DefaultMessage = memo< ChatMessage & { editableContent: ReactNode; diff --git a/src/libs/agent-runtime/AgentRuntime.ts b/src/libs/agent-runtime/AgentRuntime.ts index c8a0be7ddbea..a19319533c7c 100644 --- a/src/libs/agent-runtime/AgentRuntime.ts +++ b/src/libs/agent-runtime/AgentRuntime.ts @@ -27,6 +27,8 @@ import { LobeTogetherAI } from './togetherai'; import { ChatCompetitionOptions, ChatStreamPayload, + EmbeddingsOptions, + EmbeddingsPayload, ModelProvider, TextToImagePayload, } from './types'; @@ -78,6 +80,7 @@ class AgentRuntime { async chat(payload: ChatStreamPayload, options?: ChatCompetitionOptions) { return this._runtime.chat(payload, options); } + async textToImage(payload: TextToImagePayload) { return this._runtime.textToImage?.(payload); } @@ -86,6 +89,10 @@ class AgentRuntime { return this._runtime.models?.(); } + async embeddings(payload: EmbeddingsPayload, options?: EmbeddingsOptions) { + return this._runtime.embeddings?.(payload, options); + } + /** * @description Initialize the runtime with the provider and the options * @param provider choose a model provider @@ -247,12 +254,12 @@ class AgentRuntime { case ModelProvider.Ai360: { runtimeModel = new LobeAi360AI(params.ai360 ?? {}); - break + break; } case ModelProvider.SiliconCloud: { runtimeModel = new LobeSiliconCloudAI(params.siliconcloud ?? {}); - break + break; } } diff --git a/src/libs/agent-runtime/BaseAI.ts b/src/libs/agent-runtime/BaseAI.ts index b36faabb8669..c529491dfcc2 100644 --- a/src/libs/agent-runtime/BaseAI.ts +++ b/src/libs/agent-runtime/BaseAI.ts @@ -3,12 +3,20 @@ import OpenAI from 'openai'; import { TextToImagePayload } from '@/libs/agent-runtime/types/textToImage'; import { ChatModelCard } from '@/types/llm'; -import { ChatCompetitionOptions, ChatStreamPayload } from './types'; +import { + ChatCompetitionOptions, + ChatStreamPayload, + EmbeddingItem, + EmbeddingsOptions, + EmbeddingsPayload, +} from './types'; export interface LobeRuntimeAI { baseURL?: string; chat(payload: ChatStreamPayload, options?: ChatCompetitionOptions): Promise; + embeddings?(payload: EmbeddingsPayload, options?: EmbeddingsOptions): Promise; + models?(): Promise; textToImage?: (payload: TextToImagePayload) => Promise; @@ -21,4 +29,9 @@ export abstract class LobeOpenAICompatibleRuntime { abstract chat(payload: ChatStreamPayload, options?: ChatCompetitionOptions): Promise; abstract models(): Promise; + + abstract embeddings( + payload: EmbeddingsPayload, + options?: EmbeddingsOptions, + ): Promise; } diff --git a/src/libs/agent-runtime/qwen/index.ts b/src/libs/agent-runtime/qwen/index.ts index df734e98239e..2e141c3bff11 100644 --- a/src/libs/agent-runtime/qwen/index.ts +++ b/src/libs/agent-runtime/qwen/index.ts @@ -3,7 +3,7 @@ import OpenAI, { ClientOptions } from 'openai'; import Qwen from '@/config/modelProviders/qwen'; -import { LobeOpenAICompatibleRuntime, LobeRuntimeAI } from '../BaseAI'; +import { LobeRuntimeAI } from '../BaseAI'; import { AgentRuntimeErrorType } from '../error'; import { ChatCompetitionOptions, ChatStreamPayload, ModelProvider } from '../types'; import { AgentRuntimeError } from '../utils/createError'; @@ -23,7 +23,7 @@ const DEFAULT_BASE_URL = 'https://dashscope.aliyuncs.com/compatible-mode/v1'; * or * 2. Set S3-* enviroment variables properly to store all uploaded files. */ -export class LobeQwenAI extends LobeOpenAICompatibleRuntime implements LobeRuntimeAI { +export class LobeQwenAI implements LobeRuntimeAI { client: OpenAI; baseURL: string; @@ -32,7 +32,6 @@ export class LobeQwenAI extends LobeOpenAICompatibleRuntime implements LobeRunti baseURL = DEFAULT_BASE_URL, ...res }: ClientOptions & Record = {}) { - super(); if (!apiKey) throw AgentRuntimeError.createError(AgentRuntimeErrorType.InvalidProviderAPIKey); this.client = new OpenAI({ apiKey, baseURL, ...res }); this.baseURL = this.client.baseURL; @@ -108,7 +107,7 @@ export class LobeQwenAI extends LobeOpenAICompatibleRuntime implements LobeRunti ...payload, messages, result_format: 'message', - stream: !!tools?.length ? false : stream ?? true, + stream: !!tools?.length ? false : (stream ?? true), top_p: top_p && top_p >= 1 ? 0.999 : top_p, }; diff --git a/src/libs/agent-runtime/types/embeddings.ts b/src/libs/agent-runtime/types/embeddings.ts new file mode 100644 index 000000000000..b13bc442874f --- /dev/null +++ b/src/libs/agent-runtime/types/embeddings.ts @@ -0,0 +1,43 @@ +export interface EmbeddingsPayload { + /** + * The number of dimensions the resulting output embeddings should have. Only + * supported in `text-embedding-3` and later models. + */ + dimensions?: number; + /** + * Input text to embed, encoded as a string or array of tokens. To embed multiple + * inputs in a single request, pass an array of strings . + * The input must not exceed the max input tokens for the model (8192 tokens for + * `text-embedding-ada-002`), cannot be an empty string, and any array must be 2048 + * dimensions or less. + */ + input: string | Array; + + model: string; +} + +export interface EmbeddingsOptions { + headers?: Record; + signal?: AbortSignal; + /** + * userId for the embeddings + */ + user?: string; +} + +export interface EmbeddingItem { + /** + * The embedding vector, which is a list of floats. The length of vector depends on + * the model as listed in the + * [embedding guide](https://platform.openai.com/docs/guides/embeddings). + */ + embedding: Array; + /** + * The index of the embedding in the list of embeddings. + */ + index: number; + /** + * The object type, which is always "embedding". + */ + object: 'embedding'; +} diff --git a/src/libs/agent-runtime/types/index.ts b/src/libs/agent-runtime/types/index.ts index c4eaaea80397..e6ea1ca3a7af 100644 --- a/src/libs/agent-runtime/types/index.ts +++ b/src/libs/agent-runtime/types/index.ts @@ -1,3 +1,4 @@ export * from './chat'; +export * from './embeddings'; export * from './textToImage'; export * from './type'; diff --git a/src/libs/agent-runtime/utils/openaiCompatibleFactory/index.ts b/src/libs/agent-runtime/utils/openaiCompatibleFactory/index.ts index 41c0bcdc24dd..3b8f8f348849 100644 --- a/src/libs/agent-runtime/utils/openaiCompatibleFactory/index.ts +++ b/src/libs/agent-runtime/utils/openaiCompatibleFactory/index.ts @@ -6,7 +6,14 @@ import { ChatModelCard } from '@/types/llm'; import { LobeRuntimeAI } from '../../BaseAI'; import { AgentRuntimeErrorType, ILobeAgentRuntimeErrorType } from '../../error'; -import { ChatCompetitionOptions, ChatCompletionErrorPayload, ChatStreamPayload } from '../../types'; +import { + ChatCompetitionOptions, + ChatCompletionErrorPayload, + ChatStreamPayload, + EmbeddingItem, + EmbeddingsOptions, + EmbeddingsPayload, +} from '../../types'; import { AgentRuntimeError } from '../createError'; import { debugResponse, debugStream } from '../debugStream'; import { desensitizeUrl } from '../desensitizeUrl'; @@ -154,7 +161,7 @@ export const LobeOpenAICompatibleFactory = = any> const response = await this.client.chat.completions.create( { ...postPayload, - ...(chatCompletion?.noUserId ? {} : { user: options?.user }) + ...(chatCompletion?.noUserId ? {} : { user: options?.user }), }, { // https://github.com/lobehub/lobe-chat/pull/318 @@ -215,6 +222,22 @@ export const LobeOpenAICompatibleFactory = = any> .filter(Boolean) as ChatModelCard[]; } + async embeddings( + payload: EmbeddingsPayload, + options?: EmbeddingsOptions, + ): Promise { + try { + const res = await this.client.embeddings.create( + { ...payload, user: options?.user }, + { headers: options?.headers, signal: options?.signal }, + ); + + return res.data; + } catch (error) { + throw this.handleError(error); + } + } + async textToImage(payload: TextToImagePayload) { try { const res = await this.client.images.generate(payload); diff --git a/src/libs/langchain/file.ts b/src/libs/langchain/file.ts new file mode 100644 index 000000000000..b37890538679 --- /dev/null +++ b/src/libs/langchain/file.ts @@ -0,0 +1,29 @@ +export const LANGCHAIN_SUPPORT_TEXT_LIST = [ + 'txt', + 'md', + 'markdown', + 'md', + 'mdx', + 'toml', + 'yaml', + 'json', + + 'sh', + 'patch', + // js + 'js', + 'jsx', + 'mjs', + 'tsx', + 'ts', + 'less', + 'css', + // rust + 'rs', + // python + 'py', + 'java', + // database + 'sql', + 'db', +]; diff --git a/src/libs/langchain/index.ts b/src/libs/langchain/index.ts new file mode 100644 index 000000000000..344652772347 --- /dev/null +++ b/src/libs/langchain/index.ts @@ -0,0 +1 @@ +export * from './loaders'; diff --git a/src/libs/langchain/loaders/code/__tests__/index.test.ts b/src/libs/langchain/loaders/code/__tests__/index.test.ts new file mode 100644 index 000000000000..73cadff9362a --- /dev/null +++ b/src/libs/langchain/loaders/code/__tests__/index.test.ts @@ -0,0 +1,34 @@ +// @vitest-environment node +import * as fs from 'node:fs'; +import { join } from 'node:path'; + +import { CodeLoader } from '../index'; +import longResult from './long.json'; + +describe('CodeLoader', () => { + it('split simple code', async () => { + const jsCode = `function helloWorld() { + console.log("Hello, World!"); +} +// Call the function +helloWorld();`; + + const result = await CodeLoader(jsCode, 'js'); + + expect(result).toEqual([ + { + pageContent: + 'function helloWorld() {\n console.log("Hello, World!");\n}\n// Call the function\nhelloWorld();', + metadata: { loc: { lines: { from: 1, to: 5 } } }, + }, + ]); + }); + + it('split long', async () => { + const code = fs.readFileSync(join(__dirname, `./long.txt`), 'utf-8'); + + const result = await CodeLoader(code, 'js'); + + expect(result).toEqual(longResult); + }); +}); diff --git a/src/libs/langchain/loaders/code/__tests__/long.json b/src/libs/langchain/loaders/code/__tests__/long.json new file mode 100644 index 000000000000..7881a7440ad2 --- /dev/null +++ b/src/libs/langchain/loaders/code/__tests__/long.json @@ -0,0 +1,250 @@ +[ + { + "pageContent": "import { copyToClipboard } from '@lobehub/ui';\nimport isEqual from 'fast-deep-equal';\nimport { produce } from 'immer';\nimport { template } from 'lodash-es';\nimport { SWRResponse, mutate } from 'swr';\nimport { StateCreator } from 'zustand/vanilla';", + "metadata": { "loc": { "lines": { "from": 1, "to": 6 } } } + }, + { + "pageContent": "import { chainAnswerWithContext } from '@/chains/answerWithContext';\nimport { LOADING_FLAT } from '@/const/message';\nimport { TraceEventType, TraceNameMap } from '@/const/trace';\nimport { isServerMode } from '@/const/version';\nimport { useClientDataSWR } from '@/libs/swr';\nimport { chatService } from '@/services/chat';\nimport { messageService } from '@/services/message';\nimport { topicService } from '@/services/topic';\nimport { traceService } from '@/services/trace';\nimport { useAgentStore } from '@/store/agent';\nimport { agentSelectors } from '@/store/agent/selectors';\nimport { chatHelpers } from '@/store/chat/helpers';\nimport { messageMapKey } from '@/store/chat/slices/message/utils';\nimport { ChatStore } from '@/store/chat/store';\nimport { useSessionStore } from '@/store/session';", + "metadata": { "loc": { "lines": { "from": 8, "to": 22 } } } + }, + { + "pageContent": "import { traceService } from '@/services/trace';\nimport { useAgentStore } from '@/store/agent';\nimport { agentSelectors } from '@/store/agent/selectors';\nimport { chatHelpers } from '@/store/chat/helpers';\nimport { messageMapKey } from '@/store/chat/slices/message/utils';\nimport { ChatStore } from '@/store/chat/store';\nimport { useSessionStore } from '@/store/session';\nimport { UploadFileItem } from '@/types/files/upload';\nimport {\n ChatMessage,\n ChatMessageError,\n CreateMessageParams,\n MessageToolCall,\n} from '@/types/message';\nimport { TraceEventPayloads } from '@/types/trace';\nimport { setNamespace } from '@/utils/storeDebug';\nimport { nanoid } from '@/utils/uuid';", + "metadata": { "loc": { "lines": { "from": 16, "to": 32 } } } + }, + { + "pageContent": "import type { ChatStoreState } from '../../initialState';\nimport { chatSelectors, topicSelectors } from '../../selectors';\nimport { preventLeavingFn, toggleBooleanList } from '../../utils';\nimport { ChatRAGAction, chatRag } from './actions/rag';\nimport { MessageDispatch, messagesReducer } from './reducer';", + "metadata": { "loc": { "lines": { "from": 34, "to": 38 } } } + }, + { + "pageContent": "const n = setNamespace('m');", + "metadata": { "loc": { "lines": { "from": 40, "to": 40 } } } + }, + { + "pageContent": "const SWR_USE_FETCH_MESSAGES = 'SWR_USE_FETCH_MESSAGES';\n\nexport interface SendMessageParams {\n message: string;\n files?: UploadFileItem[];\n onlyAddUserMessage?: boolean;\n /**\n *\n * https://github.com/lobehub/lobe-chat/pull/2086\n */\n isWelcomeQuestion?: boolean;\n}\n\ninterface ProcessMessageParams {\n traceId?: string;\n isWelcomeQuestion?: boolean;\n /**\n * the RAG query content, should be embedding and used in the semantic search\n */\n ragQuery?: string;\n}\n\nexport interface ChatMessageAction extends ChatRAGAction {\n // create\n sendMessage: (params: SendMessageParams) => Promise;\n addAIMessage: () => Promise;\n /**\n * regenerate message\n * trace enabled\n * @param id\n */\n regenerateMessage: (id: string) => Promise;", + "metadata": { "loc": { "lines": { "from": 42, "to": 73 } } } + }, + { + "pageContent": "// delete\n /**\n * clear message on the active session\n */\n clearMessage: () => Promise;\n deleteMessage: (id: string) => Promise;\n deleteToolMessage: (id: string) => Promise;\n delAndRegenerateMessage: (id: string) => Promise;\n clearAllMessages: () => Promise;\n // update\n updateInputMessage: (message: string) => void;\n modifyMessageContent: (id: string, content: string) => Promise;\n // query\n useFetchMessages: (sessionId: string, topicId?: string) => SWRResponse;\n stopGenerateMessage: () => void;\n copyMessage: (id: string, content: string) => Promise;\n refreshMessages: () => Promise;\n toggleMessageEditing: (id: string, editing: boolean) => void;", + "metadata": { "loc": { "lines": { "from": 75, "to": 92 } } } + }, + { + "pageContent": "// ========= ↓ Internal Method ↓ ========== //\n // ========================================== //\n // ========================================== //", + "metadata": { "loc": { "lines": { "from": 94, "to": 96 } } } + }, + { + "pageContent": "/**\n * update message at the frontend point\n * this method will not update messages to database\n */\n internal_dispatchMessage: (payload: MessageDispatch) => void;\n /**\n * core process of the AI message (include preprocess and postprocess)\n */\n internal_coreProcessMessage: (\n messages: ChatMessage[],\n parentId: string,\n params?: ProcessMessageParams,\n ) => Promise;\n /**\n * the method to fetch the AI message\n */\n internal_fetchAIChatMessage: (\n messages: ChatMessage[],\n assistantMessageId: string,\n params?: ProcessMessageParams,\n ) => Promise<{\n isFunctionCall: boolean;\n traceId?: string;\n }>;", + "metadata": { "loc": { "lines": { "from": 98, "to": 121 } } } + }, + { + "pageContent": "/**\n * update the message content with optimistic update\n * a method used by other action\n */\n internal_updateMessageContent: (\n id: string,\n content: string,\n toolCalls?: MessageToolCall[],\n ) => Promise;\n /**\n * update the message error with optimistic update\n */\n internal_updateMessageError: (id: string, error: ChatMessageError | null) => Promise;\n /**\n * create a message with optimistic update\n */\n internal_createMessage: (\n params: CreateMessageParams,\n context?: { tempMessageId?: string; skipRefresh?: boolean },\n ) => Promise;\n /**\n * create a temp message for optimistic update\n * otherwise the message will be too slow to show\n */\n internal_createTmpMessage: (params: CreateMessageParams) => string;\n /**", + "metadata": { "loc": { "lines": { "from": 123, "to": 148 } } } + }, + { + "pageContent": "/**\n * create a message with optimistic update\n */\n internal_createMessage: (\n params: CreateMessageParams,\n context?: { tempMessageId?: string; skipRefresh?: boolean },\n ) => Promise;\n /**\n * create a temp message for optimistic update\n * otherwise the message will be too slow to show\n */\n internal_createTmpMessage: (params: CreateMessageParams) => string;\n /**\n * delete the message content with optimistic update\n */\n internal_deleteMessage: (id: string) => Promise;\n internal_resendMessage: (id: string, traceId?: string) => Promise;", + "metadata": { "loc": { "lines": { "from": 136, "to": 152 } } } + }, + { + "pageContent": "internal_fetchMessages: () => Promise;\n internal_traceMessage: (id: string, payload: TraceEventPayloads) => Promise;", + "metadata": { "loc": { "lines": { "from": 154, "to": 155 } } } + }, + { + "pageContent": "/**\n * method to toggle message create loading state\n * the AI message status is creating -> generating\n * other message role like user and tool , only this method need to be called\n */\n internal_toggleMessageLoading: (loading: boolean, id: string) => void;\n /**\n * method to toggle ai message generating loading\n */\n internal_toggleChatLoading: (\n loading: boolean,\n id?: string,\n action?: string,\n ) => AbortController | undefined;\n /**\n * method to toggle the tool calling loading state\n */\n internal_toggleToolCallingStreaming: (id: string, streaming: boolean[] | undefined) => void;\n /**\n * helper to toggle the loading state of the array,used by these three toggleXXXLoading\n */\n internal_toggleLoadingArrays: (\n key: keyof ChatStoreState,", + "metadata": { "loc": { "lines": { "from": 157, "to": 179 } } } + }, + { + "pageContent": "action?: string,\n ) => AbortController | undefined;\n /**\n * method to toggle the tool calling loading state\n */\n internal_toggleToolCallingStreaming: (id: string, streaming: boolean[] | undefined) => void;\n /**\n * helper to toggle the loading state of the array,used by these three toggleXXXLoading\n */\n internal_toggleLoadingArrays: (\n key: keyof ChatStoreState,\n loading: boolean,\n id?: string,\n action?: string,\n ) => AbortController | undefined;\n}", + "metadata": { "loc": { "lines": { "from": 169, "to": 184 } } } + }, + { + "pageContent": "const getAgentConfig = () => agentSelectors.currentAgentConfig(useAgentStore.getState());\nconst getAgentChatConfig = () => agentSelectors.currentAgentChatConfig(useAgentStore.getState());", + "metadata": { "loc": { "lines": { "from": 186, "to": 187 } } } + }, + { + "pageContent": "const hasEnabledKnowledge = () => agentSelectors.hasEnabledKnowledge(useAgentStore.getState());\n\nexport const chatMessage: StateCreator<\n ChatStore,\n [['zustand/devtools', never]],\n [],\n ChatMessageAction\n> = (set, get, ...rest) => ({\n ...chatRag(set, get, ...rest),\n\n deleteMessage: async (id) => {\n const message = chatSelectors.getMessageById(id)(get());\n if (!message) return;\n\n let ids = [message.id];\n\n // if the message is a tool calls, then delete all the related messages\n if (message.tools) {\n const toolMessageIds = message.tools.flatMap((tool) => {\n const messages = chatSelectors\n .currentChats(get())\n .filter((m) => m.tool_call_id === tool.id);", + "metadata": { "loc": { "lines": { "from": 188, "to": 209 } } } + }, + { + "pageContent": "let ids = [message.id];\n\n // if the message is a tool calls, then delete all the related messages\n if (message.tools) {\n const toolMessageIds = message.tools.flatMap((tool) => {\n const messages = chatSelectors\n .currentChats(get())\n .filter((m) => m.tool_call_id === tool.id);\n\n return messages.map((m) => m.id);\n });\n ids = ids.concat(toolMessageIds);\n }\n\n get().internal_dispatchMessage({ type: 'deleteMessages', ids });\n await messageService.removeMessages(ids);\n await get().refreshMessages();\n },\n\n deleteToolMessage: async (id) => {\n const message = chatSelectors.getMessageById(id)(get());\n if (!message || message.role !== 'tool') return;", + "metadata": { "loc": { "lines": { "from": 202, "to": 223 } } } + }, + { + "pageContent": "get().internal_dispatchMessage({ type: 'deleteMessages', ids });\n await messageService.removeMessages(ids);\n await get().refreshMessages();\n },\n\n deleteToolMessage: async (id) => {\n const message = chatSelectors.getMessageById(id)(get());\n if (!message || message.role !== 'tool') return;\n\n const removeToolInAssistantMessage = async () => {\n if (!message.parentId) return;\n await get().internal_removeToolToAssistantMessage(message.parentId, message.tool_call_id);\n };\n\n await Promise.all([\n // 1. remove tool message\n get().internal_deleteMessage(id),\n // 2. remove the tool item in the assistant tools\n removeToolInAssistantMessage(),\n ]);\n },", + "metadata": { "loc": { "lines": { "from": 216, "to": 236 } } } + }, + { + "pageContent": "await Promise.all([\n // 1. remove tool message\n get().internal_deleteMessage(id),\n // 2. remove the tool item in the assistant tools\n removeToolInAssistantMessage(),\n ]);\n },\n\n delAndRegenerateMessage: async (id) => {\n const traceId = chatSelectors.getTraceIdByMessageId(id)(get());\n get().internal_resendMessage(id, traceId);\n get().deleteMessage(id);\n\n // trace the delete and regenerate message\n get().internal_traceMessage(id, { eventType: TraceEventType.DeleteAndRegenerateMessage });\n },\n regenerateMessage: async (id: string) => {\n const traceId = chatSelectors.getTraceIdByMessageId(id)(get());\n await get().internal_resendMessage(id, traceId);", + "metadata": { "loc": { "lines": { "from": 230, "to": 248 } } } + }, + { + "pageContent": "// trace the delete and regenerate message\n get().internal_traceMessage(id, { eventType: TraceEventType.DeleteAndRegenerateMessage });\n },\n regenerateMessage: async (id: string) => {\n const traceId = chatSelectors.getTraceIdByMessageId(id)(get());\n await get().internal_resendMessage(id, traceId);\n\n // trace the delete and regenerate message\n get().internal_traceMessage(id, { eventType: TraceEventType.RegenerateMessage });\n },\n clearMessage: async () => {\n const { activeId, activeTopicId, refreshMessages, refreshTopic, switchTopic } = get();\n\n await messageService.removeMessagesByAssistant(activeId, activeTopicId);\n\n if (activeTopicId) {\n await topicService.removeTopic(activeTopicId);\n }\n await refreshTopic();\n await refreshMessages();", + "metadata": { "loc": { "lines": { "from": 243, "to": 262 } } } + }, + { + "pageContent": "await messageService.removeMessagesByAssistant(activeId, activeTopicId);\n\n if (activeTopicId) {\n await topicService.removeTopic(activeTopicId);\n }\n await refreshTopic();\n await refreshMessages();\n\n // after remove topic , go back to default topic\n switchTopic();\n },\n clearAllMessages: async () => {\n const { refreshMessages } = get();\n await messageService.removeAllMessages();\n await refreshMessages();\n },\n sendMessage: async ({ message, files, onlyAddUserMessage, isWelcomeQuestion }) => {\n const { internal_coreProcessMessage, activeTopicId, activeId } = get();\n if (!activeId) return;\n\n const fileIdList = files?.map((f) => f.id);\n\n const hasFile = !!fileIdList && fileIdList.length > 0;", + "metadata": { "loc": { "lines": { "from": 256, "to": 278 } } } + }, + { + "pageContent": "const fileIdList = files?.map((f) => f.id);\n\n const hasFile = !!fileIdList && fileIdList.length > 0;\n\n // if message is empty or no files, then stop\n if (!message && !hasFile) return;\n\n set({ isCreatingMessage: true }, false, 'creatingMessage/start');\n\n const newMessage: CreateMessageParams = {\n content: message,\n // if message has attached with files, then add files to message and the agent\n files: fileIdList,\n role: 'user',\n sessionId: activeId,\n // if there is activeTopicId,then add topicId to message\n topicId: activeTopicId,\n };\n\n const agentConfig = getAgentChatConfig();\n\n let tempMessageId: string | undefined = undefined;\n let newTopicId: string | undefined = undefined;", + "metadata": { "loc": { "lines": { "from": 276, "to": 298 } } } + }, + { + "pageContent": "const agentConfig = getAgentChatConfig();\n\n let tempMessageId: string | undefined = undefined;\n let newTopicId: string | undefined = undefined;\n\n // it should be the default topic, then\n // if autoCreateTopic is enabled, check to whether we need to create a topic\n if (!onlyAddUserMessage && !activeTopicId && agentConfig.enableAutoCreateTopic) {\n // check activeTopic and then auto create topic\n const chats = chatSelectors.currentChats(get());\n\n // we will add two messages (user and assistant), so the finial length should +2\n const featureLength = chats.length + 2;", + "metadata": { "loc": { "lines": { "from": 295, "to": 307 } } } + }, + { + "pageContent": "// we will add two messages (user and assistant), so the finial length should +2\n const featureLength = chats.length + 2;\n\n // if there is no activeTopicId and the feature length is greater than the threshold\n // then create a new topic and active it\n if (!get().activeTopicId && featureLength >= agentConfig.autoCreateTopicThreshold) {\n // we need to create a temp message for optimistic update\n tempMessageId = get().internal_createTmpMessage(newMessage);\n get().internal_toggleMessageLoading(true, tempMessageId);\n\n const topicId = await get().createTopic();\n\n if (topicId) {\n newTopicId = topicId;\n newMessage.topicId = topicId;", + "metadata": { "loc": { "lines": { "from": 306, "to": 320 } } } + }, + { + "pageContent": "const topicId = await get().createTopic();\n\n if (topicId) {\n newTopicId = topicId;\n newMessage.topicId = topicId;\n\n // we need to copy the messages to the new topic or the message will disappear\n const mapKey = chatSelectors.currentChatKey(get());\n const newMaps = {\n ...get().messagesMap,\n [messageMapKey(activeId, topicId)]: get().messagesMap[mapKey],\n };\n set({ messagesMap: newMaps }, false, 'internal_copyMessages');\n\n // get().internal_dispatchMessage({ type: 'deleteMessage', id: tempMessageId });\n get().internal_toggleMessageLoading(false, tempMessageId);", + "metadata": { "loc": { "lines": { "from": 316, "to": 331 } } } + }, + { + "pageContent": "// get().internal_dispatchMessage({ type: 'deleteMessage', id: tempMessageId });\n get().internal_toggleMessageLoading(false, tempMessageId);\n\n // make the topic loading\n get().internal_updateTopicLoading(topicId, true);\n }\n }\n }\n // update assistant update to make it rerank\n useSessionStore.getState().triggerSessionUpdate(get().activeId);\n\n const id = await get().internal_createMessage(newMessage, {\n tempMessageId,\n skipRefresh: !onlyAddUserMessage,\n });\n\n // switch to the new topic if create the new topic\n if (!!newTopicId) {\n await get().switchTopic(newTopicId, true);\n await get().internal_fetchMessages();", + "metadata": { "loc": { "lines": { "from": 330, "to": 349 } } } + }, + { + "pageContent": "const id = await get().internal_createMessage(newMessage, {\n tempMessageId,\n skipRefresh: !onlyAddUserMessage,\n });\n\n // switch to the new topic if create the new topic\n if (!!newTopicId) {\n await get().switchTopic(newTopicId, true);\n await get().internal_fetchMessages();\n\n // delete previous messages\n // remove the temp message map\n const newMaps = { ...get().messagesMap, [messageMapKey(activeId, null)]: [] };\n set({ messagesMap: newMaps }, false, 'internal_copyMessages');\n }\n\n // if only add user message, then stop\n if (onlyAddUserMessage) {\n set({ isCreatingMessage: false }, false, 'creatingMessage/start');\n return;\n }", + "metadata": { "loc": { "lines": { "from": 341, "to": 361 } } } + }, + { + "pageContent": "// delete previous messages\n // remove the temp message map\n const newMaps = { ...get().messagesMap, [messageMapKey(activeId, null)]: [] };\n set({ messagesMap: newMaps }, false, 'internal_copyMessages');\n }\n\n // if only add user message, then stop\n if (onlyAddUserMessage) {\n set({ isCreatingMessage: false }, false, 'creatingMessage/start');\n return;\n }\n\n // Get the current messages to generate AI response\n const messages = chatSelectors.currentChats(get());\n const userFiles = chatSelectors.currentUserFiles(get()).map((f) => f.id);", + "metadata": { "loc": { "lines": { "from": 351, "to": 365 } } } + }, + { + "pageContent": "// if only add user message, then stop\n if (onlyAddUserMessage) {\n set({ isCreatingMessage: false }, false, 'creatingMessage/start');\n return;\n }\n\n // Get the current messages to generate AI response\n const messages = chatSelectors.currentChats(get());\n const userFiles = chatSelectors.currentUserFiles(get()).map((f) => f.id);\n\n await internal_coreProcessMessage(messages, id, {\n isWelcomeQuestion,\n // if there is relative files or enabled knowledge, try with ragQuery\n ragQuery: hasEnabledKnowledge() || userFiles.length > 0 ? message : undefined,\n });\n\n set({ isCreatingMessage: false }, false, 'creatingMessage/stop');", + "metadata": { "loc": { "lines": { "from": 357, "to": 373 } } } + }, + { + "pageContent": "await internal_coreProcessMessage(messages, id, {\n isWelcomeQuestion,\n // if there is relative files or enabled knowledge, try with ragQuery\n ragQuery: hasEnabledKnowledge() || userFiles.length > 0 ? message : undefined,\n });\n\n set({ isCreatingMessage: false }, false, 'creatingMessage/stop');\n\n const summaryTitle = async () => {\n // if autoCreateTopic is false, then stop\n if (!agentConfig.enableAutoCreateTopic) return;\n\n // check activeTopic and then auto update topic title\n if (newTopicId) {\n const chats = chatSelectors.currentChats(get());\n await get().summaryTopicTitle(newTopicId, chats);\n return;\n }\n\n const topic = topicSelectors.currentActiveTopic(get());", + "metadata": { "loc": { "lines": { "from": 367, "to": 386 } } } + }, + { + "pageContent": "// check activeTopic and then auto update topic title\n if (newTopicId) {\n const chats = chatSelectors.currentChats(get());\n await get().summaryTopicTitle(newTopicId, chats);\n return;\n }\n\n const topic = topicSelectors.currentActiveTopic(get());\n\n if (topic && !topic.title) {\n const chats = chatSelectors.currentChats(get());\n await get().summaryTopicTitle(topic.id, chats);\n }\n };\n\n // if there is relative files, then add files to agent\n // only available in server mode\n const addFilesToAgent = async () => {\n if (userFiles.length === 0 || !isServerMode) return;\n\n await useAgentStore.getState().addFilesToAgent(userFiles, false);\n };", + "metadata": { "loc": { "lines": { "from": 379, "to": 400 } } } + }, + { + "pageContent": "// if there is relative files, then add files to agent\n // only available in server mode\n const addFilesToAgent = async () => {\n if (userFiles.length === 0 || !isServerMode) return;\n\n await useAgentStore.getState().addFilesToAgent(userFiles, false);\n };\n\n await Promise.all([summaryTitle(), addFilesToAgent()]);\n },\n addAIMessage: async () => {\n const { internal_createMessage, updateInputMessage, activeTopicId, activeId, inputMessage } =\n get();\n if (!activeId) return;\n\n await internal_createMessage({\n content: inputMessage,\n role: 'assistant',\n sessionId: activeId,\n // if there is activeTopicId,then add topicId to message\n topicId: activeTopicId,\n });", + "metadata": { "loc": { "lines": { "from": 394, "to": 415 } } } + }, + { + "pageContent": "await internal_createMessage({\n content: inputMessage,\n role: 'assistant',\n sessionId: activeId,\n // if there is activeTopicId,then add topicId to message\n topicId: activeTopicId,\n });\n\n updateInputMessage('');\n },\n copyMessage: async (id, content) => {\n await copyToClipboard(content);\n\n get().internal_traceMessage(id, { eventType: TraceEventType.CopyMessage });\n },\n toggleMessageEditing: (id, editing) => {\n set(\n { messageEditingIds: toggleBooleanList(get().messageEditingIds, id, editing) },\n false,\n 'toggleMessageEditing',\n );\n },\n stopGenerateMessage: () => {\n const { abortController, internal_toggleChatLoading } = get();\n if (!abortController) return;\n\n abortController.abort('canceled');", + "metadata": { "loc": { "lines": { "from": 409, "to": 435 } } } + }, + { + "pageContent": "abortController.abort('canceled');\n\n internal_toggleChatLoading(false, undefined, n('stopGenerateMessage') as string);\n },\n\n updateInputMessage: (message) => {\n if (isEqual(message, get().inputMessage)) return;\n\n set({ inputMessage: message }, false, n('updateInputMessage', message));\n },\n modifyMessageContent: async (id, content) => {\n // tracing the diff of update\n // due to message content will change, so we need send trace before update,or will get wrong data\n get().internal_traceMessage(id, {\n eventType: TraceEventType.ModifyMessage,\n nextContent: content,\n });", + "metadata": { "loc": { "lines": { "from": 435, "to": 451 } } } + }, + { + "pageContent": "await get().internal_updateMessageContent(id, content);\n },\n useFetchMessages: (sessionId, activeTopicId) =>\n useClientDataSWR(\n [SWR_USE_FETCH_MESSAGES, sessionId, activeTopicId],\n async ([, sessionId, topicId]: [string, string, string | undefined]) =>\n messageService.getMessages(sessionId, topicId),\n {\n onSuccess: (messages, key) => {\n const nextMap = {\n ...get().messagesMap,\n [messageMapKey(sessionId, activeTopicId)]: messages,\n };\n // no need to update map if the messages have been init and the map is the same\n if (get().messagesInit && isEqual(nextMap, get().messagesMap)) return;", + "metadata": { "loc": { "lines": { "from": 453, "to": 467 } } } + }, + { + "pageContent": "set(\n { messagesInit: true, messagesMap: nextMap },\n false,\n n('useFetchMessages', { messages, queryKey: key }),\n );\n },\n },\n ),\n refreshMessages: async () => {\n await mutate([SWR_USE_FETCH_MESSAGES, get().activeId, get().activeTopicId]);\n },\n\n // the internal process method of the AI message\n internal_coreProcessMessage: async (originalMessages, userMessageId, params) => {\n const { internal_fetchAIChatMessage, triggerToolCalls, refreshMessages, activeTopicId } = get();\n\n // create a new array to avoid the original messages array change\n const messages = [...originalMessages];\n\n const { model, provider } = getAgentConfig();\n\n let fileChunkIds: string[] | undefined;", + "metadata": { "loc": { "lines": { "from": 469, "to": 490 } } } + }, + { + "pageContent": "// create a new array to avoid the original messages array change\n const messages = [...originalMessages];\n\n const { model, provider } = getAgentConfig();\n\n let fileChunkIds: string[] | undefined;\n\n // go into RAG flow if there is ragQuery flag\n if (params?.ragQuery) {\n // 1. get the relative chunks from semantic search\n const chunks = await get().internal_retrieveChunks(\n userMessageId,\n params?.ragQuery,\n // should skip the last content\n messages.map((m) => m.content).slice(0, messages.length - 1),\n );\n console.log('召回 chunks', chunks);\n\n // 2. build the retrieve context messages\n const retrieveContext = chainAnswerWithContext(\n params?.ragQuery,\n chunks.map((c) => c.text as string),\n );", + "metadata": { "loc": { "lines": { "from": 485, "to": 507 } } } + }, + { + "pageContent": "// 2. build the retrieve context messages\n const retrieveContext = chainAnswerWithContext(\n params?.ragQuery,\n chunks.map((c) => c.text as string),\n );\n\n // 3. add the retrieve context messages to the messages history\n if (retrieveContext.messages && retrieveContext.messages?.length > 0) {\n // remove the last message due to the query is in the retrieveContext\n messages.pop();\n retrieveContext.messages?.forEach((m) => messages.push(m as ChatMessage));\n }\n\n fileChunkIds = chunks.map((c) => c.id);\n }\n\n // 2. Add an empty message to place the AI response\n const assistantMessage: CreateMessageParams = {\n role: 'assistant',\n content: LOADING_FLAT,\n fromModel: model,\n fromProvider: provider,", + "metadata": { "loc": { "lines": { "from": 503, "to": 524 } } } + }, + { + "pageContent": "fileChunkIds = chunks.map((c) => c.id);\n }\n\n // 2. Add an empty message to place the AI response\n const assistantMessage: CreateMessageParams = {\n role: 'assistant',\n content: LOADING_FLAT,\n fromModel: model,\n fromProvider: provider,\n\n parentId: userMessageId,\n sessionId: get().activeId,\n topicId: activeTopicId, // if there is activeTopicId,then add it to topicId\n fileChunkIds,\n ragQueryId: userMessageId,\n };\n\n const assistantId = await get().internal_createMessage(assistantMessage);\n\n // 3. fetch the AI response\n const { isFunctionCall } = await internal_fetchAIChatMessage(messages, assistantId, params);", + "metadata": { "loc": { "lines": { "from": 516, "to": 536 } } } + }, + { + "pageContent": "const assistantId = await get().internal_createMessage(assistantMessage);\n\n // 3. fetch the AI response\n const { isFunctionCall } = await internal_fetchAIChatMessage(messages, assistantId, params);\n\n // 4. if it's the function call message, trigger the function method\n if (isFunctionCall) {\n await refreshMessages();\n await triggerToolCalls(assistantId);\n }\n },\n internal_dispatchMessage: (payload) => {\n const { activeId } = get();\n\n if (!activeId) return;\n\n const messages = messagesReducer(chatSelectors.currentChats(get()), payload);\n\n const nextMap = { ...get().messagesMap, [chatSelectors.currentChatKey(get())]: messages };\n\n if (isEqual(nextMap, get().messagesMap)) return;", + "metadata": { "loc": { "lines": { "from": 533, "to": 553 } } } + }, + { + "pageContent": "if (!activeId) return;\n\n const messages = messagesReducer(chatSelectors.currentChats(get()), payload);\n\n const nextMap = { ...get().messagesMap, [chatSelectors.currentChatKey(get())]: messages };\n\n if (isEqual(nextMap, get().messagesMap)) return;\n\n set({ messagesMap: nextMap }, false, { type: `dispatchMessage/${payload.type}`, payload });\n },\n internal_fetchAIChatMessage: async (messages, assistantId, params) => {\n const {\n internal_toggleChatLoading,\n refreshMessages,\n internal_updateMessageContent,\n internal_dispatchMessage,\n internal_toggleToolCallingStreaming,\n } = get();\n\n const abortController = internal_toggleChatLoading(\n true,\n assistantId,\n n('generateMessage(start)', { assistantId, messages }) as string,\n );", + "metadata": { "loc": { "lines": { "from": 547, "to": 570 } } } + }, + { + "pageContent": "const abortController = internal_toggleChatLoading(\n true,\n assistantId,\n n('generateMessage(start)', { assistantId, messages }) as string,\n );\n\n const agentConfig = getAgentConfig();\n const chatConfig = agentConfig.chatConfig;\n\n const compiler = template(chatConfig.inputTemplate, { interpolate: /{{([\\S\\s]+?)}}/g });\n\n // ================================== //\n // messages uniformly preprocess //\n // ================================== //\n\n // 1. slice messages with config\n let preprocessMsgs = chatHelpers.getSlicedMessagesWithConfig(messages, chatConfig);", + "metadata": { "loc": { "lines": { "from": 566, "to": 582 } } } + }, + { + "pageContent": "const compiler = template(chatConfig.inputTemplate, { interpolate: /{{([\\S\\s]+?)}}/g });\n\n // ================================== //\n // messages uniformly preprocess //\n // ================================== //\n\n // 1. slice messages with config\n let preprocessMsgs = chatHelpers.getSlicedMessagesWithConfig(messages, chatConfig);\n\n // 2. replace inputMessage template\n preprocessMsgs = !chatConfig.inputTemplate\n ? preprocessMsgs\n : preprocessMsgs.map((m) => {\n if (m.role === 'user') {\n try {\n return { ...m, content: compiler({ text: m.content }) };\n } catch (error) {\n console.error(error);\n\n return m;\n }\n }\n\n return m;\n });", + "metadata": { "loc": { "lines": { "from": 575, "to": 599 } } } + }, + { + "pageContent": "return m;\n }\n }\n\n return m;\n });\n\n // 3. add systemRole\n if (agentConfig.systemRole) {\n preprocessMsgs.unshift({ content: agentConfig.systemRole, role: 'system' } as ChatMessage);\n }\n\n // 4. handle max_tokens\n agentConfig.params.max_tokens = chatConfig.enableMaxTokens\n ? agentConfig.params.max_tokens\n : undefined;", + "metadata": { "loc": { "lines": { "from": 594, "to": 609 } } } + }, + { + "pageContent": "return m;\n });\n\n // 3. add systemRole\n if (agentConfig.systemRole) {\n preprocessMsgs.unshift({ content: agentConfig.systemRole, role: 'system' } as ChatMessage);\n }\n\n // 4. handle max_tokens\n agentConfig.params.max_tokens = chatConfig.enableMaxTokens\n ? agentConfig.params.max_tokens\n : undefined;\n\n // 5. handle config for the vision model\n // Due to the gpt-4-vision-preview model's default max_tokens is very small\n // we need to set the max_tokens a larger one.\n if (agentConfig.model === 'gpt-4-vision-preview') {\n /* eslint-disable unicorn/no-lonely-if */\n if (!agentConfig.params.max_tokens)\n // refs: https://github.com/lobehub/lobe-chat/issues/837\n agentConfig.params.max_tokens = 2048;\n }", + "metadata": { "loc": { "lines": { "from": 598, "to": 619 } } } + }, + { + "pageContent": "let isFunctionCall = false;\n let msgTraceId: string | undefined;\n let output = '';", + "metadata": { "loc": { "lines": { "from": 621, "to": 623 } } } + }, + { + "pageContent": "await chatService.createAssistantMessageStream({\n abortController,\n params: {\n messages: preprocessMsgs,\n model: agentConfig.model,\n provider: agentConfig.provider,\n ...agentConfig.params,\n plugins: agentConfig.plugins,\n },\n trace: {\n traceId: params?.traceId,\n sessionId: get().activeId,\n topicId: get().activeTopicId,\n traceName: TraceNameMap.Conversation,\n },\n isWelcomeQuestion: params?.isWelcomeQuestion,\n onErrorHandle: async (error) => {\n await messageService.updateMessageError(assistantId, error);\n await refreshMessages();\n },\n onFinish: async (content, { traceId, observationId, toolCalls }) => {\n // if there is traceId, update it\n if (traceId) {", + "metadata": { "loc": { "lines": { "from": 625, "to": 647 } } } + }, + { + "pageContent": "traceName: TraceNameMap.Conversation,\n },\n isWelcomeQuestion: params?.isWelcomeQuestion,\n onErrorHandle: async (error) => {\n await messageService.updateMessageError(assistantId, error);\n await refreshMessages();\n },\n onFinish: async (content, { traceId, observationId, toolCalls }) => {\n // if there is traceId, update it\n if (traceId) {\n msgTraceId = traceId;\n await messageService.updateMessage(assistantId, {\n traceId,\n observationId: observationId ?? undefined,\n });\n }", + "metadata": { "loc": { "lines": { "from": 638, "to": 653 } } } + }, + { + "pageContent": "if (toolCalls && toolCalls.length > 0) {\n internal_toggleToolCallingStreaming(assistantId, undefined);\n }\n\n // update the content after fetch result\n await internal_updateMessageContent(assistantId, content, toolCalls);\n },\n onMessageHandle: async (chunk) => {\n switch (chunk.type) {\n case 'text': {\n output += chunk.text;\n internal_dispatchMessage({\n id: assistantId,\n type: 'updateMessage',\n value: { content: output },\n });\n break;\n }", + "metadata": { "loc": { "lines": { "from": 655, "to": 672 } } } + }, + { + "pageContent": "// is this message is just a tool call\n case 'tool_calls': {\n internal_toggleToolCallingStreaming(assistantId, chunk.isAnimationActives);\n internal_dispatchMessage({\n id: assistantId,\n type: 'updateMessage',\n value: { tools: get().internal_transformToolCalls(chunk.tool_calls) },\n });\n isFunctionCall = true;\n }\n }\n },\n });\n\n internal_toggleChatLoading(false, assistantId, n('generateMessage(end)') as string);\n\n return {\n isFunctionCall,\n traceId: msgTraceId,\n };\n },\n\n internal_resendMessage: async (messageId, traceId) => {\n // 1. 构造所有相关的历史记录\n const chats = chatSelectors.currentChats(get());", + "metadata": { "loc": { "lines": { "from": 674, "to": 698 } } } + }, + { + "pageContent": "internal_toggleChatLoading(false, assistantId, n('generateMessage(end)') as string);\n\n return {\n isFunctionCall,\n traceId: msgTraceId,\n };\n },\n\n internal_resendMessage: async (messageId, traceId) => {\n // 1. 构造所有相关的历史记录\n const chats = chatSelectors.currentChats(get());\n\n const currentIndex = chats.findIndex((c) => c.id === messageId);\n if (currentIndex < 0) return;\n\n const currentMessage = chats[currentIndex];\n\n let contextMessages: ChatMessage[] = [];", + "metadata": { "loc": { "lines": { "from": 688, "to": 705 } } } + }, + { + "pageContent": "const currentIndex = chats.findIndex((c) => c.id === messageId);\n if (currentIndex < 0) return;\n\n const currentMessage = chats[currentIndex];\n\n let contextMessages: ChatMessage[] = [];\n\n switch (currentMessage.role) {\n case 'tool':\n case 'user': {\n contextMessages = chats.slice(0, currentIndex + 1);\n break;\n }\n case 'assistant': {\n // 消息是 AI 发出的因此需要找到它的 user 消息\n const userId = currentMessage.parentId;\n const userIndex = chats.findIndex((c) => c.id === userId);\n // 如果消息没有 parentId,那么同 user/function 模式\n contextMessages = chats.slice(0, userIndex < 0 ? currentIndex + 1 : userIndex + 1);\n break;\n }\n }\n\n if (contextMessages.length <= 0) return;", + "metadata": { "loc": { "lines": { "from": 700, "to": 723 } } } + }, + { + "pageContent": "if (contextMessages.length <= 0) return;\n\n const { internal_coreProcessMessage } = get();\n\n const latestMsg = contextMessages.findLast((s) => s.role === 'user');\n\n if (!latestMsg) return;\n\n await internal_coreProcessMessage(contextMessages, latestMsg.id, {\n traceId,\n ragQuery: currentMessage.content,\n });\n },\n\n internal_updateMessageError: async (id, error) => {\n get().internal_dispatchMessage({ id, type: 'updateMessage', value: { error } });\n await messageService.updateMessage(id, { error });\n await get().refreshMessages();\n },\n internal_updateMessageContent: async (id, content, toolCalls) => {\n const { internal_dispatchMessage, refreshMessages, internal_transformToolCalls } = get();", + "metadata": { "loc": { "lines": { "from": 723, "to": 743 } } } + }, + { + "pageContent": "// Due to the async update method and refresh need about 100ms\n // we need to update the message content at the frontend to avoid the update flick\n // refs: https://medium.com/@kyledeguzmanx/what-are-optimistic-updates-483662c3e171\n if (toolCalls) {\n internal_dispatchMessage({\n id,\n type: 'updateMessage',\n value: { tools: internal_transformToolCalls(toolCalls) },\n });\n } else {\n internal_dispatchMessage({ id, type: 'updateMessage', value: { content } });\n }\n\n await messageService.updateMessage(id, {\n content,\n tools: toolCalls ? internal_transformToolCalls(toolCalls) : undefined,\n });\n await refreshMessages();\n },", + "metadata": { "loc": { "lines": { "from": 745, "to": 763 } } } + }, + { + "pageContent": "await messageService.updateMessage(id, {\n content,\n tools: toolCalls ? internal_transformToolCalls(toolCalls) : undefined,\n });\n await refreshMessages();\n },\n\n internal_createMessage: async (message, context) => {\n const { internal_createTmpMessage, refreshMessages, internal_toggleMessageLoading } = get();\n let tempId = context?.tempMessageId;\n if (!tempId) {\n // use optimistic update to avoid the slow waiting\n tempId = internal_createTmpMessage(message);\n\n internal_toggleMessageLoading(true, tempId);\n }\n\n const id = await messageService.createMessage(message);\n if (!context?.skipRefresh) {\n await refreshMessages();\n }\n\n internal_toggleMessageLoading(false, tempId);\n return id;\n },", + "metadata": { "loc": { "lines": { "from": 758, "to": 782 } } } + }, + { + "pageContent": "internal_toggleMessageLoading(true, tempId);\n }\n\n const id = await messageService.createMessage(message);\n if (!context?.skipRefresh) {\n await refreshMessages();\n }\n\n internal_toggleMessageLoading(false, tempId);\n return id;\n },\n\n internal_fetchMessages: async () => {\n const messages = await messageService.getMessages(get().activeId, get().activeTopicId);\n const nextMap = { ...get().messagesMap, [chatSelectors.currentChatKey(get())]: messages };\n // no need to update map if the messages have been init and the map is the same\n if (get().messagesInit && isEqual(nextMap, get().messagesMap)) return;", + "metadata": { "loc": { "lines": { "from": 772, "to": 788 } } } + }, + { + "pageContent": "internal_fetchMessages: async () => {\n const messages = await messageService.getMessages(get().activeId, get().activeTopicId);\n const nextMap = { ...get().messagesMap, [chatSelectors.currentChatKey(get())]: messages };\n // no need to update map if the messages have been init and the map is the same\n if (get().messagesInit && isEqual(nextMap, get().messagesMap)) return;\n\n set(\n { messagesInit: true, messagesMap: nextMap },\n false,\n n('internal_fetchMessages', { messages }),\n );\n },\n internal_createTmpMessage: (message) => {\n const { internal_dispatchMessage } = get();\n\n // use optimistic update to avoid the slow waiting\n const tempId = 'tmp_' + nanoid();\n internal_dispatchMessage({ type: 'createMessage', id: tempId, value: message });", + "metadata": { "loc": { "lines": { "from": 784, "to": 801 } } } + }, + { + "pageContent": "// use optimistic update to avoid the slow waiting\n const tempId = 'tmp_' + nanoid();\n internal_dispatchMessage({ type: 'createMessage', id: tempId, value: message });\n\n return tempId;\n },\n internal_deleteMessage: async (id: string) => {\n get().internal_dispatchMessage({ type: 'deleteMessage', id });\n await messageService.removeMessage(id);\n await get().refreshMessages();\n },\n internal_traceMessage: async (id, payload) => {\n // tracing the diff of update\n const message = chatSelectors.getMessageById(id)(get());\n if (!message) return;\n\n const traceId = message?.traceId;\n const observationId = message?.observationId;", + "metadata": { "loc": { "lines": { "from": 799, "to": 816 } } } + }, + { + "pageContent": "const traceId = message?.traceId;\n const observationId = message?.observationId;\n\n if (traceId && message?.role === 'assistant') {\n traceService\n .traceEvent({ traceId, observationId, content: message.content, ...payload })\n .catch();\n }\n },", + "metadata": { "loc": { "lines": { "from": 815, "to": 823 } } } + }, + { + "pageContent": "// ----- Loading ------- //\n internal_toggleMessageLoading: (loading, id) => {\n set(\n {\n messageLoadingIds: toggleBooleanList(get().messageLoadingIds, id, loading),\n },\n false,\n 'internal_toggleMessageLoading',\n );\n },\n internal_toggleChatLoading: (loading, id, action) => {\n return get().internal_toggleLoadingArrays('chatLoadingIds', loading, id, action);\n },\n internal_toggleToolCallingStreaming: (id, streaming) => {\n set(\n {\n toolCallingStreamIds: produce(get().toolCallingStreamIds, (draft) => {\n if (!!streaming) {\n draft[id] = streaming;\n } else {\n delete draft[id];\n }\n }),\n },", + "metadata": { "loc": { "lines": { "from": 825, "to": 848 } } } + }, + { + "pageContent": "false,\n 'toggleToolCallingStreaming',\n );\n },\n internal_toggleLoadingArrays: (key, loading, id, action) => {\n if (loading) {\n window.addEventListener('beforeunload', preventLeavingFn);\n\n const abortController = new AbortController();\n set(\n {\n abortController,\n [key]: toggleBooleanList(get()[key] as string[], id!, loading),\n },\n false,\n action,\n );\n\n return abortController;\n } else {\n if (!id) {\n set({ abortController: undefined, [key]: [] }, false, action);\n } else\n set(\n {\n abortController: undefined,\n [key]: toggleBooleanList(get()[key] as string[], id, loading),\n },\n false,\n action,\n );", + "metadata": { "loc": { "lines": { "from": 850, "to": 880 } } } + }, + { + "pageContent": "return abortController;\n } else {\n if (!id) {\n set({ abortController: undefined, [key]: [] }, false, action);\n } else\n set(\n {\n abortController: undefined,\n [key]: toggleBooleanList(get()[key] as string[], id, loading),\n },\n false,\n action,\n );\n\n window.removeEventListener('beforeunload', preventLeavingFn);\n }\n },\n});", + "metadata": { "loc": { "lines": { "from": 868, "to": 885 } } } + } +] diff --git a/src/libs/langchain/loaders/code/__tests__/long.txt b/src/libs/langchain/loaders/code/__tests__/long.txt new file mode 100644 index 000000000000..c58b87d5bb5c --- /dev/null +++ b/src/libs/langchain/loaders/code/__tests__/long.txt @@ -0,0 +1,885 @@ +import { copyToClipboard } from '@lobehub/ui'; +import isEqual from 'fast-deep-equal'; +import { produce } from 'immer'; +import { template } from 'lodash-es'; +import { SWRResponse, mutate } from 'swr'; +import { StateCreator } from 'zustand/vanilla'; + +import { chainAnswerWithContext } from '@/chains/answerWithContext'; +import { LOADING_FLAT } from '@/const/message'; +import { TraceEventType, TraceNameMap } from '@/const/trace'; +import { isServerMode } from '@/const/version'; +import { useClientDataSWR } from '@/libs/swr'; +import { chatService } from '@/services/chat'; +import { messageService } from '@/services/message'; +import { topicService } from '@/services/topic'; +import { traceService } from '@/services/trace'; +import { useAgentStore } from '@/store/agent'; +import { agentSelectors } from '@/store/agent/selectors'; +import { chatHelpers } from '@/store/chat/helpers'; +import { messageMapKey } from '@/store/chat/slices/message/utils'; +import { ChatStore } from '@/store/chat/store'; +import { useSessionStore } from '@/store/session'; +import { UploadFileItem } from '@/types/files/upload'; +import { + ChatMessage, + ChatMessageError, + CreateMessageParams, + MessageToolCall, +} from '@/types/message'; +import { TraceEventPayloads } from '@/types/trace'; +import { setNamespace } from '@/utils/storeDebug'; +import { nanoid } from '@/utils/uuid'; + +import type { ChatStoreState } from '../../initialState'; +import { chatSelectors, topicSelectors } from '../../selectors'; +import { preventLeavingFn, toggleBooleanList } from '../../utils'; +import { ChatRAGAction, chatRag } from './actions/rag'; +import { MessageDispatch, messagesReducer } from './reducer'; + +const n = setNamespace('m'); + +const SWR_USE_FETCH_MESSAGES = 'SWR_USE_FETCH_MESSAGES'; + +export interface SendMessageParams { + message: string; + files?: UploadFileItem[]; + onlyAddUserMessage?: boolean; + /** + * + * https://github.com/lobehub/lobe-chat/pull/2086 + */ + isWelcomeQuestion?: boolean; +} + +interface ProcessMessageParams { + traceId?: string; + isWelcomeQuestion?: boolean; + /** + * the RAG query content, should be embedding and used in the semantic search + */ + ragQuery?: string; +} + +export interface ChatMessageAction extends ChatRAGAction { + // create + sendMessage: (params: SendMessageParams) => Promise; + addAIMessage: () => Promise; + /** + * regenerate message + * trace enabled + * @param id + */ + regenerateMessage: (id: string) => Promise; + + // delete + /** + * clear message on the active session + */ + clearMessage: () => Promise; + deleteMessage: (id: string) => Promise; + deleteToolMessage: (id: string) => Promise; + delAndRegenerateMessage: (id: string) => Promise; + clearAllMessages: () => Promise; + // update + updateInputMessage: (message: string) => void; + modifyMessageContent: (id: string, content: string) => Promise; + // query + useFetchMessages: (sessionId: string, topicId?: string) => SWRResponse; + stopGenerateMessage: () => void; + copyMessage: (id: string, content: string) => Promise; + refreshMessages: () => Promise; + toggleMessageEditing: (id: string, editing: boolean) => void; + + // ========= ↓ Internal Method ↓ ========== // + // ========================================== // + // ========================================== // + + /** + * update message at the frontend point + * this method will not update messages to database + */ + internal_dispatchMessage: (payload: MessageDispatch) => void; + /** + * core process of the AI message (include preprocess and postprocess) + */ + internal_coreProcessMessage: ( + messages: ChatMessage[], + parentId: string, + params?: ProcessMessageParams, + ) => Promise; + /** + * the method to fetch the AI message + */ + internal_fetchAIChatMessage: ( + messages: ChatMessage[], + assistantMessageId: string, + params?: ProcessMessageParams, + ) => Promise<{ + isFunctionCall: boolean; + traceId?: string; + }>; + + /** + * update the message content with optimistic update + * a method used by other action + */ + internal_updateMessageContent: ( + id: string, + content: string, + toolCalls?: MessageToolCall[], + ) => Promise; + /** + * update the message error with optimistic update + */ + internal_updateMessageError: (id: string, error: ChatMessageError | null) => Promise; + /** + * create a message with optimistic update + */ + internal_createMessage: ( + params: CreateMessageParams, + context?: { tempMessageId?: string; skipRefresh?: boolean }, + ) => Promise; + /** + * create a temp message for optimistic update + * otherwise the message will be too slow to show + */ + internal_createTmpMessage: (params: CreateMessageParams) => string; + /** + * delete the message content with optimistic update + */ + internal_deleteMessage: (id: string) => Promise; + internal_resendMessage: (id: string, traceId?: string) => Promise; + + internal_fetchMessages: () => Promise; + internal_traceMessage: (id: string, payload: TraceEventPayloads) => Promise; + + /** + * method to toggle message create loading state + * the AI message status is creating -> generating + * other message role like user and tool , only this method need to be called + */ + internal_toggleMessageLoading: (loading: boolean, id: string) => void; + /** + * method to toggle ai message generating loading + */ + internal_toggleChatLoading: ( + loading: boolean, + id?: string, + action?: string, + ) => AbortController | undefined; + /** + * method to toggle the tool calling loading state + */ + internal_toggleToolCallingStreaming: (id: string, streaming: boolean[] | undefined) => void; + /** + * helper to toggle the loading state of the array,used by these three toggleXXXLoading + */ + internal_toggleLoadingArrays: ( + key: keyof ChatStoreState, + loading: boolean, + id?: string, + action?: string, + ) => AbortController | undefined; +} + +const getAgentConfig = () => agentSelectors.currentAgentConfig(useAgentStore.getState()); +const getAgentChatConfig = () => agentSelectors.currentAgentChatConfig(useAgentStore.getState()); +const hasEnabledKnowledge = () => agentSelectors.hasEnabledKnowledge(useAgentStore.getState()); + +export const chatMessage: StateCreator< + ChatStore, + [['zustand/devtools', never]], + [], + ChatMessageAction +> = (set, get, ...rest) => ({ + ...chatRag(set, get, ...rest), + + deleteMessage: async (id) => { + const message = chatSelectors.getMessageById(id)(get()); + if (!message) return; + + let ids = [message.id]; + + // if the message is a tool calls, then delete all the related messages + if (message.tools) { + const toolMessageIds = message.tools.flatMap((tool) => { + const messages = chatSelectors + .currentChats(get()) + .filter((m) => m.tool_call_id === tool.id); + + return messages.map((m) => m.id); + }); + ids = ids.concat(toolMessageIds); + } + + get().internal_dispatchMessage({ type: 'deleteMessages', ids }); + await messageService.removeMessages(ids); + await get().refreshMessages(); + }, + + deleteToolMessage: async (id) => { + const message = chatSelectors.getMessageById(id)(get()); + if (!message || message.role !== 'tool') return; + + const removeToolInAssistantMessage = async () => { + if (!message.parentId) return; + await get().internal_removeToolToAssistantMessage(message.parentId, message.tool_call_id); + }; + + await Promise.all([ + // 1. remove tool message + get().internal_deleteMessage(id), + // 2. remove the tool item in the assistant tools + removeToolInAssistantMessage(), + ]); + }, + + delAndRegenerateMessage: async (id) => { + const traceId = chatSelectors.getTraceIdByMessageId(id)(get()); + get().internal_resendMessage(id, traceId); + get().deleteMessage(id); + + // trace the delete and regenerate message + get().internal_traceMessage(id, { eventType: TraceEventType.DeleteAndRegenerateMessage }); + }, + regenerateMessage: async (id: string) => { + const traceId = chatSelectors.getTraceIdByMessageId(id)(get()); + await get().internal_resendMessage(id, traceId); + + // trace the delete and regenerate message + get().internal_traceMessage(id, { eventType: TraceEventType.RegenerateMessage }); + }, + clearMessage: async () => { + const { activeId, activeTopicId, refreshMessages, refreshTopic, switchTopic } = get(); + + await messageService.removeMessagesByAssistant(activeId, activeTopicId); + + if (activeTopicId) { + await topicService.removeTopic(activeTopicId); + } + await refreshTopic(); + await refreshMessages(); + + // after remove topic , go back to default topic + switchTopic(); + }, + clearAllMessages: async () => { + const { refreshMessages } = get(); + await messageService.removeAllMessages(); + await refreshMessages(); + }, + sendMessage: async ({ message, files, onlyAddUserMessage, isWelcomeQuestion }) => { + const { internal_coreProcessMessage, activeTopicId, activeId } = get(); + if (!activeId) return; + + const fileIdList = files?.map((f) => f.id); + + const hasFile = !!fileIdList && fileIdList.length > 0; + + // if message is empty or no files, then stop + if (!message && !hasFile) return; + + set({ isCreatingMessage: true }, false, 'creatingMessage/start'); + + const newMessage: CreateMessageParams = { + content: message, + // if message has attached with files, then add files to message and the agent + files: fileIdList, + role: 'user', + sessionId: activeId, + // if there is activeTopicId,then add topicId to message + topicId: activeTopicId, + }; + + const agentConfig = getAgentChatConfig(); + + let tempMessageId: string | undefined = undefined; + let newTopicId: string | undefined = undefined; + + // it should be the default topic, then + // if autoCreateTopic is enabled, check to whether we need to create a topic + if (!onlyAddUserMessage && !activeTopicId && agentConfig.enableAutoCreateTopic) { + // check activeTopic and then auto create topic + const chats = chatSelectors.currentChats(get()); + + // we will add two messages (user and assistant), so the finial length should +2 + const featureLength = chats.length + 2; + + // if there is no activeTopicId and the feature length is greater than the threshold + // then create a new topic and active it + if (!get().activeTopicId && featureLength >= agentConfig.autoCreateTopicThreshold) { + // we need to create a temp message for optimistic update + tempMessageId = get().internal_createTmpMessage(newMessage); + get().internal_toggleMessageLoading(true, tempMessageId); + + const topicId = await get().createTopic(); + + if (topicId) { + newTopicId = topicId; + newMessage.topicId = topicId; + + // we need to copy the messages to the new topic or the message will disappear + const mapKey = chatSelectors.currentChatKey(get()); + const newMaps = { + ...get().messagesMap, + [messageMapKey(activeId, topicId)]: get().messagesMap[mapKey], + }; + set({ messagesMap: newMaps }, false, 'internal_copyMessages'); + + // get().internal_dispatchMessage({ type: 'deleteMessage', id: tempMessageId }); + get().internal_toggleMessageLoading(false, tempMessageId); + + // make the topic loading + get().internal_updateTopicLoading(topicId, true); + } + } + } + // update assistant update to make it rerank + useSessionStore.getState().triggerSessionUpdate(get().activeId); + + const id = await get().internal_createMessage(newMessage, { + tempMessageId, + skipRefresh: !onlyAddUserMessage, + }); + + // switch to the new topic if create the new topic + if (!!newTopicId) { + await get().switchTopic(newTopicId, true); + await get().internal_fetchMessages(); + + // delete previous messages + // remove the temp message map + const newMaps = { ...get().messagesMap, [messageMapKey(activeId, null)]: [] }; + set({ messagesMap: newMaps }, false, 'internal_copyMessages'); + } + + // if only add user message, then stop + if (onlyAddUserMessage) { + set({ isCreatingMessage: false }, false, 'creatingMessage/start'); + return; + } + + // Get the current messages to generate AI response + const messages = chatSelectors.currentChats(get()); + const userFiles = chatSelectors.currentUserFiles(get()).map((f) => f.id); + + await internal_coreProcessMessage(messages, id, { + isWelcomeQuestion, + // if there is relative files or enabled knowledge, try with ragQuery + ragQuery: hasEnabledKnowledge() || userFiles.length > 0 ? message : undefined, + }); + + set({ isCreatingMessage: false }, false, 'creatingMessage/stop'); + + const summaryTitle = async () => { + // if autoCreateTopic is false, then stop + if (!agentConfig.enableAutoCreateTopic) return; + + // check activeTopic and then auto update topic title + if (newTopicId) { + const chats = chatSelectors.currentChats(get()); + await get().summaryTopicTitle(newTopicId, chats); + return; + } + + const topic = topicSelectors.currentActiveTopic(get()); + + if (topic && !topic.title) { + const chats = chatSelectors.currentChats(get()); + await get().summaryTopicTitle(topic.id, chats); + } + }; + + // if there is relative files, then add files to agent + // only available in server mode + const addFilesToAgent = async () => { + if (userFiles.length === 0 || !isServerMode) return; + + await useAgentStore.getState().addFilesToAgent(userFiles, false); + }; + + await Promise.all([summaryTitle(), addFilesToAgent()]); + }, + addAIMessage: async () => { + const { internal_createMessage, updateInputMessage, activeTopicId, activeId, inputMessage } = + get(); + if (!activeId) return; + + await internal_createMessage({ + content: inputMessage, + role: 'assistant', + sessionId: activeId, + // if there is activeTopicId,then add topicId to message + topicId: activeTopicId, + }); + + updateInputMessage(''); + }, + copyMessage: async (id, content) => { + await copyToClipboard(content); + + get().internal_traceMessage(id, { eventType: TraceEventType.CopyMessage }); + }, + toggleMessageEditing: (id, editing) => { + set( + { messageEditingIds: toggleBooleanList(get().messageEditingIds, id, editing) }, + false, + 'toggleMessageEditing', + ); + }, + stopGenerateMessage: () => { + const { abortController, internal_toggleChatLoading } = get(); + if (!abortController) return; + + abortController.abort('canceled'); + + internal_toggleChatLoading(false, undefined, n('stopGenerateMessage') as string); + }, + + updateInputMessage: (message) => { + if (isEqual(message, get().inputMessage)) return; + + set({ inputMessage: message }, false, n('updateInputMessage', message)); + }, + modifyMessageContent: async (id, content) => { + // tracing the diff of update + // due to message content will change, so we need send trace before update,or will get wrong data + get().internal_traceMessage(id, { + eventType: TraceEventType.ModifyMessage, + nextContent: content, + }); + + await get().internal_updateMessageContent(id, content); + }, + useFetchMessages: (sessionId, activeTopicId) => + useClientDataSWR( + [SWR_USE_FETCH_MESSAGES, sessionId, activeTopicId], + async ([, sessionId, topicId]: [string, string, string | undefined]) => + messageService.getMessages(sessionId, topicId), + { + onSuccess: (messages, key) => { + const nextMap = { + ...get().messagesMap, + [messageMapKey(sessionId, activeTopicId)]: messages, + }; + // no need to update map if the messages have been init and the map is the same + if (get().messagesInit && isEqual(nextMap, get().messagesMap)) return; + + set( + { messagesInit: true, messagesMap: nextMap }, + false, + n('useFetchMessages', { messages, queryKey: key }), + ); + }, + }, + ), + refreshMessages: async () => { + await mutate([SWR_USE_FETCH_MESSAGES, get().activeId, get().activeTopicId]); + }, + + // the internal process method of the AI message + internal_coreProcessMessage: async (originalMessages, userMessageId, params) => { + const { internal_fetchAIChatMessage, triggerToolCalls, refreshMessages, activeTopicId } = get(); + + // create a new array to avoid the original messages array change + const messages = [...originalMessages]; + + const { model, provider } = getAgentConfig(); + + let fileChunkIds: string[] | undefined; + + // go into RAG flow if there is ragQuery flag + if (params?.ragQuery) { + // 1. get the relative chunks from semantic search + const chunks = await get().internal_retrieveChunks( + userMessageId, + params?.ragQuery, + // should skip the last content + messages.map((m) => m.content).slice(0, messages.length - 1), + ); + console.log('召回 chunks', chunks); + + // 2. build the retrieve context messages + const retrieveContext = chainAnswerWithContext( + params?.ragQuery, + chunks.map((c) => c.text as string), + ); + + // 3. add the retrieve context messages to the messages history + if (retrieveContext.messages && retrieveContext.messages?.length > 0) { + // remove the last message due to the query is in the retrieveContext + messages.pop(); + retrieveContext.messages?.forEach((m) => messages.push(m as ChatMessage)); + } + + fileChunkIds = chunks.map((c) => c.id); + } + + // 2. Add an empty message to place the AI response + const assistantMessage: CreateMessageParams = { + role: 'assistant', + content: LOADING_FLAT, + fromModel: model, + fromProvider: provider, + + parentId: userMessageId, + sessionId: get().activeId, + topicId: activeTopicId, // if there is activeTopicId,then add it to topicId + fileChunkIds, + ragQueryId: userMessageId, + }; + + const assistantId = await get().internal_createMessage(assistantMessage); + + // 3. fetch the AI response + const { isFunctionCall } = await internal_fetchAIChatMessage(messages, assistantId, params); + + // 4. if it's the function call message, trigger the function method + if (isFunctionCall) { + await refreshMessages(); + await triggerToolCalls(assistantId); + } + }, + internal_dispatchMessage: (payload) => { + const { activeId } = get(); + + if (!activeId) return; + + const messages = messagesReducer(chatSelectors.currentChats(get()), payload); + + const nextMap = { ...get().messagesMap, [chatSelectors.currentChatKey(get())]: messages }; + + if (isEqual(nextMap, get().messagesMap)) return; + + set({ messagesMap: nextMap }, false, { type: `dispatchMessage/${payload.type}`, payload }); + }, + internal_fetchAIChatMessage: async (messages, assistantId, params) => { + const { + internal_toggleChatLoading, + refreshMessages, + internal_updateMessageContent, + internal_dispatchMessage, + internal_toggleToolCallingStreaming, + } = get(); + + const abortController = internal_toggleChatLoading( + true, + assistantId, + n('generateMessage(start)', { assistantId, messages }) as string, + ); + + const agentConfig = getAgentConfig(); + const chatConfig = agentConfig.chatConfig; + + const compiler = template(chatConfig.inputTemplate, { interpolate: /{{([\S\s]+?)}}/g }); + + // ================================== // + // messages uniformly preprocess // + // ================================== // + + // 1. slice messages with config + let preprocessMsgs = chatHelpers.getSlicedMessagesWithConfig(messages, chatConfig); + + // 2. replace inputMessage template + preprocessMsgs = !chatConfig.inputTemplate + ? preprocessMsgs + : preprocessMsgs.map((m) => { + if (m.role === 'user') { + try { + return { ...m, content: compiler({ text: m.content }) }; + } catch (error) { + console.error(error); + + return m; + } + } + + return m; + }); + + // 3. add systemRole + if (agentConfig.systemRole) { + preprocessMsgs.unshift({ content: agentConfig.systemRole, role: 'system' } as ChatMessage); + } + + // 4. handle max_tokens + agentConfig.params.max_tokens = chatConfig.enableMaxTokens + ? agentConfig.params.max_tokens + : undefined; + + // 5. handle config for the vision model + // Due to the gpt-4-vision-preview model's default max_tokens is very small + // we need to set the max_tokens a larger one. + if (agentConfig.model === 'gpt-4-vision-preview') { + /* eslint-disable unicorn/no-lonely-if */ + if (!agentConfig.params.max_tokens) + // refs: https://github.com/lobehub/lobe-chat/issues/837 + agentConfig.params.max_tokens = 2048; + } + + let isFunctionCall = false; + let msgTraceId: string | undefined; + let output = ''; + + await chatService.createAssistantMessageStream({ + abortController, + params: { + messages: preprocessMsgs, + model: agentConfig.model, + provider: agentConfig.provider, + ...agentConfig.params, + plugins: agentConfig.plugins, + }, + trace: { + traceId: params?.traceId, + sessionId: get().activeId, + topicId: get().activeTopicId, + traceName: TraceNameMap.Conversation, + }, + isWelcomeQuestion: params?.isWelcomeQuestion, + onErrorHandle: async (error) => { + await messageService.updateMessageError(assistantId, error); + await refreshMessages(); + }, + onFinish: async (content, { traceId, observationId, toolCalls }) => { + // if there is traceId, update it + if (traceId) { + msgTraceId = traceId; + await messageService.updateMessage(assistantId, { + traceId, + observationId: observationId ?? undefined, + }); + } + + if (toolCalls && toolCalls.length > 0) { + internal_toggleToolCallingStreaming(assistantId, undefined); + } + + // update the content after fetch result + await internal_updateMessageContent(assistantId, content, toolCalls); + }, + onMessageHandle: async (chunk) => { + switch (chunk.type) { + case 'text': { + output += chunk.text; + internal_dispatchMessage({ + id: assistantId, + type: 'updateMessage', + value: { content: output }, + }); + break; + } + + // is this message is just a tool call + case 'tool_calls': { + internal_toggleToolCallingStreaming(assistantId, chunk.isAnimationActives); + internal_dispatchMessage({ + id: assistantId, + type: 'updateMessage', + value: { tools: get().internal_transformToolCalls(chunk.tool_calls) }, + }); + isFunctionCall = true; + } + } + }, + }); + + internal_toggleChatLoading(false, assistantId, n('generateMessage(end)') as string); + + return { + isFunctionCall, + traceId: msgTraceId, + }; + }, + + internal_resendMessage: async (messageId, traceId) => { + // 1. 构造所有相关的历史记录 + const chats = chatSelectors.currentChats(get()); + + const currentIndex = chats.findIndex((c) => c.id === messageId); + if (currentIndex < 0) return; + + const currentMessage = chats[currentIndex]; + + let contextMessages: ChatMessage[] = []; + + switch (currentMessage.role) { + case 'tool': + case 'user': { + contextMessages = chats.slice(0, currentIndex + 1); + break; + } + case 'assistant': { + // 消息是 AI 发出的因此需要找到它的 user 消息 + const userId = currentMessage.parentId; + const userIndex = chats.findIndex((c) => c.id === userId); + // 如果消息没有 parentId,那么同 user/function 模式 + contextMessages = chats.slice(0, userIndex < 0 ? currentIndex + 1 : userIndex + 1); + break; + } + } + + if (contextMessages.length <= 0) return; + + const { internal_coreProcessMessage } = get(); + + const latestMsg = contextMessages.findLast((s) => s.role === 'user'); + + if (!latestMsg) return; + + await internal_coreProcessMessage(contextMessages, latestMsg.id, { + traceId, + ragQuery: currentMessage.content, + }); + }, + + internal_updateMessageError: async (id, error) => { + get().internal_dispatchMessage({ id, type: 'updateMessage', value: { error } }); + await messageService.updateMessage(id, { error }); + await get().refreshMessages(); + }, + internal_updateMessageContent: async (id, content, toolCalls) => { + const { internal_dispatchMessage, refreshMessages, internal_transformToolCalls } = get(); + + // Due to the async update method and refresh need about 100ms + // we need to update the message content at the frontend to avoid the update flick + // refs: https://medium.com/@kyledeguzmanx/what-are-optimistic-updates-483662c3e171 + if (toolCalls) { + internal_dispatchMessage({ + id, + type: 'updateMessage', + value: { tools: internal_transformToolCalls(toolCalls) }, + }); + } else { + internal_dispatchMessage({ id, type: 'updateMessage', value: { content } }); + } + + await messageService.updateMessage(id, { + content, + tools: toolCalls ? internal_transformToolCalls(toolCalls) : undefined, + }); + await refreshMessages(); + }, + + internal_createMessage: async (message, context) => { + const { internal_createTmpMessage, refreshMessages, internal_toggleMessageLoading } = get(); + let tempId = context?.tempMessageId; + if (!tempId) { + // use optimistic update to avoid the slow waiting + tempId = internal_createTmpMessage(message); + + internal_toggleMessageLoading(true, tempId); + } + + const id = await messageService.createMessage(message); + if (!context?.skipRefresh) { + await refreshMessages(); + } + + internal_toggleMessageLoading(false, tempId); + return id; + }, + + internal_fetchMessages: async () => { + const messages = await messageService.getMessages(get().activeId, get().activeTopicId); + const nextMap = { ...get().messagesMap, [chatSelectors.currentChatKey(get())]: messages }; + // no need to update map if the messages have been init and the map is the same + if (get().messagesInit && isEqual(nextMap, get().messagesMap)) return; + + set( + { messagesInit: true, messagesMap: nextMap }, + false, + n('internal_fetchMessages', { messages }), + ); + }, + internal_createTmpMessage: (message) => { + const { internal_dispatchMessage } = get(); + + // use optimistic update to avoid the slow waiting + const tempId = 'tmp_' + nanoid(); + internal_dispatchMessage({ type: 'createMessage', id: tempId, value: message }); + + return tempId; + }, + internal_deleteMessage: async (id: string) => { + get().internal_dispatchMessage({ type: 'deleteMessage', id }); + await messageService.removeMessage(id); + await get().refreshMessages(); + }, + internal_traceMessage: async (id, payload) => { + // tracing the diff of update + const message = chatSelectors.getMessageById(id)(get()); + if (!message) return; + + const traceId = message?.traceId; + const observationId = message?.observationId; + + if (traceId && message?.role === 'assistant') { + traceService + .traceEvent({ traceId, observationId, content: message.content, ...payload }) + .catch(); + } + }, + + // ----- Loading ------- // + internal_toggleMessageLoading: (loading, id) => { + set( + { + messageLoadingIds: toggleBooleanList(get().messageLoadingIds, id, loading), + }, + false, + 'internal_toggleMessageLoading', + ); + }, + internal_toggleChatLoading: (loading, id, action) => { + return get().internal_toggleLoadingArrays('chatLoadingIds', loading, id, action); + }, + internal_toggleToolCallingStreaming: (id, streaming) => { + set( + { + toolCallingStreamIds: produce(get().toolCallingStreamIds, (draft) => { + if (!!streaming) { + draft[id] = streaming; + } else { + delete draft[id]; + } + }), + }, + + false, + 'toggleToolCallingStreaming', + ); + }, + internal_toggleLoadingArrays: (key, loading, id, action) => { + if (loading) { + window.addEventListener('beforeunload', preventLeavingFn); + + const abortController = new AbortController(); + set( + { + abortController, + [key]: toggleBooleanList(get()[key] as string[], id!, loading), + }, + false, + action, + ); + + return abortController; + } else { + if (!id) { + set({ abortController: undefined, [key]: [] }, false, action); + } else + set( + { + abortController: undefined, + [key]: toggleBooleanList(get()[key] as string[], id, loading), + }, + false, + action, + ); + + window.removeEventListener('beforeunload', preventLeavingFn); + } + }, +}); diff --git a/src/libs/langchain/loaders/code/index.ts b/src/libs/langchain/loaders/code/index.ts new file mode 100644 index 000000000000..89a64d671385 --- /dev/null +++ b/src/libs/langchain/loaders/code/index.ts @@ -0,0 +1,15 @@ +import { + RecursiveCharacterTextSplitter, + SupportedTextSplitterLanguage, +} from 'langchain/text_splitter'; + +import { loaderConfig } from '@/libs/langchain/loaders/config'; + +export const CodeLoader = async (text: string, language: string) => { + const splitter = RecursiveCharacterTextSplitter.fromLanguage( + language as SupportedTextSplitterLanguage, + loaderConfig, + ); + + return await splitter.createDocuments([text]); +}; diff --git a/src/libs/langchain/loaders/config.ts b/src/libs/langchain/loaders/config.ts new file mode 100644 index 000000000000..3be991fc8c69 --- /dev/null +++ b/src/libs/langchain/loaders/config.ts @@ -0,0 +1,6 @@ +const getLoaderConfig = () => ({ + chunkOverlap: 400, + chunkSize: 800, +}); + +export const loaderConfig = getLoaderConfig(); diff --git a/src/libs/langchain/loaders/docx/index.ts b/src/libs/langchain/loaders/docx/index.ts new file mode 100644 index 000000000000..83ed8a0c7b7a --- /dev/null +++ b/src/libs/langchain/loaders/docx/index.ts @@ -0,0 +1,13 @@ +import { DocxLoader as Loader } from '@langchain/community/document_loaders/fs/docx'; +import { RecursiveCharacterTextSplitter } from 'langchain/text_splitter'; + +import { loaderConfig } from '../config'; + +export const DocxLoader = async (fileBlob: Blob | string) => { + const loader = new Loader(fileBlob); + + const splitter = new RecursiveCharacterTextSplitter(loaderConfig); + const documents = await loader.load(); + + return await splitter.splitDocuments(documents); +}; diff --git a/src/libs/langchain/loaders/index.ts b/src/libs/langchain/loaders/index.ts new file mode 100644 index 000000000000..d120afcab195 --- /dev/null +++ b/src/libs/langchain/loaders/index.ts @@ -0,0 +1,98 @@ +import { + SupportedTextSplitterLanguage, + SupportedTextSplitterLanguages, +} from 'langchain/text_splitter'; + +import { LANGCHAIN_SUPPORT_TEXT_LIST } from '@/libs/langchain/file'; +import { LangChainLoaderType } from '@/libs/langchain/types'; + +import { CodeLoader } from './code'; +import { DocxLoader } from './docx'; +import { MarkdownLoader } from './markdown'; +import { PdfLoader } from './pdf'; +import { PPTXLoader } from './pptx'; +import { TextLoader } from './txt'; + +class LangChainError extends Error { + constructor(message: string) { + super(message); + this.name = 'LangChainChunkingError'; + } +} + +export class ChunkingLoader { + partitionContent = async (filename: string, content: Uint8Array) => { + try { + const fileBlob = new Blob([Buffer.from(content)]); + const txt = this.uint8ArrayToString(content); + + const type = this.getType(filename); + + switch (type) { + case 'code': { + const ext = filename.split('.').pop(); + return await CodeLoader(txt, ext!); + } + + case 'ppt': { + return await PPTXLoader(fileBlob); + } + + case 'pdf': { + return await PdfLoader(fileBlob); + } + + case 'markdown': { + return await MarkdownLoader(txt); + } + + case 'doc': { + return await DocxLoader(fileBlob); + } + + case 'text': { + return await TextLoader(txt); + } + + default: { + throw new Error( + 'Unsupported file type, please check your file is a supported type, or just create an issue.', + ); + } + } + } catch (e) { + throw new LangChainError((e as Error).message); + } + }; + + private getType = (filename: string): LangChainLoaderType | undefined => { + if (filename.endsWith('pptx')) { + return 'ppt'; + } + + if (filename.endsWith('docx') || filename.endsWith('doc')) { + return 'doc'; + } + + if (filename.endsWith('pdf')) { + return 'pdf'; + } + + if (filename.endsWith('md') || filename.endsWith('mdx')) { + return 'markdown'; + } + + const ext = filename.split('.').pop(); + + if (ext && SupportedTextSplitterLanguages.includes(ext as SupportedTextSplitterLanguage)) { + return 'code'; + } + + if (ext && LANGCHAIN_SUPPORT_TEXT_LIST.includes(ext)) return 'text'; + }; + + private uint8ArrayToString(uint8Array: Uint8Array) { + const decoder = new TextDecoder(); + return decoder.decode(uint8Array); + } +} diff --git a/src/libs/langchain/loaders/markdown/__tests__/demo.mdx b/src/libs/langchain/loaders/markdown/__tests__/demo.mdx new file mode 100644 index 000000000000..7cac957fe31a --- /dev/null +++ b/src/libs/langchain/loaders/markdown/__tests__/demo.mdx @@ -0,0 +1,325 @@ +import Tab from '@components/markdown/Tab.astro'; +import Tabs from '@components/markdown/Tabs.astro'; +import IsSupportedChipGroup from '@components/markdown/IsSupportedChipGroup.astro'; +import Callout from '@components/markdown/Callout.astro'; +import Section from '@components/markdown/Section.astro'; + +# Views (WIP) + + Views are currently only implemented in the `drizzle-orm`, `drizzle-kit` does not support views yet. + You can query the views that already exist in the database, but they won't be added to `drizzle-kit` migrations or `db push` as of now. + + +## Views declaration +There're several ways you can declare views with Drizzle ORM. + +You can declare views that have to be created or you can declare views that already exist in the database. + +You can declare views statements with an inline `query builder` syntax, with `standalone query builder` and with raw `sql` operators. + +When views are created with either inlined or standalone query builders, view columns schema will be automatically inferred, +yet when you use `sql` you have to explicitly declare view columns schema. + +### Declaring views + + +
+ ```ts filename="schema.ts" copy {13-14} + import { pgTable, pgView, serial, text, timestamp } from "drizzle-orm/pg-core"; + + export const user = pgTable("user", { + id: serial("id"), + name: text("name"), + email: text("email"), + password: text("password"), + role: text("role").$type<"admin" | "customer">(), + createdAt: timestamp("created_at"), + updatedAt: timestamp("updated_at"), + }); + + export const userView = pgView("user_view").as((qb) => qb.select().from(user)); + export const customersView = pgView("customers_view").as((qb) => qb.select().from(user).where(eq(user.role, "customer"))); + ``` + ```sql + CREATE VIEW "user_view" AS SELECT * FROM "user"; + CREATE VIEW "customers_view" AS SELECT * FROM "user" WHERE "role" = 'customer'; + ``` +
+
+ +
+ ```ts filename="schema.ts" copy {13-14} + import { text, mysqlTable, mysqlView, int, timestamp } from "drizzle-orm/mysql-core"; + + export const user = mysqlTable("user", { + id: int("id").primaryKey().autoincrement(), + name: text("name"), + email: text("email"), + password: text("password"), + role: text("role").$type<"admin" | "customer">(), + createdAt: timestamp("created_at"), + updatedAt: timestamp("updated_at"), + }); + + export const userView = mysqlView("user_view").as((qb) => qb.select().from(user)); + export const customersView = mysqlView("customers_view").as((qb) => qb.select().from(user).where(eq(user.role, "customer"))); + ``` + ```sql + CREATE VIEW "user_view" AS SELECT * FROM "user"; + CREATE VIEW "customers_view" AS SELECT * FROM "user" WHERE "role" = 'customer'; + ``` +
+
+ +
+ ```ts filename="schema.ts" copy {13-14} + import { integer, text, sqliteView, sqliteTable } from "drizzle-orm/sqlite-core"; + + export const user = sqliteTable("user", { + id: integer("id").primaryKey({ autoIncrement: true }), + name: text("name"), + email: text("email"), + password: text("password"), + role: text("role").$type<"admin" | "customer">(), + createdAt: integer("created_at"), + updatedAt: integer("updated_at"), + }); + + export const userView = sqliteView("user_view").as((qb) => qb.select().from(user)); + export const customersView = sqliteView("customers_view").as((qb) => qb.select().from(user).where(eq(user.role, "customer"))); + ``` + ```sql + CREATE VIEW "user_view" AS SELECT * FROM "user"; + CREATE VIEW "customers_view" AS SELECT * FROM "user" WHERE "role" = 'customer'; + ``` +
+
+
+ +If you need a subset of columns you can use `.select({ ... })` method in query builder, like this: +
+ ```ts {4-6} + export const customersView = pgView("customers_view").as((qb) => { + return qb + .select({ + id: user.id, + name: user.name, + email: user.email, + }) + .from(user); + }); + ``` + ```sql + CREATE VIEW "customers_view" AS SELECT "id", "name", "email" FROM "user" WHERE "role" = 'customer'; + ``` +
+ +You can also declare views using `standalone query builder`, it works exactly the same way: + + +
+ ```ts filename="schema.ts" copy {3, 15-16} + import { pgTable, pgView, serial, text, timestamp, QueryBuilder} from "drizzle-orm/pg-core"; + + const qb = new QueryBuilder(); + + export const user = pgTable("user", { + id: serial("id"), + name: text("name"), + email: text("email"), + password: text("password"), + role: text("role").$type<"admin" | "customer">(), + createdAt: timestamp("created_at"), + updatedAt: timestamp("updated_at"), + }); + + export const userView = pgView("user_view").as(qb.select().from(user)); + export const customersView = pgView("customers_view").as(qb.select().from(user).where(eq(user.role, "customer"))); + ``` + ```sql + CREATE VIEW "user_view" AS SELECT * FROM "user"; + CREATE VIEW "customers_view" AS SELECT * FROM "user" WHERE "role" = 'customer'; + ``` +
+
+ +
+ ```ts filename="schema.ts" copy {3, 15-16} + import { text, mysqlTable, mysqlView, int, timestamp, QueryBuilder } from "drizzle-orm/mysql-core"; + + const qb = new QueryBuilder(); + + export const user = mysqlTable("user", { + id: int("id").primaryKey().autoincrement(), + name: text("name"), + email: text("email"), + password: text("password"), + role: text("role").$type<"admin" | "customer">(), + createdAt: timestamp("created_at"), + updatedAt: timestamp("updated_at"), + }); + + export const userView = mysqlView("user_view").as(qb.select().from(user)); + export const customersView = mysqlView("customers_view").as(qb.select().from(user).where(eq(user.role, "customer"))); + ``` + ```sql + CREATE VIEW "user_view" AS SELECT * FROM "user"; + CREATE VIEW "customers_view" AS SELECT * FROM "user" WHERE "role" = 'customer'; + ``` +
+
+ +
+ ```ts filename="schema.ts" copy {3, 15-16} + import { integer, text, sqliteView, sqliteTable, QueryBuilder } from "drizzle-orm/sqlite-core"; + + const qb = new QueryBuilder(); + + export const user = sqliteTable("user", { + id: integer("id").primaryKey({ autoIncrement: true }), + name: text("name"), + email: text("email"), + password: text("password"), + role: text("role").$type<"admin" | "customer">(), + createdAt: integer("created_at"), + updatedAt: integer("updated_at"), + }); + + export const userView = sqliteView("user_view").as((qb) => qb.select().from(user)); + export const customerView = sqliteView("customers_view").as((qb) => qb.select().from(user).where(eq(user.role, "customer"))); + ``` + ```sql + CREATE VIEW "user_view" AS SELECT * FROM "user"; + CREATE VIEW "customers_view" AS SELECT * FROM "user" WHERE "role" = 'customer'; + ``` +
+
+
+ +### Declaring views with raw SQL +Whenever you need to declare view using a syntax that is not supported by the query builder, +you can directly use `sql` operator and explicitly specify view columns schema. + +```ts copy +// regular view +const newYorkers = pgView('new_yorkers', { + id: serial('id').primaryKey(), + name: text('name').notNull(), + cityId: integer('city_id').notNull(), +}).as(sql`select * from ${users} where ${eq(users.cityId, 1)}`); + +// materialized view +const newYorkers = pgMaterializedView('new_yorkers', { + id: serial('id').primaryKey(), + name: text('name').notNull(), + cityId: integer('city_id').notNull(), +}).as(sql`select * from ${users} where ${eq(users.cityId, 1)}`); +``` + +### Declaring existing views +When you're provided with a read only access to an existing view in the database you should use `.existing()` view configuration, +`drizzle-kit` will ignore and will not generate a `create view` statement in the generated migration. +```ts +export const user = pgTable("user", { + id: serial("id"), + name: text("name"), + email: text("email"), + password: text("password"), + role: text("role").$type<"admin" | "customer">(), + createdAt: timestamp("created_at"), + updatedAt: timestamp("updated_at"), +}); + +// regular view +export const trimmedUser = pgView("trimmed_user", { + id: serial("id"), + name: text("name"), + email: text("email"), +}).existing(); + +// materialized view won't make any difference, yet you can use it for consistency +export const trimmedUser = pgMaterializedView("trimmed_user", { + id: serial("id"), + name: text("name"), + email: text("email"), +}).existing(); +``` + +### Materialized views + + +According to the official docs, PostgreSQL has both **[`regular`](https://www.postgresql.org/docs/current/sql-createview.html)** +and **[`materialized`](https://www.postgresql.org/docs/current/sql-creatematerializedview.html)** views. + +Materialized views in PostgreSQL use the rule system like views do, but persist the results in a table-like form. +{/* This means that when a query is executed against a materialized view, the results are returned directly from the materialized view, +like from a table, rather than being reconstructed by executing the query against the underlying base tables that make up the view. */} + +Drizzle ORM natively supports PostgreSQL materialized views: + +
+```ts filename="schema.ts" copy +const newYorkers = pgMaterializedView('new_yorkers').as((qb) => qb.select().from(users).where(eq(users.cityId, 1))); +``` +```sql +CREATE MATERIALIZED VIEW "new_yorkers" AS SELECT * FROM "users"; +``` +
+ +You can then refresh materialized views in the application runtime: +```ts copy +await db.refreshMaterializedView(newYorkers); + +await db.refreshMaterializedView(newYorkers).concurrently(); + +await db.refreshMaterializedView(newYorkers).withNoData(); +``` + +### Extended example + +All the parameters inside the query will be inlined, instead of replaced by `$1`, `$2`, etc. + + +```ts copy +// regular view +const newYorkers = pgView('new_yorkers') + .with({ + checkOption: 'cascaded', + securityBarrier: true, + securityInvoker: true, + }) + .as((qb) => { + const sq = qb + .$with('sq') + .as( + qb.select({ userId: users.id, cityId: cities.id }) + .from(users) + .leftJoin(cities, eq(cities.id, users.homeCity)) + .where(sql`${users.age1} > 18`), + ); + return qb.with(sq).select().from(sq).where(sql`${users.homeCity} = 1`); + }); + +// materialized view +const newYorkers2 = pgMaterializedView('new_yorkers') + .using('btree') + .with({ + fillfactor: 90, + toast_tuple_target: 0.5, + autovacuum_enabled: true, + ... + }) + .tablespace('custom_tablespace') + .withNoData() + .as((qb) => { + const sq = qb + .$with('sq') + .as( + qb.select({ userId: users.id, cityId: cities.id }) + .from(users) + .leftJoin(cities, eq(cities.id, users.homeCity)) + .where(sql`${users.age1} > 18`), + ); + return qb.with(sq).select().from(sq).where(sql`${users.homeCity} = 1`); + }); +``` diff --git a/src/libs/langchain/loaders/markdown/__tests__/index.test.ts b/src/libs/langchain/loaders/markdown/__tests__/index.test.ts new file mode 100644 index 000000000000..6e2a6e9f52fa --- /dev/null +++ b/src/libs/langchain/loaders/markdown/__tests__/index.test.ts @@ -0,0 +1,13 @@ +// @vitest-environment node +import * as fs from 'node:fs'; +import { join } from 'node:path'; + +import { MarkdownLoader } from '../index'; + +describe('MarkdownLoader', () => { + it('should run', async () => { + const content = fs.readFileSync(join(__dirname, `./demo.mdx`), 'utf-8'); + + await MarkdownLoader(content); + }); +}); diff --git a/src/libs/langchain/loaders/markdown/index.ts b/src/libs/langchain/loaders/markdown/index.ts new file mode 100644 index 000000000000..61aebeef24e8 --- /dev/null +++ b/src/libs/langchain/loaders/markdown/index.ts @@ -0,0 +1,9 @@ +import { MarkdownTextSplitter } from 'langchain/text_splitter'; + +import { loaderConfig } from '../config'; + +export const MarkdownLoader = async (text: string) => { + const splitter = new MarkdownTextSplitter(loaderConfig); + + return await splitter.createDocuments([text]); +}; diff --git a/src/libs/langchain/loaders/pdf/index.ts b/src/libs/langchain/loaders/pdf/index.ts new file mode 100644 index 000000000000..220a7da9a750 --- /dev/null +++ b/src/libs/langchain/loaders/pdf/index.ts @@ -0,0 +1,7 @@ +import { PDFLoader } from '@langchain/community/document_loaders/fs/pdf'; + +export const PdfLoader = async (blob: Blob) => { + const loader = new PDFLoader(blob); + + return await loader.load(); +}; diff --git a/src/libs/langchain/loaders/pptx/index.ts b/src/libs/langchain/loaders/pptx/index.ts new file mode 100644 index 000000000000..dcfb02058378 --- /dev/null +++ b/src/libs/langchain/loaders/pptx/index.ts @@ -0,0 +1,7 @@ +import { PPTXLoader as Loader } from '@langchain/community/document_loaders/fs/pptx'; + +export const PPTXLoader = async (fileBlob: Blob | string) => { + const loader = new Loader(fileBlob); + + return await loader.load(); +}; diff --git a/src/libs/langchain/loaders/txt/__tests__/index.test.ts b/src/libs/langchain/loaders/txt/__tests__/index.test.ts new file mode 100644 index 000000000000..c4482eec6cbf --- /dev/null +++ b/src/libs/langchain/loaders/txt/__tests__/index.test.ts @@ -0,0 +1,54 @@ +// @vitest-environment node +import * as fs from 'node:fs'; +import { join } from 'node:path'; + +import { TextLoader } from '../index'; +import longResult from './long.json'; + +describe('TextLoader', () => { + it('split simple content', async () => { + const content = `好的,我们以基于 Puppeteer 的截图服务为例,给出一个具体的示例: + +| 服务器配置 | 并发量 | +| --- | --- | +| 1c1g | 50-100 | +| 2c4g | 200-500 | +| 4c8g | 500-1000 | +| 8c16g | 1000-2000 | + +这里的并发量是根据以下假设条件估算的: + +1. 应用程序使用 Puppeteer 进行网页截图,每个请求需要 500ms-1s 的处理时间。 +2. CPU 密集型任务,CPU 是主要的性能瓶颈。 +3. 每个请求需要 50-100MB 的内存。 +4. 没有其他依赖服务,如数据库等。 +5. 网络带宽足够,不是瓶颈。 + +在这种情况下: + +- 1c1g 的服务器,由于 CPU 资源较少,并发量较低,大约在 50-100 左右。 +- 2c4g 的服务器,CPU 资源增加,并发量可以提高到 200-500 左右。 +- 4c8g 的服务器,CPU 资源进一步增加,并发量可以提高到 500-1000 左右。 +- 8c16g 的服务器,CPU 资源进一步增加,并发量可以提高到 1000-2000 左右。 + +需要注意的是,这只是一个大致的估计,实际情况可能会有差异。在正式部署时,建议进行负载测试,根据实际情况进行调整和优化。`; + + const result = await TextLoader(content); + + expect(result).toEqual([ + { + pageContent: + '好的,我们以基于 Puppeteer 的截图服务为例,给出一个具体的示例:\n\n| 服务器配置 | 并发量 |\n| --- | --- |\n| 1c1g | 50-100 |\n| 2c4g | 200-500 |\n| 4c8g | 500-1000 |\n| 8c16g | 1000-2000 |\n\n这里的并发量是根据以下假设条件估算的:\n\n1. 应用程序使用 Puppeteer 进行网页截图,每个请求需要 500ms-1s 的处理时间。\n2. CPU 密集型任务,CPU 是主要的性能瓶颈。\n3. 每个请求需要 50-100MB 的内存。\n4. 没有其他依赖服务,如数据库等。\n5. 网络带宽足够,不是瓶颈。\n\n在这种情况下:\n\n- 1c1g 的服务器,由于 CPU 资源较少,并发量较低,大约在 50-100 左右。\n- 2c4g 的服务器,CPU 资源增加,并发量可以提高到 200-500 左右。\n- 4c8g 的服务器,CPU 资源进一步增加,并发量可以提高到 500-1000 左右。\n- 8c16g 的服务器,CPU 资源进一步增加,并发量可以提高到 1000-2000 左右。\n\n需要注意的是,这只是一个大致的估计,实际情况可能会有差异。在正式部署时,建议进行负载测试,根据实际情况进行调整和优化。', + metadata: { loc: { lines: { from: 1, to: 25 } } }, + }, + ]); + }); + + it('split long', async () => { + const content = fs.readFileSync(join(__dirname, `./pg24022.txt`), 'utf-8'); + + const result = await TextLoader(content); + + expect(result).toEqual(longResult); + }); +}); diff --git a/src/libs/langchain/loaders/txt/__tests__/long.json b/src/libs/langchain/loaders/txt/__tests__/long.json new file mode 100644 index 000000000000..1fcde6c2d725 --- /dev/null +++ b/src/libs/langchain/loaders/txt/__tests__/long.json @@ -0,0 +1,38 @@ +[ + { + "pageContent": "Marley was dead, to begin with. There is no doubt whatever about that.\nThe register of his burial was signed by the clergyman, the clerk, the\nundertaker, and the chief mourner. Scrooge signed it. And Scrooge's name\nwas good upon 'Change for anything he chose to put his hand to. Old\nMarley was as dead as a door-nail.\n\nMind! I don't mean to say that I know of my own knowledge, what there is\nparticularly dead about a door-nail. I might have been inclined, myself,\nto regard a coffin-nail as the deadest piece of ironmongery in the\ntrade. But the wisdom of our ancestors is in the simile; and my\nunhallowed hands shall not disturb it, or the country's done for. You\nwill, therefore, permit me to repeat, emphatically, that Marley was as\ndead as a door-nail.", + "metadata": { "loc": { "lines": { "from": 1, "to": 13 } } } + }, + { + "pageContent": "Scrooge knew he was dead? Of course he did. How could it be otherwise?\nScrooge and he were partners for I don't know how many years. Scrooge\nwas his sole executor, his sole administrator, his sole assign, his sole\nresiduary legatee, his sole friend, and sole mourner. And even Scrooge\nwas not so dreadfully cut up by the sad event but that he was an\nexcellent man of business on the very day of the funeral, and solemnised\nit with an undoubted bargain.", + "metadata": { "loc": { "lines": { "from": 15, "to": 21 } } } + }, + { + "pageContent": "The mention of Marley's funeral brings me back to the point I started\nfrom. There is no doubt that Marley was dead. This must be distinctly\nunderstood, or nothing wonderful can come of the story I am going to\nrelate. If we were not perfectly convinced that Hamlet's father died\nbefore the play began, there would be nothing more remarkable in his\ntaking a stroll at night, in an easterly wind, upon his own ramparts,\nthan there would be in any other middle-aged gentleman rashly turning\nout after dark in a breezy spot--say St. Paul's Churchyard, for\ninstance--literally to astonish his son's weak mind.", + "metadata": { "loc": { "lines": { "from": 23, "to": 31 } } } + }, + { + "pageContent": "Scrooge never painted out Old Marley's name. There it stood, years\nafterwards, above the warehouse door: Scrooge and Marley. The firm was\nknown as Scrooge and Marley. Sometimes people new to the business called\nScrooge Scrooge, and sometimes Marley, but he answered to both names. It\nwas all the same to him.", + "metadata": { "loc": { "lines": { "from": 33, "to": 37 } } } + }, + { + "pageContent": "Oh! but he was a tight-fisted hand at the grindstone, Scrooge! a\nsqueezing, wrenching, grasping, scraping, clutching, covetous old\nsinner! Hard and sharp as flint, from which no steel had ever struck out\ngenerous fire; secret, and self-contained, and solitary as an oyster.\nThe cold within him froze his old features, nipped his pointed nose,\nshrivelled his cheek, stiffened his gait; made his eyes red, his thin\nlips blue; and spoke out shrewdly in his grating voice. A frosty rime\nwas on his head, and on his eyebrows, and his wiry chin. He carried his\nown low temperature always about with him; he iced his office in the\ndog-days, and didn't thaw it one degree at Christmas.", + "metadata": { "loc": { "lines": { "from": 39, "to": 48 } } } + }, + { + "pageContent": "External heat and cold had little influence on Scrooge. No warmth could\nwarm, no wintry weather chill him. No wind that blew was bitterer than\nhe, no falling snow was more intent upon its purpose, no pelting rain\nless open to entreaty. Foul weather didn't know where to have him. The\nheaviest rain, and snow, and hail, and sleet could boast of the\nadvantage over him in only one respect. They often 'came down'\nhandsomely, and Scrooge never did.", + "metadata": { "loc": { "lines": { "from": 50, "to": 56 } } } + }, + { + "pageContent": "Nobody ever stopped him in the street to say, with gladsome looks, 'My\ndear Scrooge, how are you? When will you come to see me?' No beggars\nimplored him to bestow a trifle, no children asked him what it was\no'clock, no man or woman ever once in all his life inquired the way to\nsuch and such a place, of Scrooge. Even the blind men's dogs appeared to\nknow him; and, when they saw him coming on, would tug their owners into\ndoorways and up courts; and then would wag their tails as though they\nsaid, 'No eye at all is better than an evil eye, dark master!'\n\nBut what did Scrooge care? It was the very thing he liked. To edge his\nway along the crowded paths of life, warning all human sympathy to keep\nits distance, was what the knowing ones call 'nuts' to Scrooge.", + "metadata": { "loc": { "lines": { "from": 58, "to": 69 } } } + }, + { + "pageContent": "Once upon a time--of all the good days in the year, on Christmas\nEve--old Scrooge sat busy in his counting-house. It was cold, bleak,\nbiting weather; foggy withal; and he could hear the people in the court\noutside go wheezing up and down, beating their hands upon their breasts,\nand stamping their feet upon the pavement stones to warm them. The City\nclocks had only just gone three, but it was quite dark already--it had\nnot been light all day--and candles were flaring in the windows of the\nneighbouring offices, like ruddy smears upon the palpable brown air. The\nfog came pouring in at every chink and keyhole, and was so dense\nwithout, that, although the court was of the narrowest, the houses\nopposite were mere phantoms. To see the dingy cloud come drooping down,", + "metadata": { "loc": { "lines": { "from": 71, "to": 81 } } } + }, + { + "pageContent": "not been light all day--and candles were flaring in the windows of the\nneighbouring offices, like ruddy smears upon the palpable brown air. The\nfog came pouring in at every chink and keyhole, and was so dense\nwithout, that, although the court was of the narrowest, the houses\nopposite were mere phantoms. To see the dingy cloud come drooping down,\nobscuring everything, one might have thought that nature lived hard by,\nand was brewing on a large scale.", + "metadata": { "loc": { "lines": { "from": 77, "to": 83 } } } + } +] diff --git a/src/libs/langchain/loaders/txt/__tests__/pg24022.txt b/src/libs/langchain/loaders/txt/__tests__/pg24022.txt new file mode 100644 index 000000000000..fda37ddce4b3 --- /dev/null +++ b/src/libs/langchain/loaders/txt/__tests__/pg24022.txt @@ -0,0 +1,83 @@ +Marley was dead, to begin with. There is no doubt whatever about that. +The register of his burial was signed by the clergyman, the clerk, the +undertaker, and the chief mourner. Scrooge signed it. And Scrooge's name +was good upon 'Change for anything he chose to put his hand to. Old +Marley was as dead as a door-nail. + +Mind! I don't mean to say that I know of my own knowledge, what there is +particularly dead about a door-nail. I might have been inclined, myself, +to regard a coffin-nail as the deadest piece of ironmongery in the +trade. But the wisdom of our ancestors is in the simile; and my +unhallowed hands shall not disturb it, or the country's done for. You +will, therefore, permit me to repeat, emphatically, that Marley was as +dead as a door-nail. + +Scrooge knew he was dead? Of course he did. How could it be otherwise? +Scrooge and he were partners for I don't know how many years. Scrooge +was his sole executor, his sole administrator, his sole assign, his sole +residuary legatee, his sole friend, and sole mourner. And even Scrooge +was not so dreadfully cut up by the sad event but that he was an +excellent man of business on the very day of the funeral, and solemnised +it with an undoubted bargain. + +The mention of Marley's funeral brings me back to the point I started +from. There is no doubt that Marley was dead. This must be distinctly +understood, or nothing wonderful can come of the story I am going to +relate. If we were not perfectly convinced that Hamlet's father died +before the play began, there would be nothing more remarkable in his +taking a stroll at night, in an easterly wind, upon his own ramparts, +than there would be in any other middle-aged gentleman rashly turning +out after dark in a breezy spot--say St. Paul's Churchyard, for +instance--literally to astonish his son's weak mind. + +Scrooge never painted out Old Marley's name. There it stood, years +afterwards, above the warehouse door: Scrooge and Marley. The firm was +known as Scrooge and Marley. Sometimes people new to the business called +Scrooge Scrooge, and sometimes Marley, but he answered to both names. It +was all the same to him. + +Oh! but he was a tight-fisted hand at the grindstone, Scrooge! a +squeezing, wrenching, grasping, scraping, clutching, covetous old +sinner! Hard and sharp as flint, from which no steel had ever struck out +generous fire; secret, and self-contained, and solitary as an oyster. +The cold within him froze his old features, nipped his pointed nose, +shrivelled his cheek, stiffened his gait; made his eyes red, his thin +lips blue; and spoke out shrewdly in his grating voice. A frosty rime +was on his head, and on his eyebrows, and his wiry chin. He carried his +own low temperature always about with him; he iced his office in the +dog-days, and didn't thaw it one degree at Christmas. + +External heat and cold had little influence on Scrooge. No warmth could +warm, no wintry weather chill him. No wind that blew was bitterer than +he, no falling snow was more intent upon its purpose, no pelting rain +less open to entreaty. Foul weather didn't know where to have him. The +heaviest rain, and snow, and hail, and sleet could boast of the +advantage over him in only one respect. They often 'came down' +handsomely, and Scrooge never did. + +Nobody ever stopped him in the street to say, with gladsome looks, 'My +dear Scrooge, how are you? When will you come to see me?' No beggars +implored him to bestow a trifle, no children asked him what it was +o'clock, no man or woman ever once in all his life inquired the way to +such and such a place, of Scrooge. Even the blind men's dogs appeared to +know him; and, when they saw him coming on, would tug their owners into +doorways and up courts; and then would wag their tails as though they +said, 'No eye at all is better than an evil eye, dark master!' + +But what did Scrooge care? It was the very thing he liked. To edge his +way along the crowded paths of life, warning all human sympathy to keep +its distance, was what the knowing ones call 'nuts' to Scrooge. + +Once upon a time--of all the good days in the year, on Christmas +Eve--old Scrooge sat busy in his counting-house. It was cold, bleak, +biting weather; foggy withal; and he could hear the people in the court +outside go wheezing up and down, beating their hands upon their breasts, +and stamping their feet upon the pavement stones to warm them. The City +clocks had only just gone three, but it was quite dark already--it had +not been light all day--and candles were flaring in the windows of the +neighbouring offices, like ruddy smears upon the palpable brown air. The +fog came pouring in at every chink and keyhole, and was so dense +without, that, although the court was of the narrowest, the houses +opposite were mere phantoms. To see the dingy cloud come drooping down, +obscuring everything, one might have thought that nature lived hard by, +and was brewing on a large scale. diff --git a/src/libs/langchain/loaders/txt/index.ts b/src/libs/langchain/loaders/txt/index.ts new file mode 100644 index 000000000000..72635f402860 --- /dev/null +++ b/src/libs/langchain/loaders/txt/index.ts @@ -0,0 +1,9 @@ +import { RecursiveCharacterTextSplitter } from 'langchain/text_splitter'; + +import { loaderConfig } from '../config'; + +export const TextLoader = async (text: string) => { + const splitter = new RecursiveCharacterTextSplitter(loaderConfig); + + return await splitter.createDocuments([text]); +}; diff --git a/src/libs/langchain/types.ts b/src/libs/langchain/types.ts new file mode 100644 index 000000000000..696300cf0313 --- /dev/null +++ b/src/libs/langchain/types.ts @@ -0,0 +1 @@ +export type LangChainLoaderType = 'code' | 'ppt' | 'pdf' | 'markdown' | 'doc' | 'text'; diff --git a/src/libs/unstructured/__tests__/fixtures/image-parse/fast-partition-none-output.json b/src/libs/unstructured/__tests__/fixtures/image-parse/fast-partition-none-output.json new file mode 100644 index 000000000000..57a403582efc --- /dev/null +++ b/src/libs/unstructured/__tests__/fixtures/image-parse/fast-partition-none-output.json @@ -0,0 +1,3258 @@ +{ + "compositeElements": [], + "originElements": [ + { + "type": "Header", + "element_id": "a624cfed-fad6-4b59-89e9-d0e27c5fe929", + "text": "政府⼯作报告 ——2023年3⽉5⽇在第⼗四届全国⼈民代表...", + "metadata": { + "coordinates": { + "points": [ + [0, 1.1599999999999682], + [0, 12.399999999999977], + [267.5, 12.399999999999977], + [267.5, 1.1599999999999682] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 1, + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Header", + "element_id": "c4e208c2-68de-44ec-9d6e-3b28eb54041e", + "text": "https://www.gov.cn/gongbao/content/2023/content_5747260.htm", + "metadata": { + "coordinates": { + "points": [ + [351.9875, 1.1599999999999682], + [351.9875, 11.159999999999968], + [612, 11.159999999999968], + [612.0035, 1.1599999999999682] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 1, + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "f3908366-9d8a-45d1-b114-6ed7df62619a", + "text": "政 府 ⼯ 作 报 告 政 府 ⼯ 作 报 告 ——2023年3⽉5⽇在第⼗四届全国⼈⺠代表⼤会第⼀次会议上 国务院总理 李克强", + "metadata": { + "coordinates": { + "points": [ + [211.1981, 159.013153], + [211.1981, 189.59386877999998], + [400.79124, 189.59386877999998], + [400.79124, 159.013153] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 1, + "parent_id": "c4e208c2-68de-44ec-9d6e-3b28eb54041e", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "01682f16-fa25-4e5d-a16e-4cfe5bd849b1", + "text": "各位代表: 各位代表:", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 202.23340178], + [126.4956, 209.2553687799999], + [161.60543499999997, 209.2553687799999], + [161.60543499999997, 202.23340178] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 1, + "parent_id": "c4e208c2-68de-44ec-9d6e-3b28eb54041e", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "79b29345-bccd-4ec3-a2af-c617093c5394", + "text": "本届政府任期即将结束。现在,我代表国务院,向⼤会报告⼯作,请予审议,并请全国政协委员提出意⻅。", + "metadata": { + "coordinates": { + "points": [ + [140.5395, 212.0641017800001], + [140.5395, 219.08606878], + [470.571949, 219.08606878], + [470.571949, 212.0641017800001] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 1, + "parent_id": "c4e208c2-68de-44ec-9d6e-3b28eb54041e", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "5e1d7f68-196a-4eb5-89df-1ac182809557", + "text": "⼀、过去⼀年和五年⼯作回顾", + "metadata": { + "coordinates": { + "points": [ + [260.3519, 231.72560178000003], + [260.3519, 238.74756877999994], + [351.637471, 238.74756877999994], + [351.637471, 231.72560178000003] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 1, + "parent_id": "c4e208c2-68de-44ec-9d6e-3b28eb54041e", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "dee5cd25-a4cf-493d-863c-33959541b680", + "text": "2022年是党和国家历史上极为重要的⼀年。党的⼆⼗⼤胜利召开,描绘了全⾯建设社会主义现代化国家的宏伟蓝 图。⾯对⻛⾼浪急的国际环境和艰巨繁重的国内改⾰发展稳定任务,以习近平同志为核⼼的党中央团结带领全国各族 ⼈⺠迎难⽽上,全⾯落实疫情要防住、经济要稳住、发展要安全的要求,加⼤宏观调控⼒度,实现了经济平稳运⾏、 发展质量稳步提升、社会⼤局保持稳定,我国发展取得来之极为不易的新成就。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 250.75512475000005], + [126.4956, 287.90136878], + [484.615949, 287.90136878], + [484.615949, 250.75512475000005] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 1, + "parent_id": "c4e208c2-68de-44ec-9d6e-3b28eb54041e", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "ec3c315e-9c5d-4df9-9b64-73450966a976", + "text": "过去⼀年,我国经济发展遇到疫情等国内外多重超预期因素冲击。在党中央坚强领导下,我们⾼效统筹疫情防控", + "metadata": { + "coordinates": { + "points": [ + [140.5395, 290.71020178], + [140.5395, 297.73216878], + [484.61588300000005, 297.73216878], + [484.61588300000005, 290.71020178] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 1, + "parent_id": "c4e208c2-68de-44ec-9d6e-3b28eb54041e", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "24c68e46-b6ec-431f-8054-27dbfd554ca4", + "text": "和经济社会发展,根据病毒变化和防疫形势,优化调整疫情防控措施。⾯对经济新的下⾏压⼒,果断应对、及时调 控,动⽤近年储备的政策⼯具,靠前实施既定政策举措,坚定不移推进供给侧结构性改⾰,出台实施稳经济⼀揽⼦政 策和接续措施,部署稳住经济⼤盘⼯作,加强对地⽅落实政策的督导服务,⽀持各地挖掘政策潜⼒,⽀持经济⼤省勇 挑⼤梁,突出稳增⻓稳就业稳物价,推动经济企稳回升。全年国内⽣产总值增⻓3%,城镇新增就业1206万⼈,年末 城镇调查失业率降到5.5%,居⺠消费价格上涨2%。货物进出⼝总额增⻓7.7%。财政⾚字率控制在2.8%,中央财政收 ⽀符合预算、⽀出略有结余。国际收⽀保持平衡,⼈⺠币汇率在全球主要货币中表现相对稳健。粮⻝产量1.37万亿 ⽄,增产74亿⽄。⽣态环境质量持续改善。在攻坚克难中稳住了经济⼤盘,在复杂多变的环境中基本完成全年发展主 要⽬标任务,我国经济展现出坚强韧性。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 300.54090178], + [126.4956, 376.37816878], + [484.61591699999997, 376.37816878], + [484.61591699999997, 300.54090178] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 1, + "parent_id": "c4e208c2-68de-44ec-9d6e-3b28eb54041e", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "28b96bac-aef6-4728-9fe5-c873a805cf57", + "text": "针对企业⽣产经营困难加剧,加⼤纾困⽀持⼒度。受疫情等因素冲击,不少企业和个体⼯商户遇到特殊困难。全", + "metadata": { + "coordinates": { + "points": [ + [140.5395, 379.18700178], + [140.5395, 386.20896878], + [484.61588300000005, 386.20896878], + [484.61588300000005, 379.18700178] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 1, + "parent_id": "c4e208c2-68de-44ec-9d6e-3b28eb54041e", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "aab5120a-1cd1-403f-81e7-6a4bd991e23b", + "text": "年增值税留抵退税超过2.4万亿元,新增减税降费超过1万亿元,缓税缓费7500多亿元。为有⼒⽀持减税降费政策落 实,中央对地⽅转移⽀付⼤幅增加。引导⾦融机构增加信贷投放,降低融资成本,新发放企业贷款平均利率降⾄有统 计以来最低⽔平,对受疫情影响严重的中⼩微企业、个体⼯商户和餐饮、旅游、货运等实施阶段性贷款延期还本付 息,对普惠⼩微贷款阶段性减息。⽤改⾰办法激发市场活⼒。量⼤⾯⼴的中⼩微企业和个体⼯商户普遍受益。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 388.38572475], + [126.4956, 425.53196878], + [484.61591699999997, 425.53196878], + [484.61591699999997, 388.38572475] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 1, + "parent_id": "c4e208c2-68de-44ec-9d6e-3b28eb54041e", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "NarrativeText", + "element_id": "dbc0059c-09d0-412e-969b-43af5c2bc23c", + "text": "针对有效需求不⾜的突出⽭盾,多措并举扩投资促消费稳外贸。去年终端消费直接受到冲击,投资也受到影响。 提前实施部分“⼗四五”规划重⼤⼯程项⽬,加快地⽅政府专项债券发⾏使⽤,依法盘活⽤好专项债务结存限额,分两 期投放政策性开发性⾦融⼯具7400亿元,为重⼤项⽬建设补充资本⾦。运⽤专项再贷款、财政贴息等政策,⽀持重点 领域设备更新改造。采取联合办公、地⽅承诺等办法,提⾼项⽬审批效率。全年基础设施、制造业投资分别增⻓ 9.4%、9.1%,带动固定资产投资增⻓5.1%,⼀定程度弥补了消费收缩缺⼝。发展消费新业态新模式,采取减免⻋辆 购置税等措施促进汽⻋消费,新能源汽⻋销量增⻓93.4%,开展绿⾊智能家电、绿⾊建材下乡,社会消费品零售总额 保持基本稳定。出台⾦融⽀持措施,⽀持刚性和改善性住房需求,扎实推进保交楼稳⺠⽣⼯作。帮助外贸企业解决原 材料、⽤⼯、物流等难题,提升港⼝集疏运效率,及时回应和解决外资企业关切,货物进出⼝好于预期,实际使⽤外 资稳定增⻓。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 428.34070177999996], + [126.4956, 514.0087687800001], + [484.61591699999997, 514.0087687800001], + [484.61591699999997, 428.34070177999996] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 1, + "parent_id": "aab5120a-1cd1-403f-81e7-6a4bd991e23b", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "13b42655-c361-46ee-bf7b-ed1cd049189b", + "text": "针对就业压⼒凸显,强化稳岗扩就业政策⽀持。去年城镇调查失业率⼀度明显攀升。财税、⾦融、投资等政策更 加注重稳就业。对困难⾏业企业社保费实施缓缴,⼤幅提⾼失业保险基⾦稳岗返还⽐例,增加稳岗扩岗补助。落实担 保贷款、租⾦减免等创业⽀持政策。突出做好⾼校毕业⽣就业⼯作,开展就业困难⼈员专项帮扶。在重点⼯程建设中 推⼴以⼯代赈。脱贫⼈⼝务⼯规模超过3200万⼈、实现稳中有增。就业形势总体保持稳定。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 516.8175017799999], + [126.4956, 553.33176878], + [484.61591699999997, 553.33176878], + [484.61591699999997, 516.8175017799999] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 1, + "parent_id": "c4e208c2-68de-44ec-9d6e-3b28eb54041e", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "58220ff2-f570-47d5-8b9a-db954627966d", + "text": "针对全球通胀⾼企带来的影响,以粮⻝和能源为重点做好保供稳价。去年全球通胀达到40多年来新⾼,国内价格 稳定⾯临较⼤压⼒。有效应对洪涝、⼲旱等严重⾃然灾害,不误农时抢抓粮⻝播种和收获,督促和协调农机通⾏,保 障农事活动有序开展,分三批向种粮农⺠发放农资补贴,保障粮⻝丰收和重要农产品稳定供给。发挥煤炭主体能源作 ⽤,增加煤炭先进产能,加⼤对发电供热企业⽀持⼒度,保障能源正常供应。在全球⾼通胀的背景下,我国物价保持 较低⽔平,尤为难得。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 555.50852475], + [126.4956, 602.48546878], + [484.61597, 602.48546878], + [484.61597, 555.50852475] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 1, + "parent_id": "c4e208c2-68de-44ec-9d6e-3b28eb54041e", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "000ef6bf-81db-4e6c-968e-adde771292a7", + "text": "针对部分群众⽣活困难增多,强化基本⺠⽣保障。阶段性扩⼤低保等社会保障政策覆盖⾯,将更多困难群体纳⼊ 保障范围。延续实施失业保险保障扩围政策,共向1000多万失业⼈员发放失业保险待遇。向更多低收⼊群众发放价格 补贴,约6700万⼈受益。免除经济困难⾼校毕业⽣2022年国家助学贷款利息并允许延期还本。做好因疫因灾遇困群众 临时救助⼯作,切实兜住⺠⽣底线。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 605.29430178], + [126.4956, 641.80846878], + [484.61590900000004, 641.80846878], + [484.61590900000004, 605.29430178] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 1, + "parent_id": "c4e208c2-68de-44ec-9d6e-3b28eb54041e", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "75de0dc9-11e4-4eec-a636-f65f7e8fe79c", + "text": "与此同时,我们全⾯落实中央经济⼯作会议部署,按照⼗三届全国⼈⼤五次会议批准的政府⼯作报告安排,统筹 推进经济社会各领域⼯作。经过艰苦努⼒,当前消费需求、市场流通、⼯业⽣产、企业预期等明显向好,经济增⻓正 在企稳向上,我国经济有巨⼤潜⼒和发展动⼒。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 644.6173017799999], + [126.4956, 671.30076878], + [484.61591699999997, 671.30076878], + [484.61591699999997, 644.6173017799999] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 1, + "parent_id": "c4e208c2-68de-44ec-9d6e-3b28eb54041e", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "cdba7ea9-b454-407d-ab21-305732979168", + "text": "各位代表! 过去五年极不寻常、极不平凡。在以习近平同志为核⼼的党中央坚强领导下,我们经受了世界变局加快演变、新 冠疫情冲击、国内经济下⾏等多重考验,如期打赢脱贫攻坚战,如期全⾯建成⼩康社会,实现第⼀个百年奋⽃⽬标, 开启向第⼆个百年奋⽃⽬标进军新征程。各地区各部⻔坚持以习近平新时代中国特⾊社会主义思想为指导,深刻领悟 “两个确⽴”的决定性意义,增强“四个意识”、坚定“四个⾃信”、做到“两个维护”,全⾯贯彻党的⼗九⼤和⼗九届历次 全会精神,深⼊贯彻党的⼆⼗⼤精神,坚持稳中求进⼯作总基调,完整、准确、全⾯贯彻新发展理念,构建新发展格 局,推动⾼质量发展,统筹发展和安全,我国经济社会发展取得举世瞩⽬的重⼤成就。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 674.10960178], + [126.4956, 740.11604878], + [484.61591699999997, 740.11604878], + [484.61591699999997, 674.10960178] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 1, + "parent_id": "c4e208c2-68de-44ec-9d6e-3b28eb54041e", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Footer", + "element_id": "acf92def-4aaf-42d5-9c0e-4627d879a795", + "text": "——经济发展再上新台阶。国内⽣产总值增加到121万亿元,五年年均增⻓5.2%,⼗年增加近70万亿元、年均增", + "metadata": { + "coordinates": { + "points": [ + [140.5395, 742.29288475], + [140.5395, 749.94682878], + [481.690169, 749.94682878], + [481.690169, 742.29288475] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 1, + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Footer", + "element_id": "00cdb82f-2750-431e-b47d-a50e6238ae30", + "text": "第1页 共7页", + "metadata": { + "coordinates": { + "points": [ + [0, 781.66], + [0, 792.9], + [52.5, 792], + [52.5, 781.66] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 1, + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Footer", + "element_id": "e017df49-b619-4a05-a1af-3cd67ee1760d", + "text": "2023/8/4, 10:17", + "metadata": { + "coordinates": { + "points": [ + [548.675, 781.66], + [548.675, 791.66], + [612, 791.66], + [612, 781.66] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 1, + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Header", + "element_id": "e0670114-3a41-4e06-b06f-e8dcf76477f3", + "text": "政府⼯作报告 ——2023年3⽉5⽇在第⼗四届全国⼈民代表...", + "metadata": { + "coordinates": { + "points": [ + [0, 1.1599999999999682], + [0, 12.399999999999977], + [267.5, 12.399999999999977], + [267.5, 1.1599999999999682] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 2, + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Header", + "element_id": "ad460874-a3a8-4bd9-a2e7-d91b5c3c0d43", + "text": "https://www.gov.cn/gongbao/content/2023/content_5747260.htm", + "metadata": { + "coordinates": { + "points": [ + [351.9875, 1.1599999999999682], + [351.9875, 11.159999999999968], + [612, 11.159999999999968], + [612.0035, 1.1599999999999682] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 2, + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Header", + "element_id": "49ed84e1-73e8-46c3-86a8-55493a981754", + "text": "⻓6.2%,在⾼基数基础上实现了中⾼速增⻓、迈向⾼质量发展。财政收⼊增加到20.4万亿元。粮⻝产量连年稳定在1.3 万亿⽄以上。⼯业增加值突破40万亿元。城镇新增就业年均1270多万⼈。外汇储备稳定在3万亿美元以上。我国经济 实⼒明显提升。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 37.404424749999976], + [126.4956, 64.71986877999996], + [485.20115875, 64.71986877999996], + [485.20115875, 37.404424749999976] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 2, + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "2f910c18-d0ee-4287-b8fe-888b6c35f8f1", + "text": "——脱贫攻坚任务胜利完成。经过⼋年持续努⼒,近1亿农村贫困⼈⼝实现脱贫,全国832个贫困县全部摘", + "metadata": { + "coordinates": { + "points": [ + [140.5395, 66.89662475], + [140.5395, 74.55056877999994], + [463.550069, 74.55056877999994], + [463.550069, 66.89662475] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 2, + "parent_id": "49ed84e1-73e8-46c3-86a8-55493a981754", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "af1210e3-abe0-4a5e-a9fe-75b67ae887e2", + "text": "帽,960多万贫困⼈⼝实现易地搬迁,历史性地解决了绝对贫困问题。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 76.72742475000007], + [126.4956, 84.38136878], + [340.665609, 84.38136878], + [340.665609, 76.72742475000007] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 2, + "parent_id": "49ed84e1-73e8-46c3-86a8-55493a981754", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "2f62eaf0-8689-44f6-acfc-e66392a708fb", + "text": "——科技创新成果丰硕。构建新型举国体制,组建国家实验室,分批推进全国重点实验室重组。⼀些关键核⼼技 术攻关取得新突破,载⼈航天、探⽉探⽕、深海深地探测、超级计算机、卫星导航、量⼦信息、核电技术、⼤⻜机制 造、⼈⼯智能、⽣物医药等领域创新成果不断涌现。全社会研发经费投⼊强度从2.1%提⾼到2.5%以上,科技进步贡 献率提⾼到60%以上,创新⽀撑发展能⼒不断增强。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 86.55812475000005], + [126.4956, 123.70436877999998], + [484.615949, 123.70436877999998], + [484.615949, 86.55812475000005] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 2, + "parent_id": "49ed84e1-73e8-46c3-86a8-55493a981754", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "0b782f26-4b6d-4619-af36-aab4a44b8d12", + "text": "——经济结构进⼀步优化。⾼技术制造业、装备制造业增加值年均分别增⻓10.6%、7.9%,数字经济不断壮⼤, 新产业新业态新模式增加值占国内⽣产总值的⽐重达到17%以上。区域协调发展战略、区域重⼤战略深⼊实施。常住 ⼈⼝城镇化率从60.2%提⾼到65.2%,乡村振兴战略全⾯实施。经济发展新动能加快成⻓。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 125.88122475], + [126.4956, 153.19666877999998], + [483.4455750000001, 153.19666877999998], + [483.4455750000001, 125.88122475] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 2, + "parent_id": "49ed84e1-73e8-46c3-86a8-55493a981754", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "be251ea9-d307-4944-9868-721beb056400", + "text": "——基础设施更加完善。⼀批防汛抗旱、引⽔调⽔等重⼤⽔利⼯程开⼯建设。⾼速铁路运营⾥程从2.5万公⾥增 加到4.2万公⾥,⾼速公路⾥程从13.6万公⾥增加到17.7万公⾥。新建改建农村公路125万公⾥。新增机场容量4亿⼈ 次。发电装机容量增⻓40%以上。所有地级市实现千兆光⽹覆盖,所有⾏政村实现通宽带。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 155.37342475000003], + [126.4956, 182.6888687799999], + [479.349468, 182.6888687799999], + [479.349468, 155.37342475000003] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 2, + "parent_id": "49ed84e1-73e8-46c3-86a8-55493a981754", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "66225bf2-20ac-435e-9c46-62fff8d954df", + "text": "——改⾰开放持续深化。全⾯深化改⾰开放推动构建新发展格局,供给侧结构性改⾰深⼊实施,简政放权、放管", + "metadata": { + "coordinates": { + "points": [ + [140.5395, 184.86572475000003], + [140.5395, 192.51966877999996], + [484.615949, 192.51966877999996], + [484.615949, 184.86572475000003] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 2, + "parent_id": "49ed84e1-73e8-46c3-86a8-55493a981754", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "UncategorizedText", + "element_id": "a7477d92-66cc-49f8-b634-65b96c43e991", + "text": "结合、优化服务改⾰不断深化,营商环境明显改善。共建“⼀带⼀路”扎实推进。推动区域全⾯经济伙伴关系协定 (RCEP)⽣效实施,建成全球最⼤⾃由贸易区。货物进出⼝总额年均增⻓8.6%,突破40万亿元并连续多年居世界⾸ 位,吸引外资和对外投资居世界前列。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 194.69642475], + [126.4956, 222.01186878], + [481.690104, 222.01186878], + [481.690104, 194.69642475] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 2, + "parent_id": "66225bf2-20ac-435e-9c46-62fff8d954df", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "UncategorizedText", + "element_id": "b309eaa2-4d44-4f4e-b461-2ee1dd916706", + "text": "——⽣态环境明显改善。单位国内⽣产总值能耗下降8.1%、⼆氧化碳排放下降14.1%。地级及以上城市细颗粒物 (PM2.5)平均浓度下降27.5%,重污染天数下降超过五成,全国地表⽔优良⽔体⽐例由67.9%上升到87.9%。设⽴⾸ 批5个国家公园,建⽴各级各类⾃然保护地9000多处。美丽中国建设迈出重⼤步伐。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 224.18872475], + [126.4956, 252.90856878], + [482.275304, 252.90856878], + [482.275304, 224.18872475] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 2, + "parent_id": "66225bf2-20ac-435e-9c46-62fff8d954df", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "b1a06f48-f43a-4766-b4f7-8123d4ab0f54", + "text": "——⼈⺠⽣活⽔平不断提⾼。居⺠收⼊增⻓与经济增⻓基本同步,全国居⺠⼈均可⽀配收⼊年均增⻓5.1%。居⺠", + "metadata": { + "coordinates": { + "points": [ + [140.5395, 255.08542475000002], + [140.5395, 262.73936877999995], + [485.201101, 262.73936877999995], + [485.201101, 255.08542475000002] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 2, + "parent_id": "49ed84e1-73e8-46c3-86a8-55493a981754", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "af5a8267-7516-4bc4-9764-a89c52edb581", + "text": "消费价格年均上涨2.1%。新增劳动⼒平均受教育年限从13.5年提⾼到14年。基本养⽼保险参保⼈数增加1.4亿、覆盖 10.5亿⼈,基本医保⽔平稳步提⾼。多年累计改造棚户区住房4200多万套,上亿⼈出棚进楼、实现安居。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 264.91612475], + [126.4956, 282.40086878], + [478.179168, 282.40086878], + [478.179168, 264.91612475] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 2, + "parent_id": "49ed84e1-73e8-46c3-86a8-55493a981754", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "5895644d-9add-41f3-9b88-97bd7c3f4e55", + "text": "经过多年精⼼筹办,成功举办了简约、安全、精彩的北京冬奥会、冬残奥会,为促进群众性冰雪运动、促进奥林", + "metadata": { + "coordinates": { + "points": [ + [140.5395, 285.20960178], + [140.5395, 292.23156878000003], + [484.61588300000005, 292.23156878000003], + [484.61588300000005, 285.20960178] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 2, + "parent_id": "49ed84e1-73e8-46c3-86a8-55493a981754", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "a692b3ad-32a5-4541-8441-376d77fcc5ea", + "text": "匹克运动发展、促进世界⼈⺠团结友谊作出重要贡献。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 295.04040177999997], + [126.4956, 302.06236878], + [295.02280800000005, 302.06236878], + [295.02280800000005, 295.04040177999997] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 2, + "parent_id": "49ed84e1-73e8-46c3-86a8-55493a981754", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "bffde616-1f7d-41d2-888e-18ce68c3fa5d", + "text": "新冠疫情发⽣三年多来,以习近平同志为核⼼的党中央始终坚持⼈⺠⾄上、⽣命⾄上,强化医疗资源和物资保 障,全⼒救治新冠患者,有效保护⼈⺠群众⽣命安全和身体健康,因时因势优化调整防控政策措施,全国⼈⺠坚忍不 拔,取得重⼤决定性胜利。在极不平凡的抗疫历程中,各地区各部⻔各单位做了⼤量⼯作,各⾏各业共克时艰,⼴⼤ 医务⼈员不畏艰⾟,特别是亿万⼈⺠克服多重困难,付出和奉献,都⼗分不易,⼤家共同抵御疫情重⼤挑战,⾯对尚 未结束的疫情,仍在不断巩固统筹疫情防控和经济社会发展成果。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 304.87110178], + [126.4956, 351.21606878], + [484.61591699999997, 351.21606878], + [484.61591699999997, 304.87110178] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 2, + "parent_id": "49ed84e1-73e8-46c3-86a8-55493a981754", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "abbbafd9-ace8-4d81-b79f-1fafb9cb0a11", + "text": "各位代表! 五年来,我们深⼊贯彻以习近平同志为核⼼的党中央决策部署,主要做了以下⼯作。 (⼀)创新宏观调控,保持经济运⾏在合理区间。⾯对贸易保护主义抬头、疫情冲击等接踵⽽来的严峻挑战,创 新宏观调控⽅式,不过度依赖投资,统筹运⽤财政货币等政策,增强针对性有效性,直⾯市场变化,重点⽀持市场主 体纾困发展,进⽽稳就业保⺠⽣。把年度主要预期⽬标作为⼀个有机整体来把握,加强区间调控、定向调控、相机调 控、精准调控,既果断加⼤⼒度,⼜不搞“⼤⽔漫灌”、透⽀未来,持续做好“六稳”、“六保”⼯作,强化保居⺠就业、 保基本⺠⽣、保市场主体、保粮⻝能源安全、保产业链供应链稳定、保基层运转,以改⾰开放办法推动经济爬坡过 坎、持续前⾏。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 354.02490178], + [126.4956, 429.86216878], + [484.61591699999997, 429.86216878], + [484.61591699999997, 354.02490178] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 2, + "parent_id": "49ed84e1-73e8-46c3-86a8-55493a981754", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "a98712bd-645e-48a2-8ecd-9503f64112be", + "text": "坚持实施积极的财政政策。合理把握⾚字规模,五年总体⾚字率控制在3%以内,政府负债率控制在50%左右。", + "metadata": { + "coordinates": { + "points": [ + [140.5395, 432.03892475000004], + [140.5395, 439.69286878], + [478.764301, 439.69286878], + [478.764301, 432.03892475000004] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 2, + "parent_id": "49ed84e1-73e8-46c3-86a8-55493a981754", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "969260c6-77be-41cc-940d-2b010c100e0f", + "text": "不断优化⽀出结构,教育科技、⽣态环保、基本⺠⽣等重点领域得到有⼒保障。实施⼤规模减税降费政策,制度性安 排与阶段性措施相结合,疫情发⽣后减税降费⼒度进⼀步加⼤,成为应对冲击的关键举措。彻底完成营改增任务、取 消营业税,将增值税收⼊占⽐最⾼、涉及⾏业⼴泛的税率从17%降⾄13%,阶段性将⼩规模纳税⼈增值税起征点从⽉ 销售额3万元提⾼到15万元、⼩微企业所得税实际最低税负率从10%降⾄2.5%。减税降费公平普惠、⾼效直达,五年 累计减税5.4万亿元、降费2.8万亿元,既帮助企业渡过难关、留得⻘⼭,也放⽔养⻥、涵养税源,年均新增涉税企业 和个体⼯商户等超过1100万户,各年度中央财政收⼊预算都顺利完成,考虑留抵退税因素,全国财政收⼊⼗年接近翻 ⼀番。推动财⼒下沉,中央⼀般公共预算⽀出中对地⽅转移⽀付占⽐提⾼到70%左右,建⽴并常态化实施中央财政资 ⾦直达机制。各级政府坚持过紧⽇⼦,严控⼀般性⽀出,中央部⻔带头压减⽀出,盘活存量资⾦和闲置资产,腾出的 资⾦千⽅百计惠企裕⺠,全国财政⽀出70%以上⽤于⺠⽣。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 442.50170177999996], + [126.4956, 528.1696687799999], + [484.61591699999997, 528.1696687799999], + [484.61591699999997, 442.50170177999996] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 2, + "parent_id": "49ed84e1-73e8-46c3-86a8-55493a981754", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "2cdcc889-e9d2-42c3-9b19-0ed82c4246b4", + "text": "坚持实施稳健的货币政策。根据形势变化灵活把握政策⼒度,保持流动性合理充裕,⽤好降准、再贷款等政策⼯ 具,加⼤对实体经济的有效⽀持,缓解中⼩微企业融资难融资贵等问题。制造业贷款余额从16.3万亿元增加到27.4万 亿元。普惠⼩微贷款余额从8.2万亿元增加到23.8万亿元、年均增⻓24%,贷款平均利率较五年前下降1.5个百分点。加 ⼤清理拖⽋中⼩企业账款⼒度。⼈⺠币汇率在合理均衡⽔平上弹性增强、保持基本稳定。完全化解了历史上承担的国 有商业银⾏和农村信⽤社等14486亿元⾦融改⾰成本。运⽤市场化法治化⽅式,精准处置⼀批⼤型企业集团⻛险,平 稳化解⾼⻛险中⼩⾦融机构⻛险,⼤型⾦融机构健康发展,⾦融体系稳健运⾏,守住了不发⽣系统性⻛险的底线。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 530.97850178], + [126.4956, 587.15416878], + [485.201102, 587.15416878], + [485.201102, 530.97850178] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 2, + "parent_id": "49ed84e1-73e8-46c3-86a8-55493a981754", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "334e2f4d-9f10-4a9d-be8f-4d87f434d96b", + "text": "强化就业优先政策导向。把稳就业作为经济运⾏在合理区间的关键指标。着⼒促进市场化社会化就业,加⼤对企 业稳岗扩岗⽀持⼒度。将养⽼保险单位缴费⽐例从20%降⾄16%,同时充实全国社保基⾦,储备规模从1.8万亿元增加 到2.5万亿元以上。实施失业保险基⾦稳岗返还、留⼯培训补助等政策。持续推进⼤众创业万众创新,连续举办8届全 国双创活动周、超过5.2亿⼈次参与,⿎励以创业带动就业,加强劳动者权益保护,新就业形态和灵活就业成为就业 增收的重要渠道。做好⾼校毕业⽣、退役军⼈、农⺠⼯等群体就业⼯作。使⽤失业保险基⾦等资⾦⽀持技能培训。实 施⾼职扩招和职业技能提升三年⾏动,累计扩招413万⼈、培训8300多万⼈次。就业是⺠⽣之基、财富之源。14亿多 ⼈⼝⼤国保持就业稳定,难能可贵,蕴含着巨⼤创造⼒。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 589.96300178], + [126.4956, 655.9694687799999], + [484.61591699999997, 655.9694687799999], + [484.61591699999997, 589.96300178] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 2, + "parent_id": "49ed84e1-73e8-46c3-86a8-55493a981754", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "7419e913-47ea-4934-bfe8-d899de5f81a8", + "text": "保持物价总体平稳。在应对冲击中没有持续⼤幅增加⾚字规模,也没有超发货币,为物价稳定创造了宏观条件。 下⼤⽓⼒抓农业⽣产,强化产销衔接和储备调节,确保粮⻝和⽣猪、蔬菜等稳定供应,及时解决煤炭电⼒供应紧张问 题,满⾜⺠⽣和⽣产⽤能需求,保障交通物流畅通。加强市场监管,维护正常价格秩序。⼗年来我国居⺠消费价格涨 幅稳定在2%左右的较低⽔平,成如容易却艰⾟,既维护了市场经济秩序、为宏观政策实施提供了空间,⼜有利于更 好保障基本⺠⽣。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 658.77830178], + [126.4956, 705.12328878], + [484.61591699999997, 705.12328878], + [484.61591699999997, 658.77830178] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 2, + "parent_id": "49ed84e1-73e8-46c3-86a8-55493a981754", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "277ddb11-73b6-4065-a3eb-4fb796343a93", + "text": "(⼆)如期打赢脱贫攻坚战,巩固拓展脱贫攻坚成果。全⾯建成⼩康社会最艰巨最繁重的任务在农村特别是在贫 困地区。坚持精准扶贫,聚焦“三区三州”等深度贫困地区,强化政策倾斜⽀持,优先保障脱贫攻坚资⾦投⼊,对脱贫 难度⼤的县和村挂牌督战。深⼊实施产业、就业、⽣态、教育、健康、社会保障等帮扶,加强易地搬迁后续扶持,重 点解决“两不愁三保障”问题,脱贫群众不愁吃、不愁穿,义务教育、基本医疗、住房安全有保障,饮⽔安全也有了保 障。贫困地区农村居⺠收⼊明显增加,⽣产⽣活条件显著改善。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 707.93203178], + [126.4956, 754.27705878], + [484.61591699999997, 754.27705878], + [484.61591699999997, 707.93203178] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 2, + "parent_id": "49ed84e1-73e8-46c3-86a8-55493a981754", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Footer", + "element_id": "ec9e5939-c9aa-4a9f-96ea-16175d352141", + "text": "第2页 共7页", + "metadata": { + "coordinates": { + "points": [ + [0, 781.66], + [0, 792.9], + [52.5, 792], + [52.5, 781.66] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 2, + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Footer", + "element_id": "9b1568ee-8d0e-450b-934d-9bc16b31e4fb", + "text": "2023/8/4, 10:17", + "metadata": { + "coordinates": { + "points": [ + [548.675, 781.66], + [548.675, 791.66], + [612, 791.66], + [612, 781.66] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 2, + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Header", + "element_id": "37bd1dbb-0f51-44f8-b0ca-5573ab633cb7", + "text": "政府⼯作报告 ——2023年3⽉5⽇在第⼗四届全国⼈民代表...", + "metadata": { + "coordinates": { + "points": [ + [0, 1.1599999999999682], + [0, 12.399999999999977], + [267.5, 12.399999999999977], + [267.5, 1.1599999999999682] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 3, + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Header", + "element_id": "2c84b821-a14d-43e1-a128-a0d62660d8e2", + "text": "https://www.gov.cn/gongbao/content/2023/content_5747260.htm", + "metadata": { + "coordinates": { + "points": [ + [351.9875, 1.1599999999999682], + [351.9875, 11.159999999999968], + [612, 11.159999999999968], + [612.0035, 1.1599999999999682] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 3, + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "eb3aaf2d-2ec3-48fa-9ab2-204262de4fa4", + "text": "推动巩固拓展脱贫攻坚成果同乡村振兴有效衔接。保持过渡期内主要帮扶政策总体稳定,严格落实“四个不摘”要 求,建⽴健全防⽌返贫动态监测和帮扶机制,有⼒应对疫情、灾情等不利影响,确保不发⽣规模性返贫。确定并集中 ⽀持160个国家乡村振兴重点帮扶县,加⼤对易地搬迁集中安置区等重点区域⽀持⼒度,坚持并完善东⻄部协作、对 ⼝⽀援、定点帮扶等机制,选派⽤好医疗、教育“组团式”帮扶⼲部⼈才和科技特派员,推动脱贫地区加快发展和群众 稳定增收。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 37.404424749999976], + [126.4956, 84.38136878], + [484.61591699999997, 84.38136878], + [484.61591699999997, 37.404424749999976] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 3, + "parent_id": "2c84b821-a14d-43e1-a128-a0d62660d8e2", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "3c008bb2-3e78-4559-8431-092b50ad8b0c", + "text": "(三)聚焦重点领域和关键环节深化改⾰,更⼤激发市场活⼒和社会创造⼒。坚持社会主义市场经济改⾰⽅向, 处理好政府和市场的关系,使市场在资源配置中起决定性作⽤,更好发挥政府作⽤,推动有效市场和有为政府更好结 合。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 87.19010178000008], + [126.4956, 113.87356877999991], + [484.61591699999997, 113.87356877999991], + [484.61591699999997, 87.19010178000008] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 3, + "parent_id": "2c84b821-a14d-43e1-a128-a0d62660d8e2", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "NarrativeText", + "element_id": "ee63fb3b-e7c9-4ccb-9420-1a00bca9b001", + "text": "持续推进政府职能转变。完成国务院及地⽅政府机构改⾰。加快建设全国统⼀⼤市场,建设⾼标准市场体系,营 造市场化法治化国际化营商环境。⼤道⾄简,政简易⾏。持之以恒推进触动政府⾃身利益的改⾰。进⼀步简政放权, 放宽市场准⼊,全⾯实施市场准⼊负⾯清单制度,清单管理措施⽐制度建⽴之初压减64%,将⾏政许可事项全部纳⼊ 清单管理。多年来取消和下放⾏政许可事项1000多项,中央政府层⾯核准投资项⽬压减90%以上,⼯业产品⽣产许可 证从60类减少到10类,⼯程建设项⽬全流程审批时间压缩到不超过120个⼯作⽇。改⾰商事制度,推⾏“证照分离”改 ⾰,企业开办时间从⼀个⽉以上压缩到⽬前的平均4个⼯作⽇以内,实⾏中⼩微企业简易注销制度。坚持放管结合, 加强事中事后监管,严格落实监管责任,防⽌监管缺位、重放轻管,强化⻝品药品等重点领域质量和安全监管,推⾏ “双随机、⼀公开”等⽅式加强公正监管,规范⾏使⾏政裁量权。加强反垄断和反不正当竞争,全⾯落实公平竞争审查 制度,改⾰反垄断执法体制。依法规范和引导资本健康发展,依法坚决管控资本⽆序扩张。不断优化服务,推进政务 服务集成办理,压减各类证明事项,加快数字政府建设,90%以上的政务服务实现⽹上可办,户籍证明、社保转接等 200多项群众经常办理事项实现跨省通办。取消所有省界⾼速公路收费站。制定实施优化营商环境、市场主体登记管 理、促进个体⼯商户发展、保障中⼩企业款项⽀付等条例。改⾰给⼈们经商办企业更多便利和空间,去年底企业数量 超过5200万户、个体⼯商户超过1.1亿户,市场主体总量超过1.6亿户、是⼗年前的3倍,发展内⽣动⼒明显增强。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 116.68240178000008], + [126.4956, 241.6734687799999], + [484.61591699999997, 241.6734687799999], + [484.61591699999997, 116.68240178000008] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 3, + "parent_id": "3c008bb2-3e78-4559-8431-092b50ad8b0c", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "d7ef80da-2093-468e-9df0-c8d3fb1fcca9", + "text": "促进多种所有制经济共同发展。坚持和完善社会主义基本经济制度,坚持“两个毫不动摇”。完成国企改⾰三年⾏ 动任务,健全现代企业制度,推动国企聚焦主责主业优化重组、提质增效。促进⺠营企业健康发展,破除各种隐性壁 垒,⼀视同仁给予政策⽀持,提振⺠间投资信⼼。完善产权保护制度,保护企业家合法权益,弘扬企业家精神。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 243.85022475000005], + [126.4956, 271.1656687799999], + [484.61591699999997, 271.1656687799999], + [484.61591699999997, 243.85022475000005] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 3, + "parent_id": "2c84b821-a14d-43e1-a128-a0d62660d8e2", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "1b9d8974-fb46-4952-80cc-633e10979974", + "text": "推进财税⾦融体制改⾰。深化预算管理体制改⾰,加⼤预算公开⼒度,推进中央与地⽅财政事权和⽀出责任划分 改⾰,完善地⽅政府债务管理体系,构建综合与分类相结合的个⼈所得税制,进⼀步深化税收征管改⾰。推动⾦融监 管体制改⾰,统筹推进中⼩银⾏补充资本和改⾰化险,推进股票发⾏注册制改⾰,完善资本市场基础制度,加强⾦融 稳定法治建设。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 273.9745017800001], + [126.4956, 310.48866878], + [484.61591699999997, 310.48866878], + [484.61591699999997, 273.9745017800001] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 3, + "parent_id": "2c84b821-a14d-43e1-a128-a0d62660d8e2", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "aade29b7-3d72-479d-9c2d-f4ee67cfc935", + "text": "(四)深⼊实施创新驱动发展战略,推动产业结构优化升级。深化供给侧结构性改⾰,完善国家和地⽅创新体 系,推进科技⾃⽴⾃强,紧紧依靠创新提升实体经济发展⽔平,不断培育壮⼤发展新动能,有效应对外部打压遏制。 增强科技创新引领作⽤。强化国家战略科技⼒量,实施⼀批科技创新重⼤项⽬,加强关键核⼼技术攻关。发挥好 ⾼校、科研院所作⽤,⽀持新型研发机构发展。推进国际和区域科技创新中⼼建设,布局建设综合性国家科学中⼼。 ⽀持基础研究和应⽤基础研究,全国基础研究经费五年增⻓1倍。改⾰科研项⽬和经费管理制度,赋予科研单位和科 研⼈员更⼤⾃主权,努⼒将⼴⼤科技⼈员从繁杂的⾏政事务中解脱出来。加强知识产权保护,激发创新动⼒。促进国 际科技交流合作。通过市场化机制激励企业创新,不断提⾼企业研发费⽤加计扣除⽐例,将制造业企业、科技型中⼩ 企业分别从50%、75%提⾼⾄100%,并阶段性扩⼤到所有适⽤⾏业,对企业投⼊基础研究、购置设备给予政策⽀持, 各类⽀持创新的税收优惠政策年度规模已超过万亿元。创设⽀持创新的⾦融政策⼯具,引导创业投资等发展。企业研 发投⼊保持两位数增⻓,⼀⼤批创新企业脱颖⽽出。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 313.29750178], + [126.4956, 408.79626878], + [484.61591699999997, 408.79626878], + [484.61591699999997, 313.29750178] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 3, + "parent_id": "2c84b821-a14d-43e1-a128-a0d62660d8e2", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "dcbe0c62-a813-4244-a51f-40ee88fb90f6", + "text": "推动产业向中⾼端迈进。把制造业作为发展实体经济的重点,促进⼯业经济平稳运⾏,保持制造业⽐重基本稳 定。严格执⾏环保、质量、安全等法规标准,淘汰落后产能。开展重点产业强链补链⾏动。启动⼀批产业基础再造⼯ 程。⿎励企业加快设备更新和技术改造,将固定资产加速折旧优惠政策扩⼤⾄全部制造业。推动⾼端装备、⽣物医 药、光电⼦信息、新能源汽⻋、光伏、⻛电等新兴产业加快发展。促进数字经济和实体经济深度融合。持续推进⽹络 提速降费,发展“互联⽹+”。移动互联⽹⽤户数增加到14.5亿户。⽀持⼯业互联⽹发展,有⼒促进了制造业数字化智 能化。专精特新中⼩企业达7万多家。促进平台经济健康持续发展,发挥其带动就业创业、拓展消费市场、创新⽣产 模式等作⽤。发展研发设计、现代物流、检验检测认证等⽣产性服务业。加强全⾯质量管理和质量基础设施建设。中 国制造的品质和竞争⼒不断提升。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 411.60500178], + [126.4956, 487.44226878], + [484.61591699999997, 487.44226878], + [484.61591699999997, 411.60500178] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 3, + "parent_id": "2c84b821-a14d-43e1-a128-a0d62660d8e2", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "91ddf99f-440e-45a7-9797-06d64179160f", + "text": "(五)扩⼤国内有效需求,推进区域协调发展和新型城镇化。围绕构建新发展格局,⽴⾜超⼤规模市场优势,坚", + "metadata": { + "coordinates": { + "points": [ + [140.5395, 490.25110178], + [140.5395, 497.27306878], + [484.61588300000005, 497.27306878], + [484.61588300000005, 490.25110178] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 3, + "parent_id": "2c84b821-a14d-43e1-a128-a0d62660d8e2", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "6eb64dfb-2acc-4c38-9619-b7ad0b490347", + "text": "持实施扩⼤内需战略,培育更多经济增⻓动⼒源。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 500.08180178], + [126.4956, 507.10376878], + [280.978874, 507.10376878], + [280.978874, 500.08180178] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 3, + "parent_id": "2c84b821-a14d-43e1-a128-a0d62660d8e2", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "02a2b448-e257-4106-b789-98c8bdfde118", + "text": "着⼒扩⼤消费和有效投资。疫情发⽣前,消费已经成为我国经济增⻓的主要拉动⼒。⾯对需求不⾜甚⾄出现收 缩,推动消费尽快恢复。多渠道促进居⺠增收,提⾼中低收⼊群体收⼊。⽀持汽⻋、家电等⼤宗消费,汽⻋保有量突 破3亿辆、增⻓46.7%。推动线上线下消费深度融合,实物商品⽹上零售额占社会消费品零售总额的⽐重从15.8%提⾼ 到27.2%。发展城市社区便⺠商业,完善农村快递物流配送体系。帮扶旅游业发展。围绕补短板、调结构、增后劲扩 ⼤有效投资。创新投融资体制机制,预算内投资引导和撬动社会投资成倍增加,增加地⽅政府专项债券额度,重点⽀ 持交通、⽔利、能源、信息等基础设施和⺠⽣⼯程建设,⿎励社会资本参与建设运营,调动⺠间投资积极性。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 509.91260178], + [126.4956, 566.08826878], + [484.61591699999997, 566.08826878], + [484.61591699999997, 509.91260178] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 3, + "parent_id": "2c84b821-a14d-43e1-a128-a0d62660d8e2", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "50e641ef-85b8-470b-a596-76b5a5ece9ae", + "text": "增强区域发展平衡性协调性。统筹推进⻄部⼤开发、东北全⾯振兴、中部地区崛起、东部率先发展,中⻄部地区 经济增速总体⾼于东部地区。加⼤对⾰命⽼区、⺠族地区、边疆地区的⽀持⼒度,中央财政对相关地区转移⽀付资⾦ ⽐五年前增⻓66.8%。推进京津冀协同发展、⻓江经济带发展、⻓三⻆⼀体化发展,推动⻩河流域⽣态保护和⾼质量 发展。⾼标准⾼质量建设雄安新区。发展海洋经济。⽀持经济困难地区发展,促进资源型地区转型发展,⿎励有条件 地区更⼤发挥带动作⽤,推动形成更多新的增⻓极增⻓带。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 568.89710178], + [126.4956, 615.24206878], + [484.61591699999997, 615.24206878], + [484.61591699999997, 568.89710178] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 3, + "parent_id": "2c84b821-a14d-43e1-a128-a0d62660d8e2", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "0d788501-b0e9-4535-b508-997cb3d793ee", + "text": "持续推进以⼈为核⼼的新型城镇化。我国仍处于城镇化进程中,每年有上千万农村⼈⼝转移到城镇。完善城市特", + "metadata": { + "coordinates": { + "points": [ + [140.5395, 618.05090178], + [140.5395, 625.07286878], + [484.61588300000005, 625.07286878], + [484.61588300000005, 618.05090178] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 3, + "parent_id": "2c84b821-a14d-43e1-a128-a0d62660d8e2", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "2b552ff5-c41b-4311-8068-a3be5feb48af", + "text": "别是县城功能,增强综合承载能⼒。分类放宽或取消城镇落户限制,⼗年1.4亿农村⼈⼝在城镇落户。有序发展城市 群和都市圈,促进⼤中⼩城市协调发展。推动成渝地区双城经济圈建设。坚持房⼦是⽤来住的、不是⽤来炒的定位, 建⽴实施房地产⻓效机制,扩⼤保障性住房供给,推进⻓租房市场建设,稳地价、稳房价、稳预期,因城施策促进房 地产市场健康发展。加强城市基础设施建设,轨道交通运营⾥程从4500多公⾥增加到近1万公⾥,排⽔管道从63万公 ⾥增加到89万公⾥。改造城镇⽼旧⼩区16.7万个,惠及2900多万家庭。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 627.24962475], + [126.4956, 674.22656878], + [484.61591699999997, 674.22656878], + [484.61591699999997, 627.24962475] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 3, + "parent_id": "2c84b821-a14d-43e1-a128-a0d62660d8e2", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "c6fad870-9fae-4d9b-a1c1-0b852be6d845", + "text": "(六)保障国家粮⻝安全,⼤⼒实施乡村振兴战略。完善强农惠农政策,持续抓紧抓好农业⽣产,加快推进农业", + "metadata": { + "coordinates": { + "points": [ + [140.5395, 677.03540178], + [140.5395, 684.05736878], + [484.61588300000005, 684.05736878], + [484.61588300000005, 677.03540178] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 3, + "parent_id": "2c84b821-a14d-43e1-a128-a0d62660d8e2", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "3d024bc5-59d9-4f09-87c4-d4bf09f4a237", + "text": "农村现代化。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 686.86610178], + [126.4956, 693.88806878], + [168.627402, 693.88806878], + [168.627402, 686.86610178] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 3, + "parent_id": "2c84b821-a14d-43e1-a128-a0d62660d8e2", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "0fecb10b-c690-493f-877d-b4328b5ab046", + "text": "提升农业综合⽣产能⼒。稳定和扩⼤粮⻝播种⾯积,扩种⼤⾖油料,优化⽣产结构布局,提⾼单产和品质。完善 粮⻝⽣产⽀持政策,稳定种粮农⺠补贴,合理确定稻⾕、⼩⻨最低收购价,加⼤对产粮⼤县奖励⼒度,健全政策性农 业保险制度。加强耕地保护,实施⿊⼟地保护⼯程,完善⽔利设施,新建⾼标准农⽥4.56亿亩。推进国家粮⻝安全产 业带建设。加快种业、农机等科技创新和推⼴应⽤,农作物耕种收综合机械化率从67%提⾼到73%。全⾯落实粮⻝安 全党政同责,强化粮⻝和重要农产品稳产保供,始终不懈地把14亿多中国⼈的饭碗牢牢端在⾃⼰⼿中。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 696.69691178], + [126.4956, 743.04186878], + [484.61591699999997, 743.04186878], + [484.61591699999997, 696.69691178] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 3, + "parent_id": "2c84b821-a14d-43e1-a128-a0d62660d8e2", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Footer", + "element_id": "dd62fe71-af87-4eec-a1ed-bfa61a5341ac", + "text": "扎实推进农村改⾰发展。巩固和完善农村基本经营制度,完成承包地确权登记颁证和农村集体产权制度改⾰阶段", + "metadata": { + "coordinates": { + "points": [ + [140.5395, 745.8506817800001], + [140.5395, 752.87264878], + [484.61588300000005, 752.87264878], + [484.61588300000005, 745.8506817800001] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 3, + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Footer", + "element_id": "23e6d28e-be6e-4344-a07a-b05cf0c533ae", + "text": "第3页 共7页", + "metadata": { + "coordinates": { + "points": [ + [0, 781.66], + [0, 792.9], + [52.5, 792], + [52.5, 781.66] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 3, + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Footer", + "element_id": "635e5f2b-db06-4921-b0f3-388c325b4260", + "text": "2023/8/4, 10:17", + "metadata": { + "coordinates": { + "points": [ + [548.675, 781.66], + [548.675, 791.66], + [612, 791.66], + [612, 781.66] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 3, + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Header", + "element_id": "a7bc89fe-6dee-48a7-97f2-1ce2af6bf4b3", + "text": "政府⼯作报告 ——2023年3⽉5⽇在第⼗四届全国⼈民代表...", + "metadata": { + "coordinates": { + "points": [ + [0, 1.1599999999999682], + [0, 12.399999999999977], + [267.5, 12.399999999999977], + [267.5, 1.1599999999999682] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 4, + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Header", + "element_id": "47f900de-67ac-461d-b077-eb438cb1f2f6", + "text": "https://www.gov.cn/gongbao/content/2023/content_5747260.htm", + "metadata": { + "coordinates": { + "points": [ + [351.9875, 1.1599999999999682], + [351.9875, 11.159999999999968], + [612, 11.159999999999968], + [612.0035, 1.1599999999999682] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 4, + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "4b6fb609-893c-4c42-ac0c-a2d79794ba9f", + "text": "性任务,稳步推进多种形式适度规模经营,抓好家庭农场和农⺠合作社发展,加快发展农业社会化服务。启动乡村建 设⾏动,持续整治提升农村⼈居环境,加强⽔电路⽓信邮等基础设施建设,实现符合条件的乡镇和建制村通硬化路、 通客⻋,农村⾃来⽔普及率从80%提⾼到87%,多年累计改造农村危房2400多万户。深化供销合作社、集体林权、农 垦等改⾰。⽴⾜特⾊资源发展乡村产业,促进农⺠就业创业增收。为保障农⺠⼯及时拿到应得报酬,持续强化农⺠⼯ ⼯资拖⽋治理,出台实施保障农⺠⼯⼯资⽀付条例,严厉打击恶意拖⽋⾏为。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 38.036401780000006], + [126.4956, 84.38136878], + [484.61591699999997, 84.38136878], + [484.61591699999997, 38.036401780000006] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 4, + "parent_id": "47f900de-67ac-461d-b077-eb438cb1f2f6", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "2f10c235-cec7-4164-9cf3-f1349b870bca", + "text": "(七)坚定扩⼤对外开放,深化互利共赢的国际经贸合作。⾯对外部环境变化,实⾏更加积极主动的开放战略,", + "metadata": { + "coordinates": { + "points": [ + [140.5395, 87.19010178000008], + [140.5395, 94.21206877999998], + [484.61588300000005, 94.21206877999998], + [484.61588300000005, 87.19010178000008] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 4, + "parent_id": "47f900de-67ac-461d-b077-eb438cb1f2f6", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "d92dd588-1155-4bcb-ab57-04b869db70fa", + "text": "以⾼⽔平开放更有⼒促改⾰促发展。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 97.02090178000003], + [126.4956, 104.04286877999994], + [238.847072, 104.04286877999994], + [238.847072, 97.02090178000003] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 4, + "parent_id": "47f900de-67ac-461d-b077-eb438cb1f2f6", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "c78dc262-2737-4a43-8b7c-bf011c9ab26e", + "text": "推动进出⼝稳中提质。加⼤出⼝退税、信保、信贷等政策⽀持⼒度,企业出⼝退税办理时间压缩⾄6个⼯作⽇以 内。优化外汇服务。发展外贸新业态,新设152个跨境电商综试区,⽀持建设⼀批海外仓。发挥进博会、⼴交会、服 贸会、消博会等重⼤展会作⽤。推进通关便利化,进⼝、出⼝通关时间分别压减67%和92%,进出⼝环节合规成本明 显下降。关税总⽔平从9.8%降⾄7.4%。全⾯深化服务贸易创新发展试点,推出跨境服务贸易负⾯清单。进出⼝稳定 增⻓有⼒⽀撑了经济发展。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 106.21962474999998], + [126.4956, 153.19666877999998], + [482.27533700000004, 153.19666877999998], + [482.27533700000004, 106.21962474999998] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 4, + "parent_id": "47f900de-67ac-461d-b077-eb438cb1f2f6", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "d2ce32fb-1f6b-4197-9d82-910d1cc55a6e", + "text": "积极有效利⽤外资。出台外商投资法实施条例,不断优化外商投资环境。持续放宽外资市场准⼊,全国和⾃由贸 易试验区负⾯清单条数分别压减51%、72%,制造业领域基本全⾯放开,⾦融等服务业开放⽔平不断提升。已设21个 ⾃由贸易试验区,海南⾃由贸易港建设稳步推进。各地创新⽅式加强外资促进服务,加⼤招商引资和项⽬对接⼒度。 ⼀批外资⼤项⽬落地,我国持续成为外商投资兴业的热⼟。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 156.00540178000006], + [126.4956, 192.51966877999996], + [484.61591699999997, 192.51966877999996], + [484.61591699999997, 156.00540178000006] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 4, + "parent_id": "47f900de-67ac-461d-b077-eb438cb1f2f6", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "7276fe25-7abf-4a22-8d70-8e05fc621d25", + "text": "推动⾼质量共建“⼀带⼀路”。坚持共商共建共享,遵循市场原则和国际通⾏规则,实施⼀批互联互通和产能合作 项⽬,对沿线国家货物进出⼝额年均增⻓13.4%,各领域交流合作不断深化。推进⻄部陆海新通道建设。引导对外投 资健康有序发展,加强境外⻛险防控。新签和升级6个⾃贸协定,与⾃贸伙伴货物进出⼝额占⽐从26%提升⾄35%左 右。坚定维护多边贸易体制,反对贸易保护主义,稳妥应对经贸摩擦,促进贸易和投资⾃由化便利化。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 194.69642475], + [126.4956, 231.84266877999994], + [483.8259790000001, 231.84266877999994], + [483.8259790000001, 194.69642475] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 4, + "parent_id": "47f900de-67ac-461d-b077-eb438cb1f2f6", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "0ba1c308-f163-400d-aedb-4126bbf4299b", + "text": "(⼋)加强⽣态环境保护,促进绿⾊低碳发展。坚持绿⽔⻘⼭就是⾦⼭银⼭的理念,健全⽣态⽂明制度体系,处", + "metadata": { + "coordinates": { + "points": [ + [140.5395, 234.65150178], + [140.5395, 241.6734687799999], + [484.61588300000005, 241.6734687799999], + [484.61588300000005, 234.65150178] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 4, + "parent_id": "47f900de-67ac-461d-b077-eb438cb1f2f6", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "341b42d0-8590-4b34-8784-b9efaf4a2626", + "text": "理好发展和保护的关系,不断提升可持续发展能⼒。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 244.48220178000008], + [126.4956, 251.50416878], + [288.00084100000004, 251.50416878], + [288.00084100000004, 244.48220178000008] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 4, + "parent_id": "47f900de-67ac-461d-b077-eb438cb1f2f6", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "54b66b42-e236-4674-a43e-452af2c6f4f4", + "text": "加强污染治理和⽣态建设。坚持精准治污、科学治污、依法治污,深⼊推进污染防治攻坚。注重多污染物协同治 理和区域联防联控,地级及以上城市空⽓质量优良天数⽐例达86.5%、上升4个百分点。基本消除地级及以上城市⿊臭 ⽔体,推进重要河湖、近岸海域污染防治。加⼤⼟壤污染⻛险防控和修复⼒度,强化固体废物和新污染物治理。全⾯ 划定耕地和永久基本农⽥保护红线、⽣态保护红线和城镇开发边界。坚持⼭⽔林⽥湖草沙⼀体化保护和系统治理,实 施⼀批重⼤⽣态⼯程,全⾯推⾏河湖⻓制、林⻓制。推动共抓⻓江⼤保护,深⼊实施⻓江流域重点⽔域⼗年禁渔。加 强⽣物多样性保护。完善⽣态保护补偿制度。森林覆盖率达到24%,草原综合植被盖度和湿地保护率均达50%以上, ⽔⼟流失、荒漠化、沙化⼟地⾯积分别净减少10.6万、3.8万、3.3万平⽅公⾥。⼈⺠群众越来越多享受到蓝天⽩云、 绿⽔⻘⼭。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 254.31300178000004], + [126.4956, 330.15016878], + [485.20110600000004, 330.15016878], + [485.20110600000004, 254.31300178000004] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 4, + "parent_id": "47f900de-67ac-461d-b077-eb438cb1f2f6", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "dafc342f-23c8-4cbe-b2ab-a485abbc2e46", + "text": "稳步推进节能降碳。统筹能源安全稳定供应和绿⾊低碳发展,科学有序推进碳达峰碳中和。优化能源结构,实现", + "metadata": { + "coordinates": { + "points": [ + [140.5395, 332.95900178], + [140.5395, 339.98096878], + [484.61588300000005, 339.98096878], + [484.61588300000005, 332.95900178] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 4, + "parent_id": "47f900de-67ac-461d-b077-eb438cb1f2f6", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "bcc787ba-866b-447b-9ada-9f1a2c95c6af", + "text": "超低排放的煤电机组超过10.5亿千瓦,可再⽣能源装机规模由6.5亿千瓦增⾄12亿千瓦以上,清洁能源消费占⽐由 20.8%上升到25%以上。全⾯加强资源节约⼯作,发展绿⾊产业和循环经济,促进节能环保技术和产品研发应⽤。提 升⽣态系统碳汇能⼒。加强绿⾊发展⾦融⽀持。完善能耗考核⽅式。积极参与应对⽓候变化国际合作,为推动全球⽓ 候治理作出了中国贡献。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 342.15782475000003], + [126.4956, 379.30396878], + [484.61591699999997, 379.30396878], + [484.61591699999997, 342.15782475000003] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 4, + "parent_id": "47f900de-67ac-461d-b077-eb438cb1f2f6", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "5b5a6449-04b5-4611-9485-dc1e4055ca23", + "text": "(九)切实保障和改善⺠⽣,加快社会事业发展。贯彻以⼈⺠为中⼼的发展思想,持续增加⺠⽣投⼊,着⼒保基", + "metadata": { + "coordinates": { + "points": [ + [140.5395, 382.11280178], + [140.5395, 389.13476878], + [484.61588300000005, 389.13476878], + [484.61588300000005, 382.11280178] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 4, + "parent_id": "47f900de-67ac-461d-b077-eb438cb1f2f6", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "1360318b-749f-4472-9e97-2c96496e3c4b", + "text": "本、兜底线、促公平,提升公共服务⽔平,推进基本公共服务均等化,在发展中不断增进⺠⽣福祉。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 391.94350177999996], + [126.4956, 398.96546878], + [435.46214800000007, 398.96546878], + [435.46214800000007, 391.94350177999996] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 4, + "parent_id": "47f900de-67ac-461d-b077-eb438cb1f2f6", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "2334206f-cc65-4ae4-a042-b0f00cf9e2db", + "text": "促进教育公平和质量提升。百年⼤计,教育为本。财政性教育经费占国内⽣产总值⽐例每年都保持在4%以上,", + "metadata": { + "coordinates": { + "points": [ + [140.5395, 401.14232475], + [140.5395, 408.79626878], + [479.934601, 408.79626878], + [479.934601, 401.14232475] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 4, + "parent_id": "47f900de-67ac-461d-b077-eb438cb1f2f6", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "26dbdd46-5806-44ad-9551-ac7a7f976a5c", + "text": "学⽣⼈均经费投⼊⼤幅增加。持续加强农村义务教育薄弱环节建设,基本消除城镇⼤班额,推动解决进城务⼯⼈员⼦ ⼥⼊学问题,义务教育巩固率由93.8%提⾼到95.5%。坚持义务教育由国家统⼀实施,引导规范⺠办教育发展。减轻 义务教育阶段学⽣负担。提升⻘少年健康⽔平。持续实施营养改善计划,每年惠及3700多万学⽣。保障教师特别是乡 村教师⼯资待遇。多渠道增加幼⼉园供给。⾼中阶段教育⽑⼊学率提⾼到90%以上。职业教育适应性增强,职业院校 办学条件持续改善。积极稳妥推进⾼考综合改⾰,⾼等教育⽑⼊学率从45.7%提⾼到59.6%,⾼校招⽣持续加⼤对中 ⻄部地区和农村地区倾斜⼒度。⼤幅提⾼经济困难⾼校学⽣国家助学贷款额度。深⼊实施“强基计划”和基础学科拔尖 ⼈才培养计划,建设288个基础学科拔尖学⽣培养基地,接续推进世界⼀流⼤学和⼀流学科建设,不断夯实发展的⼈ 才基础。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 411.60500178], + [126.4956, 487.44226878], + [484.615971, 487.44226878], + [484.615971, 411.60500178] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 4, + "parent_id": "47f900de-67ac-461d-b077-eb438cb1f2f6", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "97e5e3b0-70e3-4ef1-b520-d4dec93d7c0a", + "text": "提升医疗卫⽣服务能⼒。深⼊推进和努⼒普及健康中国⾏动,深化医药卫⽣体制改⾰,把基本医疗卫⽣制度作为 公共产品向全⺠提供,进⼀步缓解群众看病难、看病贵问题。持续提⾼基本医保和⼤病保险⽔平,城乡居⺠医保⼈均 财政补助标准从450元提⾼到610元。将更多群众急需药品纳⼊医保报销范围。住院和⻔诊费⽤实现跨省直接结算,惠 及5700多万⼈次。推⾏药品和医⽤耗材集中带量采购,降低费⽤负担超过4000亿元。设置13个国家医学中⼼,布局建 设76个国家区域医疗中⼼。全⾯推开公⽴医院综合改⾰,持续提升县域医疗卫⽣服务能⼒,完善分级诊疗体系。优化 ⽼年⼈等群体就医服务。促进中医药传承创新发展、惠及⺠⽣。基本公共卫⽣服务经费⼈均财政补助标准从50元提⾼ 到84元。坚持预防为主,加强重⼤慢性病健康管理。改⾰完善疾病预防控制体系,组建国家疾病预防控制局,健全重 ⼤疫情防控救治和应急物资保障体系,努⼒保障⼈⺠健康。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 490.25110178], + [126.4956, 566.08826878], + [484.616001, 566.08826878], + [484.616001, 490.25110178] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 4, + "parent_id": "47f900de-67ac-461d-b077-eb438cb1f2f6", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "cb5e3b26-270d-477f-a380-d52915cc2b7c", + "text": "加强社会保障和服务。建⽴基本养⽼保险基⾦中央调剂制度,连续上调退休⼈员基本养⽼⾦,提⾼城乡居⺠基础 养⽼⾦最低标准,稳步提升城乡低保、优待抚恤、失业和⼯伤保障等标准。积极应对⼈⼝⽼龄化,推动⽼龄事业和养 ⽼产业发展。发展社区和居家养⽼服务,加强配套设施和⽆障碍设施建设,在税费、⽤房、⽔电⽓价格等⽅⾯给予政 策⽀持。推进医养结合,稳步推进⻓期护理保险制度试点。实施三孩⽣育政策及配套⽀持措施。完善退役军⼈管理保 障制度,提⾼保障⽔平。加强妇⼥、⼉童权益保障。完善未成年⼈保护制度。健全残疾⼈保障和关爱服务体系。健全 社会救助体系,加强低收⼊⼈⼝动态监测,对遇困⼈员及时给予帮扶,年均临时救助1100万⼈次,坚决兜住了困难群 众基本⽣活保障⽹。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 568.89710178], + [126.4956, 634.90356878], + [484.61591699999997, 634.90356878], + [484.61591699999997, 568.89710178] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 4, + "parent_id": "47f900de-67ac-461d-b077-eb438cb1f2f6", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "b0a562ab-1227-48f0-9bb1-6af2ed0f153a", + "text": "丰富⼈⺠群众精神⽂化⽣活。培育和践⾏社会主义核⼼价值观。深化群众性精神⽂明创建。发展新闻出版、⼴播 影视、⽂学艺术、哲学社会科学和档案等事业,加强智库建设。扎实推进媒体深度融合。提升国际传播效能。加强和 创新互联⽹内容建设。弘扬中华优秀传统⽂化,加强⽂物和⽂化遗产保护传承。实施⽂化惠⺠⼯程,公共图书馆、博 物馆、美术馆、⽂化馆站向社会免费开放。深⼊推进全⺠阅读。⽀持⽂化产业发展。加强国家科普能⼒建设。体育健 ⼉勇创佳绩,全⺠健身⼴泛开展。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 637.7124017799999], + [126.4956, 684.05736878], + [484.61591699999997, 684.05736878], + [484.61591699999997, 637.7124017799999] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 4, + "parent_id": "47f900de-67ac-461d-b077-eb438cb1f2f6", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "49513d23-5fc3-44f3-9eac-959c7a13377f", + "text": "(⼗)推进政府依法履职和社会治理创新,保持社会⼤局稳定。加强法治政府建设,使经济社会活动更好在法治 轨道上运⾏。坚持依法⾏政、⼤道为公,严格规范公正⽂明执法,政府的权⼒来⾃⼈⺠,有权不可任性,⽤权必受监 督。推动完善法律法规和规章制度,提请全国⼈⼤常委会审议法律议案50件,制定修订⾏政法规180件次。依法接受 同级⼈⼤及其常委会的监督,⾃觉接受⼈⺠政协的⺠主监督,主动接受社会和舆论监督。认真办理⼈⼤代表建议和政 协委员提案。加强审计、统计监督。持续深化政务公开。开展国务院⼤督查。⽀持⼯会、共⻘团、妇联等群团组织更 好发挥作⽤。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 686.86610178], + [126.4956, 743.04186878], + [484.61591699999997, 743.04186878], + [484.61591699999997, 686.86610178] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 4, + "parent_id": "47f900de-67ac-461d-b077-eb438cb1f2f6", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Footer", + "element_id": "7b336af7-e8b8-4ea0-b85c-658ca6158392", + "text": "加强和创新社会治理。推动市域社会治理现代化,完善基层治理,优化社区服务。⽀持社会组织、⼈道救助、社", + "metadata": { + "coordinates": { + "points": [ + [140.5395, 745.8506817800001], + [140.5395, 752.87264878], + [484.61588300000005, 752.87264878], + [484.61588300000005, 745.8506817800001] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 4, + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Footer", + "element_id": "8e2325f2-5da0-4206-ad54-bb72827d539a", + "text": "第4页 共7页", + "metadata": { + "coordinates": { + "points": [ + [0, 781.66], + [0, 792.9], + [52.5, 792], + [52.5, 781.66] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 4, + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Footer", + "element_id": "0b41d6bb-2baf-4a68-bb1d-62e43e9b46f1", + "text": "2023/8/4, 10:17", + "metadata": { + "coordinates": { + "points": [ + [548.675, 781.66], + [548.675, 791.66], + [612, 791.66], + [612, 781.66] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 4, + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Header", + "element_id": "17e2bb9a-18e1-42cd-ae43-434c478e3e58", + "text": "政府⼯作报告 ——2023年3⽉5⽇在第⼗四届全国⼈民代表...", + "metadata": { + "coordinates": { + "points": [ + [0, 1.1599999999999682], + [0, 12.399999999999977], + [267.5, 12.399999999999977], + [267.5, 1.1599999999999682] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 5, + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Header", + "element_id": "9ef83c0c-6525-4ac6-84d2-274d16e9d9fc", + "text": "https://www.gov.cn/gongbao/content/2023/content_5747260.htm", + "metadata": { + "coordinates": { + "points": [ + [351.9875, 1.1599999999999682], + [351.9875, 11.159999999999968], + [612, 11.159999999999968], + [612.0035, 1.1599999999999682] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 5, + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "e94b1f68-2781-4c7f-a5ff-5ee8a4a31d6a", + "text": "会⼯作、志愿服务、公益慈善等健康发展。深⼊推进信访积案化解。推进社会信⽤体系建设。完善公共法律服务体 系。严格⻝品、药品尤其是疫苗监管。开展安全⽣产专项整治。改⾰和加强应急管理,提⾼防灾减灾救灾能⼒,做好 洪涝⼲旱、森林草原⽕灾、地质灾害、地震等防御和⽓象服务。深⼊推进国家安全体系和能⼒建设。加强⽹络、数据 安全和个⼈信息保护。持续加强社会治安综合治理,严厉打击各类违法犯罪,开展扫⿊除恶专项⽃争,依法严惩⿊恶 势⼒及其“保护伞”,平安中国、法治中国建设取得新进展。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 38.036401780000006], + [126.4956, 84.38136878], + [484.61591699999997, 84.38136878], + [484.61591699999997, 38.036401780000006] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 5, + "parent_id": "9ef83c0c-6525-4ac6-84d2-274d16e9d9fc", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "37624dbd-1948-4cf7-914f-417435b3341a", + "text": "各位代表! 五年来,各级政府认真贯彻落实党中央全⾯从严治党战略部署,扎实开展“不忘初⼼、牢记使命”主题教育和党史 学习教育,弘扬伟⼤建党精神,严格落实中央⼋项规定精神,持之以恒纠治“四⻛”,重点纠治形式主义、官僚主义, “三公”经费⼤幅压减。严厉惩处违规建设楼堂馆所和偷税逃税等⾏为。加强廉洁政府建设。政府⼯作⼈员⾃觉接受法 律监督、监察监督和⼈⺠监督。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 87.19010178000008], + [126.4956, 133.53516877999994], + [483.826005, 133.53516877999994], + [483.826005, 87.19010178000008] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 5, + "parent_id": "9ef83c0c-6525-4ac6-84d2-274d16e9d9fc", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "cd01e3bd-bae7-4ff9-87d6-c297d4322e3f", + "text": "做好经济社会发展⼯作,没有捷径,实⼲为要。五年来,坚持以习近平新时代中国特⾊社会主义思想为指导,全 ⾯贯彻党的基本理论、基本路线、基本⽅略。坚持以经济建设为中⼼,着⼒推动⾼质量发展,事不畏难、⾏不避艰, 要求以实⼲践⾏承诺,凝⼼聚⼒抓发展;以⺠之所望为施政所向,始终把⼈⺠放在⼼中最⾼位置,⼀切以⼈⺠利益为 重,仔细倾听群众呼声,深⼊了解群众冷暖,着⼒解决⼈⺠群众急难愁盼问题;坚持实事求是,尊重客观规律,坚决 反对空谈浮夸、做表⾯⽂章、搞形象⼯程甚⾄盲⽬蛮⼲;以改⾰的办法、锲⽽不舍的精神解难题、激活⼒,激励敢于 担当,对庸政懒政者问责。尊重⼈⺠群众⾸创精神,充分调动各⽅⾯积极性,进⽽汇聚起推动发展的强⼤⼒量。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 136.34390178], + [126.4956, 192.51966877999996], + [484.61591699999997, 192.51966877999996], + [484.61591699999997, 136.34390178] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 5, + "parent_id": "9ef83c0c-6525-4ac6-84d2-274d16e9d9fc", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "59aa85bc-0f90-4341-bb3c-3f8cd6737e2d", + "text": "各位代表! 过去五年,⺠族、宗教、侨务等⼯作创新完善。巩固和发展平等团结互助和谐的社会主义⺠族关系,⺠族团结进 步呈现新⽓象。贯彻党的宗教⼯作基本⽅针,推进我国宗教中国化逐步深⼊。持续做好侨务⼯作,充分发挥海外侨胞 在参与祖国现代化建设中的独特优势和重要作⽤。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 195.32840178000004], + [126.4956, 231.84266877999994], + [484.61591699999997, 231.84266877999994], + [484.61591699999997, 195.32840178000004] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 5, + "parent_id": "9ef83c0c-6525-4ac6-84d2-274d16e9d9fc", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "1673f476-8bfc-4d69-84c5-a8903a48f7dd", + "text": "坚持党对⼈⺠军队的绝对领导,国防和军队建设取得⼀系列新的重⼤成就、发⽣⼀系列重⼤变⾰。⼈⺠军队深⼊ 推进政治建军、改⾰强军、科技强军、⼈才强军、依法治军,深⼊推进练兵备战,现代化⽔平和实战能⼒显著提升。 坚定灵活开展军事⽃争,有效遂⾏边防⽃争、海上维权、反恐维稳、抢险救灾、抗击疫情、维和护航等重⼤任务,提 升国防动员能⼒,有⼒维护了国家主权、安全、发展利益。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 234.65150178], + [126.4956, 271.1656687799999], + [484.61591699999997, 271.1656687799999], + [484.61591699999997, 234.65150178] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 5, + "parent_id": "9ef83c0c-6525-4ac6-84d2-274d16e9d9fc", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "dcac206a-6734-4c3a-a873-0e30f19dccac", + "text": "港澳台⼯作取得新进展。依照宪法和基本法有效实施对特别⾏政区的全⾯管治权,制定实施⾹港特别⾏政区维护 国家安全法,落实“爱国者治港”、“爱国者治澳”原则,推动⾹港进⼊由乱到治⾛向由治及兴的新阶段。深⼊推进粤港 澳⼤湾区建设,⽀持港澳发展经济、改善⺠⽣、防控疫情、保持稳定。贯彻新时代党解决台湾问题的总体⽅略,坚决 开展反分裂、反⼲涉重⼤⽃争,持续推动两岸关系和平发展。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 273.9745017800001], + [126.4956, 310.48866878], + [484.61591699999997, 310.48866878], + [484.61591699999997, 273.9745017800001] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 5, + "parent_id": "9ef83c0c-6525-4ac6-84d2-274d16e9d9fc", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "20ad2167-8770-4771-9eb2-54ffc1c1de3e", + "text": "中国特⾊⼤国外交全⾯推进。习近平主席等党和国家领导⼈出访多国,通过线上和线下⽅式出席⼆⼗国集团领导 ⼈峰会、亚太经合组织领导⼈⾮正式会议、联合国成⽴75周年系列⾼级别会议、东亚合作领导⼈系列会议、中欧领导 ⼈会晤等⼀系列重⼤外交活动。成功举办上合组织⻘岛峰会、⾦砖国家领导⼈会晤、全球发展⾼层对话会、“⼀带⼀ 路”国际合作⾼峰论坛、中⾮合作论坛北京峰会等多场重⼤主场外交活动。坚持敢于⽃争、善于⽃争,坚决维护我国 主权、安全、发展利益。积极拓展全球伙伴关系,致⼒于建设开放型世界经济,维护多边主义,推动构建⼈类命运共 同体。中国作为负责任⼤国,在推进国际抗疫合作、解决全球性挑战和地区热点问题上发挥了重要建设性作⽤,为促 进世界和平与发展作出重要贡献。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 313.29750178], + [126.4956, 379.30396878], + [484.615942, 379.30396878], + [484.615942, 313.29750178] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 5, + "parent_id": "9ef83c0c-6525-4ac6-84d2-274d16e9d9fc", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "a98dda0a-626d-4a3a-ad52-7739623ee828", + "text": "各位代表! 这些年我国发展取得的成就,是以习近平同志为核⼼的党中央坚强领导的结果,是习近平新时代中国特⾊社会主", + "metadata": { + "coordinates": { + "points": [ + [140.5395, 382.11280178], + [140.5395, 398.96546878], + [484.61588300000005, 398.96546878], + [484.61588300000005, 382.11280178] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 5, + "parent_id": "9ef83c0c-6525-4ac6-84d2-274d16e9d9fc", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "0ee4cf1d-b57e-4147-bac0-9430a17be0cb", + "text": "义思想科学指引的结果,是全党全军全国各族⼈⺠团结奋⽃的结果。我代表国务院,向全国各族⼈⺠,向各⺠主党 派、各⼈⺠团体和各界⼈⼠,表示诚挚感谢!向⾹港特别⾏政区同胞、澳⻔特别⾏政区同胞、台湾同胞和海外侨胞, 表示诚挚感谢!向关⼼和⽀持中国现代化建设的各国政府、国际组织和各国朋友,表示诚挚感谢!", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 401.77430178], + [126.4956, 428.45776878], + [484.61591699999997, 428.45776878], + [484.61591699999997, 401.77430178] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 5, + "parent_id": "9ef83c0c-6525-4ac6-84d2-274d16e9d9fc", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "7a47051c-047a-447e-83a0-88a35755d9a1", + "text": "在看到发展成就的同时,我们也清醒认识到,我国是⼀个发展中⼤国,仍处于社会主义初级阶段,发展不平衡不 充分问题仍然突出。当前发展⾯临诸多困难挑战。外部环境不确定性加⼤,全球通胀仍处于⾼位,世界经济和贸易增 ⻓动能减弱,外部打压遏制不断上升。国内经济增⻓企稳向上基础尚需巩固,需求不⾜仍是突出⽭盾,⺠间投资和⺠ 营企业预期不稳,不少中⼩微企业和个体⼯商户困难较⼤,稳就业任务艰巨,⼀些基层财政收⽀⽭盾较⼤。房地产市 场⻛险隐患较多,⼀些中⼩⾦融机构⻛险暴露。发展仍有不少体制机制障碍。科技创新能⼒还不强。⽣态环境保护任 重道远。防灾减灾等城乡基础设施仍有明显薄弱环节。⼀些⺠⽣领域存在不少短板。形式主义、官僚主义现象仍较突 出,有的地⽅政策执⾏“⼀⼑切”、层层加码,有的⼲部不作为、乱作为、简单化,存在脱离实际、违背群众意愿、漠 视群众合法权益等问题。⼀些领域、⾏业、地⽅腐败现象时有发⽣。⼈⺠群众对政府⼯作还有⼀些意⻅和建议应予重 视。要直⾯问题挑战,尽⼼竭⼒改进政府⼯作,不负⼈⺠重托。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 431.26660178], + [126.4956, 516.9345687800001], + [484.61591699999997, 516.9345687800001], + [484.61591699999997, 431.26660178] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 5, + "parent_id": "9ef83c0c-6525-4ac6-84d2-274d16e9d9fc", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "440ccd69-c162-45aa-a903-5a7efe90dc36", + "text": "⼆、对今年政府⼯作的建议", + "metadata": { + "coordinates": { + "points": [ + [263.8628, 529.57410178], + [263.8628, 536.59606878], + [348.126404, 536.59606878], + [348.126404, 529.57410178] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 5, + "parent_id": "9ef83c0c-6525-4ac6-84d2-274d16e9d9fc", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "7352dd5d-6002-45aa-88c3-03eb69c378c6", + "text": "今年是全⾯贯彻党的⼆⼗⼤精神的开局之年。做好政府⼯作,要在以习近平同志为核⼼的党中央坚强领导下,以 习近平新时代中国特⾊社会主义思想为指导,全⾯贯彻落实党的⼆⼗⼤精神,按照中央经济⼯作会议部署,扎实推进 中国式现代化,坚持稳中求进⼯作总基调,完整、准确、全⾯贯彻新发展理念,加快构建新发展格局,着⼒推动⾼质 量发展,更好统筹国内国际两个⼤局,更好统筹疫情防控和经济社会发展,更好统筹发展和安全,全⾯深化改⾰开 放,⼤⼒提振市场信⼼,把实施扩⼤内需战略同深化供给侧结构性改⾰有机结合起来,突出做好稳增⻓、稳就业、稳 物价⼯作,有效防范化解重⼤⻛险,推动经济运⾏整体好转,实现质的有效提升和量的合理增⻓,持续改善⺠⽣,保 持社会⼤局稳定,为全⾯建设社会主义现代化国家开好局起好步。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 549.23560178], + [126.4956, 615.24206878], + [484.61591699999997, 615.24206878], + [484.61591699999997, 549.23560178] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 5, + "parent_id": "9ef83c0c-6525-4ac6-84d2-274d16e9d9fc", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "96bda370-6a15-4859-b032-9f132e55cbac", + "text": "今年发展主要预期⽬标是:国内⽣产总值增⻓5%左右;城镇新增就业1200万⼈左右,城镇调查失业率5.5%左 右;居⺠消费价格涨幅3%左右;居⺠收⼊增⻓与经济增⻓基本同步;进出⼝促稳提质,国际收⽀基本平衡;粮⻝产 量保持在1.3万亿⽄以上;单位国内⽣产总值能耗和主要污染物排放量继续下降,重点控制化⽯能源消费,⽣态环境 质量稳定改善。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 617.41892475], + [126.4956, 654.56506878], + [479.934613, 654.56506878], + [479.934613, 617.41892475] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 5, + "parent_id": "9ef83c0c-6525-4ac6-84d2-274d16e9d9fc", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "ee69ffa2-f796-4f14-9bd4-a918f07be777", + "text": "要坚持稳字当头、稳中求进,⾯对战略机遇和⻛险挑战并存、不确定难预料因素增多,保持政策连续性稳定性针", + "metadata": { + "coordinates": { + "points": [ + [140.5395, 657.37390178], + [140.5395, 664.39586878], + [484.61588300000005, 664.39586878], + [484.61588300000005, 657.37390178] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 5, + "parent_id": "9ef83c0c-6525-4ac6-84d2-274d16e9d9fc", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "61452bd4-fd66-4196-bd66-76ea269d63c9", + "text": "对性,加强各类政策协调配合,形成共促⾼质量发展合⼒。积极的财政政策要加⼒提效。⾚字率拟按3%安排。完善 税费优惠政策,对现⾏减税降费、退税缓税等措施,该延续的延续,该优化的优化。做好基层“三保”⼯作。稳健的货 币政策要精准有⼒。保持⼴义货币供应量和社会融资规模增速同名义经济增速基本匹配,⽀持实体经济发展。保持⼈ ⺠币汇率在合理均衡⽔平上的基本稳定。产业政策要发展和安全并举。促进传统产业改造升级,培育壮⼤战略性新兴 产业,着⼒补强产业链薄弱环节。科技政策要聚焦⾃⽴⾃强,也要坚持国际合作。完善新型举国体制,发挥好政府在 关键核⼼技术攻关中的组织作⽤,⽀持和突出企业科技创新主体地位,加⼤科技⼈才及团队培养⽀持⼒度。社会政策 要兜牢⺠⽣底线。落实落细就业优先政策,把促进⻘年特别是⾼校毕业⽣就业⼯作摆在更加突出的位置,切实保障好 基本⺠⽣。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 666.57262475], + [126.4956, 743.04186878], + [484.61591699999997, 743.04186878], + [484.61591699999997, 666.57262475] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 5, + "parent_id": "9ef83c0c-6525-4ac6-84d2-274d16e9d9fc", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Footer", + "element_id": "f67b7987-f3d5-49ca-b36c-4ab9c4314cad", + "text": "当前我国新冠疫情防控已进⼊“⼄类⼄管”常态化防控阶段,要在对疫情防控⼯作进⾏全⾯科学总结的基础上,更", + "metadata": { + "coordinates": { + "points": [ + [140.5395, 745.21870475], + [140.5395, 752.87264878], + [483.82597699999997, 752.87264878], + [483.82597699999997, 745.21870475] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 5, + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Footer", + "element_id": "fdbdbfcb-fdca-4e9a-aa01-6410b39395ff", + "text": "第5页 共7页", + "metadata": { + "coordinates": { + "points": [ + [0, 781.66], + [0, 792.9], + [52.5, 792], + [52.5, 781.66] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 5, + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Footer", + "element_id": "7f9e9bda-babb-4e54-8ec7-187dcd52ae91", + "text": "2023/8/4, 10:17", + "metadata": { + "coordinates": { + "points": [ + [548.675, 781.66], + [548.675, 791.66], + [612, 791.66], + [612, 781.66] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 5, + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Header", + "element_id": "9bf0f916-bc15-4e02-b035-e8fcdd87e610", + "text": "政府⼯作报告 ——2023年3⽉5⽇在第⼗四届全国⼈民代表...", + "metadata": { + "coordinates": { + "points": [ + [0, 1.1599999999999682], + [0, 12.399999999999977], + [267.5, 12.399999999999977], + [267.5, 1.1599999999999682] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 6, + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Header", + "element_id": "ca2fb09a-26b9-4592-b064-ea986a638b8d", + "text": "https://www.gov.cn/gongbao/content/2023/content_5747260.htm", + "metadata": { + "coordinates": { + "points": [ + [351.9875, 1.1599999999999682], + [351.9875, 11.159999999999968], + [612, 11.159999999999968], + [612.0035, 1.1599999999999682] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 6, + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Header", + "element_id": "34b0e4a0-3b4f-4691-9154-eb1e52f2b5fd", + "text": "加科学、精准、⾼效做好防控⼯作,围绕保健康、防重症,重点做好⽼年⼈、⼉童、患基础性疾病群体的疫情防控和 医疗救治,提升疫情监测⽔平,推进疫苗迭代升级和新药研制,切实保障群众就医⽤药需求,守护好⼈⺠⽣命安全和 身体健康。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 38.036401780000006], + [126.4956, 64.71986877999996], + [484.61591699999997, 64.71986877999996], + [484.61591699999997, 38.036401780000006] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 6, + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "37fcdd9f-9a50-4bb1-8051-8abb7383adb5", + "text": "今年是政府换届之年,前⾯报告的经济社会发展多领域、各⽅⾯⼯作,今后还需不懈努⼒,下⾯简述⼏项重点。 (⼀)着⼒扩⼤国内需求。把恢复和扩⼤消费摆在优先位置。多渠道增加城乡居⺠收⼊。稳定汽⻋等⼤宗消费, 推动餐饮、⽂化、旅游、体育等⽣活服务消费恢复。政府投资和政策激励要有效带动全社会投资,今年拟安排地⽅政 府专项债券3.8万亿元,加快实施“⼗四五”重⼤⼯程,实施城市更新⾏动,促进区域优势互补、各展其⻓,继续加⼤ 对受疫情冲击较严重地区经济社会发展的⽀持⼒度,⿎励和吸引更多⺠间资本参与国家重⼤⼯程和补短板项⽬建设, 激发⺠间投资活⼒。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 67.52860178000003], + [126.4956, 123.70436877999998], + [484.61591699999997, 123.70436877999998], + [484.61591699999997, 67.52860178000003] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 6, + "parent_id": "34b0e4a0-3b4f-4691-9154-eb1e52f2b5fd", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "65c68dcb-cf1c-4161-a3f4-a96f639facab", + "text": "(⼆)加快建设现代化产业体系。强化科技创新对产业发展的⽀撑。持续开展产业强链补链⾏动,围绕制造业重 点产业链,集中优质资源合⼒推进关键核⼼技术攻关,充分激发创新活⼒。加强重要能源、矿产资源国内勘探开发和 增储上产。加快传统产业和中⼩企业数字化转型,着⼒提升⾼端化、智能化、绿⾊化⽔平。加快前沿技术研发和应⽤ 推⼴,促进科技成果转化。建设⾼效顺畅的物流体系。⼤⼒发展数字经济,提升常态化监管⽔平,⽀持平台经济发 展。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 126.51320178000003], + [126.4956, 172.85816877999991], + [484.61591699999997, 172.85816877999991], + [484.61591699999997, 126.51320178000003] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 6, + "parent_id": "34b0e4a0-3b4f-4691-9154-eb1e52f2b5fd", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "6e737ab4-d53d-45c7-aaad-7b33050ad33e", + "text": "(三)切实落实“两个毫不动摇”。深化国资国企改⾰,提⾼国企核⼼竞争⼒。坚持分类改⾰⽅向,处理好国企经", + "metadata": { + "coordinates": { + "points": [ + [140.5395, 175.03492474999996], + [140.5395, 182.6888687799999], + [483.82594500000005, 182.6888687799999], + [483.82594500000005, 175.03492474999996] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 6, + "parent_id": "34b0e4a0-3b4f-4691-9154-eb1e52f2b5fd", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "0e74232a-210e-46e4-8d8d-bba20a9c50fe", + "text": "济责任和社会责任关系,完善中国特⾊国有企业现代公司治理。依法保护⺠营企业产权和企业家权益,完善相关政 策,⿎励⽀持⺠营经济和⺠营企业发展壮⼤,⽀持中⼩微企业和个体⼯商户发展,构建亲清政商关系,为各类所有制 企业创造公平竞争、竞相发展的环境,⽤真招实策稳定市场预期和提振市场信⼼。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 185.49770178000006], + [126.4956, 212.1811687799999], + [484.61591699999997, 212.1811687799999], + [484.61591699999997, 185.49770178000006] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 6, + "parent_id": "34b0e4a0-3b4f-4691-9154-eb1e52f2b5fd", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "be4fa8dd-4987-4222-af1d-72ff6286e6d6", + "text": "(四)更⼤⼒度吸引和利⽤外资。扩⼤市场准⼊,加⼤现代服务业领域开放⼒度。落实好外资企业国⺠待遇。积", + "metadata": { + "coordinates": { + "points": [ + [140.5395, 214.98990178000008], + [140.5395, 222.01186878], + [484.61588300000005, 222.01186878], + [484.61588300000005, 214.98990178000008] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 6, + "parent_id": "34b0e4a0-3b4f-4691-9154-eb1e52f2b5fd", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "UncategorizedText", + "element_id": "0500629c-a922-420b-88e2-debf2bb251ce", + "text": "极推动加⼊全⾯与进步跨太平洋伙伴关系协定(CPTPP)等⾼标准经贸协议,主动对照相关规则、规制、管理、标 准,稳步扩⼤制度型开放。优化区域开放布局,实施⾃由贸易试验区提升战略,发挥好海南⾃由贸易港、各类开发区 等开放平台的先⾏先试作⽤。继续发挥进出⼝对经济的⽀撑作⽤。做好外资企业服务⼯作,推动外资标志性项⽬落地 建设。开放的中国⼤市场,⼀定能为各国企业在华发展提供更多机遇。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 224.18872475], + [126.4956, 261.33496877999994], + [484.61591699999997, 261.33496877999994], + [484.61591699999997, 224.18872475] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 6, + "parent_id": "be4fa8dd-4987-4222-af1d-72ff6286e6d6", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "6cce6041-5b65-46dd-be2e-9fd56ede3072", + "text": "(五)有效防范化解重⼤经济⾦融⻛险。深化⾦融体制改⾰,完善⾦融监管,压实各⽅责任,防⽌形成区域性、 系统性⾦融⻛险。有效防范化解优质头部房企⻛险,改善资产负债状况,防⽌⽆序扩张,促进房地产业平稳发展。防 范化解地⽅政府债务⻛险,优化债务期限结构,降低利息负担,遏制增量、化解存量。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 264.14370178], + [126.4956, 290.82716878], + [484.61591699999997, 290.82716878], + [484.61591699999997, 264.14370178] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 6, + "parent_id": "34b0e4a0-3b4f-4691-9154-eb1e52f2b5fd", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "bd98f019-d715-4707-af52-89bd09681347", + "text": "(六)稳定粮⻝⽣产和推进乡村振兴。⼀体推进农业现代化和农村现代化。稳定粮⻝播种⾯积,抓好油料⽣产, 实施新⼀轮千亿⽄粮⻝产能提升⾏动。完善农资保供稳价应对机制。加强耕地保护,加强农⽥⽔利和⾼标准农⽥等基 础设施建设。深⼊实施种业振兴⾏动。强化农业科技和装备⽀撑。健全种粮农⺠收益保障机制和主产区利益补偿机 制。树⽴⼤⻝物观,构建多元化⻝物供给体系。发展乡村特⾊产业,拓宽农⺠增收致富渠道。巩固拓展脱贫攻坚成 果,坚决防⽌出现规模性返贫。推进乡村建设⾏动。国家关于⼟地承包期再延⻓30年的政策,务必通过细致⼯作扎实 落实到位。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 293.63600178], + [126.4956, 349.81176878], + [484.61591699999997, 349.81176878], + [484.61591699999997, 293.63600178] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 6, + "parent_id": "34b0e4a0-3b4f-4691-9154-eb1e52f2b5fd", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "70b7d265-cfdb-4805-b21c-f100d115c75a", + "text": "(七)推动发展⽅式绿⾊转型。深⼊推进环境污染防治。加强流域综合治理,加强城乡环境基础设施建设,持续 实施重要⽣态系统保护和修复重⼤⼯程。推进能源清洁⾼效利⽤和技术研发,加快建设新型能源体系,提升可再⽣能 源占⽐。完善⽀持绿⾊发展的政策和⾦融⼯具,发展循环经济,推进资源节约集约利⽤,推动重点领域节能降碳减 污,持续打好蓝天、碧⽔、净⼟保卫战。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 352.62050178], + [126.4956, 389.13476878], + [484.61591699999997, 389.13476878], + [484.61591699999997, 352.62050178] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 6, + "parent_id": "34b0e4a0-3b4f-4691-9154-eb1e52f2b5fd", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "7e6af9f8-cc57-449b-9ac1-1ee26a23bb0b", + "text": "(⼋)保障基本⺠⽣和发展社会事业。加强住房保障体系建设,⽀持刚性和改善性住房需求,解决好新市⺠、⻘ 年⼈等住房问题,加快推进⽼旧⼩区和危旧房改造。加快建设⾼质量教育体系,推进义务教育优质均衡发展和城乡⼀ 体化,推进学前教育、特殊教育普惠发展,⼤⼒发展职业教育,推进⾼等教育创新,⽀持中⻄部地区⾼校发展,深化 体教融合。深化医药卫⽣体制改⾰,促进医保、医疗、医药协同发展和治理。推动优质医疗资源扩容下沉和区域均衡 布局。实施中医药振兴发展重⼤⼯程。重视⼼理健康和精神卫⽣。实施积极应对⼈⼝⽼龄化国家战略,加强养⽼服务 保障,完善⽣育⽀持政策体系。保障妇⼥、⼉童、⽼年⼈、残疾⼈合法权益。做好军⼈军属、退役军⼈和其他优抚对 象优待抚恤⼯作。繁荣发展⽂化事业和产业。提升社会治理效能。强化安全⽣产监管和防灾减灾救灾。全⾯贯彻总体 国家安全观,建设更⾼⽔平的平安中国。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 391.94350177999996], + [126.4956, 467.78076878], + [484.61591699999997, 467.78076878], + [484.61591699999997, 391.94350177999996] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 6, + "parent_id": "34b0e4a0-3b4f-4691-9154-eb1e52f2b5fd", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "1f172209-6f7e-437d-99f3-423b35deabbe", + "text": "进⼀步加强政府⾃身建设,持续转变政府职能,搞好机构改⾰,扎实推进法治政府、创新政府、廉洁政府和服务", + "metadata": { + "coordinates": { + "points": [ + [140.5395, 470.58950178], + [140.5395, 477.61146878], + [484.61588300000005, 477.61146878], + [484.61588300000005, 470.58950178] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 6, + "parent_id": "34b0e4a0-3b4f-4691-9154-eb1e52f2b5fd", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "d0f6d57d-aaac-4bf3-a4c3-e36750e6328d", + "text": "型政府建设,发扬实⼲精神,⼤兴调查研究之⻛,提⾼⾏政效率和公信⼒。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 480.42030178], + [126.4956, 487.44226878], + [358.220511, 487.44226878], + [358.220511, 480.42030178] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 6, + "parent_id": "34b0e4a0-3b4f-4691-9154-eb1e52f2b5fd", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "a146f1b4-2b72-48ee-ba6a-6181c7147a71", + "text": "各位代表! 我们要以铸牢中华⺠族共同体意识为主线,坚持和完善⺠族区域⾃治制度,促进各⺠族共同团结奋⽃、共同繁荣 发展。坚持党的宗教⼯作基本⽅针,坚持我国宗教中国化⽅向,积极引导宗教与社会主义社会相适应。加强和改进侨 务⼯作,汇聚起海内外中华⼉⼥同⼼奋⽃、共创辉煌的强⼤⼒量。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 490.25110178], + [126.4956, 526.76526878], + [484.61591699999997, 526.76526878], + [484.61591699999997, 490.25110178] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 6, + "parent_id": "34b0e4a0-3b4f-4691-9154-eb1e52f2b5fd", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "a8dcfae1-81f3-4f71-b99b-5d4198bdfadb", + "text": "我们要深⼊贯彻习近平强军思想,贯彻新时代军事战略⽅针,围绕实现建军⼀百年奋⽃⽬标,边⽃争、边备战、 边建设,完成好党和⼈⺠赋予的各项任务。全⾯加强练兵备战,创新军事战略指导,⼤抓实战化军事训练,统筹抓好 各⽅向各领域军事⽃争。全⾯加强军事治理,巩固拓展国防和军队改⾰成果,加强重⼤任务战建备统筹,加快实施国 防发展重⼤⼯程。巩固提⾼⼀体化国家战略体系和能⼒,加强国防科技⼯业能⼒建设。深化全⺠国防教育。各级政府 要⼤⼒⽀持国防和军队建设,深⼊开展“双拥”活动,合⼒谱写军政军⺠团结新篇章。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 529.57410178], + [126.4956, 575.91906878], + [484.61591699999997, 575.91906878], + [484.61591699999997, 529.57410178] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 6, + "parent_id": "34b0e4a0-3b4f-4691-9154-eb1e52f2b5fd", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "9e73589d-878b-47bb-81b1-37f359d7fea9", + "text": "我们要全⾯准确、坚定不移贯彻“⼀国两制”、“港⼈治港”、“澳⼈治澳”、⾼度⾃治的⽅针,坚持依法治港治澳, 维护宪法和基本法确定的特别⾏政区宪制秩序,落实“爱国者治港”、“爱国者治澳”原则。⽀持港澳发展经济、改善⺠ ⽣,保持⾹港、澳⻔⻓期繁荣稳定。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 578.09592475], + [126.4956, 605.41136878], + [483.03600500000005, 605.41136878], + [483.03600500000005, 578.09592475] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 6, + "parent_id": "34b0e4a0-3b4f-4691-9154-eb1e52f2b5fd", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "67022d0a-0d4a-4944-a0a0-8da73d0cb7be", + "text": "我们要坚持贯彻新时代党解决台湾问题的总体⽅略,坚持⼀个中国原则和“九⼆共识”,坚定反“独”促统,推动两 岸关系和平发展,推进祖国和平统⼀进程。两岸同胞⾎脉相连,要促进两岸经济⽂化交流合作,完善增进台湾同胞福 祉的制度和政策,推动两岸共同弘扬中华⽂化,同⼼共创复兴伟业。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 607.58812475], + [126.4956, 634.90356878], + [484.61591699999997, 634.90356878], + [484.61591699999997, 607.58812475] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 6, + "parent_id": "34b0e4a0-3b4f-4691-9154-eb1e52f2b5fd", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "36ffe62f-41a6-41d3-a1ad-bc772a4f4463", + "text": "我们要坚定奉⾏独⽴⾃主的和平外交政策,坚定不移⾛和平发展道路,坚持在和平共处五项原则基础上同各国发 展友好合作,坚定奉⾏互利共赢的开放战略,始终做世界和平的建设者、全球发展的贡献者、国际秩序的维护者。中 国愿同国际社会⼀道落实全球发展倡议、全球安全倡议,弘扬全⼈类共同价值,携⼿推动构建⼈类命运共同体,维护 世界和平和地区稳定。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 637.7124017799999], + [126.4956, 674.22656878], + [484.61591699999997, 674.22656878], + [484.61591699999997, 637.7124017799999] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 6, + "parent_id": "34b0e4a0-3b4f-4691-9154-eb1e52f2b5fd", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "c7e3cbb9-3aa2-4e95-9bcf-dc4ac122a64f", + "text": "各位代表! 奋⽃铸就辉煌,实⼲赢得未来。我们要更加紧密地团结在以习近平同志为核⼼的党中央周围,⾼举中国特⾊社会 主义伟⼤旗帜,以习近平新时代中国特⾊社会主义思想为指导,全⾯贯彻党的⼆⼗⼤精神,砥砺前⾏,推动经济社会 持续健康发展,为全⾯建设社会主义现代化国家、全⾯推进中华⺠族伟⼤复兴,为把我国建设成为富强⺠主⽂明和谐 美丽的社会主义现代化强国不懈奋⽃!", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 677.03540178], + [126.4956, 723.38037878], + [484.61591699999997, 723.38037878], + [484.61591699999997, 677.03540178] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 6, + "parent_id": "34b0e4a0-3b4f-4691-9154-eb1e52f2b5fd", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "UncategorizedText", + "element_id": "285e0b9b-f939-45e8-9a6b-f6a1e0664cb9", + "text": "(新华社北京2023年3⽉14⽇电)", + "metadata": { + "coordinates": { + "points": [ + [376.4996, 725.55721475], + [376.4996, 733.21115878], + [478.318101, 733.21115878], + [478.318101, 725.55721475] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 6, + "parent_id": "c7e3cbb9-3aa2-4e95-9bcf-dc4ac122a64f", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Footer", + "element_id": "c7742cae-8493-46e8-8861-7b0a6b6ea886", + "text": "扫⼀扫在⼿机打开当前⻚", + "metadata": { + "coordinates": { + "points": [ + [274.1764, 746.16377966], + [274.1764, 751.86912866], + [336.935239, 751.86912866], + [336.935239, 746.16377966] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 6, + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Footer", + "element_id": "ff45bd72-0fbd-40a8-b7a9-94a578a8dc93", + "text": "第6页 共7页", + "metadata": { + "coordinates": { + "points": [ + [0, 781.66], + [0, 792.9], + [52.5, 792], + [52.5, 781.66] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 6, + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Footer", + "element_id": "be949a25-610d-4dcc-a43f-ce9c630ab539", + "text": "2023/8/4, 10:17", + "metadata": { + "coordinates": { + "points": [ + [548.675, 781.66], + [548.675, 791.66], + [612, 791.66], + [612, 781.66] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 6, + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Header", + "element_id": "f8600a2a-5a19-4629-817d-eb127f8c3213", + "text": "政府⼯作报告 ——2023年3⽉5⽇在第⼗四届全国⼈民代表...", + "metadata": { + "coordinates": { + "points": [ + [0, 1.1599999999999682], + [0, 12.399999999999977], + [267.5, 12.399999999999977], + [267.5, 1.1599999999999682] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 7, + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Header", + "element_id": "e03bbcd6-520a-4578-baba-291cd6971b6f", + "text": "https://www.gov.cn/gongbao/content/2023/content_5747260.htm", + "metadata": { + "coordinates": { + "points": [ + [351.9875, 1.1599999999999682], + [351.9875, 11.159999999999968], + [612, 11.159999999999968], + [612.0035, 1.1599999999999682] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 7, + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "1405991a-d54f-4201-a389-e5b4aed8ae18", + "text": "主办单位:国务院办公厅 运⾏维护单位:中国政府⽹运⾏中⼼", + "metadata": { + "coordinates": { + "points": [ + [87.43591, 149.34331413999996], + [87.43591, 155.48753513999998], + [259.474098, 155.48753513999998], + [259.474098, 149.34331413999996] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 7, + "parent_id": "e03bbcd6-520a-4578-baba-291cd6971b6f", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "4e9b12b9-0bb2-438d-9a68-9908e3f422e7", + "text": "版权所有:中国政府⽹ 中⽂域名:中国政府⽹.政务", + "metadata": { + "coordinates": { + "points": [ + [87.43591, 162.600853852], + [87.43591, 169.53153513999996], + [230.45734199999998, 169.53153513999996], + [230.45734199999998, 162.600853852] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 7, + "parent_id": "e03bbcd6-520a-4578-baba-291cd6971b6f", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "UncategorizedText", + "element_id": "d46927cf-424f-45a2-ad3f-d5ae96c26c1f", + "text": "⽹站标识码bm01000001 京ICP备05070218号  京公⽹安备11010202000001号", + "metadata": { + "coordinates": { + "points": [ + [87.43591, 175.98645385199995], + [87.43591, 182.9171351399999], + [313.140921, 182.9171351399999], + [313.140921, 175.98645385199995] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "links": [ + { + "text": "京ICP备05070218号", + "url": "https://beian.miit.gov.cn/#/Integrated/index", + "start_index": 16 + }, + { + "text": "京ICP备05070218号", + "url": "https://beian.miit.gov.cn/#/Integrated/index", + "start_index": 16 + }, + { + "text": "京公 ⽹", + "url": "http://www.beian.gov.cn/portal/registerSystemInfo?recordcode=11010202000001", + "start_index": 32 + }, + { + "text": "京公 ⽹", + "url": "http://www.beian.gov.cn/portal/registerSystemInfo?recordcode=11010202000001", + "start_index": 32 + } + ], + "page_number": 7, + "parent_id": "4e9b12b9-0bb2-438d-9a68-9908e3f422e7", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Footer", + "element_id": "da5f2372-ab76-4c9a-b845-8feea9adb15f", + "text": "第7页 共7页", + "metadata": { + "coordinates": { + "points": [ + [0, 781.66], + [0, 792.9], + [52.5, 792], + [52.5, 781.66] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 7, + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Footer", + "element_id": "c5a29b3d-dd08-417c-a5dc-3f3a3167631d", + "text": "2023/8/4, 10:17", + "metadata": { + "coordinates": { + "points": [ + [548.675, 781.66], + [548.675, 791.66], + [612, 791.66], + [612, 781.66] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 7, + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + } + ] +} diff --git a/src/libs/unstructured/__tests__/fixtures/image-parse/fast-partition-none-raw.json b/src/libs/unstructured/__tests__/fixtures/image-parse/fast-partition-none-raw.json new file mode 100644 index 000000000000..95b5142dda57 --- /dev/null +++ b/src/libs/unstructured/__tests__/fixtures/image-parse/fast-partition-none-raw.json @@ -0,0 +1,3255 @@ +[ + { + "type": "Header", + "element_id": "a624cfed-fad6-4b59-89e9-d0e27c5fe929", + "text": "政府⼯作报告 ——2023年3⽉5⽇在第⼗四届全国⼈民代表...", + "metadata": { + "coordinates": { + "points": [ + [0, 1.1599999999999682], + [0, 12.399999999999977], + [267.5, 12.399999999999977], + [267.5, 1.1599999999999682] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 1, + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Header", + "element_id": "c4e208c2-68de-44ec-9d6e-3b28eb54041e", + "text": "https://www.gov.cn/gongbao/content/2023/content_5747260.htm", + "metadata": { + "coordinates": { + "points": [ + [351.9875, 1.1599999999999682], + [351.9875, 11.159999999999968], + [612, 11.159999999999968], + [612.0035, 1.1599999999999682] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 1, + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "f3908366-9d8a-45d1-b114-6ed7df62619a", + "text": "政 府 ⼯ 作 报 告 政 府 ⼯ 作 报 告 ——2023年3⽉5⽇在第⼗四届全国⼈⺠代表⼤会第⼀次会议上 国务院总理 李克强", + "metadata": { + "coordinates": { + "points": [ + [211.1981, 159.013153], + [211.1981, 189.59386877999998], + [400.79124, 189.59386877999998], + [400.79124, 159.013153] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 1, + "parent_id": "c4e208c2-68de-44ec-9d6e-3b28eb54041e", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "01682f16-fa25-4e5d-a16e-4cfe5bd849b1", + "text": "各位代表: 各位代表:", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 202.23340178], + [126.4956, 209.2553687799999], + [161.60543499999997, 209.2553687799999], + [161.60543499999997, 202.23340178] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 1, + "parent_id": "c4e208c2-68de-44ec-9d6e-3b28eb54041e", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "79b29345-bccd-4ec3-a2af-c617093c5394", + "text": "本届政府任期即将结束。现在,我代表国务院,向⼤会报告⼯作,请予审议,并请全国政协委员提出意⻅。", + "metadata": { + "coordinates": { + "points": [ + [140.5395, 212.0641017800001], + [140.5395, 219.08606878], + [470.571949, 219.08606878], + [470.571949, 212.0641017800001] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 1, + "parent_id": "c4e208c2-68de-44ec-9d6e-3b28eb54041e", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "5e1d7f68-196a-4eb5-89df-1ac182809557", + "text": "⼀、过去⼀年和五年⼯作回顾", + "metadata": { + "coordinates": { + "points": [ + [260.3519, 231.72560178000003], + [260.3519, 238.74756877999994], + [351.637471, 238.74756877999994], + [351.637471, 231.72560178000003] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 1, + "parent_id": "c4e208c2-68de-44ec-9d6e-3b28eb54041e", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "dee5cd25-a4cf-493d-863c-33959541b680", + "text": "2022年是党和国家历史上极为重要的⼀年。党的⼆⼗⼤胜利召开,描绘了全⾯建设社会主义现代化国家的宏伟蓝 图。⾯对⻛⾼浪急的国际环境和艰巨繁重的国内改⾰发展稳定任务,以习近平同志为核⼼的党中央团结带领全国各族 ⼈⺠迎难⽽上,全⾯落实疫情要防住、经济要稳住、发展要安全的要求,加⼤宏观调控⼒度,实现了经济平稳运⾏、 发展质量稳步提升、社会⼤局保持稳定,我国发展取得来之极为不易的新成就。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 250.75512475000005], + [126.4956, 287.90136878], + [484.615949, 287.90136878], + [484.615949, 250.75512475000005] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 1, + "parent_id": "c4e208c2-68de-44ec-9d6e-3b28eb54041e", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "ec3c315e-9c5d-4df9-9b64-73450966a976", + "text": "过去⼀年,我国经济发展遇到疫情等国内外多重超预期因素冲击。在党中央坚强领导下,我们⾼效统筹疫情防控", + "metadata": { + "coordinates": { + "points": [ + [140.5395, 290.71020178], + [140.5395, 297.73216878], + [484.61588300000005, 297.73216878], + [484.61588300000005, 290.71020178] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 1, + "parent_id": "c4e208c2-68de-44ec-9d6e-3b28eb54041e", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "24c68e46-b6ec-431f-8054-27dbfd554ca4", + "text": "和经济社会发展,根据病毒变化和防疫形势,优化调整疫情防控措施。⾯对经济新的下⾏压⼒,果断应对、及时调 控,动⽤近年储备的政策⼯具,靠前实施既定政策举措,坚定不移推进供给侧结构性改⾰,出台实施稳经济⼀揽⼦政 策和接续措施,部署稳住经济⼤盘⼯作,加强对地⽅落实政策的督导服务,⽀持各地挖掘政策潜⼒,⽀持经济⼤省勇 挑⼤梁,突出稳增⻓稳就业稳物价,推动经济企稳回升。全年国内⽣产总值增⻓3%,城镇新增就业1206万⼈,年末 城镇调查失业率降到5.5%,居⺠消费价格上涨2%。货物进出⼝总额增⻓7.7%。财政⾚字率控制在2.8%,中央财政收 ⽀符合预算、⽀出略有结余。国际收⽀保持平衡,⼈⺠币汇率在全球主要货币中表现相对稳健。粮⻝产量1.37万亿 ⽄,增产74亿⽄。⽣态环境质量持续改善。在攻坚克难中稳住了经济⼤盘,在复杂多变的环境中基本完成全年发展主 要⽬标任务,我国经济展现出坚强韧性。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 300.54090178], + [126.4956, 376.37816878], + [484.61591699999997, 376.37816878], + [484.61591699999997, 300.54090178] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 1, + "parent_id": "c4e208c2-68de-44ec-9d6e-3b28eb54041e", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "28b96bac-aef6-4728-9fe5-c873a805cf57", + "text": "针对企业⽣产经营困难加剧,加⼤纾困⽀持⼒度。受疫情等因素冲击,不少企业和个体⼯商户遇到特殊困难。全", + "metadata": { + "coordinates": { + "points": [ + [140.5395, 379.18700178], + [140.5395, 386.20896878], + [484.61588300000005, 386.20896878], + [484.61588300000005, 379.18700178] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 1, + "parent_id": "c4e208c2-68de-44ec-9d6e-3b28eb54041e", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "aab5120a-1cd1-403f-81e7-6a4bd991e23b", + "text": "年增值税留抵退税超过2.4万亿元,新增减税降费超过1万亿元,缓税缓费7500多亿元。为有⼒⽀持减税降费政策落 实,中央对地⽅转移⽀付⼤幅增加。引导⾦融机构增加信贷投放,降低融资成本,新发放企业贷款平均利率降⾄有统 计以来最低⽔平,对受疫情影响严重的中⼩微企业、个体⼯商户和餐饮、旅游、货运等实施阶段性贷款延期还本付 息,对普惠⼩微贷款阶段性减息。⽤改⾰办法激发市场活⼒。量⼤⾯⼴的中⼩微企业和个体⼯商户普遍受益。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 388.38572475], + [126.4956, 425.53196878], + [484.61591699999997, 425.53196878], + [484.61591699999997, 388.38572475] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 1, + "parent_id": "c4e208c2-68de-44ec-9d6e-3b28eb54041e", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "NarrativeText", + "element_id": "dbc0059c-09d0-412e-969b-43af5c2bc23c", + "text": "针对有效需求不⾜的突出⽭盾,多措并举扩投资促消费稳外贸。去年终端消费直接受到冲击,投资也受到影响。 提前实施部分“⼗四五”规划重⼤⼯程项⽬,加快地⽅政府专项债券发⾏使⽤,依法盘活⽤好专项债务结存限额,分两 期投放政策性开发性⾦融⼯具7400亿元,为重⼤项⽬建设补充资本⾦。运⽤专项再贷款、财政贴息等政策,⽀持重点 领域设备更新改造。采取联合办公、地⽅承诺等办法,提⾼项⽬审批效率。全年基础设施、制造业投资分别增⻓ 9.4%、9.1%,带动固定资产投资增⻓5.1%,⼀定程度弥补了消费收缩缺⼝。发展消费新业态新模式,采取减免⻋辆 购置税等措施促进汽⻋消费,新能源汽⻋销量增⻓93.4%,开展绿⾊智能家电、绿⾊建材下乡,社会消费品零售总额 保持基本稳定。出台⾦融⽀持措施,⽀持刚性和改善性住房需求,扎实推进保交楼稳⺠⽣⼯作。帮助外贸企业解决原 材料、⽤⼯、物流等难题,提升港⼝集疏运效率,及时回应和解决外资企业关切,货物进出⼝好于预期,实际使⽤外 资稳定增⻓。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 428.34070177999996], + [126.4956, 514.0087687800001], + [484.61591699999997, 514.0087687800001], + [484.61591699999997, 428.34070177999996] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 1, + "parent_id": "aab5120a-1cd1-403f-81e7-6a4bd991e23b", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "13b42655-c361-46ee-bf7b-ed1cd049189b", + "text": "针对就业压⼒凸显,强化稳岗扩就业政策⽀持。去年城镇调查失业率⼀度明显攀升。财税、⾦融、投资等政策更 加注重稳就业。对困难⾏业企业社保费实施缓缴,⼤幅提⾼失业保险基⾦稳岗返还⽐例,增加稳岗扩岗补助。落实担 保贷款、租⾦减免等创业⽀持政策。突出做好⾼校毕业⽣就业⼯作,开展就业困难⼈员专项帮扶。在重点⼯程建设中 推⼴以⼯代赈。脱贫⼈⼝务⼯规模超过3200万⼈、实现稳中有增。就业形势总体保持稳定。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 516.8175017799999], + [126.4956, 553.33176878], + [484.61591699999997, 553.33176878], + [484.61591699999997, 516.8175017799999] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 1, + "parent_id": "c4e208c2-68de-44ec-9d6e-3b28eb54041e", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "58220ff2-f570-47d5-8b9a-db954627966d", + "text": "针对全球通胀⾼企带来的影响,以粮⻝和能源为重点做好保供稳价。去年全球通胀达到40多年来新⾼,国内价格 稳定⾯临较⼤压⼒。有效应对洪涝、⼲旱等严重⾃然灾害,不误农时抢抓粮⻝播种和收获,督促和协调农机通⾏,保 障农事活动有序开展,分三批向种粮农⺠发放农资补贴,保障粮⻝丰收和重要农产品稳定供给。发挥煤炭主体能源作 ⽤,增加煤炭先进产能,加⼤对发电供热企业⽀持⼒度,保障能源正常供应。在全球⾼通胀的背景下,我国物价保持 较低⽔平,尤为难得。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 555.50852475], + [126.4956, 602.48546878], + [484.61597, 602.48546878], + [484.61597, 555.50852475] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 1, + "parent_id": "c4e208c2-68de-44ec-9d6e-3b28eb54041e", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "000ef6bf-81db-4e6c-968e-adde771292a7", + "text": "针对部分群众⽣活困难增多,强化基本⺠⽣保障。阶段性扩⼤低保等社会保障政策覆盖⾯,将更多困难群体纳⼊ 保障范围。延续实施失业保险保障扩围政策,共向1000多万失业⼈员发放失业保险待遇。向更多低收⼊群众发放价格 补贴,约6700万⼈受益。免除经济困难⾼校毕业⽣2022年国家助学贷款利息并允许延期还本。做好因疫因灾遇困群众 临时救助⼯作,切实兜住⺠⽣底线。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 605.29430178], + [126.4956, 641.80846878], + [484.61590900000004, 641.80846878], + [484.61590900000004, 605.29430178] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 1, + "parent_id": "c4e208c2-68de-44ec-9d6e-3b28eb54041e", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "75de0dc9-11e4-4eec-a636-f65f7e8fe79c", + "text": "与此同时,我们全⾯落实中央经济⼯作会议部署,按照⼗三届全国⼈⼤五次会议批准的政府⼯作报告安排,统筹 推进经济社会各领域⼯作。经过艰苦努⼒,当前消费需求、市场流通、⼯业⽣产、企业预期等明显向好,经济增⻓正 在企稳向上,我国经济有巨⼤潜⼒和发展动⼒。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 644.6173017799999], + [126.4956, 671.30076878], + [484.61591699999997, 671.30076878], + [484.61591699999997, 644.6173017799999] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 1, + "parent_id": "c4e208c2-68de-44ec-9d6e-3b28eb54041e", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "cdba7ea9-b454-407d-ab21-305732979168", + "text": "各位代表! 过去五年极不寻常、极不平凡。在以习近平同志为核⼼的党中央坚强领导下,我们经受了世界变局加快演变、新 冠疫情冲击、国内经济下⾏等多重考验,如期打赢脱贫攻坚战,如期全⾯建成⼩康社会,实现第⼀个百年奋⽃⽬标, 开启向第⼆个百年奋⽃⽬标进军新征程。各地区各部⻔坚持以习近平新时代中国特⾊社会主义思想为指导,深刻领悟 “两个确⽴”的决定性意义,增强“四个意识”、坚定“四个⾃信”、做到“两个维护”,全⾯贯彻党的⼗九⼤和⼗九届历次 全会精神,深⼊贯彻党的⼆⼗⼤精神,坚持稳中求进⼯作总基调,完整、准确、全⾯贯彻新发展理念,构建新发展格 局,推动⾼质量发展,统筹发展和安全,我国经济社会发展取得举世瞩⽬的重⼤成就。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 674.10960178], + [126.4956, 740.11604878], + [484.61591699999997, 740.11604878], + [484.61591699999997, 674.10960178] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 1, + "parent_id": "c4e208c2-68de-44ec-9d6e-3b28eb54041e", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Footer", + "element_id": "acf92def-4aaf-42d5-9c0e-4627d879a795", + "text": "——经济发展再上新台阶。国内⽣产总值增加到121万亿元,五年年均增⻓5.2%,⼗年增加近70万亿元、年均增", + "metadata": { + "coordinates": { + "points": [ + [140.5395, 742.29288475], + [140.5395, 749.94682878], + [481.690169, 749.94682878], + [481.690169, 742.29288475] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 1, + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Footer", + "element_id": "00cdb82f-2750-431e-b47d-a50e6238ae30", + "text": "第1页 共7页", + "metadata": { + "coordinates": { + "points": [ + [0, 781.66], + [0, 792.9], + [52.5, 792], + [52.5, 781.66] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 1, + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Footer", + "element_id": "e017df49-b619-4a05-a1af-3cd67ee1760d", + "text": "2023/8/4, 10:17", + "metadata": { + "coordinates": { + "points": [ + [548.675, 781.66], + [548.675, 791.66], + [612, 791.66], + [612, 781.66] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 1, + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Header", + "element_id": "e0670114-3a41-4e06-b06f-e8dcf76477f3", + "text": "政府⼯作报告 ——2023年3⽉5⽇在第⼗四届全国⼈民代表...", + "metadata": { + "coordinates": { + "points": [ + [0, 1.1599999999999682], + [0, 12.399999999999977], + [267.5, 12.399999999999977], + [267.5, 1.1599999999999682] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 2, + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Header", + "element_id": "ad460874-a3a8-4bd9-a2e7-d91b5c3c0d43", + "text": "https://www.gov.cn/gongbao/content/2023/content_5747260.htm", + "metadata": { + "coordinates": { + "points": [ + [351.9875, 1.1599999999999682], + [351.9875, 11.159999999999968], + [612, 11.159999999999968], + [612.0035, 1.1599999999999682] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 2, + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Header", + "element_id": "49ed84e1-73e8-46c3-86a8-55493a981754", + "text": "⻓6.2%,在⾼基数基础上实现了中⾼速增⻓、迈向⾼质量发展。财政收⼊增加到20.4万亿元。粮⻝产量连年稳定在1.3 万亿⽄以上。⼯业增加值突破40万亿元。城镇新增就业年均1270多万⼈。外汇储备稳定在3万亿美元以上。我国经济 实⼒明显提升。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 37.404424749999976], + [126.4956, 64.71986877999996], + [485.20115875, 64.71986877999996], + [485.20115875, 37.404424749999976] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 2, + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "2f910c18-d0ee-4287-b8fe-888b6c35f8f1", + "text": "——脱贫攻坚任务胜利完成。经过⼋年持续努⼒,近1亿农村贫困⼈⼝实现脱贫,全国832个贫困县全部摘", + "metadata": { + "coordinates": { + "points": [ + [140.5395, 66.89662475], + [140.5395, 74.55056877999994], + [463.550069, 74.55056877999994], + [463.550069, 66.89662475] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 2, + "parent_id": "49ed84e1-73e8-46c3-86a8-55493a981754", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "af1210e3-abe0-4a5e-a9fe-75b67ae887e2", + "text": "帽,960多万贫困⼈⼝实现易地搬迁,历史性地解决了绝对贫困问题。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 76.72742475000007], + [126.4956, 84.38136878], + [340.665609, 84.38136878], + [340.665609, 76.72742475000007] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 2, + "parent_id": "49ed84e1-73e8-46c3-86a8-55493a981754", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "2f62eaf0-8689-44f6-acfc-e66392a708fb", + "text": "——科技创新成果丰硕。构建新型举国体制,组建国家实验室,分批推进全国重点实验室重组。⼀些关键核⼼技 术攻关取得新突破,载⼈航天、探⽉探⽕、深海深地探测、超级计算机、卫星导航、量⼦信息、核电技术、⼤⻜机制 造、⼈⼯智能、⽣物医药等领域创新成果不断涌现。全社会研发经费投⼊强度从2.1%提⾼到2.5%以上,科技进步贡 献率提⾼到60%以上,创新⽀撑发展能⼒不断增强。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 86.55812475000005], + [126.4956, 123.70436877999998], + [484.615949, 123.70436877999998], + [484.615949, 86.55812475000005] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 2, + "parent_id": "49ed84e1-73e8-46c3-86a8-55493a981754", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "0b782f26-4b6d-4619-af36-aab4a44b8d12", + "text": "——经济结构进⼀步优化。⾼技术制造业、装备制造业增加值年均分别增⻓10.6%、7.9%,数字经济不断壮⼤, 新产业新业态新模式增加值占国内⽣产总值的⽐重达到17%以上。区域协调发展战略、区域重⼤战略深⼊实施。常住 ⼈⼝城镇化率从60.2%提⾼到65.2%,乡村振兴战略全⾯实施。经济发展新动能加快成⻓。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 125.88122475], + [126.4956, 153.19666877999998], + [483.4455750000001, 153.19666877999998], + [483.4455750000001, 125.88122475] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 2, + "parent_id": "49ed84e1-73e8-46c3-86a8-55493a981754", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "be251ea9-d307-4944-9868-721beb056400", + "text": "——基础设施更加完善。⼀批防汛抗旱、引⽔调⽔等重⼤⽔利⼯程开⼯建设。⾼速铁路运营⾥程从2.5万公⾥增 加到4.2万公⾥,⾼速公路⾥程从13.6万公⾥增加到17.7万公⾥。新建改建农村公路125万公⾥。新增机场容量4亿⼈ 次。发电装机容量增⻓40%以上。所有地级市实现千兆光⽹覆盖,所有⾏政村实现通宽带。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 155.37342475000003], + [126.4956, 182.6888687799999], + [479.349468, 182.6888687799999], + [479.349468, 155.37342475000003] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 2, + "parent_id": "49ed84e1-73e8-46c3-86a8-55493a981754", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "66225bf2-20ac-435e-9c46-62fff8d954df", + "text": "——改⾰开放持续深化。全⾯深化改⾰开放推动构建新发展格局,供给侧结构性改⾰深⼊实施,简政放权、放管", + "metadata": { + "coordinates": { + "points": [ + [140.5395, 184.86572475000003], + [140.5395, 192.51966877999996], + [484.615949, 192.51966877999996], + [484.615949, 184.86572475000003] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 2, + "parent_id": "49ed84e1-73e8-46c3-86a8-55493a981754", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "UncategorizedText", + "element_id": "a7477d92-66cc-49f8-b634-65b96c43e991", + "text": "结合、优化服务改⾰不断深化,营商环境明显改善。共建“⼀带⼀路”扎实推进。推动区域全⾯经济伙伴关系协定 (RCEP)⽣效实施,建成全球最⼤⾃由贸易区。货物进出⼝总额年均增⻓8.6%,突破40万亿元并连续多年居世界⾸ 位,吸引外资和对外投资居世界前列。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 194.69642475], + [126.4956, 222.01186878], + [481.690104, 222.01186878], + [481.690104, 194.69642475] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 2, + "parent_id": "66225bf2-20ac-435e-9c46-62fff8d954df", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "UncategorizedText", + "element_id": "b309eaa2-4d44-4f4e-b461-2ee1dd916706", + "text": "——⽣态环境明显改善。单位国内⽣产总值能耗下降8.1%、⼆氧化碳排放下降14.1%。地级及以上城市细颗粒物 (PM2.5)平均浓度下降27.5%,重污染天数下降超过五成,全国地表⽔优良⽔体⽐例由67.9%上升到87.9%。设⽴⾸ 批5个国家公园,建⽴各级各类⾃然保护地9000多处。美丽中国建设迈出重⼤步伐。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 224.18872475], + [126.4956, 252.90856878], + [482.275304, 252.90856878], + [482.275304, 224.18872475] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 2, + "parent_id": "66225bf2-20ac-435e-9c46-62fff8d954df", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "b1a06f48-f43a-4766-b4f7-8123d4ab0f54", + "text": "——⼈⺠⽣活⽔平不断提⾼。居⺠收⼊增⻓与经济增⻓基本同步,全国居⺠⼈均可⽀配收⼊年均增⻓5.1%。居⺠", + "metadata": { + "coordinates": { + "points": [ + [140.5395, 255.08542475000002], + [140.5395, 262.73936877999995], + [485.201101, 262.73936877999995], + [485.201101, 255.08542475000002] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 2, + "parent_id": "49ed84e1-73e8-46c3-86a8-55493a981754", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "af5a8267-7516-4bc4-9764-a89c52edb581", + "text": "消费价格年均上涨2.1%。新增劳动⼒平均受教育年限从13.5年提⾼到14年。基本养⽼保险参保⼈数增加1.4亿、覆盖 10.5亿⼈,基本医保⽔平稳步提⾼。多年累计改造棚户区住房4200多万套,上亿⼈出棚进楼、实现安居。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 264.91612475], + [126.4956, 282.40086878], + [478.179168, 282.40086878], + [478.179168, 264.91612475] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 2, + "parent_id": "49ed84e1-73e8-46c3-86a8-55493a981754", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "5895644d-9add-41f3-9b88-97bd7c3f4e55", + "text": "经过多年精⼼筹办,成功举办了简约、安全、精彩的北京冬奥会、冬残奥会,为促进群众性冰雪运动、促进奥林", + "metadata": { + "coordinates": { + "points": [ + [140.5395, 285.20960178], + [140.5395, 292.23156878000003], + [484.61588300000005, 292.23156878000003], + [484.61588300000005, 285.20960178] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 2, + "parent_id": "49ed84e1-73e8-46c3-86a8-55493a981754", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "a692b3ad-32a5-4541-8441-376d77fcc5ea", + "text": "匹克运动发展、促进世界⼈⺠团结友谊作出重要贡献。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 295.04040177999997], + [126.4956, 302.06236878], + [295.02280800000005, 302.06236878], + [295.02280800000005, 295.04040177999997] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 2, + "parent_id": "49ed84e1-73e8-46c3-86a8-55493a981754", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "bffde616-1f7d-41d2-888e-18ce68c3fa5d", + "text": "新冠疫情发⽣三年多来,以习近平同志为核⼼的党中央始终坚持⼈⺠⾄上、⽣命⾄上,强化医疗资源和物资保 障,全⼒救治新冠患者,有效保护⼈⺠群众⽣命安全和身体健康,因时因势优化调整防控政策措施,全国⼈⺠坚忍不 拔,取得重⼤决定性胜利。在极不平凡的抗疫历程中,各地区各部⻔各单位做了⼤量⼯作,各⾏各业共克时艰,⼴⼤ 医务⼈员不畏艰⾟,特别是亿万⼈⺠克服多重困难,付出和奉献,都⼗分不易,⼤家共同抵御疫情重⼤挑战,⾯对尚 未结束的疫情,仍在不断巩固统筹疫情防控和经济社会发展成果。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 304.87110178], + [126.4956, 351.21606878], + [484.61591699999997, 351.21606878], + [484.61591699999997, 304.87110178] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 2, + "parent_id": "49ed84e1-73e8-46c3-86a8-55493a981754", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "abbbafd9-ace8-4d81-b79f-1fafb9cb0a11", + "text": "各位代表! 五年来,我们深⼊贯彻以习近平同志为核⼼的党中央决策部署,主要做了以下⼯作。 (⼀)创新宏观调控,保持经济运⾏在合理区间。⾯对贸易保护主义抬头、疫情冲击等接踵⽽来的严峻挑战,创 新宏观调控⽅式,不过度依赖投资,统筹运⽤财政货币等政策,增强针对性有效性,直⾯市场变化,重点⽀持市场主 体纾困发展,进⽽稳就业保⺠⽣。把年度主要预期⽬标作为⼀个有机整体来把握,加强区间调控、定向调控、相机调 控、精准调控,既果断加⼤⼒度,⼜不搞“⼤⽔漫灌”、透⽀未来,持续做好“六稳”、“六保”⼯作,强化保居⺠就业、 保基本⺠⽣、保市场主体、保粮⻝能源安全、保产业链供应链稳定、保基层运转,以改⾰开放办法推动经济爬坡过 坎、持续前⾏。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 354.02490178], + [126.4956, 429.86216878], + [484.61591699999997, 429.86216878], + [484.61591699999997, 354.02490178] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 2, + "parent_id": "49ed84e1-73e8-46c3-86a8-55493a981754", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "a98712bd-645e-48a2-8ecd-9503f64112be", + "text": "坚持实施积极的财政政策。合理把握⾚字规模,五年总体⾚字率控制在3%以内,政府负债率控制在50%左右。", + "metadata": { + "coordinates": { + "points": [ + [140.5395, 432.03892475000004], + [140.5395, 439.69286878], + [478.764301, 439.69286878], + [478.764301, 432.03892475000004] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 2, + "parent_id": "49ed84e1-73e8-46c3-86a8-55493a981754", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "969260c6-77be-41cc-940d-2b010c100e0f", + "text": "不断优化⽀出结构,教育科技、⽣态环保、基本⺠⽣等重点领域得到有⼒保障。实施⼤规模减税降费政策,制度性安 排与阶段性措施相结合,疫情发⽣后减税降费⼒度进⼀步加⼤,成为应对冲击的关键举措。彻底完成营改增任务、取 消营业税,将增值税收⼊占⽐最⾼、涉及⾏业⼴泛的税率从17%降⾄13%,阶段性将⼩规模纳税⼈增值税起征点从⽉ 销售额3万元提⾼到15万元、⼩微企业所得税实际最低税负率从10%降⾄2.5%。减税降费公平普惠、⾼效直达,五年 累计减税5.4万亿元、降费2.8万亿元,既帮助企业渡过难关、留得⻘⼭,也放⽔养⻥、涵养税源,年均新增涉税企业 和个体⼯商户等超过1100万户,各年度中央财政收⼊预算都顺利完成,考虑留抵退税因素,全国财政收⼊⼗年接近翻 ⼀番。推动财⼒下沉,中央⼀般公共预算⽀出中对地⽅转移⽀付占⽐提⾼到70%左右,建⽴并常态化实施中央财政资 ⾦直达机制。各级政府坚持过紧⽇⼦,严控⼀般性⽀出,中央部⻔带头压减⽀出,盘活存量资⾦和闲置资产,腾出的 资⾦千⽅百计惠企裕⺠,全国财政⽀出70%以上⽤于⺠⽣。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 442.50170177999996], + [126.4956, 528.1696687799999], + [484.61591699999997, 528.1696687799999], + [484.61591699999997, 442.50170177999996] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 2, + "parent_id": "49ed84e1-73e8-46c3-86a8-55493a981754", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "2cdcc889-e9d2-42c3-9b19-0ed82c4246b4", + "text": "坚持实施稳健的货币政策。根据形势变化灵活把握政策⼒度,保持流动性合理充裕,⽤好降准、再贷款等政策⼯ 具,加⼤对实体经济的有效⽀持,缓解中⼩微企业融资难融资贵等问题。制造业贷款余额从16.3万亿元增加到27.4万 亿元。普惠⼩微贷款余额从8.2万亿元增加到23.8万亿元、年均增⻓24%,贷款平均利率较五年前下降1.5个百分点。加 ⼤清理拖⽋中⼩企业账款⼒度。⼈⺠币汇率在合理均衡⽔平上弹性增强、保持基本稳定。完全化解了历史上承担的国 有商业银⾏和农村信⽤社等14486亿元⾦融改⾰成本。运⽤市场化法治化⽅式,精准处置⼀批⼤型企业集团⻛险,平 稳化解⾼⻛险中⼩⾦融机构⻛险,⼤型⾦融机构健康发展,⾦融体系稳健运⾏,守住了不发⽣系统性⻛险的底线。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 530.97850178], + [126.4956, 587.15416878], + [485.201102, 587.15416878], + [485.201102, 530.97850178] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 2, + "parent_id": "49ed84e1-73e8-46c3-86a8-55493a981754", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "334e2f4d-9f10-4a9d-be8f-4d87f434d96b", + "text": "强化就业优先政策导向。把稳就业作为经济运⾏在合理区间的关键指标。着⼒促进市场化社会化就业,加⼤对企 业稳岗扩岗⽀持⼒度。将养⽼保险单位缴费⽐例从20%降⾄16%,同时充实全国社保基⾦,储备规模从1.8万亿元增加 到2.5万亿元以上。实施失业保险基⾦稳岗返还、留⼯培训补助等政策。持续推进⼤众创业万众创新,连续举办8届全 国双创活动周、超过5.2亿⼈次参与,⿎励以创业带动就业,加强劳动者权益保护,新就业形态和灵活就业成为就业 增收的重要渠道。做好⾼校毕业⽣、退役军⼈、农⺠⼯等群体就业⼯作。使⽤失业保险基⾦等资⾦⽀持技能培训。实 施⾼职扩招和职业技能提升三年⾏动,累计扩招413万⼈、培训8300多万⼈次。就业是⺠⽣之基、财富之源。14亿多 ⼈⼝⼤国保持就业稳定,难能可贵,蕴含着巨⼤创造⼒。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 589.96300178], + [126.4956, 655.9694687799999], + [484.61591699999997, 655.9694687799999], + [484.61591699999997, 589.96300178] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 2, + "parent_id": "49ed84e1-73e8-46c3-86a8-55493a981754", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "7419e913-47ea-4934-bfe8-d899de5f81a8", + "text": "保持物价总体平稳。在应对冲击中没有持续⼤幅增加⾚字规模,也没有超发货币,为物价稳定创造了宏观条件。 下⼤⽓⼒抓农业⽣产,强化产销衔接和储备调节,确保粮⻝和⽣猪、蔬菜等稳定供应,及时解决煤炭电⼒供应紧张问 题,满⾜⺠⽣和⽣产⽤能需求,保障交通物流畅通。加强市场监管,维护正常价格秩序。⼗年来我国居⺠消费价格涨 幅稳定在2%左右的较低⽔平,成如容易却艰⾟,既维护了市场经济秩序、为宏观政策实施提供了空间,⼜有利于更 好保障基本⺠⽣。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 658.77830178], + [126.4956, 705.12328878], + [484.61591699999997, 705.12328878], + [484.61591699999997, 658.77830178] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 2, + "parent_id": "49ed84e1-73e8-46c3-86a8-55493a981754", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "277ddb11-73b6-4065-a3eb-4fb796343a93", + "text": "(⼆)如期打赢脱贫攻坚战,巩固拓展脱贫攻坚成果。全⾯建成⼩康社会最艰巨最繁重的任务在农村特别是在贫 困地区。坚持精准扶贫,聚焦“三区三州”等深度贫困地区,强化政策倾斜⽀持,优先保障脱贫攻坚资⾦投⼊,对脱贫 难度⼤的县和村挂牌督战。深⼊实施产业、就业、⽣态、教育、健康、社会保障等帮扶,加强易地搬迁后续扶持,重 点解决“两不愁三保障”问题,脱贫群众不愁吃、不愁穿,义务教育、基本医疗、住房安全有保障,饮⽔安全也有了保 障。贫困地区农村居⺠收⼊明显增加,⽣产⽣活条件显著改善。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 707.93203178], + [126.4956, 754.27705878], + [484.61591699999997, 754.27705878], + [484.61591699999997, 707.93203178] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 2, + "parent_id": "49ed84e1-73e8-46c3-86a8-55493a981754", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Footer", + "element_id": "ec9e5939-c9aa-4a9f-96ea-16175d352141", + "text": "第2页 共7页", + "metadata": { + "coordinates": { + "points": [ + [0, 781.66], + [0, 792.9], + [52.5, 792], + [52.5, 781.66] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 2, + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Footer", + "element_id": "9b1568ee-8d0e-450b-934d-9bc16b31e4fb", + "text": "2023/8/4, 10:17", + "metadata": { + "coordinates": { + "points": [ + [548.675, 781.66], + [548.675, 791.66], + [612, 791.66], + [612, 781.66] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 2, + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Header", + "element_id": "37bd1dbb-0f51-44f8-b0ca-5573ab633cb7", + "text": "政府⼯作报告 ——2023年3⽉5⽇在第⼗四届全国⼈民代表...", + "metadata": { + "coordinates": { + "points": [ + [0, 1.1599999999999682], + [0, 12.399999999999977], + [267.5, 12.399999999999977], + [267.5, 1.1599999999999682] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 3, + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Header", + "element_id": "2c84b821-a14d-43e1-a128-a0d62660d8e2", + "text": "https://www.gov.cn/gongbao/content/2023/content_5747260.htm", + "metadata": { + "coordinates": { + "points": [ + [351.9875, 1.1599999999999682], + [351.9875, 11.159999999999968], + [612, 11.159999999999968], + [612.0035, 1.1599999999999682] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 3, + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "eb3aaf2d-2ec3-48fa-9ab2-204262de4fa4", + "text": "推动巩固拓展脱贫攻坚成果同乡村振兴有效衔接。保持过渡期内主要帮扶政策总体稳定,严格落实“四个不摘”要 求,建⽴健全防⽌返贫动态监测和帮扶机制,有⼒应对疫情、灾情等不利影响,确保不发⽣规模性返贫。确定并集中 ⽀持160个国家乡村振兴重点帮扶县,加⼤对易地搬迁集中安置区等重点区域⽀持⼒度,坚持并完善东⻄部协作、对 ⼝⽀援、定点帮扶等机制,选派⽤好医疗、教育“组团式”帮扶⼲部⼈才和科技特派员,推动脱贫地区加快发展和群众 稳定增收。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 37.404424749999976], + [126.4956, 84.38136878], + [484.61591699999997, 84.38136878], + [484.61591699999997, 37.404424749999976] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 3, + "parent_id": "2c84b821-a14d-43e1-a128-a0d62660d8e2", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "3c008bb2-3e78-4559-8431-092b50ad8b0c", + "text": "(三)聚焦重点领域和关键环节深化改⾰,更⼤激发市场活⼒和社会创造⼒。坚持社会主义市场经济改⾰⽅向, 处理好政府和市场的关系,使市场在资源配置中起决定性作⽤,更好发挥政府作⽤,推动有效市场和有为政府更好结 合。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 87.19010178000008], + [126.4956, 113.87356877999991], + [484.61591699999997, 113.87356877999991], + [484.61591699999997, 87.19010178000008] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 3, + "parent_id": "2c84b821-a14d-43e1-a128-a0d62660d8e2", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "NarrativeText", + "element_id": "ee63fb3b-e7c9-4ccb-9420-1a00bca9b001", + "text": "持续推进政府职能转变。完成国务院及地⽅政府机构改⾰。加快建设全国统⼀⼤市场,建设⾼标准市场体系,营 造市场化法治化国际化营商环境。⼤道⾄简,政简易⾏。持之以恒推进触动政府⾃身利益的改⾰。进⼀步简政放权, 放宽市场准⼊,全⾯实施市场准⼊负⾯清单制度,清单管理措施⽐制度建⽴之初压减64%,将⾏政许可事项全部纳⼊ 清单管理。多年来取消和下放⾏政许可事项1000多项,中央政府层⾯核准投资项⽬压减90%以上,⼯业产品⽣产许可 证从60类减少到10类,⼯程建设项⽬全流程审批时间压缩到不超过120个⼯作⽇。改⾰商事制度,推⾏“证照分离”改 ⾰,企业开办时间从⼀个⽉以上压缩到⽬前的平均4个⼯作⽇以内,实⾏中⼩微企业简易注销制度。坚持放管结合, 加强事中事后监管,严格落实监管责任,防⽌监管缺位、重放轻管,强化⻝品药品等重点领域质量和安全监管,推⾏ “双随机、⼀公开”等⽅式加强公正监管,规范⾏使⾏政裁量权。加强反垄断和反不正当竞争,全⾯落实公平竞争审查 制度,改⾰反垄断执法体制。依法规范和引导资本健康发展,依法坚决管控资本⽆序扩张。不断优化服务,推进政务 服务集成办理,压减各类证明事项,加快数字政府建设,90%以上的政务服务实现⽹上可办,户籍证明、社保转接等 200多项群众经常办理事项实现跨省通办。取消所有省界⾼速公路收费站。制定实施优化营商环境、市场主体登记管 理、促进个体⼯商户发展、保障中⼩企业款项⽀付等条例。改⾰给⼈们经商办企业更多便利和空间,去年底企业数量 超过5200万户、个体⼯商户超过1.1亿户,市场主体总量超过1.6亿户、是⼗年前的3倍,发展内⽣动⼒明显增强。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 116.68240178000008], + [126.4956, 241.6734687799999], + [484.61591699999997, 241.6734687799999], + [484.61591699999997, 116.68240178000008] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 3, + "parent_id": "3c008bb2-3e78-4559-8431-092b50ad8b0c", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "d7ef80da-2093-468e-9df0-c8d3fb1fcca9", + "text": "促进多种所有制经济共同发展。坚持和完善社会主义基本经济制度,坚持“两个毫不动摇”。完成国企改⾰三年⾏ 动任务,健全现代企业制度,推动国企聚焦主责主业优化重组、提质增效。促进⺠营企业健康发展,破除各种隐性壁 垒,⼀视同仁给予政策⽀持,提振⺠间投资信⼼。完善产权保护制度,保护企业家合法权益,弘扬企业家精神。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 243.85022475000005], + [126.4956, 271.1656687799999], + [484.61591699999997, 271.1656687799999], + [484.61591699999997, 243.85022475000005] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 3, + "parent_id": "2c84b821-a14d-43e1-a128-a0d62660d8e2", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "1b9d8974-fb46-4952-80cc-633e10979974", + "text": "推进财税⾦融体制改⾰。深化预算管理体制改⾰,加⼤预算公开⼒度,推进中央与地⽅财政事权和⽀出责任划分 改⾰,完善地⽅政府债务管理体系,构建综合与分类相结合的个⼈所得税制,进⼀步深化税收征管改⾰。推动⾦融监 管体制改⾰,统筹推进中⼩银⾏补充资本和改⾰化险,推进股票发⾏注册制改⾰,完善资本市场基础制度,加强⾦融 稳定法治建设。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 273.9745017800001], + [126.4956, 310.48866878], + [484.61591699999997, 310.48866878], + [484.61591699999997, 273.9745017800001] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 3, + "parent_id": "2c84b821-a14d-43e1-a128-a0d62660d8e2", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "aade29b7-3d72-479d-9c2d-f4ee67cfc935", + "text": "(四)深⼊实施创新驱动发展战略,推动产业结构优化升级。深化供给侧结构性改⾰,完善国家和地⽅创新体 系,推进科技⾃⽴⾃强,紧紧依靠创新提升实体经济发展⽔平,不断培育壮⼤发展新动能,有效应对外部打压遏制。 增强科技创新引领作⽤。强化国家战略科技⼒量,实施⼀批科技创新重⼤项⽬,加强关键核⼼技术攻关。发挥好 ⾼校、科研院所作⽤,⽀持新型研发机构发展。推进国际和区域科技创新中⼼建设,布局建设综合性国家科学中⼼。 ⽀持基础研究和应⽤基础研究,全国基础研究经费五年增⻓1倍。改⾰科研项⽬和经费管理制度,赋予科研单位和科 研⼈员更⼤⾃主权,努⼒将⼴⼤科技⼈员从繁杂的⾏政事务中解脱出来。加强知识产权保护,激发创新动⼒。促进国 际科技交流合作。通过市场化机制激励企业创新,不断提⾼企业研发费⽤加计扣除⽐例,将制造业企业、科技型中⼩ 企业分别从50%、75%提⾼⾄100%,并阶段性扩⼤到所有适⽤⾏业,对企业投⼊基础研究、购置设备给予政策⽀持, 各类⽀持创新的税收优惠政策年度规模已超过万亿元。创设⽀持创新的⾦融政策⼯具,引导创业投资等发展。企业研 发投⼊保持两位数增⻓,⼀⼤批创新企业脱颖⽽出。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 313.29750178], + [126.4956, 408.79626878], + [484.61591699999997, 408.79626878], + [484.61591699999997, 313.29750178] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 3, + "parent_id": "2c84b821-a14d-43e1-a128-a0d62660d8e2", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "dcbe0c62-a813-4244-a51f-40ee88fb90f6", + "text": "推动产业向中⾼端迈进。把制造业作为发展实体经济的重点,促进⼯业经济平稳运⾏,保持制造业⽐重基本稳 定。严格执⾏环保、质量、安全等法规标准,淘汰落后产能。开展重点产业强链补链⾏动。启动⼀批产业基础再造⼯ 程。⿎励企业加快设备更新和技术改造,将固定资产加速折旧优惠政策扩⼤⾄全部制造业。推动⾼端装备、⽣物医 药、光电⼦信息、新能源汽⻋、光伏、⻛电等新兴产业加快发展。促进数字经济和实体经济深度融合。持续推进⽹络 提速降费,发展“互联⽹+”。移动互联⽹⽤户数增加到14.5亿户。⽀持⼯业互联⽹发展,有⼒促进了制造业数字化智 能化。专精特新中⼩企业达7万多家。促进平台经济健康持续发展,发挥其带动就业创业、拓展消费市场、创新⽣产 模式等作⽤。发展研发设计、现代物流、检验检测认证等⽣产性服务业。加强全⾯质量管理和质量基础设施建设。中 国制造的品质和竞争⼒不断提升。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 411.60500178], + [126.4956, 487.44226878], + [484.61591699999997, 487.44226878], + [484.61591699999997, 411.60500178] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 3, + "parent_id": "2c84b821-a14d-43e1-a128-a0d62660d8e2", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "91ddf99f-440e-45a7-9797-06d64179160f", + "text": "(五)扩⼤国内有效需求,推进区域协调发展和新型城镇化。围绕构建新发展格局,⽴⾜超⼤规模市场优势,坚", + "metadata": { + "coordinates": { + "points": [ + [140.5395, 490.25110178], + [140.5395, 497.27306878], + [484.61588300000005, 497.27306878], + [484.61588300000005, 490.25110178] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 3, + "parent_id": "2c84b821-a14d-43e1-a128-a0d62660d8e2", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "6eb64dfb-2acc-4c38-9619-b7ad0b490347", + "text": "持实施扩⼤内需战略,培育更多经济增⻓动⼒源。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 500.08180178], + [126.4956, 507.10376878], + [280.978874, 507.10376878], + [280.978874, 500.08180178] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 3, + "parent_id": "2c84b821-a14d-43e1-a128-a0d62660d8e2", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "02a2b448-e257-4106-b789-98c8bdfde118", + "text": "着⼒扩⼤消费和有效投资。疫情发⽣前,消费已经成为我国经济增⻓的主要拉动⼒。⾯对需求不⾜甚⾄出现收 缩,推动消费尽快恢复。多渠道促进居⺠增收,提⾼中低收⼊群体收⼊。⽀持汽⻋、家电等⼤宗消费,汽⻋保有量突 破3亿辆、增⻓46.7%。推动线上线下消费深度融合,实物商品⽹上零售额占社会消费品零售总额的⽐重从15.8%提⾼ 到27.2%。发展城市社区便⺠商业,完善农村快递物流配送体系。帮扶旅游业发展。围绕补短板、调结构、增后劲扩 ⼤有效投资。创新投融资体制机制,预算内投资引导和撬动社会投资成倍增加,增加地⽅政府专项债券额度,重点⽀ 持交通、⽔利、能源、信息等基础设施和⺠⽣⼯程建设,⿎励社会资本参与建设运营,调动⺠间投资积极性。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 509.91260178], + [126.4956, 566.08826878], + [484.61591699999997, 566.08826878], + [484.61591699999997, 509.91260178] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 3, + "parent_id": "2c84b821-a14d-43e1-a128-a0d62660d8e2", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "50e641ef-85b8-470b-a596-76b5a5ece9ae", + "text": "增强区域发展平衡性协调性。统筹推进⻄部⼤开发、东北全⾯振兴、中部地区崛起、东部率先发展,中⻄部地区 经济增速总体⾼于东部地区。加⼤对⾰命⽼区、⺠族地区、边疆地区的⽀持⼒度,中央财政对相关地区转移⽀付资⾦ ⽐五年前增⻓66.8%。推进京津冀协同发展、⻓江经济带发展、⻓三⻆⼀体化发展,推动⻩河流域⽣态保护和⾼质量 发展。⾼标准⾼质量建设雄安新区。发展海洋经济。⽀持经济困难地区发展,促进资源型地区转型发展,⿎励有条件 地区更⼤发挥带动作⽤,推动形成更多新的增⻓极增⻓带。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 568.89710178], + [126.4956, 615.24206878], + [484.61591699999997, 615.24206878], + [484.61591699999997, 568.89710178] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 3, + "parent_id": "2c84b821-a14d-43e1-a128-a0d62660d8e2", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "0d788501-b0e9-4535-b508-997cb3d793ee", + "text": "持续推进以⼈为核⼼的新型城镇化。我国仍处于城镇化进程中,每年有上千万农村⼈⼝转移到城镇。完善城市特", + "metadata": { + "coordinates": { + "points": [ + [140.5395, 618.05090178], + [140.5395, 625.07286878], + [484.61588300000005, 625.07286878], + [484.61588300000005, 618.05090178] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 3, + "parent_id": "2c84b821-a14d-43e1-a128-a0d62660d8e2", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "2b552ff5-c41b-4311-8068-a3be5feb48af", + "text": "别是县城功能,增强综合承载能⼒。分类放宽或取消城镇落户限制,⼗年1.4亿农村⼈⼝在城镇落户。有序发展城市 群和都市圈,促进⼤中⼩城市协调发展。推动成渝地区双城经济圈建设。坚持房⼦是⽤来住的、不是⽤来炒的定位, 建⽴实施房地产⻓效机制,扩⼤保障性住房供给,推进⻓租房市场建设,稳地价、稳房价、稳预期,因城施策促进房 地产市场健康发展。加强城市基础设施建设,轨道交通运营⾥程从4500多公⾥增加到近1万公⾥,排⽔管道从63万公 ⾥增加到89万公⾥。改造城镇⽼旧⼩区16.7万个,惠及2900多万家庭。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 627.24962475], + [126.4956, 674.22656878], + [484.61591699999997, 674.22656878], + [484.61591699999997, 627.24962475] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 3, + "parent_id": "2c84b821-a14d-43e1-a128-a0d62660d8e2", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "c6fad870-9fae-4d9b-a1c1-0b852be6d845", + "text": "(六)保障国家粮⻝安全,⼤⼒实施乡村振兴战略。完善强农惠农政策,持续抓紧抓好农业⽣产,加快推进农业", + "metadata": { + "coordinates": { + "points": [ + [140.5395, 677.03540178], + [140.5395, 684.05736878], + [484.61588300000005, 684.05736878], + [484.61588300000005, 677.03540178] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 3, + "parent_id": "2c84b821-a14d-43e1-a128-a0d62660d8e2", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "3d024bc5-59d9-4f09-87c4-d4bf09f4a237", + "text": "农村现代化。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 686.86610178], + [126.4956, 693.88806878], + [168.627402, 693.88806878], + [168.627402, 686.86610178] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 3, + "parent_id": "2c84b821-a14d-43e1-a128-a0d62660d8e2", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "0fecb10b-c690-493f-877d-b4328b5ab046", + "text": "提升农业综合⽣产能⼒。稳定和扩⼤粮⻝播种⾯积,扩种⼤⾖油料,优化⽣产结构布局,提⾼单产和品质。完善 粮⻝⽣产⽀持政策,稳定种粮农⺠补贴,合理确定稻⾕、⼩⻨最低收购价,加⼤对产粮⼤县奖励⼒度,健全政策性农 业保险制度。加强耕地保护,实施⿊⼟地保护⼯程,完善⽔利设施,新建⾼标准农⽥4.56亿亩。推进国家粮⻝安全产 业带建设。加快种业、农机等科技创新和推⼴应⽤,农作物耕种收综合机械化率从67%提⾼到73%。全⾯落实粮⻝安 全党政同责,强化粮⻝和重要农产品稳产保供,始终不懈地把14亿多中国⼈的饭碗牢牢端在⾃⼰⼿中。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 696.69691178], + [126.4956, 743.04186878], + [484.61591699999997, 743.04186878], + [484.61591699999997, 696.69691178] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 3, + "parent_id": "2c84b821-a14d-43e1-a128-a0d62660d8e2", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Footer", + "element_id": "dd62fe71-af87-4eec-a1ed-bfa61a5341ac", + "text": "扎实推进农村改⾰发展。巩固和完善农村基本经营制度,完成承包地确权登记颁证和农村集体产权制度改⾰阶段", + "metadata": { + "coordinates": { + "points": [ + [140.5395, 745.8506817800001], + [140.5395, 752.87264878], + [484.61588300000005, 752.87264878], + [484.61588300000005, 745.8506817800001] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 3, + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Footer", + "element_id": "23e6d28e-be6e-4344-a07a-b05cf0c533ae", + "text": "第3页 共7页", + "metadata": { + "coordinates": { + "points": [ + [0, 781.66], + [0, 792.9], + [52.5, 792], + [52.5, 781.66] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 3, + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Footer", + "element_id": "635e5f2b-db06-4921-b0f3-388c325b4260", + "text": "2023/8/4, 10:17", + "metadata": { + "coordinates": { + "points": [ + [548.675, 781.66], + [548.675, 791.66], + [612, 791.66], + [612, 781.66] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 3, + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Header", + "element_id": "a7bc89fe-6dee-48a7-97f2-1ce2af6bf4b3", + "text": "政府⼯作报告 ——2023年3⽉5⽇在第⼗四届全国⼈民代表...", + "metadata": { + "coordinates": { + "points": [ + [0, 1.1599999999999682], + [0, 12.399999999999977], + [267.5, 12.399999999999977], + [267.5, 1.1599999999999682] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 4, + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Header", + "element_id": "47f900de-67ac-461d-b077-eb438cb1f2f6", + "text": "https://www.gov.cn/gongbao/content/2023/content_5747260.htm", + "metadata": { + "coordinates": { + "points": [ + [351.9875, 1.1599999999999682], + [351.9875, 11.159999999999968], + [612, 11.159999999999968], + [612.0035, 1.1599999999999682] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 4, + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "4b6fb609-893c-4c42-ac0c-a2d79794ba9f", + "text": "性任务,稳步推进多种形式适度规模经营,抓好家庭农场和农⺠合作社发展,加快发展农业社会化服务。启动乡村建 设⾏动,持续整治提升农村⼈居环境,加强⽔电路⽓信邮等基础设施建设,实现符合条件的乡镇和建制村通硬化路、 通客⻋,农村⾃来⽔普及率从80%提⾼到87%,多年累计改造农村危房2400多万户。深化供销合作社、集体林权、农 垦等改⾰。⽴⾜特⾊资源发展乡村产业,促进农⺠就业创业增收。为保障农⺠⼯及时拿到应得报酬,持续强化农⺠⼯ ⼯资拖⽋治理,出台实施保障农⺠⼯⼯资⽀付条例,严厉打击恶意拖⽋⾏为。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 38.036401780000006], + [126.4956, 84.38136878], + [484.61591699999997, 84.38136878], + [484.61591699999997, 38.036401780000006] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 4, + "parent_id": "47f900de-67ac-461d-b077-eb438cb1f2f6", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "2f10c235-cec7-4164-9cf3-f1349b870bca", + "text": "(七)坚定扩⼤对外开放,深化互利共赢的国际经贸合作。⾯对外部环境变化,实⾏更加积极主动的开放战略,", + "metadata": { + "coordinates": { + "points": [ + [140.5395, 87.19010178000008], + [140.5395, 94.21206877999998], + [484.61588300000005, 94.21206877999998], + [484.61588300000005, 87.19010178000008] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 4, + "parent_id": "47f900de-67ac-461d-b077-eb438cb1f2f6", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "d92dd588-1155-4bcb-ab57-04b869db70fa", + "text": "以⾼⽔平开放更有⼒促改⾰促发展。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 97.02090178000003], + [126.4956, 104.04286877999994], + [238.847072, 104.04286877999994], + [238.847072, 97.02090178000003] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 4, + "parent_id": "47f900de-67ac-461d-b077-eb438cb1f2f6", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "c78dc262-2737-4a43-8b7c-bf011c9ab26e", + "text": "推动进出⼝稳中提质。加⼤出⼝退税、信保、信贷等政策⽀持⼒度,企业出⼝退税办理时间压缩⾄6个⼯作⽇以 内。优化外汇服务。发展外贸新业态,新设152个跨境电商综试区,⽀持建设⼀批海外仓。发挥进博会、⼴交会、服 贸会、消博会等重⼤展会作⽤。推进通关便利化,进⼝、出⼝通关时间分别压减67%和92%,进出⼝环节合规成本明 显下降。关税总⽔平从9.8%降⾄7.4%。全⾯深化服务贸易创新发展试点,推出跨境服务贸易负⾯清单。进出⼝稳定 增⻓有⼒⽀撑了经济发展。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 106.21962474999998], + [126.4956, 153.19666877999998], + [482.27533700000004, 153.19666877999998], + [482.27533700000004, 106.21962474999998] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 4, + "parent_id": "47f900de-67ac-461d-b077-eb438cb1f2f6", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "d2ce32fb-1f6b-4197-9d82-910d1cc55a6e", + "text": "积极有效利⽤外资。出台外商投资法实施条例,不断优化外商投资环境。持续放宽外资市场准⼊,全国和⾃由贸 易试验区负⾯清单条数分别压减51%、72%,制造业领域基本全⾯放开,⾦融等服务业开放⽔平不断提升。已设21个 ⾃由贸易试验区,海南⾃由贸易港建设稳步推进。各地创新⽅式加强外资促进服务,加⼤招商引资和项⽬对接⼒度。 ⼀批外资⼤项⽬落地,我国持续成为外商投资兴业的热⼟。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 156.00540178000006], + [126.4956, 192.51966877999996], + [484.61591699999997, 192.51966877999996], + [484.61591699999997, 156.00540178000006] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 4, + "parent_id": "47f900de-67ac-461d-b077-eb438cb1f2f6", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "7276fe25-7abf-4a22-8d70-8e05fc621d25", + "text": "推动⾼质量共建“⼀带⼀路”。坚持共商共建共享,遵循市场原则和国际通⾏规则,实施⼀批互联互通和产能合作 项⽬,对沿线国家货物进出⼝额年均增⻓13.4%,各领域交流合作不断深化。推进⻄部陆海新通道建设。引导对外投 资健康有序发展,加强境外⻛险防控。新签和升级6个⾃贸协定,与⾃贸伙伴货物进出⼝额占⽐从26%提升⾄35%左 右。坚定维护多边贸易体制,反对贸易保护主义,稳妥应对经贸摩擦,促进贸易和投资⾃由化便利化。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 194.69642475], + [126.4956, 231.84266877999994], + [483.8259790000001, 231.84266877999994], + [483.8259790000001, 194.69642475] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 4, + "parent_id": "47f900de-67ac-461d-b077-eb438cb1f2f6", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "0ba1c308-f163-400d-aedb-4126bbf4299b", + "text": "(⼋)加强⽣态环境保护,促进绿⾊低碳发展。坚持绿⽔⻘⼭就是⾦⼭银⼭的理念,健全⽣态⽂明制度体系,处", + "metadata": { + "coordinates": { + "points": [ + [140.5395, 234.65150178], + [140.5395, 241.6734687799999], + [484.61588300000005, 241.6734687799999], + [484.61588300000005, 234.65150178] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 4, + "parent_id": "47f900de-67ac-461d-b077-eb438cb1f2f6", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "341b42d0-8590-4b34-8784-b9efaf4a2626", + "text": "理好发展和保护的关系,不断提升可持续发展能⼒。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 244.48220178000008], + [126.4956, 251.50416878], + [288.00084100000004, 251.50416878], + [288.00084100000004, 244.48220178000008] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 4, + "parent_id": "47f900de-67ac-461d-b077-eb438cb1f2f6", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "54b66b42-e236-4674-a43e-452af2c6f4f4", + "text": "加强污染治理和⽣态建设。坚持精准治污、科学治污、依法治污,深⼊推进污染防治攻坚。注重多污染物协同治 理和区域联防联控,地级及以上城市空⽓质量优良天数⽐例达86.5%、上升4个百分点。基本消除地级及以上城市⿊臭 ⽔体,推进重要河湖、近岸海域污染防治。加⼤⼟壤污染⻛险防控和修复⼒度,强化固体废物和新污染物治理。全⾯ 划定耕地和永久基本农⽥保护红线、⽣态保护红线和城镇开发边界。坚持⼭⽔林⽥湖草沙⼀体化保护和系统治理,实 施⼀批重⼤⽣态⼯程,全⾯推⾏河湖⻓制、林⻓制。推动共抓⻓江⼤保护,深⼊实施⻓江流域重点⽔域⼗年禁渔。加 强⽣物多样性保护。完善⽣态保护补偿制度。森林覆盖率达到24%,草原综合植被盖度和湿地保护率均达50%以上, ⽔⼟流失、荒漠化、沙化⼟地⾯积分别净减少10.6万、3.8万、3.3万平⽅公⾥。⼈⺠群众越来越多享受到蓝天⽩云、 绿⽔⻘⼭。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 254.31300178000004], + [126.4956, 330.15016878], + [485.20110600000004, 330.15016878], + [485.20110600000004, 254.31300178000004] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 4, + "parent_id": "47f900de-67ac-461d-b077-eb438cb1f2f6", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "dafc342f-23c8-4cbe-b2ab-a485abbc2e46", + "text": "稳步推进节能降碳。统筹能源安全稳定供应和绿⾊低碳发展,科学有序推进碳达峰碳中和。优化能源结构,实现", + "metadata": { + "coordinates": { + "points": [ + [140.5395, 332.95900178], + [140.5395, 339.98096878], + [484.61588300000005, 339.98096878], + [484.61588300000005, 332.95900178] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 4, + "parent_id": "47f900de-67ac-461d-b077-eb438cb1f2f6", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "bcc787ba-866b-447b-9ada-9f1a2c95c6af", + "text": "超低排放的煤电机组超过10.5亿千瓦,可再⽣能源装机规模由6.5亿千瓦增⾄12亿千瓦以上,清洁能源消费占⽐由 20.8%上升到25%以上。全⾯加强资源节约⼯作,发展绿⾊产业和循环经济,促进节能环保技术和产品研发应⽤。提 升⽣态系统碳汇能⼒。加强绿⾊发展⾦融⽀持。完善能耗考核⽅式。积极参与应对⽓候变化国际合作,为推动全球⽓ 候治理作出了中国贡献。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 342.15782475000003], + [126.4956, 379.30396878], + [484.61591699999997, 379.30396878], + [484.61591699999997, 342.15782475000003] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 4, + "parent_id": "47f900de-67ac-461d-b077-eb438cb1f2f6", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "5b5a6449-04b5-4611-9485-dc1e4055ca23", + "text": "(九)切实保障和改善⺠⽣,加快社会事业发展。贯彻以⼈⺠为中⼼的发展思想,持续增加⺠⽣投⼊,着⼒保基", + "metadata": { + "coordinates": { + "points": [ + [140.5395, 382.11280178], + [140.5395, 389.13476878], + [484.61588300000005, 389.13476878], + [484.61588300000005, 382.11280178] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 4, + "parent_id": "47f900de-67ac-461d-b077-eb438cb1f2f6", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "1360318b-749f-4472-9e97-2c96496e3c4b", + "text": "本、兜底线、促公平,提升公共服务⽔平,推进基本公共服务均等化,在发展中不断增进⺠⽣福祉。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 391.94350177999996], + [126.4956, 398.96546878], + [435.46214800000007, 398.96546878], + [435.46214800000007, 391.94350177999996] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 4, + "parent_id": "47f900de-67ac-461d-b077-eb438cb1f2f6", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "2334206f-cc65-4ae4-a042-b0f00cf9e2db", + "text": "促进教育公平和质量提升。百年⼤计,教育为本。财政性教育经费占国内⽣产总值⽐例每年都保持在4%以上,", + "metadata": { + "coordinates": { + "points": [ + [140.5395, 401.14232475], + [140.5395, 408.79626878], + [479.934601, 408.79626878], + [479.934601, 401.14232475] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 4, + "parent_id": "47f900de-67ac-461d-b077-eb438cb1f2f6", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "26dbdd46-5806-44ad-9551-ac7a7f976a5c", + "text": "学⽣⼈均经费投⼊⼤幅增加。持续加强农村义务教育薄弱环节建设,基本消除城镇⼤班额,推动解决进城务⼯⼈员⼦ ⼥⼊学问题,义务教育巩固率由93.8%提⾼到95.5%。坚持义务教育由国家统⼀实施,引导规范⺠办教育发展。减轻 义务教育阶段学⽣负担。提升⻘少年健康⽔平。持续实施营养改善计划,每年惠及3700多万学⽣。保障教师特别是乡 村教师⼯资待遇。多渠道增加幼⼉园供给。⾼中阶段教育⽑⼊学率提⾼到90%以上。职业教育适应性增强,职业院校 办学条件持续改善。积极稳妥推进⾼考综合改⾰,⾼等教育⽑⼊学率从45.7%提⾼到59.6%,⾼校招⽣持续加⼤对中 ⻄部地区和农村地区倾斜⼒度。⼤幅提⾼经济困难⾼校学⽣国家助学贷款额度。深⼊实施“强基计划”和基础学科拔尖 ⼈才培养计划,建设288个基础学科拔尖学⽣培养基地,接续推进世界⼀流⼤学和⼀流学科建设,不断夯实发展的⼈ 才基础。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 411.60500178], + [126.4956, 487.44226878], + [484.615971, 487.44226878], + [484.615971, 411.60500178] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 4, + "parent_id": "47f900de-67ac-461d-b077-eb438cb1f2f6", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "97e5e3b0-70e3-4ef1-b520-d4dec93d7c0a", + "text": "提升医疗卫⽣服务能⼒。深⼊推进和努⼒普及健康中国⾏动,深化医药卫⽣体制改⾰,把基本医疗卫⽣制度作为 公共产品向全⺠提供,进⼀步缓解群众看病难、看病贵问题。持续提⾼基本医保和⼤病保险⽔平,城乡居⺠医保⼈均 财政补助标准从450元提⾼到610元。将更多群众急需药品纳⼊医保报销范围。住院和⻔诊费⽤实现跨省直接结算,惠 及5700多万⼈次。推⾏药品和医⽤耗材集中带量采购,降低费⽤负担超过4000亿元。设置13个国家医学中⼼,布局建 设76个国家区域医疗中⼼。全⾯推开公⽴医院综合改⾰,持续提升县域医疗卫⽣服务能⼒,完善分级诊疗体系。优化 ⽼年⼈等群体就医服务。促进中医药传承创新发展、惠及⺠⽣。基本公共卫⽣服务经费⼈均财政补助标准从50元提⾼ 到84元。坚持预防为主,加强重⼤慢性病健康管理。改⾰完善疾病预防控制体系,组建国家疾病预防控制局,健全重 ⼤疫情防控救治和应急物资保障体系,努⼒保障⼈⺠健康。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 490.25110178], + [126.4956, 566.08826878], + [484.616001, 566.08826878], + [484.616001, 490.25110178] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 4, + "parent_id": "47f900de-67ac-461d-b077-eb438cb1f2f6", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "cb5e3b26-270d-477f-a380-d52915cc2b7c", + "text": "加强社会保障和服务。建⽴基本养⽼保险基⾦中央调剂制度,连续上调退休⼈员基本养⽼⾦,提⾼城乡居⺠基础 养⽼⾦最低标准,稳步提升城乡低保、优待抚恤、失业和⼯伤保障等标准。积极应对⼈⼝⽼龄化,推动⽼龄事业和养 ⽼产业发展。发展社区和居家养⽼服务,加强配套设施和⽆障碍设施建设,在税费、⽤房、⽔电⽓价格等⽅⾯给予政 策⽀持。推进医养结合,稳步推进⻓期护理保险制度试点。实施三孩⽣育政策及配套⽀持措施。完善退役军⼈管理保 障制度,提⾼保障⽔平。加强妇⼥、⼉童权益保障。完善未成年⼈保护制度。健全残疾⼈保障和关爱服务体系。健全 社会救助体系,加强低收⼊⼈⼝动态监测,对遇困⼈员及时给予帮扶,年均临时救助1100万⼈次,坚决兜住了困难群 众基本⽣活保障⽹。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 568.89710178], + [126.4956, 634.90356878], + [484.61591699999997, 634.90356878], + [484.61591699999997, 568.89710178] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 4, + "parent_id": "47f900de-67ac-461d-b077-eb438cb1f2f6", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "b0a562ab-1227-48f0-9bb1-6af2ed0f153a", + "text": "丰富⼈⺠群众精神⽂化⽣活。培育和践⾏社会主义核⼼价值观。深化群众性精神⽂明创建。发展新闻出版、⼴播 影视、⽂学艺术、哲学社会科学和档案等事业,加强智库建设。扎实推进媒体深度融合。提升国际传播效能。加强和 创新互联⽹内容建设。弘扬中华优秀传统⽂化,加强⽂物和⽂化遗产保护传承。实施⽂化惠⺠⼯程,公共图书馆、博 物馆、美术馆、⽂化馆站向社会免费开放。深⼊推进全⺠阅读。⽀持⽂化产业发展。加强国家科普能⼒建设。体育健 ⼉勇创佳绩,全⺠健身⼴泛开展。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 637.7124017799999], + [126.4956, 684.05736878], + [484.61591699999997, 684.05736878], + [484.61591699999997, 637.7124017799999] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 4, + "parent_id": "47f900de-67ac-461d-b077-eb438cb1f2f6", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "49513d23-5fc3-44f3-9eac-959c7a13377f", + "text": "(⼗)推进政府依法履职和社会治理创新,保持社会⼤局稳定。加强法治政府建设,使经济社会活动更好在法治 轨道上运⾏。坚持依法⾏政、⼤道为公,严格规范公正⽂明执法,政府的权⼒来⾃⼈⺠,有权不可任性,⽤权必受监 督。推动完善法律法规和规章制度,提请全国⼈⼤常委会审议法律议案50件,制定修订⾏政法规180件次。依法接受 同级⼈⼤及其常委会的监督,⾃觉接受⼈⺠政协的⺠主监督,主动接受社会和舆论监督。认真办理⼈⼤代表建议和政 协委员提案。加强审计、统计监督。持续深化政务公开。开展国务院⼤督查。⽀持⼯会、共⻘团、妇联等群团组织更 好发挥作⽤。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 686.86610178], + [126.4956, 743.04186878], + [484.61591699999997, 743.04186878], + [484.61591699999997, 686.86610178] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 4, + "parent_id": "47f900de-67ac-461d-b077-eb438cb1f2f6", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Footer", + "element_id": "7b336af7-e8b8-4ea0-b85c-658ca6158392", + "text": "加强和创新社会治理。推动市域社会治理现代化,完善基层治理,优化社区服务。⽀持社会组织、⼈道救助、社", + "metadata": { + "coordinates": { + "points": [ + [140.5395, 745.8506817800001], + [140.5395, 752.87264878], + [484.61588300000005, 752.87264878], + [484.61588300000005, 745.8506817800001] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 4, + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Footer", + "element_id": "8e2325f2-5da0-4206-ad54-bb72827d539a", + "text": "第4页 共7页", + "metadata": { + "coordinates": { + "points": [ + [0, 781.66], + [0, 792.9], + [52.5, 792], + [52.5, 781.66] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 4, + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Footer", + "element_id": "0b41d6bb-2baf-4a68-bb1d-62e43e9b46f1", + "text": "2023/8/4, 10:17", + "metadata": { + "coordinates": { + "points": [ + [548.675, 781.66], + [548.675, 791.66], + [612, 791.66], + [612, 781.66] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 4, + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Header", + "element_id": "17e2bb9a-18e1-42cd-ae43-434c478e3e58", + "text": "政府⼯作报告 ——2023年3⽉5⽇在第⼗四届全国⼈民代表...", + "metadata": { + "coordinates": { + "points": [ + [0, 1.1599999999999682], + [0, 12.399999999999977], + [267.5, 12.399999999999977], + [267.5, 1.1599999999999682] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 5, + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Header", + "element_id": "9ef83c0c-6525-4ac6-84d2-274d16e9d9fc", + "text": "https://www.gov.cn/gongbao/content/2023/content_5747260.htm", + "metadata": { + "coordinates": { + "points": [ + [351.9875, 1.1599999999999682], + [351.9875, 11.159999999999968], + [612, 11.159999999999968], + [612.0035, 1.1599999999999682] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 5, + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "e94b1f68-2781-4c7f-a5ff-5ee8a4a31d6a", + "text": "会⼯作、志愿服务、公益慈善等健康发展。深⼊推进信访积案化解。推进社会信⽤体系建设。完善公共法律服务体 系。严格⻝品、药品尤其是疫苗监管。开展安全⽣产专项整治。改⾰和加强应急管理,提⾼防灾减灾救灾能⼒,做好 洪涝⼲旱、森林草原⽕灾、地质灾害、地震等防御和⽓象服务。深⼊推进国家安全体系和能⼒建设。加强⽹络、数据 安全和个⼈信息保护。持续加强社会治安综合治理,严厉打击各类违法犯罪,开展扫⿊除恶专项⽃争,依法严惩⿊恶 势⼒及其“保护伞”,平安中国、法治中国建设取得新进展。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 38.036401780000006], + [126.4956, 84.38136878], + [484.61591699999997, 84.38136878], + [484.61591699999997, 38.036401780000006] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 5, + "parent_id": "9ef83c0c-6525-4ac6-84d2-274d16e9d9fc", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "37624dbd-1948-4cf7-914f-417435b3341a", + "text": "各位代表! 五年来,各级政府认真贯彻落实党中央全⾯从严治党战略部署,扎实开展“不忘初⼼、牢记使命”主题教育和党史 学习教育,弘扬伟⼤建党精神,严格落实中央⼋项规定精神,持之以恒纠治“四⻛”,重点纠治形式主义、官僚主义, “三公”经费⼤幅压减。严厉惩处违规建设楼堂馆所和偷税逃税等⾏为。加强廉洁政府建设。政府⼯作⼈员⾃觉接受法 律监督、监察监督和⼈⺠监督。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 87.19010178000008], + [126.4956, 133.53516877999994], + [483.826005, 133.53516877999994], + [483.826005, 87.19010178000008] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 5, + "parent_id": "9ef83c0c-6525-4ac6-84d2-274d16e9d9fc", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "cd01e3bd-bae7-4ff9-87d6-c297d4322e3f", + "text": "做好经济社会发展⼯作,没有捷径,实⼲为要。五年来,坚持以习近平新时代中国特⾊社会主义思想为指导,全 ⾯贯彻党的基本理论、基本路线、基本⽅略。坚持以经济建设为中⼼,着⼒推动⾼质量发展,事不畏难、⾏不避艰, 要求以实⼲践⾏承诺,凝⼼聚⼒抓发展;以⺠之所望为施政所向,始终把⼈⺠放在⼼中最⾼位置,⼀切以⼈⺠利益为 重,仔细倾听群众呼声,深⼊了解群众冷暖,着⼒解决⼈⺠群众急难愁盼问题;坚持实事求是,尊重客观规律,坚决 反对空谈浮夸、做表⾯⽂章、搞形象⼯程甚⾄盲⽬蛮⼲;以改⾰的办法、锲⽽不舍的精神解难题、激活⼒,激励敢于 担当,对庸政懒政者问责。尊重⼈⺠群众⾸创精神,充分调动各⽅⾯积极性,进⽽汇聚起推动发展的强⼤⼒量。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 136.34390178], + [126.4956, 192.51966877999996], + [484.61591699999997, 192.51966877999996], + [484.61591699999997, 136.34390178] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 5, + "parent_id": "9ef83c0c-6525-4ac6-84d2-274d16e9d9fc", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "59aa85bc-0f90-4341-bb3c-3f8cd6737e2d", + "text": "各位代表! 过去五年,⺠族、宗教、侨务等⼯作创新完善。巩固和发展平等团结互助和谐的社会主义⺠族关系,⺠族团结进 步呈现新⽓象。贯彻党的宗教⼯作基本⽅针,推进我国宗教中国化逐步深⼊。持续做好侨务⼯作,充分发挥海外侨胞 在参与祖国现代化建设中的独特优势和重要作⽤。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 195.32840178000004], + [126.4956, 231.84266877999994], + [484.61591699999997, 231.84266877999994], + [484.61591699999997, 195.32840178000004] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 5, + "parent_id": "9ef83c0c-6525-4ac6-84d2-274d16e9d9fc", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "1673f476-8bfc-4d69-84c5-a8903a48f7dd", + "text": "坚持党对⼈⺠军队的绝对领导,国防和军队建设取得⼀系列新的重⼤成就、发⽣⼀系列重⼤变⾰。⼈⺠军队深⼊ 推进政治建军、改⾰强军、科技强军、⼈才强军、依法治军,深⼊推进练兵备战,现代化⽔平和实战能⼒显著提升。 坚定灵活开展军事⽃争,有效遂⾏边防⽃争、海上维权、反恐维稳、抢险救灾、抗击疫情、维和护航等重⼤任务,提 升国防动员能⼒,有⼒维护了国家主权、安全、发展利益。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 234.65150178], + [126.4956, 271.1656687799999], + [484.61591699999997, 271.1656687799999], + [484.61591699999997, 234.65150178] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 5, + "parent_id": "9ef83c0c-6525-4ac6-84d2-274d16e9d9fc", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "dcac206a-6734-4c3a-a873-0e30f19dccac", + "text": "港澳台⼯作取得新进展。依照宪法和基本法有效实施对特别⾏政区的全⾯管治权,制定实施⾹港特别⾏政区维护 国家安全法,落实“爱国者治港”、“爱国者治澳”原则,推动⾹港进⼊由乱到治⾛向由治及兴的新阶段。深⼊推进粤港 澳⼤湾区建设,⽀持港澳发展经济、改善⺠⽣、防控疫情、保持稳定。贯彻新时代党解决台湾问题的总体⽅略,坚决 开展反分裂、反⼲涉重⼤⽃争,持续推动两岸关系和平发展。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 273.9745017800001], + [126.4956, 310.48866878], + [484.61591699999997, 310.48866878], + [484.61591699999997, 273.9745017800001] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 5, + "parent_id": "9ef83c0c-6525-4ac6-84d2-274d16e9d9fc", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "20ad2167-8770-4771-9eb2-54ffc1c1de3e", + "text": "中国特⾊⼤国外交全⾯推进。习近平主席等党和国家领导⼈出访多国,通过线上和线下⽅式出席⼆⼗国集团领导 ⼈峰会、亚太经合组织领导⼈⾮正式会议、联合国成⽴75周年系列⾼级别会议、东亚合作领导⼈系列会议、中欧领导 ⼈会晤等⼀系列重⼤外交活动。成功举办上合组织⻘岛峰会、⾦砖国家领导⼈会晤、全球发展⾼层对话会、“⼀带⼀ 路”国际合作⾼峰论坛、中⾮合作论坛北京峰会等多场重⼤主场外交活动。坚持敢于⽃争、善于⽃争,坚决维护我国 主权、安全、发展利益。积极拓展全球伙伴关系,致⼒于建设开放型世界经济,维护多边主义,推动构建⼈类命运共 同体。中国作为负责任⼤国,在推进国际抗疫合作、解决全球性挑战和地区热点问题上发挥了重要建设性作⽤,为促 进世界和平与发展作出重要贡献。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 313.29750178], + [126.4956, 379.30396878], + [484.615942, 379.30396878], + [484.615942, 313.29750178] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 5, + "parent_id": "9ef83c0c-6525-4ac6-84d2-274d16e9d9fc", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "a98dda0a-626d-4a3a-ad52-7739623ee828", + "text": "各位代表! 这些年我国发展取得的成就,是以习近平同志为核⼼的党中央坚强领导的结果,是习近平新时代中国特⾊社会主", + "metadata": { + "coordinates": { + "points": [ + [140.5395, 382.11280178], + [140.5395, 398.96546878], + [484.61588300000005, 398.96546878], + [484.61588300000005, 382.11280178] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 5, + "parent_id": "9ef83c0c-6525-4ac6-84d2-274d16e9d9fc", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "0ee4cf1d-b57e-4147-bac0-9430a17be0cb", + "text": "义思想科学指引的结果,是全党全军全国各族⼈⺠团结奋⽃的结果。我代表国务院,向全国各族⼈⺠,向各⺠主党 派、各⼈⺠团体和各界⼈⼠,表示诚挚感谢!向⾹港特别⾏政区同胞、澳⻔特别⾏政区同胞、台湾同胞和海外侨胞, 表示诚挚感谢!向关⼼和⽀持中国现代化建设的各国政府、国际组织和各国朋友,表示诚挚感谢!", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 401.77430178], + [126.4956, 428.45776878], + [484.61591699999997, 428.45776878], + [484.61591699999997, 401.77430178] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 5, + "parent_id": "9ef83c0c-6525-4ac6-84d2-274d16e9d9fc", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "7a47051c-047a-447e-83a0-88a35755d9a1", + "text": "在看到发展成就的同时,我们也清醒认识到,我国是⼀个发展中⼤国,仍处于社会主义初级阶段,发展不平衡不 充分问题仍然突出。当前发展⾯临诸多困难挑战。外部环境不确定性加⼤,全球通胀仍处于⾼位,世界经济和贸易增 ⻓动能减弱,外部打压遏制不断上升。国内经济增⻓企稳向上基础尚需巩固,需求不⾜仍是突出⽭盾,⺠间投资和⺠ 营企业预期不稳,不少中⼩微企业和个体⼯商户困难较⼤,稳就业任务艰巨,⼀些基层财政收⽀⽭盾较⼤。房地产市 场⻛险隐患较多,⼀些中⼩⾦融机构⻛险暴露。发展仍有不少体制机制障碍。科技创新能⼒还不强。⽣态环境保护任 重道远。防灾减灾等城乡基础设施仍有明显薄弱环节。⼀些⺠⽣领域存在不少短板。形式主义、官僚主义现象仍较突 出,有的地⽅政策执⾏“⼀⼑切”、层层加码,有的⼲部不作为、乱作为、简单化,存在脱离实际、违背群众意愿、漠 视群众合法权益等问题。⼀些领域、⾏业、地⽅腐败现象时有发⽣。⼈⺠群众对政府⼯作还有⼀些意⻅和建议应予重 视。要直⾯问题挑战,尽⼼竭⼒改进政府⼯作,不负⼈⺠重托。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 431.26660178], + [126.4956, 516.9345687800001], + [484.61591699999997, 516.9345687800001], + [484.61591699999997, 431.26660178] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 5, + "parent_id": "9ef83c0c-6525-4ac6-84d2-274d16e9d9fc", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "440ccd69-c162-45aa-a903-5a7efe90dc36", + "text": "⼆、对今年政府⼯作的建议", + "metadata": { + "coordinates": { + "points": [ + [263.8628, 529.57410178], + [263.8628, 536.59606878], + [348.126404, 536.59606878], + [348.126404, 529.57410178] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 5, + "parent_id": "9ef83c0c-6525-4ac6-84d2-274d16e9d9fc", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "7352dd5d-6002-45aa-88c3-03eb69c378c6", + "text": "今年是全⾯贯彻党的⼆⼗⼤精神的开局之年。做好政府⼯作,要在以习近平同志为核⼼的党中央坚强领导下,以 习近平新时代中国特⾊社会主义思想为指导,全⾯贯彻落实党的⼆⼗⼤精神,按照中央经济⼯作会议部署,扎实推进 中国式现代化,坚持稳中求进⼯作总基调,完整、准确、全⾯贯彻新发展理念,加快构建新发展格局,着⼒推动⾼质 量发展,更好统筹国内国际两个⼤局,更好统筹疫情防控和经济社会发展,更好统筹发展和安全,全⾯深化改⾰开 放,⼤⼒提振市场信⼼,把实施扩⼤内需战略同深化供给侧结构性改⾰有机结合起来,突出做好稳增⻓、稳就业、稳 物价⼯作,有效防范化解重⼤⻛险,推动经济运⾏整体好转,实现质的有效提升和量的合理增⻓,持续改善⺠⽣,保 持社会⼤局稳定,为全⾯建设社会主义现代化国家开好局起好步。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 549.23560178], + [126.4956, 615.24206878], + [484.61591699999997, 615.24206878], + [484.61591699999997, 549.23560178] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 5, + "parent_id": "9ef83c0c-6525-4ac6-84d2-274d16e9d9fc", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "96bda370-6a15-4859-b032-9f132e55cbac", + "text": "今年发展主要预期⽬标是:国内⽣产总值增⻓5%左右;城镇新增就业1200万⼈左右,城镇调查失业率5.5%左 右;居⺠消费价格涨幅3%左右;居⺠收⼊增⻓与经济增⻓基本同步;进出⼝促稳提质,国际收⽀基本平衡;粮⻝产 量保持在1.3万亿⽄以上;单位国内⽣产总值能耗和主要污染物排放量继续下降,重点控制化⽯能源消费,⽣态环境 质量稳定改善。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 617.41892475], + [126.4956, 654.56506878], + [479.934613, 654.56506878], + [479.934613, 617.41892475] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 5, + "parent_id": "9ef83c0c-6525-4ac6-84d2-274d16e9d9fc", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "ee69ffa2-f796-4f14-9bd4-a918f07be777", + "text": "要坚持稳字当头、稳中求进,⾯对战略机遇和⻛险挑战并存、不确定难预料因素增多,保持政策连续性稳定性针", + "metadata": { + "coordinates": { + "points": [ + [140.5395, 657.37390178], + [140.5395, 664.39586878], + [484.61588300000005, 664.39586878], + [484.61588300000005, 657.37390178] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 5, + "parent_id": "9ef83c0c-6525-4ac6-84d2-274d16e9d9fc", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "61452bd4-fd66-4196-bd66-76ea269d63c9", + "text": "对性,加强各类政策协调配合,形成共促⾼质量发展合⼒。积极的财政政策要加⼒提效。⾚字率拟按3%安排。完善 税费优惠政策,对现⾏减税降费、退税缓税等措施,该延续的延续,该优化的优化。做好基层“三保”⼯作。稳健的货 币政策要精准有⼒。保持⼴义货币供应量和社会融资规模增速同名义经济增速基本匹配,⽀持实体经济发展。保持⼈ ⺠币汇率在合理均衡⽔平上的基本稳定。产业政策要发展和安全并举。促进传统产业改造升级,培育壮⼤战略性新兴 产业,着⼒补强产业链薄弱环节。科技政策要聚焦⾃⽴⾃强,也要坚持国际合作。完善新型举国体制,发挥好政府在 关键核⼼技术攻关中的组织作⽤,⽀持和突出企业科技创新主体地位,加⼤科技⼈才及团队培养⽀持⼒度。社会政策 要兜牢⺠⽣底线。落实落细就业优先政策,把促进⻘年特别是⾼校毕业⽣就业⼯作摆在更加突出的位置,切实保障好 基本⺠⽣。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 666.57262475], + [126.4956, 743.04186878], + [484.61591699999997, 743.04186878], + [484.61591699999997, 666.57262475] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 5, + "parent_id": "9ef83c0c-6525-4ac6-84d2-274d16e9d9fc", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Footer", + "element_id": "f67b7987-f3d5-49ca-b36c-4ab9c4314cad", + "text": "当前我国新冠疫情防控已进⼊“⼄类⼄管”常态化防控阶段,要在对疫情防控⼯作进⾏全⾯科学总结的基础上,更", + "metadata": { + "coordinates": { + "points": [ + [140.5395, 745.21870475], + [140.5395, 752.87264878], + [483.82597699999997, 752.87264878], + [483.82597699999997, 745.21870475] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 5, + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Footer", + "element_id": "fdbdbfcb-fdca-4e9a-aa01-6410b39395ff", + "text": "第5页 共7页", + "metadata": { + "coordinates": { + "points": [ + [0, 781.66], + [0, 792.9], + [52.5, 792], + [52.5, 781.66] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 5, + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Footer", + "element_id": "7f9e9bda-babb-4e54-8ec7-187dcd52ae91", + "text": "2023/8/4, 10:17", + "metadata": { + "coordinates": { + "points": [ + [548.675, 781.66], + [548.675, 791.66], + [612, 791.66], + [612, 781.66] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 5, + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Header", + "element_id": "9bf0f916-bc15-4e02-b035-e8fcdd87e610", + "text": "政府⼯作报告 ——2023年3⽉5⽇在第⼗四届全国⼈民代表...", + "metadata": { + "coordinates": { + "points": [ + [0, 1.1599999999999682], + [0, 12.399999999999977], + [267.5, 12.399999999999977], + [267.5, 1.1599999999999682] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 6, + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Header", + "element_id": "ca2fb09a-26b9-4592-b064-ea986a638b8d", + "text": "https://www.gov.cn/gongbao/content/2023/content_5747260.htm", + "metadata": { + "coordinates": { + "points": [ + [351.9875, 1.1599999999999682], + [351.9875, 11.159999999999968], + [612, 11.159999999999968], + [612.0035, 1.1599999999999682] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 6, + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Header", + "element_id": "34b0e4a0-3b4f-4691-9154-eb1e52f2b5fd", + "text": "加科学、精准、⾼效做好防控⼯作,围绕保健康、防重症,重点做好⽼年⼈、⼉童、患基础性疾病群体的疫情防控和 医疗救治,提升疫情监测⽔平,推进疫苗迭代升级和新药研制,切实保障群众就医⽤药需求,守护好⼈⺠⽣命安全和 身体健康。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 38.036401780000006], + [126.4956, 64.71986877999996], + [484.61591699999997, 64.71986877999996], + [484.61591699999997, 38.036401780000006] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 6, + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "37fcdd9f-9a50-4bb1-8051-8abb7383adb5", + "text": "今年是政府换届之年,前⾯报告的经济社会发展多领域、各⽅⾯⼯作,今后还需不懈努⼒,下⾯简述⼏项重点。 (⼀)着⼒扩⼤国内需求。把恢复和扩⼤消费摆在优先位置。多渠道增加城乡居⺠收⼊。稳定汽⻋等⼤宗消费, 推动餐饮、⽂化、旅游、体育等⽣活服务消费恢复。政府投资和政策激励要有效带动全社会投资,今年拟安排地⽅政 府专项债券3.8万亿元,加快实施“⼗四五”重⼤⼯程,实施城市更新⾏动,促进区域优势互补、各展其⻓,继续加⼤ 对受疫情冲击较严重地区经济社会发展的⽀持⼒度,⿎励和吸引更多⺠间资本参与国家重⼤⼯程和补短板项⽬建设, 激发⺠间投资活⼒。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 67.52860178000003], + [126.4956, 123.70436877999998], + [484.61591699999997, 123.70436877999998], + [484.61591699999997, 67.52860178000003] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 6, + "parent_id": "34b0e4a0-3b4f-4691-9154-eb1e52f2b5fd", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "65c68dcb-cf1c-4161-a3f4-a96f639facab", + "text": "(⼆)加快建设现代化产业体系。强化科技创新对产业发展的⽀撑。持续开展产业强链补链⾏动,围绕制造业重 点产业链,集中优质资源合⼒推进关键核⼼技术攻关,充分激发创新活⼒。加强重要能源、矿产资源国内勘探开发和 增储上产。加快传统产业和中⼩企业数字化转型,着⼒提升⾼端化、智能化、绿⾊化⽔平。加快前沿技术研发和应⽤ 推⼴,促进科技成果转化。建设⾼效顺畅的物流体系。⼤⼒发展数字经济,提升常态化监管⽔平,⽀持平台经济发 展。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 126.51320178000003], + [126.4956, 172.85816877999991], + [484.61591699999997, 172.85816877999991], + [484.61591699999997, 126.51320178000003] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 6, + "parent_id": "34b0e4a0-3b4f-4691-9154-eb1e52f2b5fd", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "6e737ab4-d53d-45c7-aaad-7b33050ad33e", + "text": "(三)切实落实“两个毫不动摇”。深化国资国企改⾰,提⾼国企核⼼竞争⼒。坚持分类改⾰⽅向,处理好国企经", + "metadata": { + "coordinates": { + "points": [ + [140.5395, 175.03492474999996], + [140.5395, 182.6888687799999], + [483.82594500000005, 182.6888687799999], + [483.82594500000005, 175.03492474999996] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 6, + "parent_id": "34b0e4a0-3b4f-4691-9154-eb1e52f2b5fd", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "0e74232a-210e-46e4-8d8d-bba20a9c50fe", + "text": "济责任和社会责任关系,完善中国特⾊国有企业现代公司治理。依法保护⺠营企业产权和企业家权益,完善相关政 策,⿎励⽀持⺠营经济和⺠营企业发展壮⼤,⽀持中⼩微企业和个体⼯商户发展,构建亲清政商关系,为各类所有制 企业创造公平竞争、竞相发展的环境,⽤真招实策稳定市场预期和提振市场信⼼。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 185.49770178000006], + [126.4956, 212.1811687799999], + [484.61591699999997, 212.1811687799999], + [484.61591699999997, 185.49770178000006] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 6, + "parent_id": "34b0e4a0-3b4f-4691-9154-eb1e52f2b5fd", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "be4fa8dd-4987-4222-af1d-72ff6286e6d6", + "text": "(四)更⼤⼒度吸引和利⽤外资。扩⼤市场准⼊,加⼤现代服务业领域开放⼒度。落实好外资企业国⺠待遇。积", + "metadata": { + "coordinates": { + "points": [ + [140.5395, 214.98990178000008], + [140.5395, 222.01186878], + [484.61588300000005, 222.01186878], + [484.61588300000005, 214.98990178000008] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 6, + "parent_id": "34b0e4a0-3b4f-4691-9154-eb1e52f2b5fd", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "UncategorizedText", + "element_id": "0500629c-a922-420b-88e2-debf2bb251ce", + "text": "极推动加⼊全⾯与进步跨太平洋伙伴关系协定(CPTPP)等⾼标准经贸协议,主动对照相关规则、规制、管理、标 准,稳步扩⼤制度型开放。优化区域开放布局,实施⾃由贸易试验区提升战略,发挥好海南⾃由贸易港、各类开发区 等开放平台的先⾏先试作⽤。继续发挥进出⼝对经济的⽀撑作⽤。做好外资企业服务⼯作,推动外资标志性项⽬落地 建设。开放的中国⼤市场,⼀定能为各国企业在华发展提供更多机遇。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 224.18872475], + [126.4956, 261.33496877999994], + [484.61591699999997, 261.33496877999994], + [484.61591699999997, 224.18872475] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 6, + "parent_id": "be4fa8dd-4987-4222-af1d-72ff6286e6d6", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "6cce6041-5b65-46dd-be2e-9fd56ede3072", + "text": "(五)有效防范化解重⼤经济⾦融⻛险。深化⾦融体制改⾰,完善⾦融监管,压实各⽅责任,防⽌形成区域性、 系统性⾦融⻛险。有效防范化解优质头部房企⻛险,改善资产负债状况,防⽌⽆序扩张,促进房地产业平稳发展。防 范化解地⽅政府债务⻛险,优化债务期限结构,降低利息负担,遏制增量、化解存量。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 264.14370178], + [126.4956, 290.82716878], + [484.61591699999997, 290.82716878], + [484.61591699999997, 264.14370178] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 6, + "parent_id": "34b0e4a0-3b4f-4691-9154-eb1e52f2b5fd", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "bd98f019-d715-4707-af52-89bd09681347", + "text": "(六)稳定粮⻝⽣产和推进乡村振兴。⼀体推进农业现代化和农村现代化。稳定粮⻝播种⾯积,抓好油料⽣产, 实施新⼀轮千亿⽄粮⻝产能提升⾏动。完善农资保供稳价应对机制。加强耕地保护,加强农⽥⽔利和⾼标准农⽥等基 础设施建设。深⼊实施种业振兴⾏动。强化农业科技和装备⽀撑。健全种粮农⺠收益保障机制和主产区利益补偿机 制。树⽴⼤⻝物观,构建多元化⻝物供给体系。发展乡村特⾊产业,拓宽农⺠增收致富渠道。巩固拓展脱贫攻坚成 果,坚决防⽌出现规模性返贫。推进乡村建设⾏动。国家关于⼟地承包期再延⻓30年的政策,务必通过细致⼯作扎实 落实到位。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 293.63600178], + [126.4956, 349.81176878], + [484.61591699999997, 349.81176878], + [484.61591699999997, 293.63600178] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 6, + "parent_id": "34b0e4a0-3b4f-4691-9154-eb1e52f2b5fd", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "70b7d265-cfdb-4805-b21c-f100d115c75a", + "text": "(七)推动发展⽅式绿⾊转型。深⼊推进环境污染防治。加强流域综合治理,加强城乡环境基础设施建设,持续 实施重要⽣态系统保护和修复重⼤⼯程。推进能源清洁⾼效利⽤和技术研发,加快建设新型能源体系,提升可再⽣能 源占⽐。完善⽀持绿⾊发展的政策和⾦融⼯具,发展循环经济,推进资源节约集约利⽤,推动重点领域节能降碳减 污,持续打好蓝天、碧⽔、净⼟保卫战。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 352.62050178], + [126.4956, 389.13476878], + [484.61591699999997, 389.13476878], + [484.61591699999997, 352.62050178] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 6, + "parent_id": "34b0e4a0-3b4f-4691-9154-eb1e52f2b5fd", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "7e6af9f8-cc57-449b-9ac1-1ee26a23bb0b", + "text": "(⼋)保障基本⺠⽣和发展社会事业。加强住房保障体系建设,⽀持刚性和改善性住房需求,解决好新市⺠、⻘ 年⼈等住房问题,加快推进⽼旧⼩区和危旧房改造。加快建设⾼质量教育体系,推进义务教育优质均衡发展和城乡⼀ 体化,推进学前教育、特殊教育普惠发展,⼤⼒发展职业教育,推进⾼等教育创新,⽀持中⻄部地区⾼校发展,深化 体教融合。深化医药卫⽣体制改⾰,促进医保、医疗、医药协同发展和治理。推动优质医疗资源扩容下沉和区域均衡 布局。实施中医药振兴发展重⼤⼯程。重视⼼理健康和精神卫⽣。实施积极应对⼈⼝⽼龄化国家战略,加强养⽼服务 保障,完善⽣育⽀持政策体系。保障妇⼥、⼉童、⽼年⼈、残疾⼈合法权益。做好军⼈军属、退役军⼈和其他优抚对 象优待抚恤⼯作。繁荣发展⽂化事业和产业。提升社会治理效能。强化安全⽣产监管和防灾减灾救灾。全⾯贯彻总体 国家安全观,建设更⾼⽔平的平安中国。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 391.94350177999996], + [126.4956, 467.78076878], + [484.61591699999997, 467.78076878], + [484.61591699999997, 391.94350177999996] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 6, + "parent_id": "34b0e4a0-3b4f-4691-9154-eb1e52f2b5fd", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "1f172209-6f7e-437d-99f3-423b35deabbe", + "text": "进⼀步加强政府⾃身建设,持续转变政府职能,搞好机构改⾰,扎实推进法治政府、创新政府、廉洁政府和服务", + "metadata": { + "coordinates": { + "points": [ + [140.5395, 470.58950178], + [140.5395, 477.61146878], + [484.61588300000005, 477.61146878], + [484.61588300000005, 470.58950178] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 6, + "parent_id": "34b0e4a0-3b4f-4691-9154-eb1e52f2b5fd", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "d0f6d57d-aaac-4bf3-a4c3-e36750e6328d", + "text": "型政府建设,发扬实⼲精神,⼤兴调查研究之⻛,提⾼⾏政效率和公信⼒。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 480.42030178], + [126.4956, 487.44226878], + [358.220511, 487.44226878], + [358.220511, 480.42030178] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 6, + "parent_id": "34b0e4a0-3b4f-4691-9154-eb1e52f2b5fd", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "a146f1b4-2b72-48ee-ba6a-6181c7147a71", + "text": "各位代表! 我们要以铸牢中华⺠族共同体意识为主线,坚持和完善⺠族区域⾃治制度,促进各⺠族共同团结奋⽃、共同繁荣 发展。坚持党的宗教⼯作基本⽅针,坚持我国宗教中国化⽅向,积极引导宗教与社会主义社会相适应。加强和改进侨 务⼯作,汇聚起海内外中华⼉⼥同⼼奋⽃、共创辉煌的强⼤⼒量。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 490.25110178], + [126.4956, 526.76526878], + [484.61591699999997, 526.76526878], + [484.61591699999997, 490.25110178] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 6, + "parent_id": "34b0e4a0-3b4f-4691-9154-eb1e52f2b5fd", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "a8dcfae1-81f3-4f71-b99b-5d4198bdfadb", + "text": "我们要深⼊贯彻习近平强军思想,贯彻新时代军事战略⽅针,围绕实现建军⼀百年奋⽃⽬标,边⽃争、边备战、 边建设,完成好党和⼈⺠赋予的各项任务。全⾯加强练兵备战,创新军事战略指导,⼤抓实战化军事训练,统筹抓好 各⽅向各领域军事⽃争。全⾯加强军事治理,巩固拓展国防和军队改⾰成果,加强重⼤任务战建备统筹,加快实施国 防发展重⼤⼯程。巩固提⾼⼀体化国家战略体系和能⼒,加强国防科技⼯业能⼒建设。深化全⺠国防教育。各级政府 要⼤⼒⽀持国防和军队建设,深⼊开展“双拥”活动,合⼒谱写军政军⺠团结新篇章。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 529.57410178], + [126.4956, 575.91906878], + [484.61591699999997, 575.91906878], + [484.61591699999997, 529.57410178] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 6, + "parent_id": "34b0e4a0-3b4f-4691-9154-eb1e52f2b5fd", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "9e73589d-878b-47bb-81b1-37f359d7fea9", + "text": "我们要全⾯准确、坚定不移贯彻“⼀国两制”、“港⼈治港”、“澳⼈治澳”、⾼度⾃治的⽅针,坚持依法治港治澳, 维护宪法和基本法确定的特别⾏政区宪制秩序,落实“爱国者治港”、“爱国者治澳”原则。⽀持港澳发展经济、改善⺠ ⽣,保持⾹港、澳⻔⻓期繁荣稳定。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 578.09592475], + [126.4956, 605.41136878], + [483.03600500000005, 605.41136878], + [483.03600500000005, 578.09592475] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 6, + "parent_id": "34b0e4a0-3b4f-4691-9154-eb1e52f2b5fd", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "67022d0a-0d4a-4944-a0a0-8da73d0cb7be", + "text": "我们要坚持贯彻新时代党解决台湾问题的总体⽅略,坚持⼀个中国原则和“九⼆共识”,坚定反“独”促统,推动两 岸关系和平发展,推进祖国和平统⼀进程。两岸同胞⾎脉相连,要促进两岸经济⽂化交流合作,完善增进台湾同胞福 祉的制度和政策,推动两岸共同弘扬中华⽂化,同⼼共创复兴伟业。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 607.58812475], + [126.4956, 634.90356878], + [484.61591699999997, 634.90356878], + [484.61591699999997, 607.58812475] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 6, + "parent_id": "34b0e4a0-3b4f-4691-9154-eb1e52f2b5fd", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "36ffe62f-41a6-41d3-a1ad-bc772a4f4463", + "text": "我们要坚定奉⾏独⽴⾃主的和平外交政策,坚定不移⾛和平发展道路,坚持在和平共处五项原则基础上同各国发 展友好合作,坚定奉⾏互利共赢的开放战略,始终做世界和平的建设者、全球发展的贡献者、国际秩序的维护者。中 国愿同国际社会⼀道落实全球发展倡议、全球安全倡议,弘扬全⼈类共同价值,携⼿推动构建⼈类命运共同体,维护 世界和平和地区稳定。", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 637.7124017799999], + [126.4956, 674.22656878], + [484.61591699999997, 674.22656878], + [484.61591699999997, 637.7124017799999] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 6, + "parent_id": "34b0e4a0-3b4f-4691-9154-eb1e52f2b5fd", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "c7e3cbb9-3aa2-4e95-9bcf-dc4ac122a64f", + "text": "各位代表! 奋⽃铸就辉煌,实⼲赢得未来。我们要更加紧密地团结在以习近平同志为核⼼的党中央周围,⾼举中国特⾊社会 主义伟⼤旗帜,以习近平新时代中国特⾊社会主义思想为指导,全⾯贯彻党的⼆⼗⼤精神,砥砺前⾏,推动经济社会 持续健康发展,为全⾯建设社会主义现代化国家、全⾯推进中华⺠族伟⼤复兴,为把我国建设成为富强⺠主⽂明和谐 美丽的社会主义现代化强国不懈奋⽃!", + "metadata": { + "coordinates": { + "points": [ + [126.4956, 677.03540178], + [126.4956, 723.38037878], + [484.61591699999997, 723.38037878], + [484.61591699999997, 677.03540178] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 6, + "parent_id": "34b0e4a0-3b4f-4691-9154-eb1e52f2b5fd", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "UncategorizedText", + "element_id": "285e0b9b-f939-45e8-9a6b-f6a1e0664cb9", + "text": "(新华社北京2023年3⽉14⽇电)", + "metadata": { + "coordinates": { + "points": [ + [376.4996, 725.55721475], + [376.4996, 733.21115878], + [478.318101, 733.21115878], + [478.318101, 725.55721475] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 6, + "parent_id": "c7e3cbb9-3aa2-4e95-9bcf-dc4ac122a64f", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Footer", + "element_id": "c7742cae-8493-46e8-8861-7b0a6b6ea886", + "text": "扫⼀扫在⼿机打开当前⻚", + "metadata": { + "coordinates": { + "points": [ + [274.1764, 746.16377966], + [274.1764, 751.86912866], + [336.935239, 751.86912866], + [336.935239, 746.16377966] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 6, + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Footer", + "element_id": "ff45bd72-0fbd-40a8-b7a9-94a578a8dc93", + "text": "第6页 共7页", + "metadata": { + "coordinates": { + "points": [ + [0, 781.66], + [0, 792.9], + [52.5, 792], + [52.5, 781.66] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 6, + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Footer", + "element_id": "be949a25-610d-4dcc-a43f-ce9c630ab539", + "text": "2023/8/4, 10:17", + "metadata": { + "coordinates": { + "points": [ + [548.675, 781.66], + [548.675, 791.66], + [612, 791.66], + [612, 781.66] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 6, + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Header", + "element_id": "f8600a2a-5a19-4629-817d-eb127f8c3213", + "text": "政府⼯作报告 ——2023年3⽉5⽇在第⼗四届全国⼈民代表...", + "metadata": { + "coordinates": { + "points": [ + [0, 1.1599999999999682], + [0, 12.399999999999977], + [267.5, 12.399999999999977], + [267.5, 1.1599999999999682] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 7, + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Header", + "element_id": "e03bbcd6-520a-4578-baba-291cd6971b6f", + "text": "https://www.gov.cn/gongbao/content/2023/content_5747260.htm", + "metadata": { + "coordinates": { + "points": [ + [351.9875, 1.1599999999999682], + [351.9875, 11.159999999999968], + [612, 11.159999999999968], + [612.0035, 1.1599999999999682] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 7, + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "1405991a-d54f-4201-a389-e5b4aed8ae18", + "text": "主办单位:国务院办公厅 运⾏维护单位:中国政府⽹运⾏中⼼", + "metadata": { + "coordinates": { + "points": [ + [87.43591, 149.34331413999996], + [87.43591, 155.48753513999998], + [259.474098, 155.48753513999998], + [259.474098, 149.34331413999996] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 7, + "parent_id": "e03bbcd6-520a-4578-baba-291cd6971b6f", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "4e9b12b9-0bb2-438d-9a68-9908e3f422e7", + "text": "版权所有:中国政府⽹ 中⽂域名:中国政府⽹.政务", + "metadata": { + "coordinates": { + "points": [ + [87.43591, 162.600853852], + [87.43591, 169.53153513999996], + [230.45734199999998, 169.53153513999996], + [230.45734199999998, 162.600853852] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 7, + "parent_id": "e03bbcd6-520a-4578-baba-291cd6971b6f", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "UncategorizedText", + "element_id": "d46927cf-424f-45a2-ad3f-d5ae96c26c1f", + "text": "⽹站标识码bm01000001 京ICP备05070218号  京公⽹安备11010202000001号", + "metadata": { + "coordinates": { + "points": [ + [87.43591, 175.98645385199995], + [87.43591, 182.9171351399999], + [313.140921, 182.9171351399999], + [313.140921, 175.98645385199995] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "links": [ + { + "text": "京ICP备05070218号", + "url": "https://beian.miit.gov.cn/#/Integrated/index", + "start_index": 16 + }, + { + "text": "京ICP备05070218号", + "url": "https://beian.miit.gov.cn/#/Integrated/index", + "start_index": 16 + }, + { + "text": "京公 ⽹", + "url": "http://www.beian.gov.cn/portal/registerSystemInfo?recordcode=11010202000001", + "start_index": 32 + }, + { + "text": "京公 ⽹", + "url": "http://www.beian.gov.cn/portal/registerSystemInfo?recordcode=11010202000001", + "start_index": 32 + } + ], + "page_number": 7, + "parent_id": "4e9b12b9-0bb2-438d-9a68-9908e3f422e7", + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Footer", + "element_id": "da5f2372-ab76-4c9a-b845-8feea9adb15f", + "text": "第7页 共7页", + "metadata": { + "coordinates": { + "points": [ + [0, 781.66], + [0, 792.9], + [52.5, 792], + [52.5, 781.66] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 7, + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Footer", + "element_id": "c5a29b3d-dd08-417c-a5dc-3f3a3167631d", + "text": "2023/8/4, 10:17", + "metadata": { + "coordinates": { + "points": [ + [548.675, 781.66], + [548.675, 791.66], + [612, 791.66], + [612, 781.66] + ], + "system": "PixelSpace", + "layout_width": 612, + "layout_height": 792 + }, + "languages": ["eng"], + "page_number": 7, + "filename": "image-parse.pdf", + "filetype": "application/pdf" + } + } +] diff --git a/src/libs/unstructured/__tests__/fixtures/table-parse/auto-partition-basic-output.json b/src/libs/unstructured/__tests__/fixtures/table-parse/auto-partition-basic-output.json new file mode 100644 index 000000000000..726f60a50581 --- /dev/null +++ b/src/libs/unstructured/__tests__/fixtures/table-parse/auto-partition-basic-output.json @@ -0,0 +1,347 @@ +{ + "compositeElements": [ + { + "type": "CompositeElement", + "element_id": "32855cf6-5605-4a8e-97a3-3ac0b509b725", + "text": "Multiple Sclerosis Journal 29(6)\n\nTable 1. Characteristics of the study population.", + "metadata": { + "filetype": "application/pdf", + "languages": ["eng"], + "page_number": 1, + "filename": "table-parse.pdf" + } + }, + { + "type": "Table", + "element_id": "6ac9e7aa-6618-4cae-8e78-a4ec6fd73cf5", + "metadata": { + "languages": ["eng"], + "page_number": 1, + "text_as_html": "
MaleFemaleOverallp-value
MS subjectsControl \nsubjectsp-value MS subjects Control \nsubjectsp-valueMS \nsubjectsControl \nsubjects
N368521,931856650,64012,25172,572
Follow-up time (years)9.9 (6.1)11.4(6.5)<0.00110.4 (6.3)11.5(6.5)<0.00110.3(6.3)11.5(6.5)<0.001
Female (%)69.969.80.752
Age (years)46.3 (13.3)46.3(13.3)0.85244.3(13.3)44.3(13.3)0.90744.9(13.3)44.9(13.3)0.727
Ethnicity — white (%)92393.50.01391594.1<0.00193.991.2<0.00
Smoking status (%)
Non-smoker41553.849.560.047.158.1
Ex-smoker17.514.7<0.00113.911.6<0.0011512.5<0.00
Current smoker41.131.636.628.5379294
eFI ratio0.02 (0.04)0.01 (0.03)<0.0010.03 (0.04)0.02 (0.04)<0.0010.03 (0.04)0.02 (0.04)<0.00
Fit97.298.395.897.196.297.4
Mid frailty2.81.64.02.83.72.5
Moderate frailty0.00.0<0.0010.20.1<0.0010.10.1<0.00
Severe frailty0.00.00.00.00.00.0
Number of primary care visits in previous year6.9 (10.3)22(5.0)<0.00182(11.5)32(6.1)<0.00178(112)29(5.9)<0.00
Index of multiple deprivation (IMD; %)
1Q — least deprived13.713.714.614.6144144
2Q18.518.418.518.518.518.5
3Q17.617.617.917.917.817.8
4Q20.22031.00018.818.81.00019.219.21.000
5Q — most deprived20.620.620.320.3204204
Missing data9.39.49.89.99.79.7
" + }, + "text": "Male Female Overall MS subjects Control subjects p-value MS subjects Control subjects p-value MS subjects Control subjects p-value N Follow-up time (years) Female (%) Age (years) Ethnicity – white (%) Smoking status (%) Non-smoker Ex-smoker Current smoker eFI ratio Fit Mid frailty Moderate frailty Severe frailty Number of primary care visits in previous year Index of multiple deprivation (IMD; %) 3685 9.9 (6.1) 46.3 (13.3) 92.3 41.5 17.5 41.1 0.02 (0.04) 97.2 2.8 0.0 0.0 6.9 (10.3) 21,931 11.4 (6.5) <0.001 46.3 (13.3) 93.5 0.852 0.013 53.8 14.7 31.6 0.01 (0.03) <0.001 98.3 1.6 0.0 0.0 2.2 (5.0) <0.001 <0.001 <0.001 8566 10.4 (6.3) 44.3 (13.3) 91.5 49.5 13.9 36.6 0.03 (0.04) 95.8 4.0 0.2 0.0 8.2 (11.5) 50,640 11.5 (6.5) <0.001 44.3 (13.3) 94.1 0.907 <0.001 60.0 11.6 28.5 0.02 (0.04) <0.001 97.1 2.8 0.1 0.0 3.2 (6.1) <0.001 <0.001 <0.001 12,251 10.3 (6.3) 69.9 44.9 (13.3) 93.9 47.1 15 37.9 0.03 (0.04) 96.2 3.7 0.1 0.0 7.8 (11.2) 72,572 11.5 (6.5) <0.001 69.8 44.9 (13.3) 91.2 0.752 0.727 <0.001 58.1 12.5 29.4 0.02 (0.04) <0.001 97.4 2.5 0.1 0.0 2.9 (5.9) <0.001 <0.001 <0.001 1Q – least deprived 13.7 13.7 14.6 14.6 14.4 14.4 2Q 3Q 4Q 5Q – most deprived Missing data 18.5 17.6 20.2 20.6 9.3 18.4 17.6 20.3 20.6 9.4 1.000 18.5 17.9 18.8 20.3 9.8 18.5 17.9 18.8 20.3 9.9 1.000 18.5 17.8 19.2 20.4 9.7 18.5 17.8 19.2 20.4 9.7 1.000" + }, + { + "type": "CompositeElement", + "element_id": "499fc9c7-95f4-412c-87e2-10fa1a2e950e", + "text": "Individuals were classified as fit, if the eFI score was below 0.12; mildly frail, if the score was between 0.12 and 0.24; moderately frail, if the score was between 0.24 and 0.36; severely frail, if the score was 0.36 and above. Differences between groups were assessed employing Chi-square test, Student’s t-test and the Kruskal–Wallis test, as appropriate.\n\nwas even lower in men (PR = 0.27, 95% CI = 0.18, 0.39) than in women (PR = 0.38, 95% CI = 0.30, 0.49; Figure 1), but the difference was not statistically sig- nificant (p = 0.097).", + "metadata": { + "filetype": "application/pdf", + "languages": ["eng"], + "page_number": 1, + "filename": "table-parse.pdf" + } + }, + { + "type": "CompositeElement", + "element_id": "875d46a9-6106-40d2-b891-b803d0bb87ac", + "text": "Hyperlipidaemia. Treatment with lipid-lowering medications was lower in PwMS, as compared with matched controls (PR = 0.63, 95% CI = 0.54, 0.74). This was particularly pronounced for men (women: PR = 0.71, 95% CI = 0.59, 0.87; men: PR = 0.41, 95% CI = 0.37, 0.62).\n\nDifferences in risk factor severity\n\nAs compared with matched controls, after adjustment, PwMS had a 0.4-mm Hg lower systolic blood", + "metadata": { + "filetype": "application/pdf", + "languages": ["eng"], + "page_number": 1, + "filename": "table-parse.pdf" + } + }, + { + "type": "CompositeElement", + "element_id": "2990794c-e50d-4ed2-b3b3-b76a2fc76693", + "text": "pressure at the index year. The magnitude was greater for men than women, considering that men had almost a 3-mm Hg lower blood pressure than matched con- trols (overall: coeff. = −0.37, 95% CI = −0.60, −0.13; women: −0.54, 95% CI = −0.96, −0.12; men: −2.81, 95% CI = −3.84, −1.77). The differences were greater when restricting analyses to only those with a diagno- sis of hypertension at baseline, as PwMS had a 3.3- mm Hg lower systolic blood pressure then matched controls (coeff. = −3.27, 95% CI = −5.04, −1.50); dif- ferences were confirmed in women but not in men (women: coeff. = −2.56, 95% CI = −3.84, −1.27; men: −0.27, 95% CI = 0.01, −2.56).", + "metadata": { + "filetype": "application/pdf", + "languages": ["eng"], + "page_number": 1, + "filename": "table-parse.pdf" + } + }, + { + "type": "CompositeElement", + "element_id": "9e6198b1-08c2-4e33-91af-8a3361e02925", + "text": "In contrast, PwMS had higher levels of diastolic blood pressure at baseline, as compared with matched controls (coeff. = 0.29, 95% CI = 0.14, 0.43). However,\n\n674\n\njournals.sagepub.com/home/msj", + "metadata": { + "filetype": "application/pdf", + "languages": ["eng"], + "page_number": 1, + "filename": "table-parse.pdf" + } + } + ], + "originElements": [ + { + "element_id": "393967b3-164c-4814-a881-9c64ae8ab4b5", + "metadata": { + "coordinates": { + "layout_height": 2205, + "layout_width": 1654, + "points": [ + [68.2, 92.5], + [68.2, 125.9], + [456.6, 125.9], + [456.6, 92.5] + ], + "system": "PixelSpace" + }, + "detection_class_prob": 0.86543, + "filetype": "PPM", + "languages": ["eng"], + "page_number": 1 + }, + "text": "Multiple Sclerosis Journal 29(6)", + "type": "Header", + "compositeId": "32855cf6-5605-4a8e-97a3-3ac0b509b725" + }, + { + "element_id": "062ccb2f-1ffb-41fc-92c3-ff0de9297b4c", + "metadata": { + "coordinates": { + "layout_height": 2205, + "layout_width": 1654, + "points": [ + [63, 195.2], + [63, 227.3], + [551.6, 227.3], + [551.6, 195.2] + ], + "system": "PixelSpace" + }, + "detection_class_prob": 0.60108, + "filetype": "PPM", + "languages": ["eng"], + "page_number": 1 + }, + "text": "Table 1. Characteristics of the study population.", + "type": "NarrativeText", + "compositeId": "32855cf6-5605-4a8e-97a3-3ac0b509b725" + }, + { + "type": "Table", + "element_id": "6ac9e7aa-6618-4cae-8e78-a4ec6fd73cf5", + "metadata": { + "coordinates": { + "layout_height": 2205, + "layout_width": 1654, + "points": [ + [67.7, 232.3], + [67.7, 1326.8], + [1541.1, 1326.8], + [1541.1, 232.3] + ], + "system": "PixelSpace" + }, + "detection_class_prob": 0.95674, + "filetype": "PPM", + "languages": ["eng"], + "page_number": 1, + "text_as_html": "
MaleFemaleOverallp-value
MS subjectsControl \nsubjectsp-value MS subjects Control \nsubjectsp-valueMS \nsubjectsControl \nsubjects
N368521,931856650,64012,25172,572
Follow-up time (years)9.9 (6.1)11.4(6.5)<0.00110.4 (6.3)11.5(6.5)<0.00110.3(6.3)11.5(6.5)<0.001
Female (%)69.969.80.752
Age (years)46.3 (13.3)46.3(13.3)0.85244.3(13.3)44.3(13.3)0.90744.9(13.3)44.9(13.3)0.727
Ethnicity — white (%)92393.50.01391594.1<0.00193.991.2<0.00
Smoking status (%)
Non-smoker41553.849.560.047.158.1
Ex-smoker17.514.7<0.00113.911.6<0.0011512.5<0.00
Current smoker41.131.636.628.5379294
eFI ratio0.02 (0.04)0.01 (0.03)<0.0010.03 (0.04)0.02 (0.04)<0.0010.03 (0.04)0.02 (0.04)<0.00
Fit97.298.395.897.196.297.4
Mid frailty2.81.64.02.83.72.5
Moderate frailty0.00.0<0.0010.20.1<0.0010.10.1<0.00
Severe frailty0.00.00.00.00.00.0
Number of primary care visits in previous year6.9 (10.3)22(5.0)<0.00182(11.5)32(6.1)<0.00178(112)29(5.9)<0.00
Index of multiple deprivation (IMD; %)
1Q — least deprived13.713.714.614.6144144
2Q18.518.418.518.518.518.5
3Q17.617.617.917.917.817.8
4Q20.22031.00018.818.81.00019.219.21.000
5Q — most deprived20.620.620.320.3204204
Missing data9.39.49.89.99.79.7
" + }, + "text": "Male Female Overall MS subjects Control subjects p-value MS subjects Control subjects p-value MS subjects Control subjects p-value N Follow-up time (years) Female (%) Age (years) Ethnicity – white (%) Smoking status (%) Non-smoker Ex-smoker Current smoker eFI ratio Fit Mid frailty Moderate frailty Severe frailty Number of primary care visits in previous year Index of multiple deprivation (IMD; %) 3685 9.9 (6.1) 46.3 (13.3) 92.3 41.5 17.5 41.1 0.02 (0.04) 97.2 2.8 0.0 0.0 6.9 (10.3) 21,931 11.4 (6.5) <0.001 46.3 (13.3) 93.5 0.852 0.013 53.8 14.7 31.6 0.01 (0.03) <0.001 98.3 1.6 0.0 0.0 2.2 (5.0) <0.001 <0.001 <0.001 8566 10.4 (6.3) 44.3 (13.3) 91.5 49.5 13.9 36.6 0.03 (0.04) 95.8 4.0 0.2 0.0 8.2 (11.5) 50,640 11.5 (6.5) <0.001 44.3 (13.3) 94.1 0.907 <0.001 60.0 11.6 28.5 0.02 (0.04) <0.001 97.1 2.8 0.1 0.0 3.2 (6.1) <0.001 <0.001 <0.001 12,251 10.3 (6.3) 69.9 44.9 (13.3) 93.9 47.1 15 37.9 0.03 (0.04) 96.2 3.7 0.1 0.0 7.8 (11.2) 72,572 11.5 (6.5) <0.001 69.8 44.9 (13.3) 91.2 0.752 0.727 <0.001 58.1 12.5 29.4 0.02 (0.04) <0.001 97.4 2.5 0.1 0.0 2.9 (5.9) <0.001 <0.001 <0.001 1Q – least deprived 13.7 13.7 14.6 14.6 14.4 14.4 2Q 3Q 4Q 5Q – most deprived Missing data 18.5 17.6 20.2 20.6 9.3 18.4 17.6 20.3 20.6 9.4 1.000 18.5 17.9 18.8 20.3 9.8 18.5 17.9 18.8 20.3 9.9 1.000 18.5 17.8 19.2 20.4 9.7 18.5 17.8 19.2 20.4 9.7 1.000" + }, + { + "element_id": "d9f1985b-d5b5-462d-b7db-7c3554eb3d03", + "metadata": { + "coordinates": { + "layout_height": 2205, + "layout_width": 1654, + "points": [ + [79.6, 1334.5], + [79.6, 1417.9], + [1518.8, 1417.9], + [1518.8, 1334.5] + ], + "system": "PixelSpace" + }, + "detection_class_prob": 0.90525, + "filetype": "PPM", + "languages": ["eng"], + "page_number": 1 + }, + "text": "Individuals were classified as fit, if the eFI score was below 0.12; mildly frail, if the score was between 0.12 and 0.24; moderately frail, if the score was between 0.24 and 0.36; severely frail, if the score was 0.36 and above. Differences between groups were assessed employing Chi-square test, Student’s t-test and the Kruskal–Wallis test, as appropriate.", + "type": "NarrativeText", + "compositeId": "499fc9c7-95f4-412c-87e2-10fa1a2e950e" + }, + { + "element_id": "849f1a9b-baaa-42dc-a1b8-92628c64726b", + "metadata": { + "coordinates": { + "layout_height": 2205, + "layout_width": 1654, + "points": [ + [309.2, 1487.1], + [309.2, 1618.6], + [915.5, 1618.6], + [915.5, 1487.1] + ], + "system": "PixelSpace" + }, + "detection_class_prob": 0.94299, + "filetype": "PPM", + "languages": ["eng"], + "page_number": 1 + }, + "text": "was even lower in men (PR = 0.27, 95% CI = 0.18, 0.39) than in women (PR = 0.38, 95% CI = 0.30, 0.49; Figure 1), but the difference was not statistically sig- nificant (p = 0.097).", + "type": "NarrativeText", + "compositeId": "499fc9c7-95f4-412c-87e2-10fa1a2e950e" + }, + { + "element_id": "a32d209f-a092-42c3-b6a5-3816df43bfdb", + "metadata": { + "coordinates": { + "layout_height": 2205, + "layout_width": 1654, + "points": [ + [310.4, 1659.6], + [310.4, 1858.1], + [915.5, 1858.1], + [915.5, 1659.6] + ], + "system": "PixelSpace" + }, + "detection_class_prob": 0.94907, + "filetype": "PPM", + "languages": ["eng"], + "page_number": 1 + }, + "text": "Hyperlipidaemia. Treatment with lipid-lowering medications was lower in PwMS, as compared with matched controls (PR = 0.63, 95% CI = 0.54, 0.74). This was particularly pronounced for men (women: PR = 0.71, 95% CI = 0.59, 0.87; men: PR = 0.41, 95% CI = 0.37, 0.62).", + "type": "NarrativeText", + "compositeId": "875d46a9-6106-40d2-b891-b803d0bb87ac" + }, + { + "element_id": "7a0f58ed-97e3-4822-a8f2-1e39d48321fa", + "metadata": { + "coordinates": { + "layout_height": 2205, + "layout_width": 1654, + "points": [ + [311.8, 1930.6], + [311.8, 1964.6], + [690.9, 1964.6], + [690.9, 1930.6] + ], + "system": "PixelSpace" + }, + "detection_class_prob": 0.628, + "filetype": "PPM", + "languages": ["eng"], + "page_number": 1 + }, + "text": "Differences in risk factor severity", + "type": "NarrativeText", + "compositeId": "875d46a9-6106-40d2-b891-b803d0bb87ac" + }, + { + "element_id": "3b4b747e-3609-4697-adbe-e66431aad148", + "metadata": { + "coordinates": { + "layout_height": 2205, + "layout_width": 1654, + "points": [ + [304.5, 1973.3], + [304.5, 2040.1], + [915.5, 2040.1], + [915.5, 1973.3] + ], + "system": "PixelSpace" + }, + "detection_class_prob": 0.90552, + "filetype": "PPM", + "languages": ["eng"], + "page_number": 1 + }, + "text": "As compared with matched controls, after adjustment, PwMS had a 0.4-mm Hg lower systolic blood", + "type": "NarrativeText", + "compositeId": "875d46a9-6106-40d2-b891-b803d0bb87ac" + }, + { + "element_id": "47d380de-794f-4205-a182-43bdb12d2578", + "metadata": { + "coordinates": { + "layout_height": 2205, + "layout_width": 1654, + "points": [ + [941.5, 1483.4], + [941.5, 1913.8], + [1542.4, 1913.8], + [1542.4, 1483.4] + ], + "system": "PixelSpace" + }, + "detection_class_prob": 0.9414, + "filetype": "PPM", + "languages": ["eng"], + "page_number": 1 + }, + "text": "pressure at the index year. The magnitude was greater for men than women, considering that men had almost a 3-mm Hg lower blood pressure than matched con- trols (overall: coeff. = −0.37, 95% CI = −0.60, −0.13; women: −0.54, 95% CI = −0.96, −0.12; men: −2.81, 95% CI = −3.84, −1.77). The differences were greater when restricting analyses to only those with a diagno- sis of hypertension at baseline, as PwMS had a 3.3- mm Hg lower systolic blood pressure then matched controls (coeff. = −3.27, 95% CI = −5.04, −1.50); dif- ferences were confirmed in women but not in men (women: coeff. = −2.56, 95% CI = −3.84, −1.27; men: −0.27, 95% CI = 0.01, −2.56).", + "type": "NarrativeText", + "compositeId": "2990794c-e50d-4ed2-b3b3-b76a2fc76693" + }, + { + "element_id": "ea18e521-02e5-4217-b89b-3e63a54a6d7e", + "metadata": { + "coordinates": { + "layout_height": 2205, + "layout_width": 1654, + "points": [ + [936.9, 1938.4], + [936.9, 2038.1], + [1542.4, 2038.1], + [1542.4, 1938.4] + ], + "system": "PixelSpace" + }, + "detection_class_prob": 0.94049, + "filetype": "PPM", + "languages": ["eng"], + "page_number": 1 + }, + "text": "In contrast, PwMS had higher levels of diastolic blood pressure at baseline, as compared with matched controls (coeff. = 0.29, 95% CI = 0.14, 0.43). However,", + "type": "NarrativeText", + "compositeId": "9e6198b1-08c2-4e33-91af-8a3361e02925" + }, + { + "element_id": "267417f1-2475-4c77-8ea4-e61527222bf5", + "metadata": { + "coordinates": { + "layout_height": 2205, + "layout_width": 1654, + "points": [ + [69.1, 2094.9], + [69.1, 2115.9], + [102.5, 2115.9], + [102.5, 2094.9] + ], + "system": "PixelSpace" + }, + "detection_class_prob": 0.76658, + "filetype": "PPM", + "languages": ["eng"], + "page_number": 1 + }, + "text": "674", + "type": "PageNumber", + "compositeId": "9e6198b1-08c2-4e33-91af-8a3361e02925" + }, + { + "element_id": "2831f8d1-5844-4c65-ab90-d22421928a30", + "metadata": { + "coordinates": { + "layout_height": 2205, + "layout_width": 1654, + "points": [ + [1297.9, 2094.9], + [1297.9, 2117.9], + [1538.4, 2117.9], + [1538.4, 2094.9] + ], + "system": "PixelSpace" + }, + "detection_class_prob": 0.8409, + "filetype": "PPM", + "languages": ["eng"], + "page_number": 1 + }, + "text": "journals.sagepub.com/home/msj", + "type": "Footer", + "compositeId": "9e6198b1-08c2-4e33-91af-8a3361e02925" + } + ] +} diff --git a/src/libs/unstructured/__tests__/fixtures/table-parse/auto-partition-basic-raw.json b/src/libs/unstructured/__tests__/fixtures/table-parse/auto-partition-basic-raw.json new file mode 100644 index 000000000000..b8cf6ce2ad8e --- /dev/null +++ b/src/libs/unstructured/__tests__/fixtures/table-parse/auto-partition-basic-raw.json @@ -0,0 +1,131 @@ +[ + { + "type": "CompositeElement", + "element_id": "32855cf6-5605-4a8e-97a3-3ac0b509b725", + "text": "Multiple Sclerosis Journal 29(6)\n\nTable 1. Characteristics of the study population.", + "metadata": { + "filetype": "application/pdf", + "languages": ["eng"], + "page_number": 1, + "orig_elements": "eJy1UcFu3CAU/BXEqZHWyGBgTa+9RJVSRUpuq8gC/LxGYo0FuM0qyr8X3FSq0lvUHmeYeW/ecHrB4OECSx7ciD8j3KlOyaPpGiq5bXhPeaP7njbKSq6h14YbgQ8IXyDrUWddPC/YhhBHt+gMacdeX8OWhxncec6FYawVxfNG/3BjngtLpeCFXYNbcvWdTrIn7IAUI+LpgN4QZYKoCrmQRP6Nd3XBOF1Thku94d49g39YtQX8Wh5GyGCzC8tgvU5pWGMwRdaSvgToimByHvJ1hd17f4f3qMt50+f9nhOG5YzrirUww7JdDMSavw7P8FwvxHebz271gB6shxiSS+hr2OKiPWLqk7ypQ3/vuAU9lgnF/r79VjJrDZsaOk2m4XSyjWK2a6apHUExdTTc/r/2O9KWfpUgbK9/h4wdSVehELTW/R7/kn+sf9nStv9H/T9qU8qnBH2ZddQ2Q3QpO5tQmFCeAaW8jVe0hnXzumYhf37INx1jYb/DY532+vQTZ1bsRw==", + "filename": "table-parse.pdf" + } + }, + { + "type": "Table", + "element_id": "ad6705ea-1a7a-4708-bdfd-770f2a7cdf74", + "text": "Male Female Overall MS subjects Control subjects p-value MS subjects Control subjects p-value MS subjects Control subjects p-value N Follow-up time (years) Female (%) Age (years) Ethnicity – white (%) Smoking status (%) Non-smoker Ex-smoker Current smoker eFI ratio Fit Mid frailty Moderate frailty Severe frailty Number of primary care visits in previous year Index of multiple deprivation (IMD; %) 3685 9.9 (6.1) 46.3 (13.3) 92.3 41.5 17.5 41.1 0.02 (0.04) 97.2 2.8 0.0 0.0 6.9 (10.3) 21,931 11.4 (6.5) <0.001 46.3 (13.3) 93.5 0.852 0.013 53.8 14.7 31.6 0.01 (0.03) <0.001 98.3 1.6 0.0 0.0 2.2 (5.0) <0.001 <0.001 <0.001 8566 10.4 (6.3) 44.3 (13.3) 91.5 49.5 13.9 36.6 0.03 (0.04) 95.8 4.0 0.2 0.0 8.2 (11.5) 50,640 11.5 (6.5) <0.001 44.3 (13.3) 94.1 0.907 <0.001 60.0 11.6 28.5 0.02 (0.04) <0.001", + "metadata": { + "text_as_html": "<", + "filetype": "application/pdf", + "languages": ["eng"], + "page_number": 1, + "orig_elements": "eJytGGtv4zbsrxABNuSAxrXk964LMNx2wH1od0X3rT0ETqxrvDl2YCttg8P995FKYtOxkrXbPtQVKVJ8iOIj999GqlArVepZno1+gtFcqiD25+kknKts4seuO4nnaTjxF2G6iDIvDoQaXcBopXSapTpFnm+jRVXVWV6mWjUGLtJttdGzpcoflxoxUroB8uzRz3mml4gVYeAjdl3lpSa++/swcqILkJ50vC8XsAeFJ0MnJlgEvnCEDbNjQcyo2TZarciSz/mLKu7W6UKNvuNGprRa6LwqZ4sibZrZuq7mSOY6SRBGpMfXvFB6u1aG9/P1yChcPm7SR2PV/UiVjyMSsUbMrNys5qomKxCj1Yuepc1sqVcFsV/pdF6o6ZVeqjTDfzUtp1eX9NFLWFRFs07Lnx9G3sNoep0W6sTWR7Wyb0rc/P1J1WlRtLt19cx215OntNjseS+NBn0tptd30Gzmf6JTmhb3oSp1XRXwUA622sX+ZGD88AY+Lt9CfuokY8LlwaHzKtvuLcqmN4jPzMoL46AFpLhIPNGC7SIOwrAFAvci9N0hkZAXMuiYI3kRRPKIrPNqNv1YFUX1PNmsQecrBeOtSuvmXcuQOAmMQ0d0GCEcHzFBh/mx0O9dx3U7qcJ1fGLzemzBK9i8N3L1TDFBB+Mf3g3d8qZFiFZzIG4B14kCOZT8y+PQcz4aAmPhcXMId4RynTjo7sf3BwQWFD59N+IEyZDnGIWay2io+W96WeaLXG/hYSNd4cPzMtd9HybS69aeE7AjXcG2RLeT+I44dWO7UxLG58gB7UBRlkKEi1niblX9lZeP0OhUb5pOX27bTVVOGqRTdecYpmTgsYvtKBJmYYi6WEgiZl0QO8dPteffl2MVRMQECN+JzjhKcEfhWwjP0bJTJRNx0qXTD5u6xvoJAx8xizwulKUrhpUxk9aRRJ3mMvHPuEh9/AR1igWOB5aEMX59Hr+uMDjvXAahfQvn4LT/zmlJP7nugjpiQZ3Ejjd0UBKw8EuiQRQRNuSnRM45L17nGXyt07zQ287vTIL1Hn0W3tL2GjwWnnJwzT35VYZVHVPHsRL8CfG17QokW59LIHzXRjlU705h0/F65f4vgl46Mo0XVF9hXeertN7CIkWVnvImx0YkLxGtnvIKsxlVki4HUQWmytjFoJTjwHHPRXMsx1Q6OxJP9qv4kCWKkUUyIQkKSV4R+Mep+VOZqRcyc7UpdL7GipwptPiJnngJ40/Xv74HW7oWt4caVKi00XsulfFsGNkBnk9DO8CwvnU9VEjedoQ8xyFwzGYhseTEfyLhwj0mPOJGRVajIl4oOMCxsR0YCvc74ZK/Sul2iUxgLLjcmvgE0KdL2HF9oKPjqgRtVKwqW1CgfqEd4FjPDjCsb13b8mzTUONBI2SXm9mZiS04eA+Z2G4nYdGcDCJ7P0PshofL3YxmZkOa32huo1EM9v3vfryyjjkt4tws9O+IbsA+SkDXlgPrk+Go8/S6zhOGzR10vRy0LRX0GxhoGwnAUgysIMJxcYJ+OYC3pWZ4XYYDGuqgHaCADQSQ4NQP2GgFQO0grQSwbgOofwCsyIQ0f10VgN14CDSHgZmN4Mpk8r4AbNTBzBZg2nSgbheo3QRq6YC1Uwd2alNgv2f+JOpgCs2Bov+PxlHoJj2gQaUVT6ZRKw3UwgL1i8A6LKDmB3wjxygIMckyJQt2ky3ZFxzZxwX4xmM4Bx12qVcnphCoIe1582AgNll7pxpvg0dCzd1YDdyN0mSitzeRBkNSI2FuRgSdKwLwMO/2rcT+DYVErUDMusZK+Q52g7nFSpo3+zKE8VFkrhKHuAMhTR5ArT5IzDknDPZBGmeI/Y0mYKr6CYNvD2+xX4HpEqP9B2tq+/F3H3kL3i34txC0/L1cDTxnAtU9inq8J7p8Stn4SDzC+y3eO+ARRXWh5UpoFe9IyFF2fHLEhXTJTpaPu9FpPHHR72eHn9P+oFQ7+v7lbwgiwu8=", + "is_continuation": true, + "filename": "table-parse.pdf" + } + }, + { + "type": "Table", + "element_id": "e8e6fa12-9b5d-43d6-9886-597c00112158", + "text": "", + "metadata": { + "text_as_html": "td>294
MaleFemaleOverallp-value
MS subjectsControl \nsubjectsp-value MS subjects Control \nsubjectsp-valueMS \nsubjectsControl \nsubjects
N368521,931856650,64012,25172,572
Follow-up time (years)9.9 (6.1)11.4(6.5)<0.00110.4 (6.3)11.5(6.5)<0.00110.3(6.3)11.5(6.5)<0.001
Female (%)69.969.80.752
Age (years)46.3 (13.3)46.3(13.3)0.85244.3(13.3)44.3(13.3)0.90744.9(13.3)44.9(13.3)0.727
Ethnicity — white (%)92393.50.01391594.1<0.00193.991.2<0.00
Smoking status (%)
Non-smoker41553.849.560.047.158.1
Ex-smoker17.514.7<0.00113.911.6<0.0011512.5<0.00
Current smoker41.131.636.628.5379
eFI ratio0.02 (0.04)0.01 (0.03)<0.0010.03 (0.04)0.02 (0.04)<0.0010.03 (0.04)0.02 (0.04)<0.00
Fit97.298.395.897.196.297.4
Mid frailty2.81.64.02.83.72.5
Moderate frailty0.00.0<0.0010.20.1<0.0010.10.1<0.00
Severe frailty0.00.00.00.00.00.0
Number of primary care ", + "filetype": "application/pdf", + "languages": ["eng"], + "page_number": 1, + "orig_elements": "eJytGGtv4zbsrxABNuSAxrXk964LMNx2wH3o7YruW3sInFhtvDl2YCttg8P995FKYtOxkrXbPtQVKVJ8iOIjd99GqlArVepZno1+gtE8mT8sFg/uRGZxMPGVTCep+yAmiVwsUj/KFjL2RxcwWimdZqlOkefbaFFVdZaXqVaNgYt0W230bKnyx6VGjJRugDx79HOe6SViRRj4iF1XeamJ7+4ujJzoAqQnHe/rBexB4cnQiQkWgS8cYcPsWBAzaraNViuy5Ev+oorbdbpQo++4kSmtFjqvytmiSJtmtq6rOZK5ThKEEenxkBdKb9fK8H65HhmFy8dN+misuhup8nFEItaImZWb1VzVZAVitHrRs7SZLfWqIPYrnc4LNb3SS5Vm+K+m5fTqkj56CYuqaNZp+fP9yLsfTa/TQp3Y+qhW9k2Jm78/qTotina3rp7Z7nrylBabPe+l0aCvxfT6FprN/E90StPiPlSlrqsC7svBVrvYnwyMH97Ax+VbyE+dZEy4PDh0XmXbvUXZ9DPiM7PywjhoASkuEk+0YLuIgzBsgcC9CH13SCTkhQw65kheBJE8Iuu8mk0/VkVRPU82a9D5SsF4q9K6edcyJE4C49ARHUYIx0dM0GF+LPR713HdTqpwHZ/YvB5b8Ao2741cPVNM0MH4h3dDt7xpEaLVHIhbwHWiQA4l//I49JyPhsBYeNwcwh2hXCcOuvvx/QGBBYVP3404QTLkOUah5jIaav6bXpb5ItdbuN9IV/jwvMx134eJ9Lq15wTsSFewLdHtJL4jTt3Y7pSE8TlyQDtQlKUQ4WKWuF1Vf+XlIzQ61Zum05fb9rkqJw3SqbpzDFMy8NjFdhQJszBEXSwkEbMuiJ3jp9rz78uxCiJiAoTvRGccJbij8C2E52jZqZKJOOnS6YdNXWP9hIGPmEUeF8rSFcPKmEnrSKJOc5n4Z1ykPn6COsUCxwNLwhi/Po9fVxicdy6D0L6Fc3Daf+e0pJ9cd0EdsaBOYscbOigJWPgl0SCKCBvyUyLnnBev8wwe6jQv9LbzO5NgvUefhbe0vQaPhaccXHNPfpVhVcfUcawEf0J8bbsCydbnEgjftVEO1btV2HS8Xrn/i6CXjkzjBdUDrOt8ldZbWKSo0lPe5NiI5CWi1VNeYTajStLlIKrAVBm7GJRyHDjuuWiO5ZhKZ0fiyX4VH7JEMbJIJiRBIckrAv84NX8qM/VCZq42hc7XWJEzhRY/0RMvYfzp+tf3YEvX4uZQgwqVNnrPpTKeDSM7wPNpaAcY1reuhwrJm46Q5zgEjtksJJac+E8kXLjHhEfcqMhqVMQLBQc4NrYDQ+F+J1zyVyndLpEJjAWXWxOfAPp0CTuuD3R0XJWgjYpVZQsK1C+0Axzr2QGG9a1rW55tGmo8aITscjM7M7EFB+8hE9vtJCyak0Fk72eI3fBwuZvRzGxI8xvNbTSKwb7/3Y9X1jGnRZybhf4d0WewjxLQteXA+mQ46jy9rvOEYXMHXS8HbUsF/QYG2kYCsBQDK4hwXJygXw7gbakZXpfhgIY6aAcoYAMBJDj1AzZaAVA7SCsBrNsA6h8AKzIhzV9XBWA3HgLNYWBmI7gymbwvABt1MLMFmDYdqNsFajeBWjpg7dSBndoU2O+ZP4k6mEJzoOj/o3EUukkPaFBpxZNp1EoDtbBA/SKwDguo+QHfyDEKQkyyTMmC3WRL9gVH9nEBvvEYzkGHXerViSkEakh73jwYiE3W3qnG2+CRUHM3VgN3ozSZ6O1NpMGQ1EiYmxFB54oAPMy7fSuxf0MhUSsQs66xUr6D3WBusZLmzb4MYXwUmavEIe5ASJMHUKsPEnPOCYN9kMYZYn+jCZiqfsLgm8Nb7FdgusRo/8Ga2n783UfegHcD/g0ELX8vVwPPmUB1j6Ie74kun1I2PhKP8H6L9w54RFFdaLkSWsU7EnKUHZ8ccSFdspPl4250Gk9c9PvZ4ee0PyjVjr5//RtD9sNK", + "is_continuation": true, + "filename": "table-parse.pdf" + } + }, + { + "type": "Table", + "element_id": "9d93c6f7-aecb-4773-ae20-587989b448f8", + "text": "", + "metadata": { + "text_as_html": "visits in previous year6.9 (10.3)22(5.0)<0.00182(11.5)32(6.1)<0.00178(112)29(5.9)<0.00
Index of multiple deprivation (IMD; %)
1Q — least deprived13.713.714.614.6144144
2Q18.518.418.518.518.518.5
3Q17.617.617.917.917.817.8
4Q20.22031.00018.818.81.00019.219.21.000
5Q — mos", + "filetype": "application/pdf", + "languages": ["eng"], + "page_number": 1, + "orig_elements": "eJytGGtv4zbsrxABNuSA1rUlv7TrCgy3HXAferui+9YeCjdWG2+OHdhK2+Bw/32kkth0rGTttg91RYoUH6L4yM23iS71QlfmrsgnP8HEf/BV/JBHp0rO5GkYSnV6nwWz0+xepomMhZbZbHICk4U2WZ6ZDHm+TWZ13eRFlRndWrjM1vXK3M118Tg3iBHCj5Bni34ucjNHbBBHIWKXdVEZ4ru5iRMvOQEhhSe/nsAWDKSIvZTgIAoDL3BhNiyImbTr1ugFWfKleNHl9TKb6cl33Mi10TNT1NXdrMza9m7Z1PdI5nsqihPS46EotVkvteX9cjmxClePq+zRWnUz0dXjhEQsEXNXrRb3uiErEGP0i7nL2ru5WZTEfm6y+1JfnJu5znL819Dy4vyMPmYOs7psl1n18+1E3k4uLrNSH9j6qBfuTYGbvz/pJivLbrepn9nu8vQpK1db3jOrwVCLi8traFf3f6JT2g73oa5MU5dwW422usX2ZGD88AY+Lt9Bfugka8LZzqH3db7eWpRffEZ8blcyTqMOEMGJkkEHdos0iuMOiPyTOPTHRIE4EVHPnIiTKBF7ZL1X84uPdVnWz6erJZhioWG61lnTvusYlKdgGntBjwkCL0RM1GN+LM173/P9XmrgeyGxyQFb9Ao2+UaugSk26GD6w7uxW960iNFqDqQd4HtJJMaSf3kcey5EQ2AaSG4O4fZQvpdG/f2E4YjAgcKn7yecQI159lGouUjGmv9m5lUxK8wablfCD0J4nhdm6EMlZL+WXsSO9AO2FfQ7KvSCQze2OUUxPk+MaEeKshQS+Jglrhf1X0X1CK3JzKrt9eW2fa6r0xbpdNM7hikZSXaxPYViFsaoi4MkYdZFqbf/VAf+fdlXIUiYgCD0kiOOCrij8C3Ex2jZqYKJOOjSiw+rpsH6CSMfMYskF8rSFcOKlEnrSZJec6HCIy7SHz9Bk2GB44ElYIrfkMevH1icPJZBaN/BOTrtv3M60k9h+qBOWFCr1JNjB6mIhZ9KRlFE2JifknjHvHhZ5PDQZEVp1r3fmQTnPYYsvIXrNUgWnmJ0zQP5dY5VHVPHvhL8CfG16woEWx9LIHzXRTlW71pj0/F65f4vgkE6so0X1A+wbIpF1qxhlqFKT0VbYCNSVIjWT0WN2YwqSZ+DqAJTZexjUIhp5PnHojkVUyqdPYkUwyo+ZklSZBFMiEIh6hWBv5+aP1W5fiEzF6vSFEusyLlGi5/oiVcw/XT563twpevgaleDSp21Zsulc54NEzfA82nsBhg2dK7HComrnpDnOAT22Rwkjpz4TyRcuGTCE25U4jQq4YWCAxybuoGx8LAXLvirFH6fyAKMBZ9bkx4AhnSKHTcEejquStRFxaJ2BQXqF7sBjpVugGFD59qVZ9uWGg8aIfvczM5UruDgPaRy3Y5i0axGkb2dITbDw9lmRrOzIc1vNLfRKAbb/nc7XjnHnA5xbBb6d0SfwT1KQN+WA+uTYa/zlH3nCePmDvpeDrqWCoYNDHSNBGApBlYQYb84wbAcwNtSM7wuwwENddANUMAGAlA49QM2WhFQO0irAFi3AdQ/AFZkQtq/vgrAZjwEmsPAzkZwbjP5UAA26mBnC7BtOlC3C9RuArV0wNqpHTu1KbDds38CdbCFZkcx/EfjKPSTHtCg0okn06iVBmphgfpFYB0WUPMDoZVjFYSUZNmSBZvJluyL9uzjAkLrMZyDdrvUqxNTDNSQDry5MxCbrK1TrbdBklB7N04DN6M0mSi3JtJgSGoo5mZE0LlBBBLz7tBK7N9QSNIJxKxrrRTvYDOYO6ykeXMoI7A+SuxV4hC3I6TJA6jVB4E554DBIQjrjGB7owpsVT9g8NXuLQ4rMF1isv1gTe0+4eYjrkBeQXgFUcc/yNXAcyZQ3aOox3uiy6eUjY9EEj7s8HKHRxTVhY5L0SrdkJCj3Hi1x4V0aiMrxN3kMJ646Pez3c9pf1CqnXz/+jdlk8KP", + "is_continuation": true, + "filename": "table-parse.pdf" + } + }, + { + "type": "Table", + "element_id": "21843169-a334-4356-9ee1-53c0d98c3366", + "text": "", + "metadata": { + "text_as_html": "t deprived20.620.620.320.3204204
Missing data9.39.49.89.99.79.7
", + "filetype": "application/pdf", + "languages": ["eng"], + "page_number": 1, + "orig_elements": "eJytGGtv4zbsrxABNuSA1rUkP3ddgeG2A+5Db1d039pD4cZq482xA1tpGxzuv49UEpuOlazd9qGuSJHiQxQfufk20aVe6MrcFfnkJ5gIPbufyYf7UzFLotMgDfzTTKnwNJspEYd5EooHNTmByUKbLM9MhjzfJrO6bvKiyoxuLVxm63pl7ua6eJwbxEjph8izRT8XuZkjVkRhgNhlXVSG+G5uotiLT0Aq6amvJ7AFhZKRlxAswkB4woXZsCBm0q5boxdkyZfiRZfXy2ymJ99xI9dGz0xRV3ezMmvbu2VT3yOZ76VhFJMeD0WpzXqpLe+Xy4lVuHpcZY/WqpuJrh4nJGKJmLtqtbjXDVmBGKNfzF3W3s3NoiT2c5Pdl/ri3Mx1luO/hpYX52f0MXOY1WW7zKqfbyfqdnJxmZX6wNZHvXBvStz8/Uk3WVl2u039zHaXp09ZudrynlkNhlpcXF5Du7r/E53SdrgPdWWauoTbarTVLbYnA+OHN/Bx+Q7yQydZE852Dr2v8/XWovziM+Jzu1JREnaAFCepEh3YLZIwijog9E+iwB8TCXkiw545lidhLPfIeq/mFx/rsqyfT1dLMMVCw3Sts6Z91zGkXgrTyBM9RggvQEzYY34szXvf8/1eqvC9gNjUgC18BZt6I9fAFBt0MP3h3dgtb1pEaDUHkg7wvTiUY8m/PI49F6AhMBWKm0O4PZTvJWF/P0EwInCg8On7MSdIxzz7KNRcxmPNfzPzqpgVZg23K+mLAJ7nhRn6MJWqXysvZEf6gm2JficNPHHoxjanpIzPkyPakaIshQgfs8T1ov6rqB6hNZlZtb2+3LbPdXXaIp1uescwJUPFLranSJmFEeriIImZdWHi7T/VgX9f9lUQMRMgAi8+4ijBHYVvITpGy06VTMRBl158WDUN1k8Y+YhZpLhQlq4YViZMWk8S95rLNDjiIv3xEzQZFjgeWBKm+A14/PrC4tSxDEL7Ds7Raf+d05F+CtMHdcyCOk08NXZQGrLwS+NRFBE24qfE3jEvXhY5PDRZUZp173cmwXmPAQtv6XoNioWnHF3zQH6dY1XH1LGvBH9CfO26AsnWxxII33VRjtW71th0vF65/4tgkI5s4wX1AyybYpE1a5hlqNJT0RbYiBQVovVTUWM2o0rS5yCqwFQZ+xiUchp6/rFoTuSUSmdPouSwio9Z4gRZJBOSopD0FYG/n5o/Vbl+ITMXq9IUS6zIuUaLn+iJVzD9dPnre3Cla3G1q0Glzlqz5dI5z4axG+D5NHIDDBs412OF5FVPyHMcAvtsDhJHTvwnEi5cMeExNyp2GhXzQsEBjk3cwFh40AuX/FVKv09kAmPB59YkB4AhXcqOGwI9HVcl7KJiUbuCAvWL3ADHKjfAsIFz7cqzbUuNB42QfW5mZ6au4OA9ZOq6nZRFczqK7O0MsRkezjYzmp0NaX6juY1GMdj2v9vxyjnmdIhjs9C/I/oM7lEC+rYcWJ8Me52n6jtPGDd30Pdy0LVUMGxgoGskAEsxsIII+8UJhuUA3paa4XUZDmiog26AAjYQQIpTP2CjFQK1g7QSwLoNoP4BsCIT0v71VQA24yHQHAZ2NoJzm8mHArBRBztbgG3TgbpdoHYTqKUD1k7t2KlNge2e/ZOogy00O4rhPxpHoZ/0gAaVTjyZRq00UAsL1C8C67CAmh8IrByrICQky5Ys2Ey2ZF+4Zx8XEFiP4Ry026VenZgioIZ04M2dgdhkbZ1qvQ2KhNq7cRq4GaXJRLU1kQZDUiNlbkYEnStCUJh3h1Zi/4ZC4k4gZl1rpXwHm8HcYSXNm0MZwvootleJQ9yOkCYPoFYfJOacAwYHIK0zxPZGU7BV/YDBV7u3OKzAdInx9oM1tfsEm4+8AnUFwRWEHf8gVwPPmUB1j6Ie74kun1I2PhJF+KDDqx0eUVQXOq6UVsmGhBzlxqd7XEiXbmQFuBsfxhMX/X62+zntD0q1k+9f/wbjZsKI", + "is_continuation": true, + "filename": "table-parse.pdf" + } + }, + { + "type": "CompositeElement", + "element_id": "499fc9c7-95f4-412c-87e2-10fa1a2e950e", + "text": "Individuals were classified as fit, if the eFI score was below 0.12; mildly frail, if the score was between 0.12 and 0.24; moderately frail, if the score was between 0.24 and 0.36; severely frail, if the score was 0.36 and above. Differences between groups were assessed employing Chi-square test, Student’s t-test and the Kruskal–Wallis test, as appropriate.\n\nwas even lower in men (PR = 0.27, 95% CI = 0.18, 0.39) than in women (PR = 0.38, 95% CI = 0.30, 0.49; Figure 1), but the difference was not statistically sig- nificant (p = 0.097).", + "metadata": { + "filetype": "application/pdf", + "languages": ["eng"], + "page_number": 1, + "orig_elements": "eJy1k19r2zAUxb/KxTBoITb+b2thTx2FMDbKOthDVoJsXTtiiuRZctJQ9t135aZdN0oZY4M8REfnSPfq/ry+C1DhDrXbSBG8hkCwLmF10YSiaIowL1MRNpVowqrNiiLHJhNxFiwg2KHjgjtOmbugNWYUUnOHdl4rfjST22xR9ltHSprGBWVO8kEKtyU1KYuc1MFI7Xxuva5YVC4gybI8Km4W8LDOkypifp0USR3Vzyr3GZICe7QOd76XK3mL6nrgLQbfaUOgw9ZJozet4tZuhtE0ZIsjFhepr6+TCt1xwDl79T6YS9b9xPu5r3WAug/8FQMpGz3tGhx9H/5wh7e+02ClhdxLMXFl4YAjwnyX7CQK4BY66RYgO3BbBLxcgW0NeQ6006AyByomSZewk0qoI3Qjl+rR/tTqDoh6NgPXgv6kOaWMwJFm8EfJND8ls3IJFvdU6gs5b5v9vDF7jOCt7DpK6BZ/ntmPZhpOTVPLSD8BuBuUOUrdw8VWhvbbxGmXMKFXuHaTIO6+TGmcMAsu9PJ8ib/73TjZr1zNu9lnrpS0pxyVwwea3TBKajbyU3oY2gc+0gPIPX7y06Cx/E53nRPenDVhwzkP81S0IU+aOmRpmdZtmVdp2fw3urOYRamHt66ixMP7IJTEcOkFlhRR8ZxwH/lLuvOUsX9Et2eBWNFArOIIUgM9LpxdfYQ3nqlqAax4BRereZnQd0ngsHMaKNfefDBP7Vn9iz2LvT1nS7iU/USYJOcLaCY34yAegZt51MaBdTRq62RLcBzByj4ETd9Zy7WDs2E+MmbV+UuA3PwAHmiH2Q==", + "filename": "table-parse.pdf" + } + }, + { + "type": "CompositeElement", + "element_id": "875d46a9-6106-40d2-b891-b803d0bb87ac", + "text": "Hyperlipidaemia. Treatment with lipid-lowering medications was lower in PwMS, as compared with matched controls (PR = 0.63, 95% CI = 0.54, 0.74). This was particularly pronounced for men (women: PR = 0.71, 95% CI = 0.59, 0.87; men: PR = 0.41, 95% CI = 0.37, 0.62).\n\nDifferences in risk factor severity\n\nAs compared with matched controls, after adjustment, PwMS had a 0.4-mm Hg lower systolic blood", + "metadata": { + "filetype": "application/pdf", + "languages": ["eng"], + "page_number": 1, + "orig_elements": "eJy1VE1r3DAQ/SvCUEhgbWRL/lBKD6U9pIeUpcltCcvYGq/V2paxtdksof+9I++mdNvQ0pCcjN7MG+vNvNHqIcAWO+zd2ujgggUgEp1wVYfAVRLKpBJhmUEaiiLOdC1FWesyWLCgQwcaHBDnIaisHbXpweE0n1vY261bN2g2jSMkSXhKnCO8M9o1hMZZKgkdrOmd561WIuYRQRRQUXa7YD+BIi2i2AMqTqP0KeBAISSY9pPDzmtZmntsrweoMPhOAY0OK2dsv65amKb1MNqS0nikpOI5JdSmRbcfcOYur4L5yv1mC5tZ1yrAfhP4XwyErPttV+LodfjiDu+90uCS+GNrBqMBOwMRuxkRnG8w2xnXsDkUtnaHo+k3rENtKvCXmtgOJjYHmOnZcnd1vWCEVLYbYER9oHfgqoYOle3daNuJnS2/sHekIRMLptI37MOn+eg7y6NcntMFGnOoTWWcqbYtjO2ekfjebvuKatV2pHv07Gxn6XPBjhXz+LSi8hWL/C37NUmeJoncJ2XJeeSb99jLzzCOpPEOb3yTqFu/my4HXqcF6lDlKEJZJEkIRZ2EMQqlZSGSuIZXNF0cFeQgJfij6Y5AJg9ApsgjTwIz5Xmmy5LihSz30dQ1jkiznLxzRjN9YzVUjsY64R35zO3/axqilGUucwxFxlUoM5WHoEsMMcukiAF0LIvXmwaX8z6rXERinsYBSLjkJxv/B3CkPPMJ4GmavNA83v9raWmva0drDvrrdprfhsW876wBzcBvVdh17HJzfA28GtuaipWttfovo7z9ATguvV4=", + "filename": "table-parse.pdf" + } + }, + { + "type": "CompositeElement", + "element_id": "2990794c-e50d-4ed2-b3b3-b76a2fc76693", + "text": "pressure at the index year. The magnitude was greater for men than women, considering that men had almost a 3-mm Hg lower blood pressure than matched con- trols (overall: coeff. = −0.37, 95% CI = −0.60, −0.13; women: −0.54, 95% CI = −0.96, −0.12; men: −2.81, 95% CI = −3.84, −1.77). The differences were greater when restricting analyses to only those with a diagno- sis of hypertension at baseline, as PwMS had a 3.3- mm Hg lower systolic blood pressure then matched controls (coeff. = −3.27, 95% CI = −5.04, −1.50); dif- ferences were confirmed in women but not in men (women: coeff. = −2.56, 95% CI = −3.84, −1.27; men: −0.27, 95% CI = 0.01, −2.56).", + "metadata": { + "filetype": "application/pdf", + "languages": ["eng"], + "page_number": 1, + "orig_elements": "eJyFU11r4zAQ/CuL4aAFW9iynY+We7qXu4cehfYtV4JsrW2BLAVJbhpK//utkjQkzcG9SeOd3Z0ZefWeoMYRTVgrmdxBUs1lucglZvNl1WUVz+tMFAueVWUjm4JLXs8XSQrJiEFIEQRx3pPWWieVEQH9/q7Fzk5hPaDqh0AIpzbEOcJbJcNAaDGrK0I3VpkQeavVsioYFRbVomTVSwonYFmUbBGBoq44q/6JHEgEJX7nA45RzaN6Q/20ES0mH/RBYsA2KGvWrRberzfONlSWM5oTV+mUxrDb4J76+JDsdzb9JPq9sFWCpk/ihA0hazONDbooJPYO+BalJhuH3k8OQQQIA4IyEt9gh8IxeKb7KHqjwiQRtsJD75Bcc9BZB5QCMYSBraVjCq01Xkl0yvQRD/uCQUgQerQ+gIAyG0f42YO2W+rRaGslnObvW40itAPK2CuD4Kz2cGNf0Qmt7wjErmPwHf5MnBc8Z+U8hWX9DX78OgNneXo6F+X9Ybu7ExQzvOIsZ2ccfg9nDM4WxRWDsqw+GQWbz28PXknVdejQtOiBFOLJru1AVpDQ4BTlSf4II/TOU1mwYI3ekXrryWIVBvJJKjLdZuCVB9vBQBG7gOSuNTGmRnjUymAKlMjj9uHp4DKUrMzg3OH4sKxW7bXVeGH10egv/paMX/tbs/xMeZ3f3kfVGVzqpp6dciN1V8fnAc0UwNgQgXi9OcbyZSZn9ew/bvP5RT755ZY5y4v0rNkti3/F50/yWzgngnrF5/j6P17+AkclSxo=", + "filename": "table-parse.pdf" + } + }, + { + "type": "CompositeElement", + "element_id": "9e6198b1-08c2-4e33-91af-8a3361e02925", + "text": "In contrast, PwMS had higher levels of diastolic blood pressure at baseline, as compared with matched controls (coeff. = 0.29, 95% CI = 0.14, 0.43). However,\n\n674\n\njournals.sagepub.com/home/msj", + "metadata": { + "filetype": "application/pdf", + "languages": ["eng"], + "page_number": 1, + "orig_elements": "eJy1k01r3DAQhv+KEBRasB1LlvxR6KlQmkPCQnpbwiJb47WCbRlLziaE/veOvLshlD21yXEez2j8vjOzfaHQwwCj3xlNvxIKipUgOYtTDjIWnBVxXVZ1nEGeKSlUrgugEaEDeKWVV1jzQhtrZ21G5cGtca+e7eJ3HZh955FwnkqsOeGD0b5DynIpkE7WjD7UbbdVlidVRFiVlYm4j8gZ8BQBC4BJwRNxiZyKEFH37DwMQc3GPEF/N6kG6G/8oMFD440dd02vnNtNs60xLU0qkQrsQ1vTg3+eYK3d3ND1p8f9ovarsi2FcU9DiwnJblyGGuagJDzu4SlopdcjaezoZ+V8RDaHmzvSKU06tAJm0sMj9I7YlmiDCbY3Dal7azWZZnBumYEoT2rloDcjREQ5fGyY1AyaHIzvyKB802GwtrD41OfGQtsm5BvK4Kihkp/I9+s1ZGhLmojsS0J+2gN2nqOg6CzwVs2z8uYRfoU/Rwl/7wLPC8GKlsVcFLgLTVHEJSgRQ84kLzjndSs/bBfyKmFhzpVIqjDnU8yYPMYs5Ym8BI4V/7YHRZ7L8p32AM176/YGM2+PiZesLjPWlprFshQCrc5lrOoqjTXneIMVL1WWfpjVjFfF8czOZr8SxooTkeG8LpL/MbwU6Xvd3YNd5lH1LnGYMy11godz1dkBrgb38HYSP6z1YQr3fwBhSXjP", + "filename": "table-parse.pdf" + } + } +] diff --git a/src/libs/unstructured/__tests__/fixtures/table-parse/auto-partition-raw.json b/src/libs/unstructured/__tests__/fixtures/table-parse/auto-partition-raw.json new file mode 100644 index 000000000000..5cedfd41fd95 --- /dev/null +++ b/src/libs/unstructured/__tests__/fixtures/table-parse/auto-partition-raw.json @@ -0,0 +1,276 @@ +[ + { + "type": "Header", + "element_id": "1b4d9f8d-b2ab-47cb-861b-078def265ad4", + "text": "Multiple Sclerosis Journal 29(6)", + "metadata": { + "coordinates": { + "points": [ + [68.1502456665039, 92.5256576538086], + [68.1502456665039, 125.85709381103516], + [456.638916015625, 125.85709381103516], + [456.638916015625, 92.5256576538086] + ], + "system": "PixelSpace", + "layout_width": 1654, + "layout_height": 2205 + }, + "filetype": "application/pdf", + "languages": ["eng"], + "page_number": 1, + "filename": "table-parse-case.pdf" + } + }, + { + "type": "NarrativeText", + "element_id": "10278547-1ddf-4211-8c0c-f8256b28cc4a", + "text": "Table 1. Characteristics of the study population.", + "metadata": { + "coordinates": { + "points": [ + [62.99222222222222, 195.21878051757812], + [62.99222222222222, 227.29751586914062], + [551.6422222222224, 227.29751586914062], + [551.6422222222224, 195.21878051757812] + ], + "system": "PixelSpace", + "layout_width": 1654, + "layout_height": 2205 + }, + "filetype": "application/pdf", + "languages": ["eng"], + "page_number": 1, + "parent_id": "1b4d9f8d-b2ab-47cb-861b-078def265ad4", + "filename": "table-parse-case.pdf" + } + }, + { + "type": "Table", + "element_id": "060416c3-6c7a-44de-ad79-b38e5601d48a", + "text": "Male Female Overall MS subjects Control subjects p-value MS subjects Control subjects p-value MS subjects Control subjects p-value N Follow-up time (years) Female (%) Age (years) Ethnicity – white (%) Smoking status (%) Non-smoker Ex-smoker Current smoker eFI ratio Fit Mid frailty Moderate frailty Severe frailty Number of primary care visits in previous year Index of multiple deprivation (IMD; %) 3685 9.9 (6.1) 46.3 (13.3) 92.3 41.5 17.5 41.1 0.02 (0.04) 97.2 2.8 0.0 0.0 6.9 (10.3) 21,931 11.4 (6.5) <0.001 46.3 (13.3) 93.5 0.852 0.013 53.8 14.7 31.6 0.01 (0.03) <0.001 98.3 1.6 0.0 0.0 2.2 (5.0) <0.001 <0.001 <0.001 8566 10.4 (6.3) 44.3 (13.3) 91.5 49.5 13.9 36.6 0.03 (0.04) 95.8 4.0 0.2 0.0 8.2 (11.5) 50,640 11.5 (6.5) <0.001 44.3 (13.3) 94.1 0.907 <0.001 60.0 11.6 28.5 0.02 (0.04) <0.001 97.1 2.8 0.1 0.0 3.2 (6.1) <0.001 <0.001 <0.001 12,251 10.3 (6.3) 69.9 44.9 (13.3) 93.9 47.1 15 37.9 0.03 (0.04) 96.2 3.7 0.1 0.0 7.8 (11.2) 72,572 11.5 (6.5) <0.001 69.8 44.9 (13.3) 91.2 0.752 0.727 <0.001 58.1 12.5 29.4 0.02 (0.04) <0.001 97.4 2.5 0.1 0.0 2.9 (5.9) <0.001 <0.001 <0.001 1Q – least deprived 13.7 13.7 14.6 14.6 14.4 14.4 2Q 3Q 4Q 5Q – most deprived Missing data 18.5 17.6 20.2 20.6 9.3 18.4 17.6 20.3 20.6 9.4 1.000 18.5 17.9 18.8 20.3 9.8 18.5 17.9 18.8 20.3 9.9 1.000 18.5 17.8 19.2 20.4 9.7 18.5 17.8 19.2 20.4 9.7 1.000", + "metadata": { + "coordinates": { + "points": [ + [67.73748779296875, 232.2743377685547], + [67.73748779296875, 1326.780029296875], + [1541.0694580078125, 1326.780029296875], + [1541.0694580078125, 232.2743377685547] + ], + "system": "PixelSpace", + "layout_width": 1654, + "layout_height": 2205 + }, + "text_as_html": "
MaleFemaleOverallp-value
MS subjectsControl \nsubjectsp-value MS subjects Control \nsubjectsp-valueMS \nsubjectsControl \nsubjects
N368521,931856650,64012,25172,572
Follow-up time (years)9.9 (6.1)11.4(6.5)<0.00110.4 (6.3)11.5(6.5)<0.00110.3(6.3)11.5(6.5)<0.001
Female (%)69.969.80.752
Age (years)46.3 (13.3)46.3(13.3)0.85244.3(13.3)44.3(13.3)0.90744.9(13.3)44.9(13.3)0.727
Ethnicity — white (%)92393.50.01391594.1<0.00193.991.2<0.00
Smoking status (%)
Non-smoker41553.849.560.047.158.1
Ex-smoker17.514.7<0.00113.911.6<0.0011512.5<0.00
Current smoker41.131.636.628.5379294
eFI ratio0.02 (0.04)0.01 (0.03)<0.0010.03 (0.04)0.02 (0.04)<0.0010.03 (0.04)0.02 (0.04)<0.00
Fit97.298.395.897.196.297.4
Mid frailty2.81.64.02.83.72.5
Moderate frailty0.00.0<0.0010.20.1<0.0010.10.1<0.00
Severe frailty0.00.00.00.00.00.0
Number of primary care visits in previous year6.9 (10.3)22(5.0)<0.00182(11.5)32(6.1)<0.00178(112)29(5.9)<0.00
Index of multiple deprivation (IMD; %)
1Q — least deprived13.713.714.614.6144144
2Q18.518.418.518.518.518.5
3Q17.617.617.917.917.817.8
4Q20.22031.00018.818.81.00019.219.21.000
5Q — most deprived20.620.620.320.3204204
Missing data9.39.49.89.99.79.7
", + "filetype": "application/pdf", + "languages": ["eng"], + "page_number": 1, + "parent_id": "1b4d9f8d-b2ab-47cb-861b-078def265ad4", + "filename": "table-parse-case.pdf" + } + }, + { + "type": "NarrativeText", + "element_id": "ae107d03-ad16-4fe7-8a5a-6bccd7920004", + "text": "Individuals were classified as fit, if the eFI score was below 0.12; mildly frail, if the score was between 0.12 and 0.24; moderately frail, if the score was between 0.24 and 0.36; severely frail, if the score was 0.36 and above. Differences between groups were assessed employing Chi-square test, Student’s t-test and the Kruskal–Wallis test, as appropriate.", + "metadata": { + "coordinates": { + "points": [ + [79.55477905273438, 1334.46533203125], + [79.55477905273438, 1417.9267578125], + [1518.767333984375, 1417.9267578125], + [1518.767333984375, 1334.46533203125] + ], + "system": "PixelSpace", + "layout_width": 1654, + "layout_height": 2205 + }, + "filetype": "application/pdf", + "languages": ["eng"], + "page_number": 1, + "parent_id": "1b4d9f8d-b2ab-47cb-861b-078def265ad4", + "filename": "table-parse-case.pdf" + } + }, + { + "type": "NarrativeText", + "element_id": "28830196-9476-4be2-ab5d-5f771f4c63ce", + "text": "was even lower in men (PR = 0.27, 95% CI = 0.18, 0.39) than in women (PR = 0.38, 95% CI = 0.30, 0.49; Figure 1), but the difference was not statistically sig- nificant (p = 0.097).", + "metadata": { + "coordinates": { + "points": [ + [309.16070556640625, 1487.09716796875], + [309.16070556640625, 1618.604248046875], + [915.4883333333333, 1618.604248046875], + [915.4883333333333, 1487.09716796875] + ], + "system": "PixelSpace", + "layout_width": 1654, + "layout_height": 2205 + }, + "filetype": "application/pdf", + "languages": ["eng"], + "page_number": 1, + "parent_id": "1b4d9f8d-b2ab-47cb-861b-078def265ad4", + "filename": "table-parse-case.pdf" + } + }, + { + "type": "NarrativeText", + "element_id": "a54d4813-a0bf-4d95-8695-4456b2e8cdef", + "text": "Hyperlipidaemia. Treatment with lipid-lowering medications was lower in PwMS, as compared with matched controls (PR = 0.63, 95% CI = 0.54, 0.74). This was particularly pronounced for men (women: PR = 0.71, 95% CI = 0.59, 0.87; men: PR = 0.41, 95% CI = 0.37, 0.62).", + "metadata": { + "coordinates": { + "points": [ + [310.3989562988281, 1659.569580078125], + [310.3989562988281, 1858.0975341796875], + [915.5438888888887, 1858.0975341796875], + [915.5438888888887, 1659.569580078125] + ], + "system": "PixelSpace", + "layout_width": 1654, + "layout_height": 2205 + }, + "filetype": "application/pdf", + "languages": ["eng"], + "page_number": 1, + "parent_id": "1b4d9f8d-b2ab-47cb-861b-078def265ad4", + "filename": "table-parse-case.pdf" + } + }, + { + "type": "NarrativeText", + "element_id": "43379e74-c084-4943-b491-8b5ef9fb94a1", + "text": "Differences in risk factor severity", + "metadata": { + "coordinates": { + "points": [ + [311.79931640625, 1930.5511474609375], + [311.79931640625, 1964.60888671875], + [690.9146118164062, 1964.60888671875], + [690.9146118164062, 1930.5511474609375] + ], + "system": "PixelSpace", + "layout_width": 1654, + "layout_height": 2205 + }, + "filetype": "application/pdf", + "languages": ["eng"], + "page_number": 1, + "parent_id": "1b4d9f8d-b2ab-47cb-861b-078def265ad4", + "filename": "table-parse-case.pdf" + } + }, + { + "type": "NarrativeText", + "element_id": "99d2471c-9527-4712-809b-d13f5781b1ac", + "text": "As compared with matched controls, after adjustment, PwMS had a 0.4-mm Hg lower systolic blood", + "metadata": { + "coordinates": { + "points": [ + [304.48089599609375, 1973.27734375], + [304.48089599609375, 2040.0789794921875], + [915.4605555555554, 2040.0789794921875], + [915.4605555555554, 1973.27734375] + ], + "system": "PixelSpace", + "layout_width": 1654, + "layout_height": 2205 + }, + "filetype": "application/pdf", + "languages": ["eng"], + "page_number": 1, + "parent_id": "1b4d9f8d-b2ab-47cb-861b-078def265ad4", + "filename": "table-parse-case.pdf" + } + }, + { + "type": "NarrativeText", + "element_id": "bef2fae2-6dc2-43dc-a6d5-ab2b9fa67094", + "text": "pressure at the index year. The magnitude was greater for men than women, considering that men had almost a 3-mm Hg lower blood pressure than matched con- trols (overall: coeff. = −0.37, 95% CI = −0.60, −0.13; women: −0.54, 95% CI = −0.96, −0.12; men: −2.81, 95% CI = −3.84, −1.77). The differences were greater when restricting analyses to only those with a diagno- sis of hypertension at baseline, as PwMS had a 3.3- mm Hg lower systolic blood pressure then matched controls (coeff. = −3.27, 95% CI = −5.04, −1.50); dif- ferences were confirmed in women but not in men (women: coeff. = −2.56, 95% CI = −3.84, −1.27; men: −0.27, 95% CI = 0.01, −2.56).", + "metadata": { + "coordinates": { + "points": [ + [941.5365600585938, 1483.3629150390625], + [941.5365600585938, 1913.772216796875], + [1542.4469444444444, 1913.772216796875], + [1542.4469444444444, 1483.3629150390625] + ], + "system": "PixelSpace", + "layout_width": 1654, + "layout_height": 2205 + }, + "filetype": "application/pdf", + "languages": ["eng"], + "page_number": 1, + "parent_id": "1b4d9f8d-b2ab-47cb-861b-078def265ad4", + "filename": "table-parse-case.pdf" + } + }, + { + "type": "NarrativeText", + "element_id": "a8295c74-bb0e-46f8-b831-d1b94f8fbb70", + "text": "In contrast, PwMS had higher levels of diastolic blood pressure at baseline, as compared with matched controls (coeff. = 0.29, 95% CI = 0.14, 0.43). However,", + "metadata": { + "coordinates": { + "points": [ + [936.9419555664062, 1938.433837890625], + [936.9419555664062, 2038.0758056640625], + [1542.3913888888887, 2038.0758056640625], + [1542.3913888888887, 1938.433837890625] + ], + "system": "PixelSpace", + "layout_width": 1654, + "layout_height": 2205 + }, + "filetype": "application/pdf", + "languages": ["eng"], + "page_number": 1, + "parent_id": "1b4d9f8d-b2ab-47cb-861b-078def265ad4", + "filename": "table-parse-case.pdf" + } + }, + { + "type": "PageNumber", + "element_id": "723c0cc6-8780-4492-9b1e-19e465863edf", + "text": "674", + "metadata": { + "coordinates": { + "points": [ + [69.10188293457031, 2094.861572265625], + [69.10188293457031, 2115.869722222222], + [102.46333333333334, 2115.869722222222], + [102.46333333333334, 2094.861572265625] + ], + "system": "PixelSpace", + "layout_width": 1654, + "layout_height": 2205 + }, + "filetype": "application/pdf", + "languages": ["eng"], + "page_number": 1, + "filename": "table-parse-case.pdf" + } + }, + { + "type": "Footer", + "element_id": "5e2acc2b-7692-4c26-9c45-ee9ab111a48e", + "text": "journals.sagepub.com/home/msj", + "metadata": { + "coordinates": { + "points": [ + [1297.8883056640625, 2094.94140625], + [1297.8883056640625, 2117.89599609375], + [1538.3895263671875, 2117.89599609375], + [1538.3895263671875, 2094.94140625] + ], + "system": "PixelSpace", + "layout_width": 1654, + "layout_height": 2205 + }, + "filetype": "application/pdf", + "languages": ["eng"], + "page_number": 1, + "filename": "table-parse-case.pdf" + } + } +] diff --git a/src/libs/unstructured/__tests__/fixtures/table-parse/fast-partition-basic-output.json b/src/libs/unstructured/__tests__/fixtures/table-parse/fast-partition-basic-output.json new file mode 100644 index 000000000000..20057978348f --- /dev/null +++ b/src/libs/unstructured/__tests__/fixtures/table-parse/fast-partition-basic-output.json @@ -0,0 +1,1865 @@ +{ + "compositeElements": [ + { + "type": "CompositeElement", + "element_id": "6d036d9b-d2f7-4f2d-90a4-27a82a6fd072", + "text": "Multiple Sclerosis Journal 29(6)\n\nTable 1. Characteristics of the study population.\n\nMale\n\nFemale\n\nOverall\n\nMS subjects\n\nControl subjects\n\np-value MS subjects Control subjects\n\np-value\n\nMS subjects\n\nControl subjects\n\np-value\n\nN Follow-up time (years) Female (%) Age (years) Ethnicity – white (%) Smoking status (%) Non-smoker Ex-smoker Current smoker eFI ratio Fit Mid frailty Moderate frailty Severe frailty Number of primary care visits in previous year Index of multiple deprivation (IMD; %)", + "metadata": { + "languages": ["eng"], + "page_number": 1, + "orig_elements": "eJzNmFtv2zYUx78KYaBAAoQC75ftacgaLAOSDUj3lBUBKVI2N1kydEniFv3uO1KkJm38kA1RVz/pf3Ro0T+fC4+uP65iGbex6m5SWP2AVkq76KggmFsWsOAqx9YEg4PUUhDHjY50dYJW29i54DoHaz6u8rpuQqpcF9tRl25f993NJqb1pgOLtjzThMKy6c5dCt0GbkgrM6YV3NjVqeqG1dfXTGbyBHGRyfcnaFJCZmRQVLGMP5OjL+hVu2+7uB1+x+/pPpZXO5fH1afxudW6d+txf9erWK1Xg/sOLDdVv/WxATsdHLt4P+x4ddGXXdqVEV3lZWzqNrXo17pvKlciZo/U8cCg2+/i4PtLdAG+AZZ/TVMKk3tBGPYFoVjAB9vCO5DeF1YoKxhfmibL9AnSdKI5KkMeFLUmU8/k6Pu6NN85Dyhphk43rnF5F5vUdilvUV2gbhNR2/Vhj3b1ri9dl+oqe4r3XerKeIiu0YxSohkuFDdYuOixN5FjLQgNSnGpiV2YLiUmsyfIzgQnaSfJdCaeS/L60eqA0EuQBRcKm8eAHYQmFkEq7LTT2ApnnZeSxlwuHZCKDDk7I5vlxIgZlZnn8vWRncXtS6ERzjmx1mDJrMLCighZrDT2IVJRiGitXxqaoOIptFlOlISgh+TrQ/vtNjauLF8YakpTSTTOhddQ+zjHrhAFZkoSp7l3Qftvk52U2KldTJqaSUue0QN69H/lDL1Cbe//ijls7SX0NJPS5IxAzLEh5lzARgSODaGkMAV0nMVjjqox9x7pTZqZuV2ooTU/0wvQO62rrqnLf4fQBMhbEQSGAsfgKJMTCMCgMCkKrRVXzJNi6VpHbcaeIJz1jIwLMXSEZ3oBhDt868o+oieBiP4T1hiM8MQKHOEKC0MNdF3mho4STKFcoblYGCvX5BHTgG3Scx5zqw/q5bC+iJzwNCeaQAm0ocBCKol9jAXWvLDKBOFzEr9NH/lMbtZzAEKZPqi/g4potMyVEQxTYwlURMOw44Ji5qMxPBBtHVmantJfpPOsP9OCOCMH9PdSEXNJJBRFiL0CJhGhoBgaQmDMy3keXeFFTsPCCCVUwKepO+s5VaVQB/X/nLoapgvljMJw4ANeylNsrHE4h7hjykfhFh81IKhgdKMcQu7hZDxIrmVmxuar2Tg1f6Uf3F+X2yU6q8uyvsP9DnVpG9HRPrqmPUYPR2p09OYY/bR+NL/tNlXKU7dHf/aMUI7uNql7cLva1n+nag3zn+v6djRd1hVuwRwb9PZ+vjrtmwb+DDTJeHaOmmFQRGepQxcpoKJxqYQnXNQwiQPwz4arCEfWR3k5/qJh7Nw1aeuaPcod3L5NbYJ+mCowx9tUw16GzaPzKsT7wXs7vw4IERbejkMqOjq/+PlH9OaLdwF/VDk8fl036UMM7wZin97/A5UVFyc=", + "filename": "table-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "CompositeElement", + "element_id": "28aa6227-cb1b-4ef7-9e40-0935c7af10b5", + "text": "3685 9.9 (6.1)\n\n46.3 (13.3) 92.3\n\n41.5 17.5 41.1\n\n0.02 (0.04) 97.2 2.8 0.0 0.0 6.9 (10.3)\n\n21,931 11.4 (6.5)\n\n<0.001\n\n46.3 (13.3) 93.5\n\n0.852 0.013\n\n53.8 14.7 31.6 0.01 (0.03) <0.001 98.3 1.6 0.0 0.0 2.2 (5.0)\n\n<0.001\n\n<0.001\n\n<0.001\n\n8566 10.4 (6.3)\n\n44.3 (13.3) 91.5\n\n49.5 13.9 36.6\n\n0.03 (0.04) 95.8 4.0 0.2 0.0 8.2 (11.5)\n\n50,640 11.5 (6.5)\n\n<0.001\n\n44.3 (13.3) 94.1\n\n0.907 <0.001\n\n60.0 11.6 28.5 0.02 (0.04) <0.001 97.1 2.8 0.1 0.0 3.2 (6.1)\n\n<0.001\n\n<0.001\n\n<0.001\n\n12,251 10.3 (6.3)", + "metadata": { + "languages": ["eng"], + "page_number": 1, + "orig_elements": "eJzNWdtqG0kU/JVBTw64hz7n9OnLsh+xsLtPJoS+OoL4QqKwyYb99z090siSnIfIeIQNkl0zPVgqVZ+qGt38WNVP9a7ebz6sy+q3YcWhQPGFVUwBlYklqpRLU4xJE3Co1tTV9bC6qxs5t4lyzY9Vfnj4XNb3cVO/TPhT/P7wdfPhY13fftzIERdodBrkst2Zf9Zl81FOcOARnZUTjw/r+02/+uYGtB/D9QDkRnx/Pewx+9FNmMJof4Kn9XJg9eX7l0296+/mj/W3+unPx5jr6r/pv9/ffo2306u8WdX721Vf/ihHPtx/vUv1sxyHvnBTv/XXvSLreQhjGK7sCO/6+958f6z9zN/3Wd7u7cPn9b+1/NWXy3WnZHpfcgI0ClzIylBE5ckbpUuwNrZWLLcLken5iEzUdkeeERaf4+361yXT2JGGK6CR3g0BRzqbTozZmwBVYYpJ6KxBhWSLYgM5ZnSmMl6GTiQ6ptPOWkUz0XmKp/WvTCeMPICTJ/kLziZTQ82l1qZsyFWZnKpKOgijxSWy7CJiWJzMMGohx+md9raYjIhjwiysPcfb9a9Lph41DlfybESb8tkNOPpB4PSwfQCAFt2ezXKUnR+dTIBQWlSmBKdSyloFV2TLxaBLKUuzbO3oD8fpDs/jEzV11p/hBcYpwnUgGABG0ycqn89nqo0DVlRB9Cl8ltDtySnTiYRavbFL2xNC6CoEE3Z87TCH0UzYuC2fJ3ha/7p8/i7q1OdvfbSQfY5W2cRFSNRJeeNARQceZHQ5R4t7vAxIf2hLW7y3IdSue/opXtyWaOSz6QwuFsxGq2xMn6TBquC1Vxl8qh4jt6KX1iTaJ9fudG3xE31bDZ7iJejUo2fsYxPON3ityRGjU1lHmZaMWUXUoGorBn3LkRZnchbi3uC3eO9BO+ZO8RIGL27nZWyMbiAY7UTpZFGi0+3GH4IX6e7OTQ8U57riUZ8/WIuXORYaKuYqIsaqla+tKU2EtnCLkZaOA32QklBp+Gmwdsx8NEif4Wn9mxis4CA0HZLKqCXvOyu+rw2phKaIdGOQ35chkbTZTYIdlvkWZtLgJ3ha/zZI1BEwO1TV6ybGXouKuRSFlWq2qRSOF1IiyaamQxJl0x+Rdoqn9W+DRKoUNHiVihOLZy2eZMTsGUuTmGRD83FpEq3upO1z54z3OTNIAvwJXiB3erZ2kAA/pc6XpPgkRs7EqkXPyqRKIslmVW4keTbqLsrF2YSJvb3Db/He0UlDl+ApXiQwmYPABC8ITFARKlSjjGxo2eFWoidiU5lSDZ60rXV5cW7pm21+xnNvRzft6Gd4iR4feo+XcTyQHe3ZZNbUOHkqqvkijYhJyqVxoSf6XKxh0GguQKY56PE7vM9IpLmH91O8UI+nfY9nyU9mSkZTIB18T0dSPl/QO1k6ZygUFPegb0xGlbh50W2gppkL09K3nkiioD2YpzOe5yexPrpNOuMF5inra2t07/H8wh4ftEti7bL7g5ekj7709plVsMyBqNmY3NJ8ukml+x4/47m3UwjTBD3Fb6fHu9IoWdu3fiCxJcmcXmaoKk0cPlb5iNLyouSnXj6Jko96O/Ww/hwvbkvmBXdEa4GATRuFpnLv8ahiKlWRs66RS/JzKU3u6dzifvdjr0F8jpfp8bJHhxcqU5ck2xiKomr6HicJohGLgqabb2Cbg6UDU1eiO3D4HX4yoS11p3gJh7fdfKD3dPQyMQ/vNc9FXtLF7pYzTFZF3ape9J1TtJSjcVWF0L/Aq2RU9ADKJummmWuQRHAZFe+L/Izn4j5TfYrfTpGv3gO23FkzUuRtL1KeRMm1YjZQEqR8ARL5oMjPeC7us35P8dsp8hkKmyKlE3yQDmpcVJ6BVSWHOkdX0C5uTzvS5iI/47m4HwyBI/x2inyFVhigqmZ8kkkqmTM0AiW+75hKiU2nhUk0EjQPi/yM56BpzPH38TNeIHgCXiNDr/L0S1X+/f8DCFQe", + "filename": "table-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "CompositeElement", + "element_id": "34a20020-2aa7-42f1-9f83-e6193f54260d", + "text": "69.9 44.9 (13.3) 93.9\n\n47.1 15 37.9\n\n0.03 (0.04) 96.2 3.7 0.1 0.0 7.8 (11.2)\n\n72,572 11.5 (6.5)\n\n<0.001\n\n69.8 44.9 (13.3) 91.2\n\n0.752 0.727 <0.001\n\n58.1 12.5 29.4 0.02 (0.04) <0.001 97.4 2.5 0.1 0.0 2.9 (5.9)\n\n<0.001\n\n<0.001\n\n<0.001\n\n1Q – least deprived\n\n2Q 3Q 4Q\n\n5Q – most deprived Missing data\n\n13.7\n\n18.5 17.6 20.2 20.6\n\n9.3\n\n13.7\n\n18.4 17.6 20.3 20.6\n\n9.4\n\n1.000\n\n14.6\n\n18.5 17.9 18.8 20.3\n\n9.8\n\n14.6\n\n18.5 17.9 18.8 20.3\n\n9.9\n\n1.000\n\n14.4\n\n18.5 17.8 19.2 20.4\n\n9.7\n\n14.4\n\n18.5 17.8 19.2 20.4", + "metadata": { + "languages": ["eng"], + "page_number": 1, + "orig_elements": "eJzNmttu48gRhl+F0NUsMEV0V1cfKthX2CCDbK4mi0EfPQJ8GNiaZCeLvHuqKVKWZS8QGaZgGJb9U01b/FR/HVr8/MemXteberv7si2bvwwbHzVZzhGKSgaIjIWoSwWVHBUbbLWhbT4Om5u6iyXuopzzxybf3d2X7W3c1YdJX8cfd993X77W7dXXnRzxbEavtJw2P/Pvbdl9lScs2xG9kye+3W1vd/3sz59J02g+Dtrj6H/7OCwalZu1pVE/1/v1cmDz8ONhV2/61fxt+3u9/vu3mOvmv9N/v736Hq+mV/l5U2+vNn35Nzny5fb7Tar3clz3hbv6e3/dG8cjD0Ty8EGb0fw0yIVwv/zdj2+1L/jHbZarvrq73/6nll/7WXL6KdNqXWtcNTSODsgEBakYAmWUt14VS/FCTNGYEY+ZOj9royamp3pa/7ZMyY960HYw/hUovWmlFh3BcGIJT1TA1kWwTBh1DBlZXwAlCRqvHsNTtCEczT4cw+ie6/36t0WpRmWGD/JIEpluxEGuY5A3Tr7V4McgUatH/OlsyoZ0CJQ9RIEtlOUhptigBC/B2zKWWtem3CNRTG2WgJy1wJyoW4WjfUFP69+WsseP1uMgKO3wwY32fJ4lm8gSntBCFp5KskDi6sE2o1pJIVNbO2qt5h6lmnjmNWsrPyZNM98TPa1/W54/S3QqfT7E5LQyQUP2KnTrawhJsmhExQFdizWoCwXloTLt9aESWeVH9VyvVJnC08okTj+bKSXmmEhByFaYGueFaQnQsmflEofI+QKBaY+YzhoF3XEgnuo1mEqCtii506MfXhmkilxpyAg2SGhKGpVSn3wGY6zTofqk/SUy55NSv9eHejQDPNVrlHpJzlLqJTEPKGmlVyVcytWe78Dyrg59wVK1sEe0Hfn8JJurNTX6CAqrAmkHFETHETRbSt4qLY3WZWIZyT6NZWufxvKpnta/iyRrNGqpqQi+cgLyWCE2lSFnLRiwZa58GYhG0T5+Fy1pjo/j91RP698FxFbRVSVDk2El5Z59gRSLtP9RB82NkiTbC0EUU5tjiGL6AzTzgp7WvwuI5Ev1RVnwLmSgSBkiBwvWG2zKFk9l7Z5JeskgTDzvGc6Swxi69G4ieiKnxW8LUH8a/vkdlTbDdY0Pu6HUb/fbf9VyjPTX7e66vliQjK/JYYGSWSq8awxcqIAig4mjtymsnRUxdG6k5nozS+Pm8ehFOS1+W4z4aTCfBvr0f2FLSSlviEEFJXOmqQaiFBJQMreXnIsE4drRt3DifXzNUqZI22WY9jxO5bT4jWv4Ifpu7o6Cb/hl+/Cwvb0apqs/QvrXeH8fd7Lkz4wdVEbr2AMqaebJYZQRXixekgya0sZHLnFltFpx78sPzl50CLNGmqx+qtcwt7zus3NjyOyyvCfgWo0yCknvHltOUIvBkBI6dmtvKM3IDq5eNM3pcEb2TK9gbB2kf9R+dDIkjNgf3NlEbWzSrKP4HX0FqpqAsW97Fh0EtcxEtqxNVEJBDpHTe0sverH4QvBUT+vflqiE+fntt3JZqrIH9kk6R2ssMEmIKpl8LFJTKq09nmuZdPjY1rM+2DjIX3tBvxdbI8kkEFyFrK0DaqgFoXPAplZHJkolX7vozMgebT3rg433yJ7pdWxNB1ubV9o6WLIyBQL6bGSckXYyFJuBc1QCVbWk1h5n+kaFPbb1rA82ngme6lVsTedvaIRmU6sBXMEGVEgISuMIaLPlqiPXsnZiRHRTDCKOauqEZm30rPsnCi/oaf0bx6SMMup8X8vIl5pHaDl6oGw0RCehWCmVVqp0QH7tco0STnSUGhe9pEL0+yH6VK+RGukVRg6pRa9SBuU8SRgmaRqLkZFQZSktDivptffVZmSPc8ysl1Q4I3umV+x4eJDfwpQfz9+kYPZkBWaz/TMeZRwE06TYcP9AkpNtq2/9onNTz7ikxkUvqXAheKpXSY3hFbZ26FOMkBxJFy4lpRcXA4UoRvE017x2TBptHzuYvkUx68XGRnKifUG/F1ujMt6pUqCVPmbrjCBOp77JY5p8+VTNBRAeb08serHxjOyZfqe2DgmTGCaDxSbTdU0IrEgGGStRKqQbFr820f7Cj2y96MXGC8FTvYqtz7/FQGxbWJNM0yp1W+cCiVHyZPMmtugw+bU7nu5PddTxLHrpcAzzRPRUv5uOh7M1qbKXPkfLOB2K66mRIVqUsRZLUZQuc5vGITUuekmF/Q4XfEGvkxrPb7xD38ZJvVUkI6nRJwWsxdIJKbZcbMFAl0F4SI2LXlLhjOyZXjE1hkHzfo/nfKLa1exyn6xL7yFNTtBvZgHna7bSXMaGa2+Fk+YnHc+il1S4EDzVq6TG8zcotPLVRInEoLHffZUaBOkjwSbtmnfFmfVtPX+afbD1rA82lvFZv6Dfi61lVmFbxNHVaup7PAIzZIYWg9Lekam49o7EjOzR1rM+2HiP7Jl+F7b+7X/wGDAN", + "filename": "table-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "CompositeElement", + "element_id": "678516f2-fbf5-4ee3-9022-d84e79c6b764", + "text": "9.7\n\n1.000\n\nIndividuals were classified as fit, if the eFI score was below 0.12; mildly frail, if the score was between 0.12 and 0.24; moderately frail, if the score was between 0.24 and 0.36; severely frail, if the score was 0.36 and above. Differences between groups were assessed employing Chi-square test, Student’s t-test and the Kruskal–Wallis test, as appropriate.", + "metadata": { + "languages": ["eng"], + "page_number": 1, + "orig_elements": "eJy1kt1q3DAQhV9F+HplJFmyVs1lSyEUSiEtvdiGRbbGXlH5p7a8m23ou3fsOGloQ2khAV/4zJzj0XzW7jaBAA20ce9d8ookYJS0mcwoA1FR6TJDizJXdCsE59IxpZhINiRpIFpno8XMbVJ23eB8ayOMiw723E1xfwBfHyJWtMlSzTjG1s7Ju3jAhjIqFTrHRt/5Ns7p3U5qnpoNkTlP1fWGPGjNVr3NUv6EXvxYSMbzGKGZt/ngbyBc9baE5Mcyva0nWy+n3CXQ1sls77Gyb6emgAHrfDZGuJnPnZhUz8vGcw+z/NSWuGPdDf47uI+zB82/ExR5KRzPKpox0FSq0lFjHKeOK7XNclFURr4wQSX0QkSIlM2E7nXGVy11mj2hF//zEsQJjP03Q11Ko8vMUqsko1IgyG3uGC2MLFhRGu20eWGGYptqRLJdEd5Jxcw9MYz8qe/sz0vwsnX+6N1kw0hOMAApgx1HX3lwxI6k8nFDfEXiAQi8vSRj2aHnhJ0CQnciLOXigjQ+uHAm1WB9eLA/tsYTQLuYiW0dvgiJqc7BgDz/KSnkmszyCzLCEY/6l9xsW/y26I6Qkje+qjDRlvDrm/XQTf26NK4M+DgCTR+6s29r8vrg6fhtstjFX44UruLk8A59mQTjZiSRzuVlyDz73TCNX21YutlnG4If1xwex/b90PWDx2XTx7f1vR0QgD/C3U29/gnwtZI6", + "filename": "table-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "CompositeElement", + "element_id": "b030baad-7f2d-4bff-919e-c2e5e86a55e4", + "text": "was even lower in men (PR = 0.27, 95% CI = 0.18, 0.39) than in women (PR = 0.38, 95% CI = 0.30, 0.49; Figure 1), but the difference was not statistically sig- nificant (p = 0.097).\n\nHyperlipidaemia. Treatment with lipid-lowering medications was lower in PwMS, as compared with matched controls (PR = 0.63, 95% CI = 0.54, 0.74). This was particularly pronounced for men (women: PR = 0.71, 95% CI = 0.59, 0.87; men: PR = 0.41, 95% CI = 0.37, 0.62).\n\nDifferences in risk factor severity", + "metadata": { + "languages": ["eng"], + "page_number": 1, + "orig_elements": "eJy9VMFq3DAQ/ZXBUMiCbWxLtqyEnlpKe2gJTW5LCFp5bIvakpG12Syh/17JG5Y47aUQcjG8mTej0bxnbZ8iHHBE7e5VE11CRDIpypLQpChamtCyLhOBnCYlZrTIZI2F4FEM0YhONMIJX/MUSWNso7RwOC94EEezd/c9qq53PsI4SVmW+7LnzEE1rveJkpdpwSqfmIzSLlRvt3lOUhpDSao0v4vhjOvihEnB0+ofeOH7QDQfZ4djuM21esThZhISo9/L6brbi26Zchuh7qJAn3zkXu/HHVofzwPR4WOYOzqIGfABNQzmgBaUBr8quLj+CR8h85PHwMsP8OnbAvM69l/CN+B6oQP5YF7SSb2ikyzQKb+CL6rbW4R8E8Nu73w1QqPaFi1qiRBm0MbB7IRTs1NSDMMRZtUloFXroXZwMS0tM842aVDHHScM8/8Q1vqqB7wNF/I3ey13WzWEE9omjEqW0LpmCS+kTHLKeF5nhNKqfie5eb2Su6rqlbyv8Yn/tnJ/9Wuzg5pUI3BUIoVbi8KFdcFBuR6WVLJ4QenOe6Hx63fK6HlR6WyS68P3mxh8RJpxEhabU/konOw9kEY7a4b57IyKrJxR0uAMRjd+gF6devs2Xvr9IKwXf7JGm703RwOtsSdPLl67hOeOLF935KFjza7gJYmuSYQFUlX8p4XIrqBtQ2TStmWZULYrEt7kLNllu5xKzAXSd7JQxdcvBsuecUGrlP+NT/y3tdDn8487BydYNf+CVkjnZZr9S2KVO77c7q1ygz/p7g/eqZyU", + "filename": "table-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "CompositeElement", + "element_id": "6d8e9e3e-670c-43e4-8607-3760ba9457dc", + "text": "As compared with matched controls, after adjustment, PwMS had a 0.4-mm Hg lower systolic blood", + "metadata": { + "languages": ["eng"], + "page_number": 1, + "orig_elements": "eJxtUD1vgzAQ/Ssnz4AwECjdunVpFSndUBRd8AVc2RjBURJF+e+1adWp4/vSe3fNXZAhSwOftBLPIPJM1W2a1nF+oSouLnURY0UqLlJZlbvinGblk4hAWGJUyOgzd9E6Nyk9INO8YYM3t/CpJ9317JmqzpMqlT72q6xace+FXb1Lsqr0wuj0wCHdNFLmSRFBJWUijxH84Tz/wXlWJ+U/ePN7Qsy3mcmGa/b6SuYwYkvisbUP3YLdtrIRNHQi2EfPnIbFnmnyvAxGpmvYLV5maJ0dcSIFq+YeLHLbe9C6gSdn5gjwwjQBqs9l5vDHCPbr2wF6VICQJkVsLbx2YNzqbWGZM7qFs3FOhT/ybaTQ9I7ThKy/6CNUP47fBdN7tA==", + "filename": "table-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "CompositeElement", + "element_id": "b160fe7e-942a-4e1d-800d-40ffd331f8cf", + "text": "pressure at the index year. The magnitude was greater for men than women, considering that men had almost a 3-mm Hg lower blood pressure than matched con- trols (overall: coeff. = −0.37, 95% CI = −0.60, −0.13; women: −0.54, 95% CI = −0.96, −0.12; men: −2.81, 95% CI = −3.84, −1.77). The differences were greater when restricting analyses to only those with a diagno- sis of hypertension at baseline, as PwMS had a 3.3- mm Hg lower systolic blood pressure then matched controls (coeff. = −3.27, 95% CI", + "metadata": { + "languages": ["eng"], + "page_number": 1, + "orig_elements": "eJyFk1Fr2zAQx7/KYRi0EAvbiu04YU972R42Cu1bVoJsnW2BLQVJbhpKv/tOSZolzWBvur/uf9L9dFq/RTjgiNpvlIyWEDVl1aQpT+KkKRfxPEUe1xxlXLdFUYuqyKQU0QyiEb2QwgvyvEWNMVYqLTy6QzyIvZn8pkfV9Z6UsuKsTFKynXZ2SvqeNvIqZ1lZ0MbWKO2De73mvGKUm/M5S59n8BEXi8UxzvOc8dv4mE9C5PbO4xi6eVCvODxuRYPR++F03U2iO9xyHaHuopC+JWWjp7FGS3oaEj2+hntHW4vOTRZBePA9gtISX2GPwjJ4ongUnVZ+kgg74aCzSAgstMYCISWH0LAztJxBY7RTEq3SXdD9IaEXEsQwGudBAI/HEb53MJgd1agHYySczz+UGoVvepShVgzemsHBnXlBK4ZhSSK2LYOv8HvKsjRLGC9nUOVf4NuPC7FIZud1ylfH2y3PUj7/h6cqLjzZCi4cGVukNw7OFvMPR8rK8v7ISqq2RYu6QQfUIZ5x7XpCQY16qxof+Agthr2jNG/A6GFP3RtHiJXviZNUBN3E4JQD00K/36L1SHSNDs9UC4eD0jgDepGH3c/HI2XgjMdwSThMiRlUc4sar1CfQH/iy2lubzrPWXLReZ7cr0LXMVz3TTVbZUeqrk7jAfXkQRsfhBDenZ7l05kZy4v/0M7Kq/dJrm+ZsPAJ/xa7Z+EreyIYhv2XsFZ49YJPYfrfn/8ArEM8OA==", + "filename": "table-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "CompositeElement", + "element_id": "234796ba-d3ad-4dd0-81ce-46e2ad6f4f19", + "text": "= −5.04, −1.50); dif- ferences were confirmed in women but not in men (women: coeff. = −2.56, 95% CI = −3.84, −1.27; men: −0.27, 95% CI = 0.01, −2.56).", + "metadata": { + "languages": ["eng"], + "page_number": 1, + "orig_elements": "eJyFk1Fr2zAQx7/KYRi0EAvbiu04YU972R42Cu1bVoJsnW2BLQVJbhpKv/tOSZolzWBvur/uf9L9dFq/RTjgiNpvlIyWEDVl1aQpT+KkKRfxPEUe1xxlXLdFUYuqyKQU0QyiEb2QwgvyvEWNMVYqLTy6QzyIvZn8pkfV9Z6UsuKsTFKynXZ2SvqeNvIqZ1lZ0MbWKO2De73mvGKUm/M5S59n8BEXi8UxzvOc8dv4mE9C5PbO4xi6eVCvODxuRYPR++F03U2iO9xyHaHuopC+JWWjp7FGS3oaEj2+hntHW4vOTRZBePA9gtISX2GPwjJ4ongUnVZ+kgg74aCzSAgstMYCISWH0LAztJxBY7RTEq3SXdD9IaEXEsQwGudBAI/HEb53MJgd1agHYySczz+UGoVvepShVgzemsHBnXlBK4ZhSSK2LYOv8HvKsjRLGC9nUOVf4NuPC7FIZud1ylfH2y3PUj7/h6cqLjzZCi4cGVukNw7OFvMPR8rK8v7ISqq2RYu6QQfUIZ5x7XpCQY16qxof+Agthr2jNG/A6GFP3RtHiJXviZNUBN3E4JQD00K/36L1SHSNDs9UC4eD0jgDepGH3c/HI2XgjMdwSThMiRlUc4sar1CfQH/iy2lubzrPWXLReZ7cr0LXMVz3TTVbZUeqrk7jAfXkQRsfhBDenZ7l05kZy4v/0M7Kq/dJrm+ZsPAJ/xa7Z+EreyIYhv2XsFZ49YJPYfrfn/8ArEM8OA==", + "is_continuation": true, + "filename": "table-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "CompositeElement", + "element_id": "10c5db22-3f4f-46a9-b058-10c8696e03f8", + "text": "In contrast, PwMS had higher levels of diastolic blood pressure at baseline, as compared with matched controls (coeff. = 0.29, 95% CI = 0.14, 0.43). However,\n\n674\n\njournals.sagepub.com/home/msj", + "metadata": { + "languages": ["eng"], + "page_number": 1, + "orig_elements": "eJy1U11r3DAQ/CuLodCCrbuz9XEK9KlQmoeWQPp2hEO21mentmUkOZcQ8t+7dnIQktBCaV5sz+6stDuz3t0n2GGPQ9y3NjmDZFPnojQ1zwxWNuMl6mybK5FxVRZKcSlqVScpJD1GY000VHOfVM552w4mYlhwZ+7cFPcNtocmUkTpgqn1hsqeMsfWxoYSQguWK0mJ0bVDnKt3u6LQjLhS0+sqhRNWRfGIhRCseI0f+RRIwl2I2M/TXLS32F2OpsLkYbl9OEzmsHS5S3A4JDN9pMh+mPoSPcU3MzHi7dx3cj5A5YboTYgpXBy/X0JjLDQ0Fnro8Aa7AK4G2xLBdW0FZeechdFjCJNHMBFKE7BrB0zBBDqsH41HC8c2NtCbWDUEliscHfWxcljXDD7DmuU6BS0+wJfzBW54Sk9efGLwzR3pZp/ONsS7EedGfxjvTWxv8OfcOY3w0lexrbWqDc+kKWXGOdaZRlVludmatS5yVUv5zr7mggmyjdzKZ9ueoNwwtbgsmX4NF/L/9VQq/ly5r85FIr0hGddYSZvrrOIV/QA5L7PSmiLT1kor1nxD6XeWjMstk880O+GTSkLkbPsG/lfZaFF/LZH7JETjSYnB4i0F1s8EvHaTHwytK4NAJ4xTSV+02bCCxvUIq1mUyXczt4lxDGer1amGPVUw4q9m9qoP18nDXyz7c/UbZl79Bp5NcoE=", + "filename": "table-parse.pdf", + "filetype": "application/pdf" + } + } + ], + "originElements": [ + { + "element_id": "67aea140-392d-436c-98d8-d57540a387e1", + "metadata": { + "coordinates": { + "layout_height": 793.701, + "layout_width": 595.276, + "points": [ + [25.5, 34.5], + [25.5, 45], + [162.3, 45], + [162.3, 34.5] + ], + "system": "PixelSpace" + }, + "languages": ["eng"], + "page_number": 1 + }, + "text": "Multiple Sclerosis Journal 29(6)", + "type": "Header", + "compositeId": "6d036d9b-d2f7-4f2d-90a4-27a82a6fd072" + }, + { + "element_id": "548cb402-bf01-4444-9fba-bfbbf9469423", + "metadata": { + "coordinates": { + "layout_height": 793.701, + "layout_width": 595.276, + "points": [ + [22.7, 71.5], + [22.7, 80.5], + [198.6, 80.5], + [198.6, 71.5] + ], + "system": "PixelSpace" + }, + "languages": ["eng"], + "page_number": 1 + }, + "text": "Table 1. Characteristics of the study population.", + "type": "Title", + "compositeId": "6d036d9b-d2f7-4f2d-90a4-27a82a6fd072" + }, + { + "element_id": "87211072-f638-4aeb-b8e3-7401d6635709", + "metadata": { + "coordinates": { + "layout_height": 793.701, + "layout_width": 595.276, + "points": [ + [108.9, 90.5], + [108.9, 99.5], + [127.4, 99.5], + [127.4, 90.5] + ], + "system": "PixelSpace" + }, + "languages": ["eng"], + "page_number": 1 + }, + "text": "Male", + "type": "Title", + "compositeId": "6d036d9b-d2f7-4f2d-90a4-27a82a6fd072" + }, + { + "element_id": "dadf9ced-a548-4d56-a7a7-94a9ab551ec5", + "metadata": { + "coordinates": { + "layout_height": 793.701, + "layout_width": 595.276, + "points": [ + [260.3, 90.5], + [260.3, 99.5], + [286.8, 99.5], + [286.8, 90.5] + ], + "system": "PixelSpace" + }, + "languages": ["eng"], + "page_number": 1 + }, + "text": "Female", + "type": "Title", + "compositeId": "6d036d9b-d2f7-4f2d-90a4-27a82a6fd072" + }, + { + "element_id": "03330998-5296-494e-9f67-bde14f4e99b5", + "metadata": { + "coordinates": { + "layout_height": 793.701, + "layout_width": 595.276, + "points": [ + [414.3, 90.5], + [414.3, 99.5], + [441.3, 99.5], + [441.3, 90.5] + ], + "system": "PixelSpace" + }, + "languages": ["eng"], + "page_number": 1 + }, + "text": "Overall", + "type": "Title", + "compositeId": "6d036d9b-d2f7-4f2d-90a4-27a82a6fd072" + }, + { + "element_id": "da671507-c4b7-4433-af4f-2650a73bad7b", + "metadata": { + "coordinates": { + "layout_height": 793.701, + "layout_width": 595.276, + "points": [ + [108.9, 109], + [108.9, 118], + [153.1, 118], + [153.1, 109] + ], + "system": "PixelSpace" + }, + "languages": ["eng"], + "page_number": 1 + }, + "text": "MS subjects", + "type": "Title", + "compositeId": "6d036d9b-d2f7-4f2d-90a4-27a82a6fd072" + }, + { + "element_id": "72558c20-5226-49ad-84d3-8010f8feadb5", + "metadata": { + "coordinates": { + "layout_height": 793.701, + "layout_width": 595.276, + "points": [ + [166.8, 109], + [166.8, 128.5], + [196.5, 128.5], + [196.5, 109] + ], + "system": "PixelSpace" + }, + "languages": ["eng"], + "page_number": 1 + }, + "text": "Control subjects", + "type": "Title", + "compositeId": "6d036d9b-d2f7-4f2d-90a4-27a82a6fd072" + }, + { + "element_id": "8d3334d4-7a72-43c0-afd6-0ff776362b0f", + "metadata": { + "coordinates": { + "layout_height": 793.701, + "layout_width": 595.276, + "points": [ + [219.2, 109], + [219.2, 128.5], + [344.4, 128.5], + [344.4, 109] + ], + "system": "PixelSpace" + }, + "languages": ["eng"], + "page_number": 1 + }, + "text": "p-value MS subjects Control subjects", + "type": "Title", + "compositeId": "6d036d9b-d2f7-4f2d-90a4-27a82a6fd072" + }, + { + "element_id": "ed84b094-eed8-4818-b82a-a54d8f6af734", + "metadata": { + "coordinates": { + "layout_height": 793.701, + "layout_width": 595.276, + "points": [ + [370.4, 109], + [370.4, 118], + [397.4, 118], + [397.4, 109] + ], + "system": "PixelSpace" + }, + "languages": ["eng"], + "page_number": 1 + }, + "text": "p-value", + "type": "Title", + "compositeId": "6d036d9b-d2f7-4f2d-90a4-27a82a6fd072" + }, + { + "element_id": "4b1c070f-29df-4565-beef-73f968d4bc0e", + "metadata": { + "coordinates": { + "layout_height": 793.701, + "layout_width": 595.276, + "points": [ + [414.3, 109], + [414.3, 128.5], + [443.3, 128.5], + [443.3, 109] + ], + "system": "PixelSpace" + }, + "languages": ["eng"], + "page_number": 1 + }, + "text": "MS subjects", + "type": "Title", + "compositeId": "6d036d9b-d2f7-4f2d-90a4-27a82a6fd072" + }, + { + "element_id": "875c6842-1890-4982-a341-2be883d079a0", + "metadata": { + "coordinates": { + "layout_height": 793.701, + "layout_width": 595.276, + "points": [ + [467.2, 109], + [467.2, 128.5], + [497, 128.5], + [497, 109] + ], + "system": "PixelSpace" + }, + "languages": ["eng"], + "page_number": 1 + }, + "text": "Control subjects", + "type": "Title", + "compositeId": "6d036d9b-d2f7-4f2d-90a4-27a82a6fd072" + }, + { + "element_id": "c505d33f-4f44-46d6-800d-4c3ceafb4c1d", + "metadata": { + "coordinates": { + "layout_height": 793.701, + "layout_width": 595.276, + "points": [ + [519.4, 109], + [519.4, 118], + [546.4, 118], + [546.4, 109] + ], + "system": "PixelSpace" + }, + "languages": ["eng"], + "page_number": 1 + }, + "text": "p-value", + "type": "Title", + "compositeId": "6d036d9b-d2f7-4f2d-90a4-27a82a6fd072" + }, + { + "element_id": "74ae6a86-14fd-46b1-898a-cd0726be4a09", + "metadata": { + "coordinates": { + "layout_height": 793.701, + "layout_width": 595.276, + "points": [ + [28.7, 137.2], + [28.7, 375.8], + [172.5, 375.8], + [172.5, 137.2] + ], + "system": "PixelSpace" + }, + "languages": ["eng"], + "page_number": 1 + }, + "text": "N Follow-up time (years) Female (%) Age (years) Ethnicity – white (%) Smoking status (%) Non-smoker Ex-smoker Current smoker eFI ratio Fit Mid frailty Moderate frailty Severe frailty Number of primary care visits in previous year Index of multiple deprivation (IMD; %)", + "type": "UncategorizedText", + "compositeId": "6d036d9b-d2f7-4f2d-90a4-27a82a6fd072" + }, + { + "element_id": "59d1d8d5-ab92-4ada-bcdf-52b03159e64e", + "metadata": { + "coordinates": { + "layout_height": 793.701, + "layout_width": 595.276, + "points": [ + [108.9, 137.2], + [108.9, 158.7], + [139.6, 158.7], + [139.6, 137.2] + ], + "system": "PixelSpace" + }, + "languages": ["eng"], + "page_number": 1 + }, + "text": "3685 9.9 (6.1)", + "type": "UncategorizedText", + "compositeId": "28aa6227-cb1b-4ef7-9e40-0935c7af10b5" + }, + { + "element_id": "88dcb124-179c-43a2-8384-0d966affd65f", + "metadata": { + "coordinates": { + "layout_height": 793.701, + "layout_width": 595.276, + "points": [ + [108.9, 185.2], + [108.9, 206.7], + [148.7, 206.7], + [148.7, 185.2] + ], + "system": "PixelSpace" + }, + "languages": ["eng"], + "page_number": 1 + }, + "text": "46.3 (13.3) 92.3", + "type": "UncategorizedText", + "compositeId": "28aa6227-cb1b-4ef7-9e40-0935c7af10b5" + }, + { + "element_id": "2ac8491e-2bab-43e9-9b6d-541cac274e52", + "metadata": { + "coordinates": { + "layout_height": 793.701, + "layout_width": 595.276, + "points": [ + [108.9, 233.2], + [108.9, 267.2], + [124.7, 267.2], + [124.7, 233.2] + ], + "system": "PixelSpace" + }, + "languages": ["eng"], + "page_number": 1 + }, + "text": "41.5 17.5 41.1", + "type": "UncategorizedText", + "compositeId": "28aa6227-cb1b-4ef7-9e40-0935c7af10b5" + }, + { + "element_id": "01ecdeef-69ce-4cbe-b099-9d7b3657a229", + "metadata": { + "coordinates": { + "layout_height": 793.701, + "layout_width": 595.276, + "points": [ + [109, 270.7], + [109, 342.3], + [153.2, 342.3], + [153.2, 270.7] + ], + "system": "PixelSpace" + }, + "languages": ["eng"], + "page_number": 1 + }, + "text": "0.02 (0.04) 97.2 2.8 0.0 0.0 6.9 (10.3)", + "type": "UncategorizedText", + "compositeId": "28aa6227-cb1b-4ef7-9e40-0935c7af10b5" + }, + { + "element_id": "a179a724-9dfa-4d97-bbc0-97d206a90ddd", + "metadata": { + "coordinates": { + "layout_height": 793.701, + "layout_width": 595.276, + "points": [ + [166.8, 137.2], + [166.8, 158.7], + [203, 158.7], + [203, 137.2] + ], + "system": "PixelSpace" + }, + "languages": ["eng"], + "page_number": 1 + }, + "text": "21,931 11.4 (6.5)", + "type": "UncategorizedText", + "compositeId": "28aa6227-cb1b-4ef7-9e40-0935c7af10b5" + }, + { + "element_id": "bef592e2-9a22-4dd9-bcd7-40ddd1ee846e", + "metadata": { + "coordinates": { + "layout_height": 793.701, + "layout_width": 595.276, + "points": [ + [219.2, 149.7], + [219.2, 159.4], + [247, 159.4], + [247, 149.7] + ], + "system": "PixelSpace" + }, + "languages": ["eng"], + "page_number": 1 + }, + "text": "<0.001", + "type": "UncategorizedText", + "compositeId": "28aa6227-cb1b-4ef7-9e40-0935c7af10b5" + }, + { + "element_id": "261c8ca6-6b5d-4d0b-8471-a7181267773e", + "metadata": { + "coordinates": { + "layout_height": 793.701, + "layout_width": 595.276, + "points": [ + [167.8, 185.2], + [167.8, 206.7], + [207.6, 206.7], + [207.6, 185.2] + ], + "system": "PixelSpace" + }, + "languages": ["eng"], + "page_number": 1 + }, + "text": "46.3 (13.3) 93.5", + "type": "UncategorizedText", + "compositeId": "28aa6227-cb1b-4ef7-9e40-0935c7af10b5" + }, + { + "element_id": "97ad2c40-c44e-4c96-9808-c18be82a5fd0", + "metadata": { + "coordinates": { + "layout_height": 793.701, + "layout_width": 595.276, + "points": [ + [226.7, 185.2], + [226.7, 206.7], + [247, 206.7], + [247, 185.2] + ], + "system": "PixelSpace" + }, + "languages": ["eng"], + "page_number": 1 + }, + "text": "0.852 0.013", + "type": "UncategorizedText", + "compositeId": "28aa6227-cb1b-4ef7-9e40-0935c7af10b5" + }, + { + "element_id": "00373527-c0aa-452c-a201-efd428fca3d0", + "metadata": { + "coordinates": { + "layout_height": 793.701, + "layout_width": 595.276, + "points": [ + [167.8, 233.2], + [167.8, 342.3], + [247, 342.3], + [247, 233.2] + ], + "system": "PixelSpace" + }, + "languages": ["eng"], + "page_number": 1 + }, + "text": "53.8 14.7 31.6 0.01 (0.03) <0.001 98.3 1.6 0.0 0.0 2.2 (5.0)", + "type": "UncategorizedText", + "compositeId": "28aa6227-cb1b-4ef7-9e40-0935c7af10b5" + }, + { + "element_id": "d82199f2-55ee-42e0-8eff-03326d5faa39", + "metadata": { + "coordinates": { + "layout_height": 793.701, + "layout_width": 595.276, + "points": [ + [219.3, 245.7], + [219.3, 255.4], + [247, 255.4], + [247, 245.7] + ], + "system": "PixelSpace" + }, + "languages": ["eng"], + "page_number": 1 + }, + "text": "<0.001", + "type": "UncategorizedText", + "compositeId": "28aa6227-cb1b-4ef7-9e40-0935c7af10b5" + }, + { + "element_id": "1719f09b-c20c-4764-9043-b24d3d0a924d", + "metadata": { + "coordinates": { + "layout_height": 793.701, + "layout_width": 595.276, + "points": [ + [219.3, 304.2], + [219.3, 313.9], + [247.1, 313.9], + [247.1, 304.2] + ], + "system": "PixelSpace" + }, + "languages": ["eng"], + "page_number": 1 + }, + "text": "<0.001", + "type": "UncategorizedText", + "compositeId": "28aa6227-cb1b-4ef7-9e40-0935c7af10b5" + }, + { + "element_id": "10a12c72-e80f-40ed-acdd-2e3ec6bdd5a9", + "metadata": { + "coordinates": { + "layout_height": 793.701, + "layout_width": 595.276, + "points": [ + [219.3, 333.3], + [219.3, 342.9], + [247.1, 342.9], + [247.1, 333.3] + ], + "system": "PixelSpace" + }, + "languages": ["eng"], + "page_number": 1 + }, + "text": "<0.001", + "type": "UncategorizedText", + "compositeId": "28aa6227-cb1b-4ef7-9e40-0935c7af10b5" + }, + { + "element_id": "13e39018-bd7d-4506-945d-52df1ee69f8a", + "metadata": { + "coordinates": { + "layout_height": 793.701, + "layout_width": 595.276, + "points": [ + [260.3, 137.2], + [260.3, 158.7], + [296.5, 158.7], + [296.5, 137.2] + ], + "system": "PixelSpace" + }, + "languages": ["eng"], + "page_number": 1 + }, + "text": "8566 10.4 (6.3)", + "type": "UncategorizedText", + "compositeId": "28aa6227-cb1b-4ef7-9e40-0935c7af10b5" + }, + { + "element_id": "abbe8535-fa85-4be3-acf6-cf3931a0bdd5", + "metadata": { + "coordinates": { + "layout_height": 793.701, + "layout_width": 595.276, + "points": [ + [261.3, 185.2], + [261.3, 206.7], + [301.1, 206.7], + [301.1, 185.2] + ], + "system": "PixelSpace" + }, + "languages": ["eng"], + "page_number": 1 + }, + "text": "44.3 (13.3) 91.5", + "type": "UncategorizedText", + "compositeId": "28aa6227-cb1b-4ef7-9e40-0935c7af10b5" + }, + { + "element_id": "1e21e1e4-4ec6-4061-a22f-c3be98306eea", + "metadata": { + "coordinates": { + "layout_height": 793.701, + "layout_width": 595.276, + "points": [ + [261.3, 233.2], + [261.3, 267.2], + [277.1, 267.2], + [277.1, 233.2] + ], + "system": "PixelSpace" + }, + "languages": ["eng"], + "page_number": 1 + }, + "text": "49.5 13.9 36.6", + "type": "UncategorizedText", + "compositeId": "28aa6227-cb1b-4ef7-9e40-0935c7af10b5" + }, + { + "element_id": "ebf5b83d-f8d2-4530-9479-847cd6451024", + "metadata": { + "coordinates": { + "layout_height": 793.701, + "layout_width": 595.276, + "points": [ + [261.4, 270.7], + [261.4, 342.3], + [305.6, 342.3], + [305.6, 270.7] + ], + "system": "PixelSpace" + }, + "languages": ["eng"], + "page_number": 1 + }, + "text": "0.03 (0.04) 95.8 4.0 0.2 0.0 8.2 (11.5)", + "type": "UncategorizedText", + "compositeId": "28aa6227-cb1b-4ef7-9e40-0935c7af10b5" + }, + { + "element_id": "52e29d39-5c40-44c2-b5f8-a293f055d532", + "metadata": { + "coordinates": { + "layout_height": 793.701, + "layout_width": 595.276, + "points": [ + [314.6, 137.2], + [314.6, 158.7], + [350.9, 158.7], + [350.9, 137.2] + ], + "system": "PixelSpace" + }, + "languages": ["eng"], + "page_number": 1 + }, + "text": "50,640 11.5 (6.5)", + "type": "UncategorizedText", + "compositeId": "28aa6227-cb1b-4ef7-9e40-0935c7af10b5" + }, + { + "element_id": "907b40e6-498a-428d-a71c-9655933f6ab7", + "metadata": { + "coordinates": { + "layout_height": 793.701, + "layout_width": 595.276, + "points": [ + [371.4, 149.7], + [371.4, 159.4], + [399.1, 159.4], + [399.1, 149.7] + ], + "system": "PixelSpace" + }, + "languages": ["eng"], + "page_number": 1 + }, + "text": "<0.001", + "type": "UncategorizedText", + "compositeId": "28aa6227-cb1b-4ef7-9e40-0935c7af10b5" + }, + { + "element_id": "7df3b66d-f893-4b0c-8c3b-dfee6ae640b2", + "metadata": { + "coordinates": { + "layout_height": 793.701, + "layout_width": 595.276, + "points": [ + [315.6, 185.2], + [315.6, 206.7], + [355.4, 206.7], + [355.4, 185.2] + ], + "system": "PixelSpace" + }, + "languages": ["eng"], + "page_number": 1 + }, + "text": "44.3 (13.3) 94.1", + "type": "UncategorizedText", + "compositeId": "28aa6227-cb1b-4ef7-9e40-0935c7af10b5" + }, + { + "element_id": "ed192f04-24e5-4c92-abde-3767f37bbbb7", + "metadata": { + "coordinates": { + "layout_height": 793.701, + "layout_width": 595.276, + "points": [ + [371.4, 185.2], + [371.4, 207.4], + [399.2, 207.4], + [399.2, 185.2] + ], + "system": "PixelSpace" + }, + "languages": ["eng"], + "page_number": 1 + }, + "text": "0.907 <0.001", + "type": "UncategorizedText", + "compositeId": "28aa6227-cb1b-4ef7-9e40-0935c7af10b5" + }, + { + "element_id": "0db5931d-3e46-4938-ba2d-1f0f8f16f715", + "metadata": { + "coordinates": { + "layout_height": 793.701, + "layout_width": 595.276, + "points": [ + [315.7, 233.2], + [315.7, 342.3], + [399.2, 342.3], + [399.2, 233.2] + ], + "system": "PixelSpace" + }, + "languages": ["eng"], + "page_number": 1 + }, + "text": "60.0 11.6 28.5 0.02 (0.04) <0.001 97.1 2.8 0.1 0.0 3.2 (6.1)", + "type": "UncategorizedText", + "compositeId": "28aa6227-cb1b-4ef7-9e40-0935c7af10b5" + }, + { + "element_id": "a63ca47e-9992-4e34-a811-6b19fc5e9510", + "metadata": { + "coordinates": { + "layout_height": 793.701, + "layout_width": 595.276, + "points": [ + [371.4, 245.7], + [371.4, 255.4], + [399.2, 255.4], + [399.2, 245.7] + ], + "system": "PixelSpace" + }, + "languages": ["eng"], + "page_number": 1 + }, + "text": "<0.001", + "type": "UncategorizedText", + "compositeId": "28aa6227-cb1b-4ef7-9e40-0935c7af10b5" + }, + { + "element_id": "e8812fc1-6b4c-4618-b836-4ee2c41db1bc", + "metadata": { + "coordinates": { + "layout_height": 793.701, + "layout_width": 595.276, + "points": [ + [371.5, 304.2], + [371.5, 313.9], + [399.2, 313.9], + [399.2, 304.2] + ], + "system": "PixelSpace" + }, + "languages": ["eng"], + "page_number": 1 + }, + "text": "<0.001", + "type": "UncategorizedText", + "compositeId": "28aa6227-cb1b-4ef7-9e40-0935c7af10b5" + }, + { + "element_id": "c1d54d5d-189d-447a-8515-e3720ca7d262", + "metadata": { + "coordinates": { + "layout_height": 793.701, + "layout_width": 595.276, + "points": [ + [371.5, 333.3], + [371.5, 342.9], + [399.2, 342.9], + [399.2, 333.3] + ], + "system": "PixelSpace" + }, + "languages": ["eng"], + "page_number": 1 + }, + "text": "<0.001", + "type": "UncategorizedText", + "compositeId": "28aa6227-cb1b-4ef7-9e40-0935c7af10b5" + }, + { + "element_id": "e1fd511e-f48b-49f8-9f31-b66753ddaf0b", + "metadata": { + "coordinates": { + "layout_height": 793.701, + "layout_width": 595.276, + "points": [ + [414.3, 137.2], + [414.3, 158.7], + [449.6, 158.7], + [449.6, 137.2] + ], + "system": "PixelSpace" + }, + "languages": ["eng"], + "page_number": 1 + }, + "text": "12,251 10.3 (6.3)", + "type": "UncategorizedText", + "compositeId": "28aa6227-cb1b-4ef7-9e40-0935c7af10b5" + }, + { + "element_id": "7a1459ca-d0b3-4435-a1de-0b64d585e58f", + "metadata": { + "coordinates": { + "layout_height": 793.701, + "layout_width": 595.276, + "points": [ + [414.3, 172.7], + [414.3, 206.7], + [454.1, 206.7], + [454.1, 172.7] + ], + "system": "PixelSpace" + }, + "languages": ["eng"], + "page_number": 1 + }, + "text": "69.9 44.9 (13.3) 93.9", + "type": "UncategorizedText", + "compositeId": "34a20020-2aa7-42f1-9f83-e6193f54260d" + }, + { + "element_id": "e56ff9e1-f9a6-4380-bd34-0307570d54af", + "metadata": { + "coordinates": { + "layout_height": 793.701, + "layout_width": 595.276, + "points": [ + [414.3, 233.2], + [414.3, 267.2], + [430.1, 267.2], + [430.1, 233.2] + ], + "system": "PixelSpace" + }, + "languages": ["eng"], + "page_number": 1 + }, + "text": "47.1 15 37.9", + "type": "UncategorizedText", + "compositeId": "34a20020-2aa7-42f1-9f83-e6193f54260d" + }, + { + "element_id": "73fded1a-39b9-4420-956a-5942a1a8c291", + "metadata": { + "coordinates": { + "layout_height": 793.701, + "layout_width": 595.276, + "points": [ + [414.4, 270.7], + [414.4, 342.3], + [458.6, 342.3], + [458.6, 270.7] + ], + "system": "PixelSpace" + }, + "languages": ["eng"], + "page_number": 1 + }, + "text": "0.03 (0.04) 96.2 3.7 0.1 0.0 7.8 (11.2)", + "type": "UncategorizedText", + "compositeId": "34a20020-2aa7-42f1-9f83-e6193f54260d" + }, + { + "element_id": "341884c7-aded-44ed-abaf-d87380fc2dee", + "metadata": { + "coordinates": { + "layout_height": 793.701, + "layout_width": 595.276, + "points": [ + [467.2, 137.2], + [467.2, 158.7], + [502.5, 158.7], + [502.5, 137.2] + ], + "system": "PixelSpace" + }, + "languages": ["eng"], + "page_number": 1 + }, + "text": "72,572 11.5 (6.5)", + "type": "UncategorizedText", + "compositeId": "34a20020-2aa7-42f1-9f83-e6193f54260d" + }, + { + "element_id": "dc3a9a1a-f8cd-40a6-b9e7-5f30fdb8c4f1", + "metadata": { + "coordinates": { + "layout_height": 793.701, + "layout_width": 595.276, + "points": [ + [519.4, 149.7], + [519.4, 159.4], + [547.2, 159.4], + [547.2, 149.7] + ], + "system": "PixelSpace" + }, + "languages": ["eng"], + "page_number": 1 + }, + "text": "<0.001", + "type": "UncategorizedText", + "compositeId": "34a20020-2aa7-42f1-9f83-e6193f54260d" + }, + { + "element_id": "db610381-c708-4421-8b34-a209826fae80", + "metadata": { + "coordinates": { + "layout_height": 793.701, + "layout_width": 595.276, + "points": [ + [467.2, 172.7], + [467.2, 206.7], + [507, 206.7], + [507, 172.7] + ], + "system": "PixelSpace" + }, + "languages": ["eng"], + "page_number": 1 + }, + "text": "69.8 44.9 (13.3) 91.2", + "type": "UncategorizedText", + "compositeId": "34a20020-2aa7-42f1-9f83-e6193f54260d" + }, + { + "element_id": "4b99ab40-8c58-4367-8bd8-fc7906b98a9c", + "metadata": { + "coordinates": { + "layout_height": 793.701, + "layout_width": 595.276, + "points": [ + [519.5, 172.7], + [519.5, 207.4], + [547.2, 207.4], + [547.2, 172.7] + ], + "system": "PixelSpace" + }, + "languages": ["eng"], + "page_number": 1 + }, + "text": "0.752 0.727 <0.001", + "type": "UncategorizedText", + "compositeId": "34a20020-2aa7-42f1-9f83-e6193f54260d" + }, + { + "element_id": "046df292-5834-4180-bb7c-335618e7b17e", + "metadata": { + "coordinates": { + "layout_height": 793.701, + "layout_width": 595.276, + "points": [ + [467.3, 233.2], + [467.3, 342.3], + [547.2, 342.3], + [547.2, 233.2] + ], + "system": "PixelSpace" + }, + "languages": ["eng"], + "page_number": 1 + }, + "text": "58.1 12.5 29.4 0.02 (0.04) <0.001 97.4 2.5 0.1 0.0 2.9 (5.9)", + "type": "UncategorizedText", + "compositeId": "34a20020-2aa7-42f1-9f83-e6193f54260d" + }, + { + "element_id": "ce53ea7a-02e0-42a0-a69a-1954b75010d5", + "metadata": { + "coordinates": { + "layout_height": 793.701, + "layout_width": 595.276, + "points": [ + [519.5, 245.7], + [519.5, 255.4], + [547.2, 255.4], + [547.2, 245.7] + ], + "system": "PixelSpace" + }, + "languages": ["eng"], + "page_number": 1 + }, + "text": "<0.001", + "type": "UncategorizedText", + "compositeId": "34a20020-2aa7-42f1-9f83-e6193f54260d" + }, + { + "element_id": "31211582-7e9b-472e-af0c-cc17012fc9e9", + "metadata": { + "coordinates": { + "layout_height": 793.701, + "layout_width": 595.276, + "points": [ + [519.5, 304.2], + [519.5, 313.9], + [547.2, 313.9], + [547.2, 304.2] + ], + "system": "PixelSpace" + }, + "languages": ["eng"], + "page_number": 1 + }, + "text": "<0.001", + "type": "UncategorizedText", + "compositeId": "34a20020-2aa7-42f1-9f83-e6193f54260d" + }, + { + "element_id": "fe26e0de-390d-497d-bad1-fa1819f4bc58", + "metadata": { + "coordinates": { + "layout_height": 793.701, + "layout_width": 595.276, + "points": [ + [519.5, 333.3], + [519.5, 342.9], + [547.3, 342.9], + [547.3, 333.3] + ], + "system": "PixelSpace" + }, + "languages": ["eng"], + "page_number": 1 + }, + "text": "<0.001", + "type": "UncategorizedText", + "compositeId": "34a20020-2aa7-42f1-9f83-e6193f54260d" + }, + { + "element_id": "47de7d05-768c-4a4c-a985-5732f05d74d1", + "metadata": { + "coordinates": { + "layout_height": 793.701, + "layout_width": 595.276, + "points": [ + [37.8, 379.3], + [37.8, 398.8], + [76.5, 398.8], + [76.5, 379.3] + ], + "system": "PixelSpace" + }, + "languages": ["eng"], + "page_number": 1 + }, + "text": "1Q – least deprived", + "type": "Title", + "compositeId": "34a20020-2aa7-42f1-9f83-e6193f54260d" + }, + { + "element_id": "037eb62d-dc98-46f9-9d4d-0432b9a75b85", + "metadata": { + "coordinates": { + "layout_height": 793.701, + "layout_width": 595.276, + "points": [ + [28.8, 402.3], + [28.8, 436.3], + [48.8, 436.3], + [48.8, 402.3] + ], + "system": "PixelSpace" + }, + "languages": ["eng"], + "page_number": 1 + }, + "text": "2Q 3Q 4Q", + "type": "Title", + "compositeId": "34a20020-2aa7-42f1-9f83-e6193f54260d" + }, + { + "element_id": "bb007349-0809-43e3-a195-0d34dccd7321", + "metadata": { + "coordinates": { + "layout_height": 793.701, + "layout_width": 595.276, + "points": [ + [28.8, 439.8], + [28.8, 470.5], + [84.1, 470.5], + [84.1, 439.8] + ], + "system": "PixelSpace" + }, + "languages": ["eng"], + "page_number": 1 + }, + "text": "5Q – most deprived Missing data", + "type": "NarrativeText", + "compositeId": "34a20020-2aa7-42f1-9f83-e6193f54260d" + }, + { + "element_id": "80c25697-2081-462a-958c-db44e6faa9da", + "metadata": { + "coordinates": { + "layout_height": 793.701, + "layout_width": 595.276, + "points": [ + [109, 379.3], + [109, 388.3], + [124.8, 388.3], + [124.8, 379.3] + ], + "system": "PixelSpace" + }, + "languages": ["eng"], + "page_number": 1 + }, + "text": "13.7", + "type": "UncategorizedText", + "compositeId": "34a20020-2aa7-42f1-9f83-e6193f54260d" + }, + { + "element_id": "8c96c201-6fea-4458-afcb-ed328bb2696f", + "metadata": { + "coordinates": { + "layout_height": 793.701, + "layout_width": 595.276, + "points": [ + [109, 402.3], + [109, 448.8], + [124.8, 448.8], + [124.8, 402.3] + ], + "system": "PixelSpace" + }, + "languages": ["eng"], + "page_number": 1 + }, + "text": "18.5 17.6 20.2 20.6", + "type": "UncategorizedText", + "compositeId": "34a20020-2aa7-42f1-9f83-e6193f54260d" + }, + { + "element_id": "5af41829-027e-4e14-92de-0d186c2bd85d", + "metadata": { + "coordinates": { + "layout_height": 793.701, + "layout_width": 595.276, + "points": [ + [113.6, 461.5], + [113.6, 470.5], + [124.8, 470.5], + [124.8, 461.5] + ], + "system": "PixelSpace" + }, + "languages": ["eng"], + "page_number": 1 + }, + "text": "9.3", + "type": "UncategorizedText", + "compositeId": "34a20020-2aa7-42f1-9f83-e6193f54260d" + }, + { + "element_id": "c06c5d77-97bb-4535-9401-0356524f00b0", + "metadata": { + "coordinates": { + "layout_height": 793.701, + "layout_width": 595.276, + "points": [ + [167.9, 379.3], + [167.9, 388.3], + [183.7, 388.3], + [183.7, 379.3] + ], + "system": "PixelSpace" + }, + "languages": ["eng"], + "page_number": 1 + }, + "text": "13.7", + "type": "UncategorizedText", + "compositeId": "34a20020-2aa7-42f1-9f83-e6193f54260d" + }, + { + "element_id": "2424586e-c156-4f21-9466-93ee643a7eb1", + "metadata": { + "coordinates": { + "layout_height": 793.701, + "layout_width": 595.276, + "points": [ + [167.9, 402.3], + [167.9, 448.8], + [183.7, 448.8], + [183.7, 402.3] + ], + "system": "PixelSpace" + }, + "languages": ["eng"], + "page_number": 1 + }, + "text": "18.4 17.6 20.3 20.6", + "type": "UncategorizedText", + "compositeId": "34a20020-2aa7-42f1-9f83-e6193f54260d" + }, + { + "element_id": "58545a69-27c3-4705-8d5c-9ca03ee0fb09", + "metadata": { + "coordinates": { + "layout_height": 793.701, + "layout_width": 595.276, + "points": [ + [172.5, 461.5], + [172.5, 470.5], + [183.7, 470.5], + [183.7, 461.5] + ], + "system": "PixelSpace" + }, + "languages": ["eng"], + "page_number": 1 + }, + "text": "9.4", + "type": "UncategorizedText", + "compositeId": "34a20020-2aa7-42f1-9f83-e6193f54260d" + }, + { + "element_id": "08f5bfe8-6d2f-4d45-82b9-25c59e1a9edd", + "metadata": { + "coordinates": { + "layout_height": 793.701, + "layout_width": 595.276, + "points": [ + [226.9, 422], + [226.9, 431], + [247.1, 431], + [247.1, 422] + ], + "system": "PixelSpace" + }, + "languages": ["eng"], + "page_number": 1 + }, + "text": "1.000", + "type": "UncategorizedText", + "compositeId": "34a20020-2aa7-42f1-9f83-e6193f54260d" + }, + { + "element_id": "2f4bbf72-fca7-4c31-a605-e4bdfde62a7f", + "metadata": { + "coordinates": { + "layout_height": 793.701, + "layout_width": 595.276, + "points": [ + [261.4, 379.3], + [261.4, 388.3], + [277.2, 388.3], + [277.2, 379.3] + ], + "system": "PixelSpace" + }, + "languages": ["eng"], + "page_number": 1 + }, + "text": "14.6", + "type": "UncategorizedText", + "compositeId": "34a20020-2aa7-42f1-9f83-e6193f54260d" + }, + { + "element_id": "8bfa70bc-0674-4dba-9d3c-a0c4f062e41e", + "metadata": { + "coordinates": { + "layout_height": 793.701, + "layout_width": 595.276, + "points": [ + [261.4, 402.3], + [261.4, 448.8], + [277.2, 448.8], + [277.2, 402.3] + ], + "system": "PixelSpace" + }, + "languages": ["eng"], + "page_number": 1 + }, + "text": "18.5 17.9 18.8 20.3", + "type": "UncategorizedText", + "compositeId": "34a20020-2aa7-42f1-9f83-e6193f54260d" + }, + { + "element_id": "f9974574-f5ed-4036-83f6-990d549b5f9c", + "metadata": { + "coordinates": { + "layout_height": 793.701, + "layout_width": 595.276, + "points": [ + [266, 461.5], + [266, 470.5], + [277.2, 470.5], + [277.2, 461.5] + ], + "system": "PixelSpace" + }, + "languages": ["eng"], + "page_number": 1 + }, + "text": "9.8", + "type": "UncategorizedText", + "compositeId": "34a20020-2aa7-42f1-9f83-e6193f54260d" + }, + { + "element_id": "2f627baa-b64a-4ca0-8d53-d44aa2a79ece", + "metadata": { + "coordinates": { + "layout_height": 793.701, + "layout_width": 595.276, + "points": [ + [315.7, 379.3], + [315.7, 388.3], + [331.5, 388.3], + [331.5, 379.3] + ], + "system": "PixelSpace" + }, + "languages": ["eng"], + "page_number": 1 + }, + "text": "14.6", + "type": "UncategorizedText", + "compositeId": "34a20020-2aa7-42f1-9f83-e6193f54260d" + }, + { + "element_id": "203760dd-fd09-41c2-8bf4-5733f3f37be3", + "metadata": { + "coordinates": { + "layout_height": 793.701, + "layout_width": 595.276, + "points": [ + [315.8, 402.3], + [315.8, 448.8], + [331.5, 448.8], + [331.5, 402.3] + ], + "system": "PixelSpace" + }, + "languages": ["eng"], + "page_number": 1 + }, + "text": "18.5 17.9 18.8 20.3", + "type": "UncategorizedText", + "compositeId": "34a20020-2aa7-42f1-9f83-e6193f54260d" + }, + { + "element_id": "8b2b470c-52f1-4eb2-904e-05b640ddf2d7", + "metadata": { + "coordinates": { + "layout_height": 793.701, + "layout_width": 595.276, + "points": [ + [320.3, 461.5], + [320.3, 470.5], + [331.5, 470.5], + [331.5, 461.5] + ], + "system": "PixelSpace" + }, + "languages": ["eng"], + "page_number": 1 + }, + "text": "9.9", + "type": "UncategorizedText", + "compositeId": "34a20020-2aa7-42f1-9f83-e6193f54260d" + }, + { + "element_id": "9ecd914b-e0ba-4ccd-b924-ff73afa62b7d", + "metadata": { + "coordinates": { + "layout_height": 793.701, + "layout_width": 595.276, + "points": [ + [379, 422], + [379, 431], + [399.3, 431], + [399.3, 422] + ], + "system": "PixelSpace" + }, + "languages": ["eng"], + "page_number": 1 + }, + "text": "1.000", + "type": "UncategorizedText", + "compositeId": "34a20020-2aa7-42f1-9f83-e6193f54260d" + }, + { + "element_id": "9c53be97-a61e-48d6-8d59-a521132dd04b", + "metadata": { + "coordinates": { + "layout_height": 793.701, + "layout_width": 595.276, + "points": [ + [414.4, 379.3], + [414.4, 388.3], + [430.2, 388.3], + [430.2, 379.3] + ], + "system": "PixelSpace" + }, + "languages": ["eng"], + "page_number": 1 + }, + "text": "14.4", + "type": "UncategorizedText", + "compositeId": "34a20020-2aa7-42f1-9f83-e6193f54260d" + }, + { + "element_id": "8b269b31-a439-47b0-91f1-b24afcd5d284", + "metadata": { + "coordinates": { + "layout_height": 793.701, + "layout_width": 595.276, + "points": [ + [414.4, 402.3], + [414.4, 448.8], + [430.2, 448.8], + [430.2, 402.3] + ], + "system": "PixelSpace" + }, + "languages": ["eng"], + "page_number": 1 + }, + "text": "18.5 17.8 19.2 20.4", + "type": "UncategorizedText", + "compositeId": "34a20020-2aa7-42f1-9f83-e6193f54260d" + }, + { + "element_id": "16ec6c56-4d74-43cb-80fc-67ec570baf25", + "metadata": { + "coordinates": { + "layout_height": 793.701, + "layout_width": 595.276, + "points": [ + [419, 461.5], + [419, 470.5], + [430.2, 470.5], + [430.2, 461.5] + ], + "system": "PixelSpace" + }, + "languages": ["eng"], + "page_number": 1 + }, + "text": "9.7", + "type": "UncategorizedText", + "compositeId": "34a20020-2aa7-42f1-9f83-e6193f54260d" + }, + { + "element_id": "107e3ab0-8129-44bf-8f99-5b16f76d634b", + "metadata": { + "coordinates": { + "layout_height": 793.701, + "layout_width": 595.276, + "points": [ + [467.3, 379.3], + [467.3, 388.3], + [483.1, 388.3], + [483.1, 379.3] + ], + "system": "PixelSpace" + }, + "languages": ["eng"], + "page_number": 1 + }, + "text": "14.4", + "type": "UncategorizedText", + "compositeId": "34a20020-2aa7-42f1-9f83-e6193f54260d" + }, + { + "element_id": "06295d39-e514-4f20-88c9-fa8017643e29", + "metadata": { + "coordinates": { + "layout_height": 793.701, + "layout_width": 595.276, + "points": [ + [467.3, 402.3], + [467.3, 448.8], + [483.1, 448.8], + [483.1, 402.3] + ], + "system": "PixelSpace" + }, + "languages": ["eng"], + "page_number": 1 + }, + "text": "18.5 17.8 19.2 20.4", + "type": "UncategorizedText", + "compositeId": "34a20020-2aa7-42f1-9f83-e6193f54260d" + }, + { + "element_id": "e954a343-0e2f-4d39-bc65-822114d05502", + "metadata": { + "coordinates": { + "layout_height": 793.701, + "layout_width": 595.276, + "points": [ + [471.9, 461.5], + [471.9, 470.5], + [483.1, 470.5], + [483.1, 461.5] + ], + "system": "PixelSpace" + }, + "languages": ["eng"], + "page_number": 1 + }, + "text": "9.7", + "type": "UncategorizedText", + "compositeId": "678516f2-fbf5-4ee3-9022-d84e79c6b764" + }, + { + "element_id": "26c2d13f-30e7-45cd-99d1-d1558362bf94", + "metadata": { + "coordinates": { + "layout_height": 793.701, + "layout_width": 595.276, + "points": [ + [527.1, 422], + [527.1, 431], + [547.3, 431], + [547.3, 422] + ], + "system": "PixelSpace" + }, + "languages": ["eng"], + "page_number": 1 + }, + "text": "1.000", + "type": "UncategorizedText", + "compositeId": "678516f2-fbf5-4ee3-9022-d84e79c6b764" + }, + { + "element_id": "7c497c3a-a540-42e7-86d0-b94b0bc97d79", + "metadata": { + "coordinates": { + "layout_height": 793.701, + "layout_width": 595.276, + "points": [ + [28.7, 482], + [28.7, 509], + [545.2, 509], + [545.2, 482] + ], + "system": "PixelSpace" + }, + "languages": ["eng"], + "page_number": 1 + }, + "text": "Individuals were classified as fit, if the eFI score was below 0.12; mildly frail, if the score was between 0.12 and 0.24; moderately frail, if the score was between 0.24 and 0.36; severely frail, if the score was 0.36 and above. Differences between groups were assessed employing Chi-square test, Student’s t-test and the Kruskal–Wallis test, as appropriate.", + "type": "NarrativeText", + "compositeId": "678516f2-fbf5-4ee3-9022-d84e79c6b764" + }, + { + "element_id": "30ca5534-22f4-4585-ae94-5e0420c8e2a9", + "metadata": { + "coordinates": { + "layout_height": 793.701, + "layout_width": 595.276, + "points": [ + [113.4, 536.1], + [113.4, 582.1], + [329.6, 582.1], + [329.6, 536.1] + ], + "system": "PixelSpace" + }, + "languages": ["eng"], + "page_number": 1 + }, + "text": "was even lower in men (PR = 0.27, 95% CI = 0.18, 0.39) than in women (PR = 0.38, 95% CI = 0.30, 0.49; Figure 1), but the difference was not statistically sig- nificant (p = 0.097).", + "type": "NarrativeText", + "compositeId": "b030baad-7f2d-4bff-919e-c2e5e86a55e4" + }, + { + "element_id": "f6d3934f-74c7-4887-92cc-147918034468", + "metadata": { + "coordinates": { + "layout_height": 793.701, + "layout_width": 595.276, + "points": [ + [113.4, 598.1], + [113.4, 668.1], + [329.6, 668.1], + [329.6, 598.1] + ], + "system": "PixelSpace" + }, + "languages": ["eng"], + "page_number": 1 + }, + "text": "Hyperlipidaemia. Treatment with lipid-lowering medications was lower in PwMS, as compared with matched controls (PR = 0.63, 95% CI = 0.54, 0.74). This was particularly pronounced for men (women: PR = 0.71, 95% CI = 0.59, 0.87; men: PR = 0.41, 95% CI = 0.37, 0.62).", + "type": "NarrativeText", + "compositeId": "b030baad-7f2d-4bff-919e-c2e5e86a55e4" + }, + { + "element_id": "3b24fd3c-ff55-47b2-9d17-b0b14ce1ae48", + "metadata": { + "coordinates": { + "layout_height": 793.701, + "layout_width": 595.276, + "points": [ + [113.4, 696.1], + [113.4, 706.1], + [246.9, 706.1], + [246.9, 696.1] + ], + "system": "PixelSpace" + }, + "languages": ["eng"], + "page_number": 1 + }, + "text": "Differences in risk factor severity", + "type": "Title", + "compositeId": "b030baad-7f2d-4bff-919e-c2e5e86a55e4" + }, + { + "element_id": "32d9c009-3fe7-4f94-a7ed-4017654b0268", + "metadata": { + "coordinates": { + "layout_height": 793.701, + "layout_width": 595.276, + "points": [ + [113.4, 711.1], + [113.4, 733.1], + [329.6, 733.1], + [329.6, 711.1] + ], + "system": "PixelSpace" + }, + "languages": ["eng"], + "page_number": 1 + }, + "text": "As compared with matched controls, after adjustment, PwMS had a 0.4-mm Hg lower systolic blood", + "type": "NarrativeText", + "compositeId": "6d8e9e3e-670c-43e4-8607-3760ba9457dc" + }, + { + "element_id": "c79c1130-0c78-41e3-b3ed-bf66ba962dda", + "metadata": { + "coordinates": { + "layout_height": 793.701, + "layout_width": 595.276, + "points": [ + [339.1, 534.1], + [339.1, 688.1], + [555.3, 688.1], + [555.3, 534.1] + ], + "system": "PixelSpace" + }, + "languages": ["eng"], + "page_number": 1 + }, + "text": "pressure at the index year. The magnitude was greater for men than women, considering that men had almost a 3-mm Hg lower blood pressure than matched con- trols (overall: coeff. = −0.37, 95% CI = −0.60, −0.13; women: −0.54, 95% CI = −0.96, −0.12; men: −2.81, 95% CI = −3.84, −1.77). The differences were greater when restricting analyses to only those with a diagno- sis of hypertension at baseline, as PwMS had a 3.3- mm Hg lower systolic blood pressure then matched controls (coeff. = −3.27, 95% CI = −5.04, −1.50); dif- ferences were confirmed in women but not in men (women: coeff. = −2.56, 95% CI = −3.84, −1.27; men: −0.27, 95% CI = 0.01, −2.56).", + "type": "NarrativeText", + "compositeId": "b160fe7e-942a-4e1d-800d-40ffd331f8cf" + }, + { + "element_id": "c79c1130-0c78-41e3-b3ed-bf66ba962dda", + "metadata": { + "coordinates": { + "layout_height": 793.701, + "layout_width": 595.276, + "points": [ + [339.1, 534.1], + [339.1, 688.1], + [555.3, 688.1], + [555.3, 534.1] + ], + "system": "PixelSpace" + }, + "languages": ["eng"], + "page_number": 1 + }, + "text": "pressure at the index year. The magnitude was greater for men than women, considering that men had almost a 3-mm Hg lower blood pressure than matched con- trols (overall: coeff. = −0.37, 95% CI = −0.60, −0.13; women: −0.54, 95% CI = −0.96, −0.12; men: −2.81, 95% CI = −3.84, −1.77). The differences were greater when restricting analyses to only those with a diagno- sis of hypertension at baseline, as PwMS had a 3.3- mm Hg lower systolic blood pressure then matched controls (coeff. = −3.27, 95% CI = −5.04, −1.50); dif- ferences were confirmed in women but not in men (women: coeff. = −2.56, 95% CI = −3.84, −1.27; men: −0.27, 95% CI = 0.01, −2.56).", + "type": "NarrativeText", + "compositeId": "234796ba-d3ad-4dd0-81ce-46e2ad6f4f19" + }, + { + "element_id": "1f25baf4-aecd-4be9-8275-47b377465f7f", + "metadata": { + "coordinates": { + "layout_height": 793.701, + "layout_width": 595.276, + "points": [ + [339.1, 699.1], + [339.1, 733.1], + [555.3, 733.1], + [555.3, 699.1] + ], + "system": "PixelSpace" + }, + "languages": ["eng"], + "page_number": 1 + }, + "text": "In contrast, PwMS had higher levels of diastolic blood pressure at baseline, as compared with matched controls (coeff. = 0.29, 95% CI = 0.14, 0.43). However,", + "type": "NarrativeText", + "compositeId": "10c5db22-3f4f-46a9-b058-10c8696e03f8" + }, + { + "element_id": "58f97fa4-6ab6-44ef-9e7c-2a8a09327f66", + "metadata": { + "coordinates": { + "layout_height": 793.701, + "layout_width": 595.276, + "points": [ + [25.5, 755.2], + [25.5, 761.7], + [36.9, 761.7], + [36.9, 755.2] + ], + "system": "PixelSpace" + }, + "languages": ["eng"], + "page_number": 1 + }, + "text": "674", + "type": "Footer", + "compositeId": "10c5db22-3f4f-46a9-b058-10c8696e03f8" + }, + { + "element_id": "49ec6d29-c4c5-424b-bda3-9dd6d5041ec6", + "metadata": { + "coordinates": { + "layout_height": 793.701, + "layout_width": 595.276, + "points": [ + [468.6, 755.2], + [468.6, 761.7], + [552.8, 761.7], + [552.8, 755.2] + ], + "system": "PixelSpace" + }, + "languages": ["eng"], + "links": [ + { + "start_index": 0, + "text": "journals . sagepub . com / home /", + "url": "https://journals.sagepub.com/home/msj" + } + ], + "page_number": 1 + }, + "text": "journals.sagepub.com/home/msj", + "type": "Footer", + "compositeId": "10c5db22-3f4f-46a9-b058-10c8696e03f8" + } + ] +} diff --git a/src/libs/unstructured/__tests__/fixtures/table-parse/fast-partition-basic-raw.json b/src/libs/unstructured/__tests__/fixtures/table-parse/fast-partition-basic-raw.json new file mode 100644 index 000000000000..1e3bec41c948 --- /dev/null +++ b/src/libs/unstructured/__tests__/fixtures/table-parse/fast-partition-basic-raw.json @@ -0,0 +1,111 @@ +[ + { + "type": "CompositeElement", + "element_id": "6d036d9b-d2f7-4f2d-90a4-27a82a6fd072", + "text": "Multiple Sclerosis Journal 29(6)\n\nTable 1. Characteristics of the study population.\n\nMale\n\nFemale\n\nOverall\n\nMS subjects\n\nControl subjects\n\np-value MS subjects Control subjects\n\np-value\n\nMS subjects\n\nControl subjects\n\np-value\n\nN Follow-up time (years) Female (%) Age (years) Ethnicity – white (%) Smoking status (%) Non-smoker Ex-smoker Current smoker eFI ratio Fit Mid frailty Moderate frailty Severe frailty Number of primary care visits in previous year Index of multiple deprivation (IMD; %)", + "metadata": { + "languages": ["eng"], + "page_number": 1, + "orig_elements": "eJzNmFtv2zYUx78KYaBAAoQC75ftacgaLAOSDUj3lBUBKVI2N1kydEniFv3uO1KkJm38kA1RVz/pf3Ro0T+fC4+uP65iGbex6m5SWP2AVkq76KggmFsWsOAqx9YEg4PUUhDHjY50dYJW29i54DoHaz6u8rpuQqpcF9tRl25f993NJqb1pgOLtjzThMKy6c5dCt0GbkgrM6YV3NjVqeqG1dfXTGbyBHGRyfcnaFJCZmRQVLGMP5OjL+hVu2+7uB1+x+/pPpZXO5fH1afxudW6d+txf9erWK1Xg/sOLDdVv/WxATsdHLt4P+x4ddGXXdqVEV3lZWzqNrXo17pvKlciZo/U8cCg2+/i4PtLdAG+AZZ/TVMKk3tBGPYFoVjAB9vCO5DeF1YoKxhfmibL9AnSdKI5KkMeFLUmU8/k6Pu6NN85Dyhphk43rnF5F5vUdilvUV2gbhNR2/Vhj3b1ri9dl+oqe4r3XerKeIiu0YxSohkuFDdYuOixN5FjLQgNSnGpiV2YLiUmsyfIzgQnaSfJdCaeS/L60eqA0EuQBRcKm8eAHYQmFkEq7LTT2ApnnZeSxlwuHZCKDDk7I5vlxIgZlZnn8vWRncXtS6ERzjmx1mDJrMLCighZrDT2IVJRiGitXxqaoOIptFlOlISgh+TrQ/vtNjauLF8YakpTSTTOhddQ+zjHrhAFZkoSp7l3Qftvk52U2KldTJqaSUue0QN69H/lDL1Cbe//ijls7SX0NJPS5IxAzLEh5lzARgSODaGkMAV0nMVjjqox9x7pTZqZuV2ooTU/0wvQO62rrqnLf4fQBMhbEQSGAsfgKJMTCMCgMCkKrRVXzJNi6VpHbcaeIJz1jIwLMXSEZ3oBhDt868o+oieBiP4T1hiM8MQKHOEKC0MNdF3mho4STKFcoblYGCvX5BHTgG3Scx5zqw/q5bC+iJzwNCeaQAm0ocBCKol9jAXWvLDKBOFzEr9NH/lMbtZzAEKZPqi/g4potMyVEQxTYwlURMOw44Ji5qMxPBBtHVmantJfpPOsP9OCOCMH9PdSEXNJJBRFiL0CJhGhoBgaQmDMy3keXeFFTsPCCCVUwKepO+s5VaVQB/X/nLoapgvljMJw4ANeylNsrHE4h7hjykfhFh81IKhgdKMcQu7hZDxIrmVmxuar2Tg1f6Uf3F+X2yU6q8uyvsP9DnVpG9HRPrqmPUYPR2p09OYY/bR+NL/tNlXKU7dHf/aMUI7uNql7cLva1n+nag3zn+v6djRd1hVuwRwb9PZ+vjrtmwb+DDTJeHaOmmFQRGepQxcpoKJxqYQnXNQwiQPwz4arCEfWR3k5/qJh7Nw1aeuaPcod3L5NbYJ+mCowx9tUw16GzaPzKsT7wXs7vw4IERbejkMqOjq/+PlH9OaLdwF/VDk8fl036UMM7wZin97/A5UVFyc=", + "filename": "table-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "CompositeElement", + "element_id": "28aa6227-cb1b-4ef7-9e40-0935c7af10b5", + "text": "3685 9.9 (6.1)\n\n46.3 (13.3) 92.3\n\n41.5 17.5 41.1\n\n0.02 (0.04) 97.2 2.8 0.0 0.0 6.9 (10.3)\n\n21,931 11.4 (6.5)\n\n<0.001\n\n46.3 (13.3) 93.5\n\n0.852 0.013\n\n53.8 14.7 31.6 0.01 (0.03) <0.001 98.3 1.6 0.0 0.0 2.2 (5.0)\n\n<0.001\n\n<0.001\n\n<0.001\n\n8566 10.4 (6.3)\n\n44.3 (13.3) 91.5\n\n49.5 13.9 36.6\n\n0.03 (0.04) 95.8 4.0 0.2 0.0 8.2 (11.5)\n\n50,640 11.5 (6.5)\n\n<0.001\n\n44.3 (13.3) 94.1\n\n0.907 <0.001\n\n60.0 11.6 28.5 0.02 (0.04) <0.001 97.1 2.8 0.1 0.0 3.2 (6.1)\n\n<0.001\n\n<0.001\n\n<0.001\n\n12,251 10.3 (6.3)", + "metadata": { + "languages": ["eng"], + "page_number": 1, + "orig_elements": "eJzNWdtqG0kU/JVBTw64hz7n9OnLsh+xsLtPJoS+OoL4QqKwyYb99z090siSnIfIeIQNkl0zPVgqVZ+qGt38WNVP9a7ebz6sy+q3YcWhQPGFVUwBlYklqpRLU4xJE3Co1tTV9bC6qxs5t4lyzY9Vfnj4XNb3cVO/TPhT/P7wdfPhY13fftzIERdodBrkst2Zf9Zl81FOcOARnZUTjw/r+02/+uYGtB/D9QDkRnx/Pewx+9FNmMJof4Kn9XJg9eX7l0296+/mj/W3+unPx5jr6r/pv9/ffo2306u8WdX721Vf/ihHPtx/vUv1sxyHvnBTv/XXvSLreQhjGK7sCO/6+958f6z9zN/3Wd7u7cPn9b+1/NWXy3WnZHpfcgI0ClzIylBE5ckbpUuwNrZWLLcLken5iEzUdkeeERaf4+361yXT2JGGK6CR3g0BRzqbTozZmwBVYYpJ6KxBhWSLYgM5ZnSmMl6GTiQ6ptPOWkUz0XmKp/WvTCeMPICTJ/kLziZTQ82l1qZsyFWZnKpKOgijxSWy7CJiWJzMMGohx+md9raYjIhjwiysPcfb9a9Lph41DlfybESb8tkNOPpB4PSwfQCAFt2ezXKUnR+dTIBQWlSmBKdSyloFV2TLxaBLKUuzbO3oD8fpDs/jEzV11p/hBcYpwnUgGABG0ycqn89nqo0DVlRB9Cl8ltDtySnTiYRavbFL2xNC6CoEE3Z87TCH0UzYuC2fJ3ha/7p8/i7q1OdvfbSQfY5W2cRFSNRJeeNARQceZHQ5R4t7vAxIf2hLW7y3IdSue/opXtyWaOSz6QwuFsxGq2xMn6TBquC1Vxl8qh4jt6KX1iTaJ9fudG3xE31bDZ7iJejUo2fsYxPON3ityRGjU1lHmZaMWUXUoGorBn3LkRZnchbi3uC3eO9BO+ZO8RIGL27nZWyMbiAY7UTpZFGi0+3GH4IX6e7OTQ8U57riUZ8/WIuXORYaKuYqIsaqla+tKU2EtnCLkZaOA32QklBp+Gmwdsx8NEif4Wn9mxis4CA0HZLKqCXvOyu+rw2phKaIdGOQ35chkbTZTYIdlvkWZtLgJ3ha/zZI1BEwO1TV6ybGXouKuRSFlWq2qRSOF1IiyaamQxJl0x+Rdoqn9W+DRKoUNHiVihOLZy2eZMTsGUuTmGRD83FpEq3upO1z54z3OTNIAvwJXiB3erZ2kAA/pc6XpPgkRs7EqkXPyqRKIslmVW4keTbqLsrF2YSJvb3Db/He0UlDl+ApXiQwmYPABC8ITFARKlSjjGxo2eFWoidiU5lSDZ60rXV5cW7pm21+xnNvRzft6Gd4iR4feo+XcTyQHe3ZZNbUOHkqqvkijYhJyqVxoSf6XKxh0GguQKY56PE7vM9IpLmH91O8UI+nfY9nyU9mSkZTIB18T0dSPl/QO1k6ZygUFPegb0xGlbh50W2gppkL09K3nkiioD2YpzOe5yexPrpNOuMF5inra2t07/H8wh4ftEti7bL7g5ekj7709plVsMyBqNmY3NJ8ukml+x4/47m3UwjTBD3Fb6fHu9IoWdu3fiCxJcmcXmaoKk0cPlb5iNLyouSnXj6Jko96O/Ww/hwvbkvmBXdEa4GATRuFpnLv8ahiKlWRs66RS/JzKU3u6dzifvdjr0F8jpfp8bJHhxcqU5ck2xiKomr6HicJohGLgqabb2Cbg6UDU1eiO3D4HX4yoS11p3gJh7fdfKD3dPQyMQ/vNc9FXtLF7pYzTFZF3ape9J1TtJSjcVWF0L/Aq2RU9ADKJummmWuQRHAZFe+L/Izn4j5TfYrfTpGv3gO23FkzUuRtL1KeRMm1YjZQEqR8ARL5oMjPeC7us35P8dsp8hkKmyKlE3yQDmpcVJ6BVSWHOkdX0C5uTzvS5iI/47m4HwyBI/x2inyFVhigqmZ8kkkqmTM0AiW+75hKiU2nhUk0EjQPi/yM56BpzPH38TNeIHgCXiNDr/L0S1X+/f8DCFQe", + "filename": "table-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "CompositeElement", + "element_id": "34a20020-2aa7-42f1-9f83-e6193f54260d", + "text": "69.9 44.9 (13.3) 93.9\n\n47.1 15 37.9\n\n0.03 (0.04) 96.2 3.7 0.1 0.0 7.8 (11.2)\n\n72,572 11.5 (6.5)\n\n<0.001\n\n69.8 44.9 (13.3) 91.2\n\n0.752 0.727 <0.001\n\n58.1 12.5 29.4 0.02 (0.04) <0.001 97.4 2.5 0.1 0.0 2.9 (5.9)\n\n<0.001\n\n<0.001\n\n<0.001\n\n1Q – least deprived\n\n2Q 3Q 4Q\n\n5Q – most deprived Missing data\n\n13.7\n\n18.5 17.6 20.2 20.6\n\n9.3\n\n13.7\n\n18.4 17.6 20.3 20.6\n\n9.4\n\n1.000\n\n14.6\n\n18.5 17.9 18.8 20.3\n\n9.8\n\n14.6\n\n18.5 17.9 18.8 20.3\n\n9.9\n\n1.000\n\n14.4\n\n18.5 17.8 19.2 20.4\n\n9.7\n\n14.4\n\n18.5 17.8 19.2 20.4", + "metadata": { + "languages": ["eng"], + "page_number": 1, + "orig_elements": "eJzNmttu48gRhl+F0NUsMEV0V1cfKthX2CCDbK4mi0EfPQJ8GNiaZCeLvHuqKVKWZS8QGaZgGJb9U01b/FR/HVr8/MemXteberv7si2bvwwbHzVZzhGKSgaIjIWoSwWVHBUbbLWhbT4Om5u6iyXuopzzxybf3d2X7W3c1YdJX8cfd993X77W7dXXnRzxbEavtJw2P/Pvbdl9lScs2xG9kye+3W1vd/3sz59J02g+Dtrj6H/7OCwalZu1pVE/1/v1cmDz8ONhV2/61fxt+3u9/vu3mOvmv9N/v736Hq+mV/l5U2+vNn35Nzny5fb7Tar3clz3hbv6e3/dG8cjD0Ty8EGb0fw0yIVwv/zdj2+1L/jHbZarvrq73/6nll/7WXL6KdNqXWtcNTSODsgEBakYAmWUt14VS/FCTNGYEY+ZOj9royamp3pa/7ZMyY960HYw/hUovWmlFh3BcGIJT1TA1kWwTBh1DBlZXwAlCRqvHsNTtCEczT4cw+ie6/36t0WpRmWGD/JIEpluxEGuY5A3Tr7V4McgUatH/OlsyoZ0CJQ9RIEtlOUhptigBC/B2zKWWtem3CNRTG2WgJy1wJyoW4WjfUFP69+WsseP1uMgKO3wwY32fJ4lm8gSntBCFp5KskDi6sE2o1pJIVNbO2qt5h6lmnjmNWsrPyZNM98TPa1/W54/S3QqfT7E5LQyQUP2KnTrawhJsmhExQFdizWoCwXloTLt9aESWeVH9VyvVJnC08okTj+bKSXmmEhByFaYGueFaQnQsmflEofI+QKBaY+YzhoF3XEgnuo1mEqCtii506MfXhmkilxpyAg2SGhKGpVSn3wGY6zTofqk/SUy55NSv9eHejQDPNVrlHpJzlLqJTEPKGmlVyVcytWe78Dyrg59wVK1sEe0Hfn8JJurNTX6CAqrAmkHFETHETRbSt4qLY3WZWIZyT6NZWufxvKpnta/iyRrNGqpqQi+cgLyWCE2lSFnLRiwZa58GYhG0T5+Fy1pjo/j91RP698FxFbRVSVDk2El5Z59gRSLtP9RB82NkiTbC0EUU5tjiGL6AzTzgp7WvwuI5Ev1RVnwLmSgSBkiBwvWG2zKFk9l7Z5JeskgTDzvGc6Swxi69G4ieiKnxW8LUH8a/vkdlTbDdY0Pu6HUb/fbf9VyjPTX7e66vliQjK/JYYGSWSq8awxcqIAig4mjtymsnRUxdG6k5nozS+Pm8ehFOS1+W4z4aTCfBvr0f2FLSSlviEEFJXOmqQaiFBJQMreXnIsE4drRt3DifXzNUqZI22WY9jxO5bT4jWv4Ifpu7o6Cb/hl+/Cwvb0apqs/QvrXeH8fd7Lkz4wdVEbr2AMqaebJYZQRXixekgya0sZHLnFltFpx78sPzl50CLNGmqx+qtcwt7zus3NjyOyyvCfgWo0yCknvHltOUIvBkBI6dmtvKM3IDq5eNM3pcEb2TK9gbB2kf9R+dDIkjNgf3NlEbWzSrKP4HX0FqpqAsW97Fh0EtcxEtqxNVEJBDpHTe0sverH4QvBUT+vflqiE+fntt3JZqrIH9kk6R2ssMEmIKpl8LFJTKq09nmuZdPjY1rM+2DjIX3tBvxdbI8kkEFyFrK0DaqgFoXPAplZHJkolX7vozMgebT3rg433yJ7pdWxNB1ubV9o6WLIyBQL6bGSckXYyFJuBc1QCVbWk1h5n+kaFPbb1rA82ngme6lVsTedvaIRmU6sBXMEGVEgISuMIaLPlqiPXsnZiRHRTDCKOauqEZm30rPsnCi/oaf0bx6SMMup8X8vIl5pHaDl6oGw0RCehWCmVVqp0QH7tco0STnSUGhe9pEL0+yH6VK+RGukVRg6pRa9SBuU8SRgmaRqLkZFQZSktDivptffVZmSPc8ysl1Q4I3umV+x4eJDfwpQfz9+kYPZkBWaz/TMeZRwE06TYcP9AkpNtq2/9onNTz7ikxkUvqXAheKpXSY3hFbZ26FOMkBxJFy4lpRcXA4UoRvE017x2TBptHzuYvkUx68XGRnKifUG/F1ujMt6pUqCVPmbrjCBOp77JY5p8+VTNBRAeb08serHxjOyZfqe2DgmTGCaDxSbTdU0IrEgGGStRKqQbFr820f7Cj2y96MXGC8FTvYqtz7/FQGxbWJNM0yp1W+cCiVHyZPMmtugw+bU7nu5PddTxLHrpcAzzRPRUv5uOh7M1qbKXPkfLOB2K66mRIVqUsRZLUZQuc5vGITUuekmF/Q4XfEGvkxrPb7xD38ZJvVUkI6nRJwWsxdIJKbZcbMFAl0F4SI2LXlLhjOyZXjE1hkHzfo/nfKLa1exyn6xL7yFNTtBvZgHna7bSXMaGa2+Fk+YnHc+il1S4EDzVq6TG8zcotPLVRInEoLHffZUaBOkjwSbtmnfFmfVtPX+afbD1rA82lvFZv6Dfi61lVmFbxNHVaup7PAIzZIYWg9Lekam49o7EjOzR1rM+2HiP7Jl+F7b+7X/wGDAN", + "filename": "table-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "CompositeElement", + "element_id": "678516f2-fbf5-4ee3-9022-d84e79c6b764", + "text": "9.7\n\n1.000\n\nIndividuals were classified as fit, if the eFI score was below 0.12; mildly frail, if the score was between 0.12 and 0.24; moderately frail, if the score was between 0.24 and 0.36; severely frail, if the score was 0.36 and above. Differences between groups were assessed employing Chi-square test, Student’s t-test and the Kruskal–Wallis test, as appropriate.", + "metadata": { + "languages": ["eng"], + "page_number": 1, + "orig_elements": "eJy1kt1q3DAQhV9F+HplJFmyVs1lSyEUSiEtvdiGRbbGXlH5p7a8m23ou3fsOGloQ2khAV/4zJzj0XzW7jaBAA20ce9d8ookYJS0mcwoA1FR6TJDizJXdCsE59IxpZhINiRpIFpno8XMbVJ23eB8ayOMiw723E1xfwBfHyJWtMlSzTjG1s7Ju3jAhjIqFTrHRt/5Ns7p3U5qnpoNkTlP1fWGPGjNVr3NUv6EXvxYSMbzGKGZt/ngbyBc9baE5Mcyva0nWy+n3CXQ1sls77Gyb6emgAHrfDZGuJnPnZhUz8vGcw+z/NSWuGPdDf47uI+zB82/ExR5KRzPKpox0FSq0lFjHKeOK7XNclFURr4wQSX0QkSIlM2E7nXGVy11mj2hF//zEsQJjP03Q11Ko8vMUqsko1IgyG3uGC2MLFhRGu20eWGGYptqRLJdEd5Jxcw9MYz8qe/sz0vwsnX+6N1kw0hOMAApgx1HX3lwxI6k8nFDfEXiAQi8vSRj2aHnhJ0CQnciLOXigjQ+uHAm1WB9eLA/tsYTQLuYiW0dvgiJqc7BgDz/KSnkmszyCzLCEY/6l9xsW/y26I6Qkje+qjDRlvDrm/XQTf26NK4M+DgCTR+6s29r8vrg6fhtstjFX44UruLk8A59mQTjZiSRzuVlyDz73TCNX21YutlnG4If1xwex/b90PWDx2XTx7f1vR0QgD/C3U29/gnwtZI6", + "filename": "table-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "CompositeElement", + "element_id": "b030baad-7f2d-4bff-919e-c2e5e86a55e4", + "text": "was even lower in men (PR = 0.27, 95% CI = 0.18, 0.39) than in women (PR = 0.38, 95% CI = 0.30, 0.49; Figure 1), but the difference was not statistically sig- nificant (p = 0.097).\n\nHyperlipidaemia. Treatment with lipid-lowering medications was lower in PwMS, as compared with matched controls (PR = 0.63, 95% CI = 0.54, 0.74). This was particularly pronounced for men (women: PR = 0.71, 95% CI = 0.59, 0.87; men: PR = 0.41, 95% CI = 0.37, 0.62).\n\nDifferences in risk factor severity", + "metadata": { + "languages": ["eng"], + "page_number": 1, + "orig_elements": "eJy9VMFq3DAQ/ZXBUMiCbWxLtqyEnlpKe2gJTW5LCFp5bIvakpG12Syh/17JG5Y47aUQcjG8mTej0bxnbZ8iHHBE7e5VE11CRDIpypLQpChamtCyLhOBnCYlZrTIZI2F4FEM0YhONMIJX/MUSWNso7RwOC94EEezd/c9qq53PsI4SVmW+7LnzEE1rveJkpdpwSqfmIzSLlRvt3lOUhpDSao0v4vhjOvihEnB0+ofeOH7QDQfZ4djuM21esThZhISo9/L6brbi26Zchuh7qJAn3zkXu/HHVofzwPR4WOYOzqIGfABNQzmgBaUBr8quLj+CR8h85PHwMsP8OnbAvM69l/CN+B6oQP5YF7SSb2ikyzQKb+CL6rbW4R8E8Nu73w1QqPaFi1qiRBm0MbB7IRTs1NSDMMRZtUloFXroXZwMS0tM842aVDHHScM8/8Q1vqqB7wNF/I3ey13WzWEE9omjEqW0LpmCS+kTHLKeF5nhNKqfie5eb2Su6rqlbyv8Yn/tnJ/9Wuzg5pUI3BUIoVbi8KFdcFBuR6WVLJ4QenOe6Hx63fK6HlR6WyS68P3mxh8RJpxEhabU/konOw9kEY7a4b57IyKrJxR0uAMRjd+gF6devs2Xvr9IKwXf7JGm703RwOtsSdPLl67hOeOLF935KFjza7gJYmuSYQFUlX8p4XIrqBtQ2TStmWZULYrEt7kLNllu5xKzAXSd7JQxdcvBsuecUGrlP+NT/y3tdDn8487BydYNf+CVkjnZZr9S2KVO77c7q1ygz/p7g/eqZyU", + "filename": "table-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "CompositeElement", + "element_id": "6d8e9e3e-670c-43e4-8607-3760ba9457dc", + "text": "As compared with matched controls, after adjustment, PwMS had a 0.4-mm Hg lower systolic blood", + "metadata": { + "languages": ["eng"], + "page_number": 1, + "orig_elements": "eJxtUD1vgzAQ/Ssnz4AwECjdunVpFSndUBRd8AVc2RjBURJF+e+1adWp4/vSe3fNXZAhSwOftBLPIPJM1W2a1nF+oSouLnURY0UqLlJZlbvinGblk4hAWGJUyOgzd9E6Nyk9INO8YYM3t/CpJ9317JmqzpMqlT72q6xace+FXb1Lsqr0wuj0wCHdNFLmSRFBJWUijxH84Tz/wXlWJ+U/ePN7Qsy3mcmGa/b6SuYwYkvisbUP3YLdtrIRNHQi2EfPnIbFnmnyvAxGpmvYLV5maJ0dcSIFq+YeLHLbe9C6gSdn5gjwwjQBqs9l5vDHCPbr2wF6VICQJkVsLbx2YNzqbWGZM7qFs3FOhT/ybaTQ9I7ThKy/6CNUP47fBdN7tA==", + "filename": "table-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "CompositeElement", + "element_id": "b160fe7e-942a-4e1d-800d-40ffd331f8cf", + "text": "pressure at the index year. The magnitude was greater for men than women, considering that men had almost a 3-mm Hg lower blood pressure than matched con- trols (overall: coeff. = −0.37, 95% CI = −0.60, −0.13; women: −0.54, 95% CI = −0.96, −0.12; men: −2.81, 95% CI = −3.84, −1.77). The differences were greater when restricting analyses to only those with a diagno- sis of hypertension at baseline, as PwMS had a 3.3- mm Hg lower systolic blood pressure then matched controls (coeff. = −3.27, 95% CI", + "metadata": { + "languages": ["eng"], + "page_number": 1, + "orig_elements": "eJyFk1Fr2zAQx7/KYRi0EAvbiu04YU972R42Cu1bVoJsnW2BLQVJbhpKv/tOSZolzWBvur/uf9L9dFq/RTjgiNpvlIyWEDVl1aQpT+KkKRfxPEUe1xxlXLdFUYuqyKQU0QyiEb2QwgvyvEWNMVYqLTy6QzyIvZn8pkfV9Z6UsuKsTFKynXZ2SvqeNvIqZ1lZ0MbWKO2De73mvGKUm/M5S59n8BEXi8UxzvOc8dv4mE9C5PbO4xi6eVCvODxuRYPR++F03U2iO9xyHaHuopC+JWWjp7FGS3oaEj2+hntHW4vOTRZBePA9gtISX2GPwjJ4ongUnVZ+kgg74aCzSAgstMYCISWH0LAztJxBY7RTEq3SXdD9IaEXEsQwGudBAI/HEb53MJgd1agHYySczz+UGoVvepShVgzemsHBnXlBK4ZhSSK2LYOv8HvKsjRLGC9nUOVf4NuPC7FIZud1ylfH2y3PUj7/h6cqLjzZCi4cGVukNw7OFvMPR8rK8v7ISqq2RYu6QQfUIZ5x7XpCQY16qxof+Agthr2jNG/A6GFP3RtHiJXviZNUBN3E4JQD00K/36L1SHSNDs9UC4eD0jgDepGH3c/HI2XgjMdwSThMiRlUc4sar1CfQH/iy2lubzrPWXLReZ7cr0LXMVz3TTVbZUeqrk7jAfXkQRsfhBDenZ7l05kZy4v/0M7Kq/dJrm+ZsPAJ/xa7Z+EreyIYhv2XsFZ49YJPYfrfn/8ArEM8OA==", + "filename": "table-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "CompositeElement", + "element_id": "234796ba-d3ad-4dd0-81ce-46e2ad6f4f19", + "text": "= −5.04, −1.50); dif- ferences were confirmed in women but not in men (women: coeff. = −2.56, 95% CI = −3.84, −1.27; men: −0.27, 95% CI = 0.01, −2.56).", + "metadata": { + "languages": ["eng"], + "page_number": 1, + "orig_elements": "eJyFk1Fr2zAQx7/KYRi0EAvbiu04YU972R42Cu1bVoJsnW2BLQVJbhpKv/tOSZolzWBvur/uf9L9dFq/RTjgiNpvlIyWEDVl1aQpT+KkKRfxPEUe1xxlXLdFUYuqyKQU0QyiEb2QwgvyvEWNMVYqLTy6QzyIvZn8pkfV9Z6UsuKsTFKynXZ2SvqeNvIqZ1lZ0MbWKO2De73mvGKUm/M5S59n8BEXi8UxzvOc8dv4mE9C5PbO4xi6eVCvODxuRYPR++F03U2iO9xyHaHuopC+JWWjp7FGS3oaEj2+hntHW4vOTRZBePA9gtISX2GPwjJ4ongUnVZ+kgg74aCzSAgstMYCISWH0LAztJxBY7RTEq3SXdD9IaEXEsQwGudBAI/HEb53MJgd1agHYySczz+UGoVvepShVgzemsHBnXlBK4ZhSSK2LYOv8HvKsjRLGC9nUOVf4NuPC7FIZud1ylfH2y3PUj7/h6cqLjzZCi4cGVukNw7OFvMPR8rK8v7ISqq2RYu6QQfUIZ5x7XpCQY16qxof+Agthr2jNG/A6GFP3RtHiJXviZNUBN3E4JQD00K/36L1SHSNDs9UC4eD0jgDepGH3c/HI2XgjMdwSThMiRlUc4sar1CfQH/iy2lubzrPWXLReZ7cr0LXMVz3TTVbZUeqrk7jAfXkQRsfhBDenZ7l05kZy4v/0M7Kq/dJrm+ZsPAJ/xa7Z+EreyIYhv2XsFZ49YJPYfrfn/8ArEM8OA==", + "is_continuation": true, + "filename": "table-parse.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "CompositeElement", + "element_id": "10c5db22-3f4f-46a9-b058-10c8696e03f8", + "text": "In contrast, PwMS had higher levels of diastolic blood pressure at baseline, as compared with matched controls (coeff. = 0.29, 95% CI = 0.14, 0.43). However,\n\n674\n\njournals.sagepub.com/home/msj", + "metadata": { + "languages": ["eng"], + "page_number": 1, + "orig_elements": "eJy1U11r3DAQ/CuLodCCrbuz9XEK9KlQmoeWQPp2hEO21mentmUkOZcQ8t+7dnIQktBCaV5sz+6stDuz3t0n2GGPQ9y3NjmDZFPnojQ1zwxWNuMl6mybK5FxVRZKcSlqVScpJD1GY000VHOfVM552w4mYlhwZ+7cFPcNtocmUkTpgqn1hsqeMsfWxoYSQguWK0mJ0bVDnKt3u6LQjLhS0+sqhRNWRfGIhRCseI0f+RRIwl2I2M/TXLS32F2OpsLkYbl9OEzmsHS5S3A4JDN9pMh+mPoSPcU3MzHi7dx3cj5A5YboTYgpXBy/X0JjLDQ0Fnro8Aa7AK4G2xLBdW0FZeechdFjCJNHMBFKE7BrB0zBBDqsH41HC8c2NtCbWDUEliscHfWxcljXDD7DmuU6BS0+wJfzBW54Sk9efGLwzR3pZp/ONsS7EedGfxjvTWxv8OfcOY3w0lexrbWqDc+kKWXGOdaZRlVludmatS5yVUv5zr7mggmyjdzKZ9ueoNwwtbgsmX4NF/L/9VQq/ly5r85FIr0hGddYSZvrrOIV/QA5L7PSmiLT1kor1nxD6XeWjMstk880O+GTSkLkbPsG/lfZaFF/LZH7JETjSYnB4i0F1s8EvHaTHwytK4NAJ4xTSV+02bCCxvUIq1mUyXczt4lxDGer1amGPVUw4q9m9qoP18nDXyz7c/UbZl79Bp5NcoE=", + "filename": "table-parse.pdf", + "filetype": "application/pdf" + } + } +] diff --git a/src/libs/unstructured/__tests__/fixtures/table-parse/fast-partition-raw.json b/src/libs/unstructured/__tests__/fixtures/table-parse/fast-partition-raw.json new file mode 100644 index 000000000000..52794b070752 --- /dev/null +++ b/src/libs/unstructured/__tests__/fixtures/table-parse/fast-partition-raw.json @@ -0,0 +1,1892 @@ +[ + { + "type": "Header", + "element_id": "2d874eae-2423-412a-88ab-72a5544d3304", + "text": "Multiple Sclerosis Journal 29(6)", + "metadata": { + "coordinates": { + "points": [ + [25.5118, 34.488000000000056], + [25.5118, 44.988000000000056], + [162.2953, 44.988000000000056], + [162.2953, 34.488000000000056] + ], + "system": "PixelSpace", + "layout_width": 595.276, + "layout_height": 793.701 + }, + "languages": ["eng"], + "page_number": 1, + "filename": "table-parse-case.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "ada3c137-e27e-4974-b9fe-155e2f62823d", + "text": "Table 1. Characteristics of the study population.", + "metadata": { + "coordinates": { + "points": [ + [22.6772, 71.47569999999996], + [22.6772, 80.47569999999996], + [198.59120000000004, 80.47569999999996], + [198.59120000000004, 71.47569999999996] + ], + "system": "PixelSpace", + "layout_width": 595.276, + "layout_height": 793.701 + }, + "languages": ["eng"], + "page_number": 1, + "parent_id": "2d874eae-2423-412a-88ab-72a5544d3304", + "filename": "table-parse-case.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "376463d3-b7bc-4a78-9b29-c4ac1b65e483", + "text": "Male", + "metadata": { + "coordinates": { + "points": [ + [108.8819, 90.47569999999996], + [108.8819, 99.47569999999996], + [127.37689999999999, 99.47569999999996], + [127.37689999999999, 90.47569999999996] + ], + "system": "PixelSpace", + "layout_width": 595.276, + "layout_height": 793.701 + }, + "languages": ["eng"], + "page_number": 1, + "parent_id": "2d874eae-2423-412a-88ab-72a5544d3304", + "filename": "table-parse-case.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "326bf146-eb49-4d90-bdbc-96a2f89e50ad", + "text": "Female", + "metadata": { + "coordinates": { + "points": [ + [260.2756, 90.47569999999996], + [260.2756, 99.47569999999996], + [286.7716, 99.47569999999996], + [286.7716, 90.47569999999996] + ], + "system": "PixelSpace", + "layout_width": 595.276, + "layout_height": 793.701 + }, + "languages": ["eng"], + "page_number": 1, + "parent_id": "2d874eae-2423-412a-88ab-72a5544d3304", + "filename": "table-parse-case.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "3cecfb66-9ec9-45ae-9630-1ad0d09c6378", + "text": "Overall", + "metadata": { + "coordinates": { + "points": [ + [414.2913, 90.47569999999996], + [414.2913, 99.47569999999996], + [441.28229999999996, 99.47569999999996], + [441.28229999999996, 90.47569999999996] + ], + "system": "PixelSpace", + "layout_width": 595.276, + "layout_height": 793.701 + }, + "languages": ["eng"], + "page_number": 1, + "parent_id": "2d874eae-2423-412a-88ab-72a5544d3304", + "filename": "table-parse-case.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "e7858f8f-78a7-4d2d-8683-b849897c8bc3", + "text": "MS subjects", + "metadata": { + "coordinates": { + "points": [ + [108.8853, 108.97969999999998], + [108.8853, 117.97969999999998], + [153.13830000000002, 117.97969999999998], + [153.13830000000002, 108.97969999999998] + ], + "system": "PixelSpace", + "layout_width": 595.276, + "layout_height": 793.701 + }, + "languages": ["eng"], + "page_number": 1, + "parent_id": "2d874eae-2423-412a-88ab-72a5544d3304", + "filename": "table-parse-case.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "977a3730-9bad-469a-95bd-7de19b0d46af", + "text": "Control subjects", + "metadata": { + "coordinates": { + "points": [ + [166.7823, 108.97969999999998], + [166.7823, 128.48270000000002], + [196.53629999999998, 128.48270000000002], + [196.53629999999998, 108.97969999999998] + ], + "system": "PixelSpace", + "layout_width": 595.276, + "layout_height": 793.701 + }, + "languages": ["eng"], + "page_number": 1, + "parent_id": "2d874eae-2423-412a-88ab-72a5544d3304", + "filename": "table-parse-case.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "fe7986a3-1cbb-4be1-81a4-114a95ebc0ac", + "text": "p-value MS subjects Control subjects", + "metadata": { + "coordinates": { + "points": [ + [219.2253, 108.97969999999998], + [219.2253, 128.48270000000002], + [344.37030000000004, 128.48270000000002], + [344.37030000000004, 108.97969999999998] + ], + "system": "PixelSpace", + "layout_width": 595.276, + "layout_height": 793.701 + }, + "languages": ["eng"], + "page_number": 1, + "parent_id": "2d874eae-2423-412a-88ab-72a5544d3304", + "filename": "table-parse-case.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "1e732b2d-a1b4-4eff-9136-1a4636eccbe7", + "text": "p-value", + "metadata": { + "coordinates": { + "points": [ + [370.3623, 108.97969999999998], + [370.3623, 117.97969999999998], + [397.3533, 117.97969999999998], + [397.3533, 108.97969999999998] + ], + "system": "PixelSpace", + "layout_width": 595.276, + "layout_height": 793.701 + }, + "languages": ["eng"], + "page_number": 1, + "parent_id": "2d874eae-2423-412a-88ab-72a5544d3304", + "filename": "table-parse-case.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "57f36da1-ff7f-4991-8db5-2b5447115c20", + "text": "MS subjects", + "metadata": { + "coordinates": { + "points": [ + [414.3003, 108.97969999999998], + [414.3003, 128.48270000000002], + [443.2983, 128.48270000000002], + [443.2983, 108.97969999999998] + ], + "system": "PixelSpace", + "layout_width": 595.276, + "layout_height": 793.701 + }, + "languages": ["eng"], + "page_number": 1, + "parent_id": "2d874eae-2423-412a-88ab-72a5544d3304", + "filename": "table-parse-case.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "801d5125-20b3-4d3a-a749-ba32878de901", + "text": "Control subjects", + "metadata": { + "coordinates": { + "points": [ + [467.2113, 108.97969999999998], + [467.2113, 128.48270000000002], + [496.9653, 128.48270000000002], + [496.9653, 108.97969999999998] + ], + "system": "PixelSpace", + "layout_width": 595.276, + "layout_height": 793.701 + }, + "languages": ["eng"], + "page_number": 1, + "parent_id": "2d874eae-2423-412a-88ab-72a5544d3304", + "filename": "table-parse-case.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "33a03c91-988d-441d-a1bb-5591f0a983a2", + "text": "p-value", + "metadata": { + "coordinates": { + "points": [ + [519.4203, 108.97969999999998], + [519.4203, 117.97969999999998], + [546.4113, 117.97969999999998], + [546.4113, 108.97969999999998] + ], + "system": "PixelSpace", + "layout_width": 595.276, + "layout_height": 793.701 + }, + "languages": ["eng"], + "page_number": 1, + "parent_id": "2d874eae-2423-412a-88ab-72a5544d3304", + "filename": "table-parse-case.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "UncategorizedText", + "element_id": "ad1c8d60-5b40-4e0a-bf73-0bd67f36f3f3", + "text": "N Follow-up time (years) Female (%) Age (years) Ethnicity – white (%) Smoking status (%) Non-smoker Ex-smoker Current smoker eFI ratio Fit Mid frailty Moderate frailty Severe frailty Number of primary care visits in previous year Index of multiple deprivation (IMD; %)", + "metadata": { + "coordinates": { + "points": [ + [28.6863, 137.23069999999996], + [28.6863, 375.75770000000006], + [172.53330000000005, 375.75770000000006], + [172.53330000000005, 137.23069999999996] + ], + "system": "PixelSpace", + "layout_width": 595.276, + "layout_height": 793.701 + }, + "languages": ["eng"], + "page_number": 1, + "parent_id": "33a03c91-988d-441d-a1bb-5591f0a983a2", + "filename": "table-parse-case.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "UncategorizedText", + "element_id": "aa4a3831-5e8d-4c02-871e-f4ecee0f7492", + "text": "3685 9.9 (6.1)", + "metadata": { + "coordinates": { + "points": [ + [108.8943, 137.23069999999996], + [108.8943, 158.73169999999993], + [139.64730000000003, 158.73169999999993], + [139.64730000000003, 137.23069999999996] + ], + "system": "PixelSpace", + "layout_width": 595.276, + "layout_height": 793.701 + }, + "languages": ["eng"], + "page_number": 1, + "parent_id": "33a03c91-988d-441d-a1bb-5591f0a983a2", + "filename": "table-parse-case.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "UncategorizedText", + "element_id": "b7ac7d7b-23b0-4458-8910-265ab41f8fe9", + "text": "46.3 (13.3) 92.3", + "metadata": { + "coordinates": { + "points": [ + [108.9123, 185.23669999999993], + [108.9123, 206.73770000000002], + [148.65630000000002, 206.73770000000002], + [148.65630000000002, 185.23669999999993] + ], + "system": "PixelSpace", + "layout_width": 595.276, + "layout_height": 793.701 + }, + "languages": ["eng"], + "page_number": 1, + "parent_id": "33a03c91-988d-441d-a1bb-5591f0a983a2", + "filename": "table-parse-case.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "UncategorizedText", + "element_id": "ac5b578b-dbf1-4259-ba99-b2380ac2beba", + "text": "41.5 17.5 41.1", + "metadata": { + "coordinates": { + "points": [ + [108.9303, 233.2427], + [108.9303, 267.24469999999997], + [124.6983, 267.24469999999997], + [124.6983, 233.2427] + ], + "system": "PixelSpace", + "layout_width": 595.276, + "layout_height": 793.701 + }, + "languages": ["eng"], + "page_number": 1, + "parent_id": "33a03c91-988d-441d-a1bb-5591f0a983a2", + "filename": "table-parse-case.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "UncategorizedText", + "element_id": "4f2f5484-562a-4ff1-8089-358506ee1204", + "text": "0.02 (0.04) 97.2 2.8 0.0 0.0 6.9 (10.3)", + "metadata": { + "coordinates": { + "points": [ + [108.9663, 270.74569999999994], + [108.9663, 342.25970000000007], + [153.2013, 342.25970000000007], + [153.2013, 270.74569999999994] + ], + "system": "PixelSpace", + "layout_width": 595.276, + "layout_height": 793.701 + }, + "languages": ["eng"], + "page_number": 1, + "parent_id": "33a03c91-988d-441d-a1bb-5591f0a983a2", + "filename": "table-parse-case.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "UncategorizedText", + "element_id": "a0479cab-8d5c-4618-8f25-395a69b3e392", + "text": "21,931 11.4 (6.5)", + "metadata": { + "coordinates": { + "points": [ + [166.7913, 137.23069999999996], + [166.7913, 158.73169999999993], + [203.0433, 158.73169999999993], + [203.0433, 137.23069999999996] + ], + "system": "PixelSpace", + "layout_width": 595.276, + "layout_height": 793.701 + }, + "languages": ["eng"], + "page_number": 1, + "parent_id": "33a03c91-988d-441d-a1bb-5591f0a983a2", + "filename": "table-parse-case.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "UncategorizedText", + "element_id": "a07f5e31-6269-433a-b98b-68809c339b02", + "text": "<0.001", + "metadata": { + "coordinates": { + "points": [ + [219.2433, 149.73169999999993], + [219.2433, 159.41570000000002], + [246.9903, 159.41570000000002], + [246.9903, 149.73169999999993] + ], + "system": "PixelSpace", + "layout_width": 595.276, + "layout_height": 793.701 + }, + "languages": ["eng"], + "page_number": 1, + "parent_id": "33a03c91-988d-441d-a1bb-5591f0a983a2", + "filename": "table-parse-case.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "UncategorizedText", + "element_id": "d894fc6b-4861-43e3-a62a-dc90951d7e0f", + "text": "46.3 (13.3) 93.5", + "metadata": { + "coordinates": { + "points": [ + [167.8083, 185.23669999999993], + [167.8083, 206.73770000000002], + [207.5523, 206.73770000000002], + [207.5523, 185.23669999999993] + ], + "system": "PixelSpace", + "layout_width": 595.276, + "layout_height": 793.701 + }, + "languages": ["eng"], + "page_number": 1, + "parent_id": "33a03c91-988d-441d-a1bb-5591f0a983a2", + "filename": "table-parse-case.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "UncategorizedText", + "element_id": "09e63b60-841f-4b19-9cbd-4aa72be19358", + "text": "0.852 0.013", + "metadata": { + "coordinates": { + "points": [ + [226.7493, 185.23669999999993], + [226.7493, 206.73770000000002], + [247.0083, 206.73770000000002], + [247.0083, 185.23669999999993] + ], + "system": "PixelSpace", + "layout_width": 595.276, + "layout_height": 793.701 + }, + "languages": ["eng"], + "page_number": 1, + "parent_id": "33a03c91-988d-441d-a1bb-5591f0a983a2", + "filename": "table-parse-case.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "UncategorizedText", + "element_id": "4db6858c-8aea-4754-abca-c2023a62048d", + "text": "53.8 14.7 31.6 0.01 (0.03) <0.001 98.3 1.6 0.0 0.0 2.2 (5.0)", + "metadata": { + "coordinates": { + "points": [ + [167.8263, 233.2427], + [167.8263, 342.25970000000007], + [247.0443, 342.25970000000007], + [247.0443, 233.2427] + ], + "system": "PixelSpace", + "layout_width": 595.276, + "layout_height": 793.701 + }, + "languages": ["eng"], + "page_number": 1, + "parent_id": "33a03c91-988d-441d-a1bb-5591f0a983a2", + "filename": "table-parse-case.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "UncategorizedText", + "element_id": "1533d723-7726-47db-9901-ccfb8f476733", + "text": "<0.001", + "metadata": { + "coordinates": { + "points": [ + [219.2793, 245.7437], + [219.2793, 255.42770000000007], + [247.0263, 255.42770000000007], + [247.0263, 245.7437] + ], + "system": "PixelSpace", + "layout_width": 595.276, + "layout_height": 793.701 + }, + "languages": ["eng"], + "page_number": 1, + "parent_id": "33a03c91-988d-441d-a1bb-5591f0a983a2", + "filename": "table-parse-case.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "UncategorizedText", + "element_id": "f88d8286-9003-44d8-a554-4b287c360c28", + "text": "<0.001", + "metadata": { + "coordinates": { + "points": [ + [219.3063, 304.24370000000005], + [219.3063, 313.9277], + [247.0533, 313.9277], + [247.0533, 304.24370000000005] + ], + "system": "PixelSpace", + "layout_width": 595.276, + "layout_height": 793.701 + }, + "languages": ["eng"], + "page_number": 1, + "parent_id": "33a03c91-988d-441d-a1bb-5591f0a983a2", + "filename": "table-parse-case.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "UncategorizedText", + "element_id": "0e63346c-0c14-4213-975a-da51df26ee13", + "text": "<0.001", + "metadata": { + "coordinates": { + "points": [ + [219.3423, 333.25970000000007], + [219.3423, 342.94370000000004], + [247.0893, 342.94370000000004], + [247.0893, 333.25970000000007] + ], + "system": "PixelSpace", + "layout_width": 595.276, + "layout_height": 793.701 + }, + "languages": ["eng"], + "page_number": 1, + "parent_id": "33a03c91-988d-441d-a1bb-5591f0a983a2", + "filename": "table-parse-case.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "UncategorizedText", + "element_id": "28e1eb5e-7f9b-4fbd-bd19-cd9485bc20bd", + "text": "8566 10.4 (6.3)", + "metadata": { + "coordinates": { + "points": [ + [260.2923, 137.23069999999996], + [260.2923, 158.73169999999993], + [296.5443, 158.73169999999993], + [296.5443, 137.23069999999996] + ], + "system": "PixelSpace", + "layout_width": 595.276, + "layout_height": 793.701 + }, + "languages": ["eng"], + "page_number": 1, + "parent_id": "33a03c91-988d-441d-a1bb-5591f0a983a2", + "filename": "table-parse-case.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "UncategorizedText", + "element_id": "d27763ab-1c45-4e90-850b-f351244d8011", + "text": "44.3 (13.3) 91.5", + "metadata": { + "coordinates": { + "points": [ + [261.3093, 185.23669999999993], + [261.3093, 206.73770000000002], + [301.05330000000004, 206.73770000000002], + [301.05330000000004, 185.23669999999993] + ], + "system": "PixelSpace", + "layout_width": 595.276, + "layout_height": 793.701 + }, + "languages": ["eng"], + "page_number": 1, + "parent_id": "33a03c91-988d-441d-a1bb-5591f0a983a2", + "filename": "table-parse-case.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "UncategorizedText", + "element_id": "5fecd464-3721-4c04-b2f3-7a6cc670ed83", + "text": "49.5 13.9 36.6", + "metadata": { + "coordinates": { + "points": [ + [261.3273, 233.2427], + [261.3273, 267.24469999999997], + [277.0953, 267.24469999999997], + [277.0953, 233.2427] + ], + "system": "PixelSpace", + "layout_width": 595.276, + "layout_height": 793.701 + }, + "languages": ["eng"], + "page_number": 1, + "parent_id": "33a03c91-988d-441d-a1bb-5591f0a983a2", + "filename": "table-parse-case.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "UncategorizedText", + "element_id": "7d041668-ec2d-4501-a4b4-d4fac2806188", + "text": "0.03 (0.04) 95.8 4.0 0.2 0.0 8.2 (11.5)", + "metadata": { + "coordinates": { + "points": [ + [261.3633, 270.74569999999994], + [261.3633, 342.25970000000007], + [305.59830000000005, 342.25970000000007], + [305.59830000000005, 270.74569999999994] + ], + "system": "PixelSpace", + "layout_width": 595.276, + "layout_height": 793.701 + }, + "languages": ["eng"], + "page_number": 1, + "parent_id": "33a03c91-988d-441d-a1bb-5591f0a983a2", + "filename": "table-parse-case.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "UncategorizedText", + "element_id": "b52e22d2-e475-497f-941c-dd82e949080f", + "text": "50,640 11.5 (6.5)", + "metadata": { + "coordinates": { + "points": [ + [314.6253, 137.23069999999996], + [314.6253, 158.73169999999993], + [350.87730000000005, 158.73169999999993], + [350.87730000000005, 137.23069999999996] + ], + "system": "PixelSpace", + "layout_width": 595.276, + "layout_height": 793.701 + }, + "languages": ["eng"], + "page_number": 1, + "parent_id": "33a03c91-988d-441d-a1bb-5591f0a983a2", + "filename": "table-parse-case.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "UncategorizedText", + "element_id": "12fb37ba-e1a6-4029-991e-ec6a7794e14c", + "text": "<0.001", + "metadata": { + "coordinates": { + "points": [ + [371.3883, 149.73169999999993], + [371.3883, 159.41570000000002], + [399.1353, 159.41570000000002], + [399.1353, 149.73169999999993] + ], + "system": "PixelSpace", + "layout_width": 595.276, + "layout_height": 793.701 + }, + "languages": ["eng"], + "page_number": 1, + "parent_id": "33a03c91-988d-441d-a1bb-5591f0a983a2", + "filename": "table-parse-case.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "UncategorizedText", + "element_id": "e0e6411d-a4c7-4a5c-b626-0daf41d5bbad", + "text": "44.3 (13.3) 94.1", + "metadata": { + "coordinates": { + "points": [ + [315.6423, 185.23669999999993], + [315.6423, 206.73770000000002], + [355.3863, 206.73770000000002], + [355.3863, 185.23669999999993] + ], + "system": "PixelSpace", + "layout_width": 595.276, + "layout_height": 793.701 + }, + "languages": ["eng"], + "page_number": 1, + "parent_id": "33a03c91-988d-441d-a1bb-5591f0a983a2", + "filename": "table-parse-case.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "UncategorizedText", + "element_id": "55553e90-8833-4b15-b782-2904af11696a", + "text": "0.907 <0.001", + "metadata": { + "coordinates": { + "points": [ + [371.4063, 185.23669999999993], + [371.4063, 207.4217000000001], + [399.1533, 207.4217000000001], + [399.1533, 185.23669999999993] + ], + "system": "PixelSpace", + "layout_width": 595.276, + "layout_height": 793.701 + }, + "languages": ["eng"], + "page_number": 1, + "parent_id": "33a03c91-988d-441d-a1bb-5591f0a983a2", + "filename": "table-parse-case.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "UncategorizedText", + "element_id": "710c0bb4-fa78-4f1d-8389-4d3b1f6fecf7", + "text": "60.0 11.6 28.5 0.02 (0.04) <0.001 97.1 2.8 0.1 0.0 3.2 (6.1)", + "metadata": { + "coordinates": { + "points": [ + [315.6603, 233.2427], + [315.6603, 342.25970000000007], + [399.1893, 342.25970000000007], + [399.1893, 233.2427] + ], + "system": "PixelSpace", + "layout_width": 595.276, + "layout_height": 793.701 + }, + "languages": ["eng"], + "page_number": 1, + "parent_id": "33a03c91-988d-441d-a1bb-5591f0a983a2", + "filename": "table-parse-case.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "UncategorizedText", + "element_id": "8793c92f-9b01-4a70-992e-e85cb6c51704", + "text": "<0.001", + "metadata": { + "coordinates": { + "points": [ + [371.4243, 245.7437], + [371.4243, 255.42770000000007], + [399.1713, 255.42770000000007], + [399.1713, 245.7437] + ], + "system": "PixelSpace", + "layout_width": 595.276, + "layout_height": 793.701 + }, + "languages": ["eng"], + "page_number": 1, + "parent_id": "33a03c91-988d-441d-a1bb-5591f0a983a2", + "filename": "table-parse-case.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "UncategorizedText", + "element_id": "d3575b41-7d7d-451f-834a-33b72a5c82d3", + "text": "<0.001", + "metadata": { + "coordinates": { + "points": [ + [371.4513, 304.24370000000005], + [371.4513, 313.9277], + [399.1983, 313.9277], + [399.1983, 304.24370000000005] + ], + "system": "PixelSpace", + "layout_width": 595.276, + "layout_height": 793.701 + }, + "languages": ["eng"], + "page_number": 1, + "parent_id": "33a03c91-988d-441d-a1bb-5591f0a983a2", + "filename": "table-parse-case.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "UncategorizedText", + "element_id": "d3ff8255-2455-4001-8bba-3b03dae872ae", + "text": "<0.001", + "metadata": { + "coordinates": { + "points": [ + [371.4873, 333.25970000000007], + [371.4873, 342.94370000000004], + [399.2343, 342.94370000000004], + [399.2343, 333.25970000000007] + ], + "system": "PixelSpace", + "layout_width": 595.276, + "layout_height": 793.701 + }, + "languages": ["eng"], + "page_number": 1, + "parent_id": "33a03c91-988d-441d-a1bb-5591f0a983a2", + "filename": "table-parse-case.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "UncategorizedText", + "element_id": "39bccec6-2e6c-42a8-a6b1-a1bea2e95274", + "text": "12,251 10.3 (6.3)", + "metadata": { + "coordinates": { + "points": [ + [414.3093, 137.23069999999996], + [414.3093, 158.73169999999993], + [449.56230000000005, 158.73169999999993], + [449.56230000000005, 137.23069999999996] + ], + "system": "PixelSpace", + "layout_width": 595.276, + "layout_height": 793.701 + }, + "languages": ["eng"], + "page_number": 1, + "parent_id": "33a03c91-988d-441d-a1bb-5591f0a983a2", + "filename": "table-parse-case.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "UncategorizedText", + "element_id": "70733c13-2e3c-4630-b7dc-345f5722b726", + "text": "69.9 44.9 (13.3) 93.9", + "metadata": { + "coordinates": { + "points": [ + [414.3183, 172.73569999999995], + [414.3183, 206.73770000000002], + [454.0713, 206.73770000000002], + [454.0713, 172.73569999999995] + ], + "system": "PixelSpace", + "layout_width": 595.276, + "layout_height": 793.701 + }, + "languages": ["eng"], + "page_number": 1, + "parent_id": "33a03c91-988d-441d-a1bb-5591f0a983a2", + "filename": "table-parse-case.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "UncategorizedText", + "element_id": "a384fde2-72b8-42b1-836e-b963b5cf6de6", + "text": "47.1 15 37.9", + "metadata": { + "coordinates": { + "points": [ + [414.3453, 233.2427], + [414.3453, 267.24469999999997], + [430.1133, 267.24469999999997], + [430.1133, 233.2427] + ], + "system": "PixelSpace", + "layout_width": 595.276, + "layout_height": 793.701 + }, + "languages": ["eng"], + "page_number": 1, + "parent_id": "33a03c91-988d-441d-a1bb-5591f0a983a2", + "filename": "table-parse-case.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "UncategorizedText", + "element_id": "80b63ac8-c2cd-4ba1-b09d-98f7d9f9fb2f", + "text": "0.03 (0.04) 96.2 3.7 0.1 0.0 7.8 (11.2)", + "metadata": { + "coordinates": { + "points": [ + [414.3813, 270.74569999999994], + [414.3813, 342.25970000000007], + [458.6163, 342.25970000000007], + [458.6163, 270.74569999999994] + ], + "system": "PixelSpace", + "layout_width": 595.276, + "layout_height": 793.701 + }, + "languages": ["eng"], + "page_number": 1, + "parent_id": "33a03c91-988d-441d-a1bb-5591f0a983a2", + "filename": "table-parse-case.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "UncategorizedText", + "element_id": "0191c30a-b884-4839-b69e-2d9aeb54b7eb", + "text": "72,572 11.5 (6.5)", + "metadata": { + "coordinates": { + "points": [ + [467.2203, 137.23069999999996], + [467.2203, 158.73169999999993], + [502.47330000000005, 158.73169999999993], + [502.47330000000005, 137.23069999999996] + ], + "system": "PixelSpace", + "layout_width": 595.276, + "layout_height": 793.701 + }, + "languages": ["eng"], + "page_number": 1, + "parent_id": "33a03c91-988d-441d-a1bb-5591f0a983a2", + "filename": "table-parse-case.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "UncategorizedText", + "element_id": "be0a44aa-65ec-4bb3-ad07-1b10fb690fe6", + "text": "<0.001", + "metadata": { + "coordinates": { + "points": [ + [519.4383, 149.73169999999993], + [519.4383, 159.41570000000002], + [547.1853, 159.41570000000002], + [547.1853, 149.73169999999993] + ], + "system": "PixelSpace", + "layout_width": 595.276, + "layout_height": 793.701 + }, + "languages": ["eng"], + "page_number": 1, + "parent_id": "33a03c91-988d-441d-a1bb-5591f0a983a2", + "filename": "table-parse-case.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "UncategorizedText", + "element_id": "619896bd-c536-4e9d-bfd6-3e3e5a923b7f", + "text": "69.8 44.9 (13.3) 91.2", + "metadata": { + "coordinates": { + "points": [ + [467.2293, 172.73569999999995], + [467.2293, 206.73770000000002], + [506.9823, 206.73770000000002], + [506.9823, 172.73569999999995] + ], + "system": "PixelSpace", + "layout_width": 595.276, + "layout_height": 793.701 + }, + "languages": ["eng"], + "page_number": 1, + "parent_id": "33a03c91-988d-441d-a1bb-5591f0a983a2", + "filename": "table-parse-case.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "UncategorizedText", + "element_id": "13f6e1cb-4ffc-4f54-89c5-faedd2986d60", + "text": "0.752 0.727 <0.001", + "metadata": { + "coordinates": { + "points": [ + [519.4563, 172.73569999999995], + [519.4563, 207.4217000000001], + [547.2033, 207.4217000000001], + [547.2033, 172.73569999999995] + ], + "system": "PixelSpace", + "layout_width": 595.276, + "layout_height": 793.701 + }, + "languages": ["eng"], + "page_number": 1, + "parent_id": "33a03c91-988d-441d-a1bb-5591f0a983a2", + "filename": "table-parse-case.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "UncategorizedText", + "element_id": "3c735567-d63e-4cbb-842e-42e9a7112395", + "text": "58.1 12.5 29.4 0.02 (0.04) <0.001 97.4 2.5 0.1 0.0 2.9 (5.9)", + "metadata": { + "coordinates": { + "points": [ + [467.2563, 233.2427], + [467.2563, 342.25970000000007], + [547.2393, 342.25970000000007], + [547.2393, 233.2427] + ], + "system": "PixelSpace", + "layout_width": 595.276, + "layout_height": 793.701 + }, + "languages": ["eng"], + "page_number": 1, + "parent_id": "33a03c91-988d-441d-a1bb-5591f0a983a2", + "filename": "table-parse-case.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "UncategorizedText", + "element_id": "d2cb4d22-71b8-493f-8c87-0c87492ed046", + "text": "<0.001", + "metadata": { + "coordinates": { + "points": [ + [519.4743, 245.7437], + [519.4743, 255.42770000000007], + [547.2213, 255.42770000000007], + [547.2213, 245.7437] + ], + "system": "PixelSpace", + "layout_width": 595.276, + "layout_height": 793.701 + }, + "languages": ["eng"], + "page_number": 1, + "parent_id": "33a03c91-988d-441d-a1bb-5591f0a983a2", + "filename": "table-parse-case.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "UncategorizedText", + "element_id": "b6f11c89-d5c6-44dd-9451-6d3817137ed7", + "text": "<0.001", + "metadata": { + "coordinates": { + "points": [ + [519.5013, 304.24370000000005], + [519.5013, 313.9277], + [547.2483, 313.9277], + [547.2483, 304.24370000000005] + ], + "system": "PixelSpace", + "layout_width": 595.276, + "layout_height": 793.701 + }, + "languages": ["eng"], + "page_number": 1, + "parent_id": "33a03c91-988d-441d-a1bb-5591f0a983a2", + "filename": "table-parse-case.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "UncategorizedText", + "element_id": "203c7ed7-ddd5-49d2-92f2-2556a272075c", + "text": "<0.001", + "metadata": { + "coordinates": { + "points": [ + [519.5373, 333.25970000000007], + [519.5373, 342.94370000000004], + [547.2843, 342.94370000000004], + [547.2843, 333.25970000000007] + ], + "system": "PixelSpace", + "layout_width": 595.276, + "layout_height": 793.701 + }, + "languages": ["eng"], + "page_number": 1, + "parent_id": "33a03c91-988d-441d-a1bb-5591f0a983a2", + "filename": "table-parse-case.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "cb0ff27d-3d69-46c6-a62c-3130fddb185d", + "text": "1Q – least deprived", + "metadata": { + "coordinates": { + "points": [ + [37.8033, 379.25870000000003], + [37.8033, 398.7617], + [76.5483, 398.7617], + [76.5483, 379.25870000000003] + ], + "system": "PixelSpace", + "layout_width": 595.276, + "layout_height": 793.701 + }, + "languages": ["eng"], + "page_number": 1, + "parent_id": "2d874eae-2423-412a-88ab-72a5544d3304", + "filename": "table-parse-case.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "ace2f728-e6ea-4bac-9f2d-e773781698cf", + "text": "2Q 3Q 4Q", + "metadata": { + "coordinates": { + "points": [ + [28.8123, 402.26270000000005], + [28.8123, 436.26470000000006], + [48.8283, 436.26470000000006], + [48.8283, 402.26270000000005] + ], + "system": "PixelSpace", + "layout_width": 595.276, + "layout_height": 793.701 + }, + "languages": ["eng"], + "page_number": 1, + "parent_id": "2d874eae-2423-412a-88ab-72a5544d3304", + "filename": "table-parse-case.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "NarrativeText", + "element_id": "9b3e4985-6fe6-406a-bc46-e98866f9b5b9", + "text": "5Q – most deprived Missing data", + "metadata": { + "coordinates": { + "points": [ + [28.8483, 439.76570000000004], + [28.8483, 470.50070000000005], + [84.0993, 470.50070000000005], + [84.0993, 439.76570000000004] + ], + "system": "PixelSpace", + "layout_width": 595.276, + "layout_height": 793.701 + }, + "languages": ["eng"], + "page_number": 1, + "parent_id": "ace2f728-e6ea-4bac-9f2d-e773781698cf", + "filename": "table-parse-case.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "UncategorizedText", + "element_id": "cfad74db-a49f-4607-9129-18487f10d76b", + "text": "13.7", + "metadata": { + "coordinates": { + "points": [ + [109.0113, 379.25870000000003], + [109.0113, 388.25870000000003], + [124.7613, 388.25870000000003], + [124.7613, 379.25870000000003] + ], + "system": "PixelSpace", + "layout_width": 595.276, + "layout_height": 793.701 + }, + "languages": ["eng"], + "page_number": 1, + "parent_id": "ace2f728-e6ea-4bac-9f2d-e773781698cf", + "filename": "table-parse-case.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "UncategorizedText", + "element_id": "35d85ecd-e5d1-46dd-803c-495eb63a2bda", + "text": "18.5 17.6 20.2 20.6", + "metadata": { + "coordinates": { + "points": [ + [109.0203, 402.26270000000005], + [109.0203, 448.76570000000004], + [124.7973, 448.76570000000004], + [124.7973, 402.26270000000005] + ], + "system": "PixelSpace", + "layout_width": 595.276, + "layout_height": 793.701 + }, + "languages": ["eng"], + "page_number": 1, + "parent_id": "ace2f728-e6ea-4bac-9f2d-e773781698cf", + "filename": "table-parse-case.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "UncategorizedText", + "element_id": "37890bda-4a83-405c-b6c2-dfaed8f9b446", + "text": "9.3", + "metadata": { + "coordinates": { + "points": [ + [113.5563, 461.50070000000005], + [113.5563, 470.50070000000005], + [124.8063, 470.50070000000005], + [124.8063, 461.50070000000005] + ], + "system": "PixelSpace", + "layout_width": 595.276, + "layout_height": 793.701 + }, + "languages": ["eng"], + "page_number": 1, + "parent_id": "ace2f728-e6ea-4bac-9f2d-e773781698cf", + "filename": "table-parse-case.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "UncategorizedText", + "element_id": "1be26cce-86b8-42b4-94a2-1a3f94fbabae", + "text": "13.7", + "metadata": { + "coordinates": { + "points": [ + [167.9073, 379.25870000000003], + [167.9073, 388.25870000000003], + [183.6573, 388.25870000000003], + [183.6573, 379.25870000000003] + ], + "system": "PixelSpace", + "layout_width": 595.276, + "layout_height": 793.701 + }, + "languages": ["eng"], + "page_number": 1, + "parent_id": "ace2f728-e6ea-4bac-9f2d-e773781698cf", + "filename": "table-parse-case.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "UncategorizedText", + "element_id": "f2ab9b47-2137-406a-9515-9918200573c2", + "text": "18.4 17.6 20.3 20.6", + "metadata": { + "coordinates": { + "points": [ + [167.9163, 402.26270000000005], + [167.9163, 448.76570000000004], + [183.6933, 448.76570000000004], + [183.6933, 402.26270000000005] + ], + "system": "PixelSpace", + "layout_width": 595.276, + "layout_height": 793.701 + }, + "languages": ["eng"], + "page_number": 1, + "parent_id": "ace2f728-e6ea-4bac-9f2d-e773781698cf", + "filename": "table-parse-case.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "UncategorizedText", + "element_id": "abaa7b7e-d197-42b1-9605-5a116dbfff50", + "text": "9.4", + "metadata": { + "coordinates": { + "points": [ + [172.4523, 461.50070000000005], + [172.4523, 470.50070000000005], + [183.7023, 470.50070000000005], + [183.7023, 461.50070000000005] + ], + "system": "PixelSpace", + "layout_width": 595.276, + "layout_height": 793.701 + }, + "languages": ["eng"], + "page_number": 1, + "parent_id": "ace2f728-e6ea-4bac-9f2d-e773781698cf", + "filename": "table-parse-case.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "UncategorizedText", + "element_id": "94371778-af97-4ad5-8446-941b23733aa9", + "text": "1.000", + "metadata": { + "coordinates": { + "points": [ + [226.8573, 421.9997], + [226.8573, 430.9997], + [247.1073, 430.9997], + [247.1073, 421.9997] + ], + "system": "PixelSpace", + "layout_width": 595.276, + "layout_height": 793.701 + }, + "languages": ["eng"], + "page_number": 1, + "parent_id": "ace2f728-e6ea-4bac-9f2d-e773781698cf", + "filename": "table-parse-case.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "UncategorizedText", + "element_id": "c5d81c01-d005-4114-8cc2-fed32d5b75c5", + "text": "14.6", + "metadata": { + "coordinates": { + "points": [ + [261.4083, 379.25870000000003], + [261.4083, 388.25870000000003], + [277.1583, 388.25870000000003], + [277.1583, 379.25870000000003] + ], + "system": "PixelSpace", + "layout_width": 595.276, + "layout_height": 793.701 + }, + "languages": ["eng"], + "page_number": 1, + "parent_id": "ace2f728-e6ea-4bac-9f2d-e773781698cf", + "filename": "table-parse-case.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "UncategorizedText", + "element_id": "dfbc1c1d-ab14-4be8-9522-339a0a1eb26f", + "text": "18.5 17.9 18.8 20.3", + "metadata": { + "coordinates": { + "points": [ + [261.4173, 402.26270000000005], + [261.4173, 448.76570000000004], + [277.1943, 448.76570000000004], + [277.1943, 402.26270000000005] + ], + "system": "PixelSpace", + "layout_width": 595.276, + "layout_height": 793.701 + }, + "languages": ["eng"], + "page_number": 1, + "parent_id": "ace2f728-e6ea-4bac-9f2d-e773781698cf", + "filename": "table-parse-case.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "UncategorizedText", + "element_id": "8abc037f-aa72-4dac-9378-56f8627dfd0b", + "text": "9.8", + "metadata": { + "coordinates": { + "points": [ + [265.9533, 461.50070000000005], + [265.9533, 470.50070000000005], + [277.2033, 470.50070000000005], + [277.2033, 461.50070000000005] + ], + "system": "PixelSpace", + "layout_width": 595.276, + "layout_height": 793.701 + }, + "languages": ["eng"], + "page_number": 1, + "parent_id": "ace2f728-e6ea-4bac-9f2d-e773781698cf", + "filename": "table-parse-case.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "UncategorizedText", + "element_id": "3298d7d8-bf53-4f98-a2f2-245a9bab6fc4", + "text": "14.6", + "metadata": { + "coordinates": { + "points": [ + [315.7413, 379.25870000000003], + [315.7413, 388.25870000000003], + [331.4913, 388.25870000000003], + [331.4913, 379.25870000000003] + ], + "system": "PixelSpace", + "layout_width": 595.276, + "layout_height": 793.701 + }, + "languages": ["eng"], + "page_number": 1, + "parent_id": "ace2f728-e6ea-4bac-9f2d-e773781698cf", + "filename": "table-parse-case.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "UncategorizedText", + "element_id": "e9659e9e-26f7-4366-b2fe-033198311e16", + "text": "18.5 17.9 18.8 20.3", + "metadata": { + "coordinates": { + "points": [ + [315.7503, 402.26270000000005], + [315.7503, 448.76570000000004], + [331.5273, 448.76570000000004], + [331.5273, 402.26270000000005] + ], + "system": "PixelSpace", + "layout_width": 595.276, + "layout_height": 793.701 + }, + "languages": ["eng"], + "page_number": 1, + "parent_id": "ace2f728-e6ea-4bac-9f2d-e773781698cf", + "filename": "table-parse-case.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "UncategorizedText", + "element_id": "9655a0e8-bdbe-4f7a-b756-529a211ef928", + "text": "9.9", + "metadata": { + "coordinates": { + "points": [ + [320.2863, 461.50070000000005], + [320.2863, 470.50070000000005], + [331.5363, 470.50070000000005], + [331.5363, 461.50070000000005] + ], + "system": "PixelSpace", + "layout_width": 595.276, + "layout_height": 793.701 + }, + "languages": ["eng"], + "page_number": 1, + "parent_id": "ace2f728-e6ea-4bac-9f2d-e773781698cf", + "filename": "table-parse-case.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "UncategorizedText", + "element_id": "3cfee1ca-8636-4e75-a7e2-3bf6be4bf919", + "text": "1.000", + "metadata": { + "coordinates": { + "points": [ + [379.0023, 421.9997], + [379.0023, 430.9997], + [399.2523, 430.9997], + [399.2523, 421.9997] + ], + "system": "PixelSpace", + "layout_width": 595.276, + "layout_height": 793.701 + }, + "languages": ["eng"], + "page_number": 1, + "parent_id": "ace2f728-e6ea-4bac-9f2d-e773781698cf", + "filename": "table-parse-case.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "UncategorizedText", + "element_id": "72f937ef-e4c9-42b3-9105-fdab69f41bae", + "text": "14.4", + "metadata": { + "coordinates": { + "points": [ + [414.4263, 379.25870000000003], + [414.4263, 388.25870000000003], + [430.1763, 388.25870000000003], + [430.1763, 379.25870000000003] + ], + "system": "PixelSpace", + "layout_width": 595.276, + "layout_height": 793.701 + }, + "languages": ["eng"], + "page_number": 1, + "parent_id": "ace2f728-e6ea-4bac-9f2d-e773781698cf", + "filename": "table-parse-case.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "UncategorizedText", + "element_id": "57f8468f-4498-43e7-8748-037eb6e96fa0", + "text": "18.5 17.8 19.2 20.4", + "metadata": { + "coordinates": { + "points": [ + [414.4353, 402.26270000000005], + [414.4353, 448.76570000000004], + [430.2123, 448.76570000000004], + [430.2123, 402.26270000000005] + ], + "system": "PixelSpace", + "layout_width": 595.276, + "layout_height": 793.701 + }, + "languages": ["eng"], + "page_number": 1, + "parent_id": "ace2f728-e6ea-4bac-9f2d-e773781698cf", + "filename": "table-parse-case.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "UncategorizedText", + "element_id": "3ca015fb-3968-4d51-bf47-2ece96b3bdf0", + "text": "9.7", + "metadata": { + "coordinates": { + "points": [ + [418.9713, 461.50070000000005], + [418.9713, 470.50070000000005], + [430.2213, 470.50070000000005], + [430.2213, 461.50070000000005] + ], + "system": "PixelSpace", + "layout_width": 595.276, + "layout_height": 793.701 + }, + "languages": ["eng"], + "page_number": 1, + "parent_id": "ace2f728-e6ea-4bac-9f2d-e773781698cf", + "filename": "table-parse-case.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "UncategorizedText", + "element_id": "dae32302-8f7b-4d71-b44e-2f0a434cd5f0", + "text": "14.4", + "metadata": { + "coordinates": { + "points": [ + [467.3373, 379.25870000000003], + [467.3373, 388.25870000000003], + [483.0873, 388.25870000000003], + [483.0873, 379.25870000000003] + ], + "system": "PixelSpace", + "layout_width": 595.276, + "layout_height": 793.701 + }, + "languages": ["eng"], + "page_number": 1, + "parent_id": "ace2f728-e6ea-4bac-9f2d-e773781698cf", + "filename": "table-parse-case.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "UncategorizedText", + "element_id": "696ad9fd-4eae-4786-904d-4a162288410a", + "text": "18.5 17.8 19.2 20.4", + "metadata": { + "coordinates": { + "points": [ + [467.3463, 402.26270000000005], + [467.3463, 448.76570000000004], + [483.1233, 448.76570000000004], + [483.1233, 402.26270000000005] + ], + "system": "PixelSpace", + "layout_width": 595.276, + "layout_height": 793.701 + }, + "languages": ["eng"], + "page_number": 1, + "parent_id": "ace2f728-e6ea-4bac-9f2d-e773781698cf", + "filename": "table-parse-case.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "UncategorizedText", + "element_id": "a3cac556-cb3c-4367-a308-b778ef97862a", + "text": "9.7", + "metadata": { + "coordinates": { + "points": [ + [471.8823, 461.50070000000005], + [471.8823, 470.50070000000005], + [483.1323, 470.50070000000005], + [483.1323, 461.50070000000005] + ], + "system": "PixelSpace", + "layout_width": 595.276, + "layout_height": 793.701 + }, + "languages": ["eng"], + "page_number": 1, + "parent_id": "ace2f728-e6ea-4bac-9f2d-e773781698cf", + "filename": "table-parse-case.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "UncategorizedText", + "element_id": "91930aa0-98f6-4ec8-8529-1c70870e6b88", + "text": "1.000", + "metadata": { + "coordinates": { + "points": [ + [527.0523, 421.9997], + [527.0523, 430.9997], + [547.3023, 430.9997], + [547.3023, 421.9997] + ], + "system": "PixelSpace", + "layout_width": 595.276, + "layout_height": 793.701 + }, + "languages": ["eng"], + "page_number": 1, + "parent_id": "ace2f728-e6ea-4bac-9f2d-e773781698cf", + "filename": "table-parse-case.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "NarrativeText", + "element_id": "39a35475-e735-4d79-aef9-b3fef8a8e4c5", + "text": "Individuals were classified as fit, if the eFI score was below 0.12; mildly frail, if the score was between 0.12 and 0.24; moderately frail, if the score was between 0.24 and 0.36; severely frail, if the score was 0.36 and above. Differences between groups were assessed employing Chi-square test, Student’s t-test and the Kruskal–Wallis test, as appropriate.", + "metadata": { + "coordinates": { + "points": [ + [28.6771, 481.99660000000006], + [28.6771, 508.9886], + [545.2371000000002, 508.9886], + [545.2371000000002, 481.99660000000006] + ], + "system": "PixelSpace", + "layout_width": 595.276, + "layout_height": 793.701 + }, + "languages": ["eng"], + "page_number": 1, + "parent_id": "ace2f728-e6ea-4bac-9f2d-e773781698cf", + "filename": "table-parse-case.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "NarrativeText", + "element_id": "081dc727-e8ed-470a-a5ce-fc80852facaf", + "text": "was even lower in men (PR = 0.27, 95% CI = 0.18, 0.39) than in women (PR = 0.38, 95% CI = 0.30, 0.49; Figure 1), but the difference was not statistically sig- nificant (p = 0.097).", + "metadata": { + "coordinates": { + "points": [ + [113.3858, 536.0932], + [113.3858, 582.0932], + [329.5758, 582.0932], + [329.5758, 536.0932] + ], + "system": "PixelSpace", + "layout_width": 595.276, + "layout_height": 793.701 + }, + "languages": ["eng"], + "page_number": 1, + "parent_id": "ace2f728-e6ea-4bac-9f2d-e773781698cf", + "filename": "table-parse-case.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "NarrativeText", + "element_id": "977cd147-5eb8-45e1-a5db-1ea003e733c9", + "text": "Hyperlipidaemia. Treatment with lipid-lowering medications was lower in PwMS, as compared with matched controls (PR = 0.63, 95% CI = 0.54, 0.74). This was particularly pronounced for men (women: PR = 0.71, 95% CI = 0.59, 0.87; men: PR = 0.41, 95% CI = 0.37, 0.62).", + "metadata": { + "coordinates": { + "points": [ + [113.3758, 598.0932], + [113.3758, 668.0932], + [329.59579999999994, 668.0932], + [329.59579999999994, 598.0932] + ], + "system": "PixelSpace", + "layout_width": 595.276, + "layout_height": 793.701 + }, + "languages": ["eng"], + "page_number": 1, + "parent_id": "ace2f728-e6ea-4bac-9f2d-e773781698cf", + "filename": "table-parse-case.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Title", + "element_id": "d60a7775-c7fd-4f3a-96d6-9a5a6015b9fb", + "text": "Differences in risk factor severity", + "metadata": { + "coordinates": { + "points": [ + [113.3758, 696.0932], + [113.3758, 706.0932], + [246.87580000000003, 706.0932], + [246.87580000000003, 696.0932] + ], + "system": "PixelSpace", + "layout_width": 595.276, + "layout_height": 793.701 + }, + "languages": ["eng"], + "page_number": 1, + "parent_id": "2d874eae-2423-412a-88ab-72a5544d3304", + "filename": "table-parse-case.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "NarrativeText", + "element_id": "526253e5-0f1a-4ce8-b071-2393291fc1f4", + "text": "As compared with matched controls, after adjustment, PwMS had a 0.4-mm Hg lower systolic blood", + "metadata": { + "coordinates": { + "points": [ + [113.3758, 711.0932], + [113.3758, 733.0932], + [329.56579999999997, 733.0932], + [329.56579999999997, 711.0932] + ], + "system": "PixelSpace", + "layout_width": 595.276, + "layout_height": 793.701 + }, + "languages": ["eng"], + "page_number": 1, + "parent_id": "d60a7775-c7fd-4f3a-96d6-9a5a6015b9fb", + "filename": "table-parse-case.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "NarrativeText", + "element_id": "b7b63269-4a65-456b-bf50-e819c9bfcc05", + "text": "pressure at the index year. The magnitude was greater for men than women, considering that men had almost a 3-mm Hg lower blood pressure than matched con- trols (overall: coeff. = −0.37, 95% CI = −0.60, −0.13; women: −0.54, 95% CI = −0.96, −0.12; men: −2.81, 95% CI = −3.84, −1.77). The differences were greater when restricting analyses to only those with a diagno- sis of hypertension at baseline, as PwMS had a 3.3- mm Hg lower systolic blood pressure then matched controls (coeff. = −3.27, 95% CI = −5.04, −1.50); dif- ferences were confirmed in women but not in men (women: coeff. = −2.56, 95% CI = −3.84, −1.27; men: −0.27, 95% CI = 0.01, −2.56).", + "metadata": { + "coordinates": { + "points": [ + [339.0709, 534.1058], + [339.0709, 688.1058], + [555.2809, 688.1058], + [555.2809, 534.1058] + ], + "system": "PixelSpace", + "layout_width": 595.276, + "layout_height": 793.701 + }, + "languages": ["eng"], + "page_number": 1, + "parent_id": "d60a7775-c7fd-4f3a-96d6-9a5a6015b9fb", + "filename": "table-parse-case.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "NarrativeText", + "element_id": "461b001c-8b4e-4e60-8cb3-7ebde3399728", + "text": "In contrast, PwMS had higher levels of diastolic blood pressure at baseline, as compared with matched controls (coeff. = 0.29, 95% CI = 0.14, 0.43). However,", + "metadata": { + "coordinates": { + "points": [ + [339.0709, 699.1058], + [339.0709, 733.1058], + [555.2609, 733.1058], + [555.2609, 699.1058] + ], + "system": "PixelSpace", + "layout_width": 595.276, + "layout_height": 793.701 + }, + "languages": ["eng"], + "page_number": 1, + "parent_id": "d60a7775-c7fd-4f3a-96d6-9a5a6015b9fb", + "filename": "table-parse-case.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Footer", + "element_id": "6d667678-bea2-4126-a4c3-34fa02e4b28d", + "text": "674", + "metadata": { + "coordinates": { + "points": [ + [25.5118, 755.2131], + [25.5118, 761.7131], + [36.8868, 761.7131], + [36.8868, 755.2131] + ], + "system": "PixelSpace", + "layout_width": 595.276, + "layout_height": 793.701 + }, + "languages": ["eng"], + "page_number": 1, + "filename": "table-parse-case.pdf", + "filetype": "application/pdf" + } + }, + { + "type": "Footer", + "element_id": "c9f07590-0155-4e99-bd77-e4292e329cab", + "text": "journals.sagepub.com/home/msj", + "metadata": { + "coordinates": { + "points": [ + [468.6233, 755.2131], + [468.6233, 761.7131], + [552.7592999999999, 761.7131], + [552.7592999999999, 755.2131] + ], + "system": "PixelSpace", + "layout_width": 595.276, + "layout_height": 793.701 + }, + "languages": ["eng"], + "links": [ + { + "text": "journals . sagepub . com / home /", + "url": "https://journals.sagepub.com/home/msj", + "start_index": 0 + } + ], + "page_number": 1, + "filename": "table-parse-case.pdf", + "filetype": "application/pdf" + } + } +] diff --git a/src/libs/unstructured/__tests__/index.test.ts b/src/libs/unstructured/__tests__/index.test.ts new file mode 100644 index 000000000000..a864126cb3ad --- /dev/null +++ b/src/libs/unstructured/__tests__/index.test.ts @@ -0,0 +1,165 @@ +// @vitest-environment node +import { UnstructuredClient } from 'unstructured-client'; +import { Strategy } from 'unstructured-client/sdk/models/shared'; +import { ChunkingStrategy } from 'unstructured-client/sdk/models/shared/partitionparameters'; +import { PartitionResponse } from 'unstructured-client/src/sdk/models/operations'; +import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'; + +import { Unstructured } from '../index'; +import AutoWithChunkingOutput from './fixtures/table-parse/auto-partition-basic-output.json'; +import AutoWithChunkingRaw from './fixtures/table-parse/auto-partition-basic-raw.json'; +import AutoWithoutChunking from './fixtures/table-parse/auto-partition-raw.json'; +import FastWithoutChunkingRaw from './fixtures/table-parse/fast-partition-raw.json'; + +// Mock the external dependencies +let UNSTRUCTURED_API_KEY = 'test-api-key'; + +vi.mock('@/config/knowledge', () => ({ + knowledgeEnv: { + get UNSTRUCTURED_API_KEY() { + return UNSTRUCTURED_API_KEY; + }, + + UNSTRUCTURED_SERVER_URL: 'http://test-server.com', + }, +})); + +let client: Unstructured; + +beforeEach(() => { + client = new Unstructured(); +}); + +afterEach(() => { + vi.clearAllMocks(); +}); + +const mockPartitionResponse = (elements: any[]) => + ({ + statusCode: 200, + elements, + rawResponse: new Response(), + contentType: 'application/json', + }) as PartitionResponse; + +describe('Unstructured', () => { + describe('init', () => { + it('should create an instance with API key from environment', () => { + expect(client).toBeInstanceOf(Unstructured); + }); + + it('should create an instance with provided API key', () => { + const customUnstructured = new Unstructured('custom-api-key'); + expect(customUnstructured).toBeInstanceOf(Unstructured); + }); + + it('should throw an error if no API key is provided or in environment', () => { + let defaultKey = UNSTRUCTURED_API_KEY; + UNSTRUCTURED_API_KEY = ''; + + expect(() => new Unstructured()).toThrow( + '"UNSTRUCTURED_API_KEY" variables are not set completely, please check your env', + ); + UNSTRUCTURED_API_KEY = defaultKey; + }); + }); + + describe('basic partition', () => { + it('should return empty arrays if partition response is not successful', async () => { + vi.spyOn(UnstructuredClient.prototype.general, 'partition').mockResolvedValue({ + statusCode: 400, + } as any); + + const result = await client.partition({ + fileContent: new Uint8Array(), + filename: 'test.txt', + }); + + expect(result.compositeElements).toEqual([]); + expect(result.originElements).toEqual([]); + }); + + it('should partition content successfully with default strategy', async () => { + vi.spyOn(UnstructuredClient.prototype.general, 'partition').mockResolvedValue( + mockPartitionResponse(AutoWithoutChunking), + ); + + const result = await client.partition({ + fileContent: new Uint8Array(), + filename: 'test.txt', + }); + + expect(result.compositeElements).toHaveLength(0); + expect(result.originElements).toHaveLength(12); + + expect(result.originElements[0].text).toBe('Multiple Sclerosis Journal 29(6)'); + expect(result.originElements[2].type).toBe('Table'); + }); + + it('should partition content successfully with fast strategy', async () => { + vi.spyOn(UnstructuredClient.prototype.general, 'partition').mockResolvedValue( + mockPartitionResponse(FastWithoutChunkingRaw), + ); + + const result = await client.partition({ + fileContent: new Uint8Array(), + filename: 'test.txt', + strategy: Strategy.Fast, + }); + + expect(result.compositeElements).toHaveLength(0); + expect(result.originElements).toHaveLength(82); + + expect(result.originElements[0].text).toBe('Multiple Sclerosis Journal 29(6)'); + expect(result.originElements.every((item) => item.text !== 'Table')).toBeTruthy(); + }); + }); + + describe('partition with chunk strategy', () => { + it('should use provided chunking strategy with Table', async () => { + vi.spyOn(UnstructuredClient.prototype.general, 'partition').mockResolvedValue( + mockPartitionResponse(AutoWithChunkingRaw), + ); + + const result = await client.partition({ + fileContent: new Uint8Array(), + filename: 'test.txt', + chunkingStrategy: ChunkingStrategy.Basic, + }); + + expect(result.compositeElements).toHaveLength(6); + expect(result.originElements).toHaveLength(12); + + expect(result.originElements).toEqual(AutoWithChunkingOutput.originElements); + expect(result.originElements).toEqual(AutoWithChunkingOutput.originElements); + }); + + it.skip('should error', async () => { + vi.spyOn(UnstructuredClient.prototype.general, 'partition').mockResolvedValue( + mockPartitionResponse([ + { + type: 'CompositeElement', + element_id: '32855cf6-5605-4a8e-97a3-3ac0b509b725', + text: 'abc', + metadata: { + filetype: 'application/pdf', + languages: ['eng'], + page_number: 1, + orig_elements: 'e==', + filename: 'table-parse.pdf', + }, + }, + ]), + ); + try { + await client.partition({ + fileContent: new Uint8Array(), + filename: 'test.txt', + chunkingStrategy: ChunkingStrategy.Basic, + }); + } catch (e) { + expect(e).toThrowError('unexpected end of file'); + } + }); + }); +}); diff --git a/src/libs/unstructured/index.ts b/src/libs/unstructured/index.ts new file mode 100644 index 000000000000..b4270e7eb67f --- /dev/null +++ b/src/libs/unstructured/index.ts @@ -0,0 +1,166 @@ +import zlib from 'node:zlib'; +import pMap from 'p-map'; +import { UnstructuredClient } from 'unstructured-client'; +import { Strategy } from 'unstructured-client/sdk/models/shared'; +import { PartitionResponse } from 'unstructured-client/src/sdk/models/operations'; + +import { knowledgeEnv } from '@/config/knowledge'; + +export enum ChunkingStrategy { + Basic = 'basic', + ByPage = 'by_page', + BySimilarity = 'by_similarity', + ByTitle = 'by_title', +} + +export interface UnstructuredPartitionElement { + compositeId?: string; + element_id: string; + metadata: Metadata; + text: string; + type: string; +} + +export interface Metadata { + coordinates: Coordinates; + filename: string; + filetype: string; + image_base64?: string; + image_mime_type?: string; + is_continuation?: boolean; + languages: string[]; + orig_elements?: string; + page_name?: string; + page_number: number; + parent_id?: string; + text_as_html?: string; +} + +export interface Coordinates { + layout_height: number; + layout_width: number; + points: number[][]; + system: string; +} + +class UnstructuredError extends Error { + constructor(message: string) { + super(message); + this.name = 'Unstructured'; + } +} + +interface PartitionParameters { + chunkingStrategy?: ChunkingStrategy; + fileContent: Uint8Array; + filename: string; + maxCharacters?: number; + onResponse?: (response: PartitionResponse) => void; + strategy?: Strategy; +} + +export class Unstructured { + private client: UnstructuredClient; + + constructor(apikey?: string) { + if (!apikey && !knowledgeEnv.UNSTRUCTURED_API_KEY) + throw new UnstructuredError( + `"UNSTRUCTURED_API_KEY" variables are not set completely, please check your env`, + ); + + this.client = new UnstructuredClient({ + security: { apiKeyAuth: apikey || knowledgeEnv.UNSTRUCTURED_API_KEY! }, + serverURL: knowledgeEnv.UNSTRUCTURED_SERVER_URL, + }); + } + + async partition(params: PartitionParameters): Promise<{ + compositeElements: UnstructuredPartitionElement[]; + originElements: UnstructuredPartitionElement[]; + }> { + const hasChunkingStrategy = !!params.chunkingStrategy; + const response = await this.client.general.partition({ + partitionParameters: { + chunkingStrategy: params.chunkingStrategy, + coordinates: true, + // extractImageBlockTypes: ['Image'], + files: { content: params.fileContent, fileName: params.filename }, + + includeOrigElements: true, + maxCharacters: params.maxCharacters || 800, + strategy: params.strategy, + uniqueElementIds: true, + }, + }); + + if (response.statusCode === 200) { + // after finish partition, we need to filter out some elements + const elements = response.elements as UnstructuredPartitionElement[]; + + params.onResponse?.(response); + + let originElements: UnstructuredPartitionElement[] = []; + let compositeElements: UnstructuredPartitionElement[] = []; + + if (hasChunkingStrategy) { + await pMap(elements, async (element) => { + // Your Base64 encoded string + const base64EncodedString = element.metadata.orig_elements as string; + delete element.metadata.orig_elements; + + if (!base64EncodedString) return; + + // Step 1: Decode the Base64 encoded string to binary + const binaryBuffer = Buffer.from(base64EncodedString, 'base64'); + + // Step 2: Decompress the binary data + const elements = await this.decompressGzip(binaryBuffer); + + // if element is Table type then get the origin + if (element.type === 'Table') { + // skip continuation table due to being split by chunk strategy + if (element.metadata.is_continuation) { + return; + } + + compositeElements = [...compositeElements, elements[0]]; + originElements = [...originElements, elements[0]]; + return; + } + + compositeElements = [...compositeElements, element]; + + originElements = originElements.concat( + elements.map( + (e) => ({ ...e, compositeId: element.element_id }) as UnstructuredPartitionElement, + ), + ); + }); + } else { + originElements = elements; + } + + return { compositeElements, originElements }; + } else { + return { compositeElements: [], originElements: [] }; + } + } + + private async decompressGzip(data: Buffer): Promise { + return new Promise((resolve, reject) => { + zlib.inflate(data, (err, decompressedBuffer) => { + if (err) { + reject(err); + } + + // Step 3: Convert the decompressed buffer to a string + let decompressedString = decompressedBuffer.toString('utf8'); + + // Step 4: Parse the JSON string + let jsonObject = JSON.parse(decompressedString); + + resolve(jsonObject); + }); + }); + } +} diff --git a/src/locales/default/components.ts b/src/locales/default/components.ts index a200947922d7..20cd09b12322 100644 --- a/src/locales/default/components.ts +++ b/src/locales/default/components.ts @@ -5,6 +5,68 @@ export default { dragFileTitle: '上传文件', dragTitle: '上传图片', }, + FileManager: { + actions: { + addToKnowledgeBase: '添加到知识库', + addToOtherKnowledgeBase: '添加到其他知识库', + batchChunking: '批量分块', + chunking: '分块', + chunkingTooltip: '将文件拆分为多个文本块并向量化后,可用于语义检索和文件对话', + confirmDelete: '即将删除该文件,删除后该将无法找回,请确认你的操作', + confirmDeleteMultiFiles: + '即将删除选中的 {{count}} 个文件,删除后该将无法找回,请确认你的操作', + confirmRemoveFromKnowledgeBase: + '即将从知识库中移除选中的 {{count}} 个文件,移除后文件仍然可以在全部文件中查看,请确认你的操作', + copyUrl: '复制链接', + copyUrlSuccess: '文件地址复制成功', + createChunkingTask: '准备中...', + deleteSuccess: '文件删除成功', + downloading: '文件下载中...', + removeFromKnowledgeBase: '从知识库中移除', + removeFromKnowledgeBaseSuccess: '文件移除成功', + }, + bottom: '已经到底啦', + config: { + showFilesInKnowledgeBase: '显示知识库中内容', + }, + emptyStatus: { + actions: { + file: '上传文件', + folder: '上传文件夹', + knowledgeBase: '新建知识库', + }, + or: '或者', + title: '将文件或文件夹拖到这里', + }, + title: { + createdAt: '创建时间', + size: '大小', + title: '文件', + }, + total: { + fileCount: '共 {{count}} 项', + selectedCount: '已选 {{count}} 项', + }, + }, + FileParsingStatus: { + chunks: { + embeddingStatus: { + empty: '文本块尚未完全向量化,将导致语义检索功能不可用,为提升检索质量,请对文本块向量化', + processing: '文本块正在向量化,请耐心等待', + success: '当前文本块均已向量化', + }, + embeddings: '向量化', + status: { + error: '分块失败', + errorResult: '分块失败,请检查后重试。失败原因:', + processing: '分块中', + processingTip: '服务端正在拆分文本块,关闭页面不影响分块进度', + }, + }, + }, + GoBack: { + back: '返回', + }, ModelSelect: { featureTag: { custom: '自定义模型,默认设定同时支持函数调用与视觉识别,请根据实际情况验证上述能力的可用性', diff --git a/src/utils/colorUtils.ts b/src/utils/colorUtils.ts new file mode 100644 index 000000000000..ed55f8338b8f --- /dev/null +++ b/src/utils/colorUtils.ts @@ -0,0 +1,19 @@ +import chroma from 'chroma-js'; + +export const convertAlphaToSolid = (foreground: string, background: string): string => { + const fgColor = chroma(foreground); + const bgColor = chroma(background); + + const alpha = fgColor.alpha(); + const alphaComplement = 1 - alpha; + + const mixedColor = [ + fgColor.get('rgb.r') * alpha + bgColor.get('rgb.r') * alphaComplement, + fgColor.get('rgb.g') * alpha + bgColor.get('rgb.g') * alphaComplement, + fgColor.get('rgb.b') * alpha + bgColor.get('rgb.b') * alphaComplement, + ]; + + const resultColor = chroma(mixedColor); + + return resultColor.hex(); +}; diff --git a/src/utils/sleep.ts b/src/utils/sleep.ts new file mode 100644 index 000000000000..e45ce8f4d89a --- /dev/null +++ b/src/utils/sleep.ts @@ -0,0 +1,4 @@ +export const sleep = async (ms: number) => + await new Promise((resolve) => { + setTimeout(resolve, ms); + });