├── .github
└── FUNDING.yml
├── .gitignore
├── LICENSE
├── README.md
└── bert_summarizer_notebook.ipynb
/.github/FUNDING.yml:
--------------------------------------------------------------------------------
1 | custom: ['https://www.buymeacoffee.com/bhattbhavesh91']
2 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | MANIFEST
2 | build
3 | dist
4 | _build
5 | docs/man/*.gz
6 | docs/source/api/generated
7 | docs/source/config.rst
8 | docs/gh-pages
9 | notebook/i18n/*/LC_MESSAGES/*.mo
10 | notebook/i18n/*/LC_MESSAGES/nbjs.json
11 | notebook/static/components
12 | notebook/static/style/*.min.css*
13 | notebook/static/*/js/built/
14 | notebook/static/*/built/
15 | notebook/static/built/
16 | notebook/static/*/js/main.min.js*
17 | notebook/static/lab/*bundle.js
18 | node_modules
19 | *.py[co]
20 | __pycache__
21 | *.egg-info
22 | *~
23 | *.bak
24 | .ipynb_checkpoints
25 | .tox
26 | .DS_Store
27 | \#*#
28 | .#*
29 | .coverage
30 | .pytest_cache
31 | src
32 |
33 | *.swp
34 | *.map
35 | .idea/
36 | Read the Docs
37 | config.rst
38 |
39 | /.project
40 | /.pydevproject
41 |
42 | package-lock.json
43 | geckodriver.log
44 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | Apache License
2 | Version 2.0, January 2004
3 | http://www.apache.org/licenses/
4 |
5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
6 |
7 | 1. Definitions.
8 |
9 | "License" shall mean the terms and conditions for use, reproduction,
10 | and distribution as defined by Sections 1 through 9 of this document.
11 |
12 | "Licensor" shall mean the copyright owner or entity authorized by
13 | the copyright owner that is granting the License.
14 |
15 | "Legal Entity" shall mean the union of the acting entity and all
16 | other entities that control, are controlled by, or are under common
17 | control with that entity. For the purposes of this definition,
18 | "control" means (i) the power, direct or indirect, to cause the
19 | direction or management of such entity, whether by contract or
20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the
21 | outstanding shares, or (iii) beneficial ownership of such entity.
22 |
23 | "You" (or "Your") shall mean an individual or Legal Entity
24 | exercising permissions granted by this License.
25 |
26 | "Source" form shall mean the preferred form for making modifications,
27 | including but not limited to software source code, documentation
28 | source, and configuration files.
29 |
30 | "Object" form shall mean any form resulting from mechanical
31 | transformation or translation of a Source form, including but
32 | not limited to compiled object code, generated documentation,
33 | and conversions to other media types.
34 |
35 | "Work" shall mean the work of authorship, whether in Source or
36 | Object form, made available under the License, as indicated by a
37 | copyright notice that is included in or attached to the work
38 | (an example is provided in the Appendix below).
39 |
40 | "Derivative Works" shall mean any work, whether in Source or Object
41 | form, that is based on (or derived from) the Work and for which the
42 | editorial revisions, annotations, elaborations, or other modifications
43 | represent, as a whole, an original work of authorship. For the purposes
44 | of this License, Derivative Works shall not include works that remain
45 | separable from, or merely link (or bind by name) to the interfaces of,
46 | the Work and Derivative Works thereof.
47 |
48 | "Contribution" shall mean any work of authorship, including
49 | the original version of the Work and any modifications or additions
50 | to that Work or Derivative Works thereof, that is intentionally
51 | submitted to Licensor for inclusion in the Work by the copyright owner
52 | or by an individual or Legal Entity authorized to submit on behalf of
53 | the copyright owner. For the purposes of this definition, "submitted"
54 | means any form of electronic, verbal, or written communication sent
55 | to the Licensor or its representatives, including but not limited to
56 | communication on electronic mailing lists, source code control systems,
57 | and issue tracking systems that are managed by, or on behalf of, the
58 | Licensor for the purpose of discussing and improving the Work, but
59 | excluding communication that is conspicuously marked or otherwise
60 | designated in writing by the copyright owner as "Not a Contribution."
61 |
62 | "Contributor" shall mean Licensor and any individual or Legal Entity
63 | on behalf of whom a Contribution has been received by Licensor and
64 | subsequently incorporated within the Work.
65 |
66 | 2. Grant of Copyright License. Subject to the terms and conditions of
67 | this License, each Contributor hereby grants to You a perpetual,
68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable
69 | copyright license to reproduce, prepare Derivative Works of,
70 | publicly display, publicly perform, sublicense, and distribute the
71 | Work and such Derivative Works in Source or Object form.
72 |
73 | 3. Grant of Patent License. Subject to the terms and conditions of
74 | this License, each Contributor hereby grants to You a perpetual,
75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable
76 | (except as stated in this section) patent license to make, have made,
77 | use, offer to sell, sell, import, and otherwise transfer the Work,
78 | where such license applies only to those patent claims licensable
79 | by such Contributor that are necessarily infringed by their
80 | Contribution(s) alone or by combination of their Contribution(s)
81 | with the Work to which such Contribution(s) was submitted. If You
82 | institute patent litigation against any entity (including a
83 | cross-claim or counterclaim in a lawsuit) alleging that the Work
84 | or a Contribution incorporated within the Work constitutes direct
85 | or contributory patent infringement, then any patent licenses
86 | granted to You under this License for that Work shall terminate
87 | as of the date such litigation is filed.
88 |
89 | 4. Redistribution. You may reproduce and distribute copies of the
90 | Work or Derivative Works thereof in any medium, with or without
91 | modifications, and in Source or Object form, provided that You
92 | meet the following conditions:
93 |
94 | (a) You must give any other recipients of the Work or
95 | Derivative Works a copy of this License; and
96 |
97 | (b) You must cause any modified files to carry prominent notices
98 | stating that You changed the files; and
99 |
100 | (c) You must retain, in the Source form of any Derivative Works
101 | that You distribute, all copyright, patent, trademark, and
102 | attribution notices from the Source form of the Work,
103 | excluding those notices that do not pertain to any part of
104 | the Derivative Works; and
105 |
106 | (d) If the Work includes a "NOTICE" text file as part of its
107 | distribution, then any Derivative Works that You distribute must
108 | include a readable copy of the attribution notices contained
109 | within such NOTICE file, excluding those notices that do not
110 | pertain to any part of the Derivative Works, in at least one
111 | of the following places: within a NOTICE text file distributed
112 | as part of the Derivative Works; within the Source form or
113 | documentation, if provided along with the Derivative Works; or,
114 | within a display generated by the Derivative Works, if and
115 | wherever such third-party notices normally appear. The contents
116 | of the NOTICE file are for informational purposes only and
117 | do not modify the License. You may add Your own attribution
118 | notices within Derivative Works that You distribute, alongside
119 | or as an addendum to the NOTICE text from the Work, provided
120 | that such additional attribution notices cannot be construed
121 | as modifying the License.
122 |
123 | You may add Your own copyright statement to Your modifications and
124 | may provide additional or different license terms and conditions
125 | for use, reproduction, or distribution of Your modifications, or
126 | for any such Derivative Works as a whole, provided Your use,
127 | reproduction, and distribution of the Work otherwise complies with
128 | the conditions stated in this License.
129 |
130 | 5. Submission of Contributions. Unless You explicitly state otherwise,
131 | any Contribution intentionally submitted for inclusion in the Work
132 | by You to the Licensor shall be under the terms and conditions of
133 | this License, without any additional terms or conditions.
134 | Notwithstanding the above, nothing herein shall supersede or modify
135 | the terms of any separate license agreement you may have executed
136 | with Licensor regarding such Contributions.
137 |
138 | 6. Trademarks. This License does not grant permission to use the trade
139 | names, trademarks, service marks, or product names of the Licensor,
140 | except as required for reasonable and customary use in describing the
141 | origin of the Work and reproducing the content of the NOTICE file.
142 |
143 | 7. Disclaimer of Warranty. Unless required by applicable law or
144 | agreed to in writing, Licensor provides the Work (and each
145 | Contributor provides its Contributions) on an "AS IS" BASIS,
146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
147 | implied, including, without limitation, any warranties or conditions
148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
149 | PARTICULAR PURPOSE. You are solely responsible for determining the
150 | appropriateness of using or redistributing the Work and assume any
151 | risks associated with Your exercise of permissions under this License.
152 |
153 | 8. Limitation of Liability. In no event and under no legal theory,
154 | whether in tort (including negligence), contract, or otherwise,
155 | unless required by applicable law (such as deliberate and grossly
156 | negligent acts) or agreed to in writing, shall any Contributor be
157 | liable to You for damages, including any direct, indirect, special,
158 | incidental, or consequential damages of any character arising as a
159 | result of this License or out of the use or inability to use the
160 | Work (including but not limited to damages for loss of goodwill,
161 | work stoppage, computer failure or malfunction, or any and all
162 | other commercial damages or losses), even if such Contributor
163 | has been advised of the possibility of such damages.
164 |
165 | 9. Accepting Warranty or Additional Liability. While redistributing
166 | the Work or Derivative Works thereof, You may choose to offer,
167 | and charge a fee for, acceptance of support, warranty, indemnity,
168 | or other liability obligations and/or rights consistent with this
169 | License. However, in accepting such obligations, You may act only
170 | on Your own behalf and on Your sole responsibility, not on behalf
171 | of any other Contributor, and only if You agree to indemnify,
172 | defend, and hold each Contributor harmless for any liability
173 | incurred by, or claims asserted against, such Contributor by reason
174 | of your accepting any such warranty or additional liability.
175 |
176 | END OF TERMS AND CONDITIONS
177 |
178 | APPENDIX: How to apply the Apache License to your work.
179 |
180 | To apply the Apache License to your work, attach the following
181 | boilerplate notice, with the fields enclosed by brackets "[]"
182 | replaced with your own identifying information. (Don't include
183 | the brackets!) The text should be enclosed in the appropriate
184 | comment syntax for the file format. We also recommend that a
185 | file or class name and description of purpose be included on the
186 | same "printed page" as the copyright notice for easier
187 | identification within third-party archives.
188 |
189 | Copyright [yyyy] [name of copyright owner]
190 |
191 | Licensed under the Apache License, Version 2.0 (the "License");
192 | you may not use this file except in compliance with the License.
193 | You may obtain a copy of the License at
194 |
195 | http://www.apache.org/licenses/LICENSE-2.0
196 |
197 | Unless required by applicable law or agreed to in writing, software
198 | distributed under the License is distributed on an "AS IS" BASIS,
199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
200 | See the License for the specific language governing permissions and
201 | limitations under the License.
202 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Text summarization with BERT using bert-extractive-summarizer
2 |
3 | **If you like my work, you can support me by buying me a coffee by clicking the link below**
4 |
5 |
6 |
7 | ## To view the video
8 |
9 |
10 |
11 |  |
12 |
13 |
14 |
15 | Or click on the image below
16 |
17 | [](http://www.youtube.com/watch?v=pTHBZ6AyzOg)
18 |
19 | ### Want to know more about me?
20 | ## Follow Me
21 |
22 |
23 |
24 |
25 |
26 |
27 | Show your support by starring the repository 🙂
28 |
--------------------------------------------------------------------------------
/bert_summarizer_notebook.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "nbformat": 4,
3 | "nbformat_minor": 0,
4 | "metadata": {
5 | "colab": {
6 | "name": "bert-summarizer-notebook.ipynb",
7 | "provenance": []
8 | },
9 | "kernelspec": {
10 | "name": "python3",
11 | "display_name": "Python 3"
12 | },
13 | "accelerator": "GPU",
14 | "widgets": {
15 | "application/vnd.jupyter.widget-state+json": {
16 | "1ddea2fadcf54f54af27b06de3f6bfbb": {
17 | "model_module": "@jupyter-widgets/controls",
18 | "model_name": "HBoxModel",
19 | "state": {
20 | "_view_name": "HBoxView",
21 | "_dom_classes": [],
22 | "_model_name": "HBoxModel",
23 | "_view_module": "@jupyter-widgets/controls",
24 | "_model_module_version": "1.5.0",
25 | "_view_count": null,
26 | "_view_module_version": "1.5.0",
27 | "box_style": "",
28 | "layout": "IPY_MODEL_d3c0f66b77244bef9490b1abb203194d",
29 | "_model_module": "@jupyter-widgets/controls",
30 | "children": [
31 | "IPY_MODEL_2cdf125675094fde8c360a73f8a22496",
32 | "IPY_MODEL_72dcaad2fb604c16962dfd021e75728b"
33 | ]
34 | }
35 | },
36 | "d3c0f66b77244bef9490b1abb203194d": {
37 | "model_module": "@jupyter-widgets/base",
38 | "model_name": "LayoutModel",
39 | "state": {
40 | "_view_name": "LayoutView",
41 | "grid_template_rows": null,
42 | "right": null,
43 | "justify_content": null,
44 | "_view_module": "@jupyter-widgets/base",
45 | "overflow": null,
46 | "_model_module_version": "1.2.0",
47 | "_view_count": null,
48 | "flex_flow": null,
49 | "width": null,
50 | "min_width": null,
51 | "border": null,
52 | "align_items": null,
53 | "bottom": null,
54 | "_model_module": "@jupyter-widgets/base",
55 | "top": null,
56 | "grid_column": null,
57 | "overflow_y": null,
58 | "overflow_x": null,
59 | "grid_auto_flow": null,
60 | "grid_area": null,
61 | "grid_template_columns": null,
62 | "flex": null,
63 | "_model_name": "LayoutModel",
64 | "justify_items": null,
65 | "grid_row": null,
66 | "max_height": null,
67 | "align_content": null,
68 | "visibility": null,
69 | "align_self": null,
70 | "height": null,
71 | "min_height": null,
72 | "padding": null,
73 | "grid_auto_rows": null,
74 | "grid_gap": null,
75 | "max_width": null,
76 | "order": null,
77 | "_view_module_version": "1.2.0",
78 | "grid_template_areas": null,
79 | "object_position": null,
80 | "object_fit": null,
81 | "grid_auto_columns": null,
82 | "margin": null,
83 | "display": null,
84 | "left": null
85 | }
86 | },
87 | "2cdf125675094fde8c360a73f8a22496": {
88 | "model_module": "@jupyter-widgets/controls",
89 | "model_name": "FloatProgressModel",
90 | "state": {
91 | "_view_name": "ProgressView",
92 | "style": "IPY_MODEL_156cc1a1dd494b6fa3872e801619a0d0",
93 | "_dom_classes": [],
94 | "description": "Downloading: 100%",
95 | "_model_name": "FloatProgressModel",
96 | "bar_style": "success",
97 | "max": 434,
98 | "_view_module": "@jupyter-widgets/controls",
99 | "_model_module_version": "1.5.0",
100 | "value": 434,
101 | "_view_count": null,
102 | "_view_module_version": "1.5.0",
103 | "orientation": "horizontal",
104 | "min": 0,
105 | "description_tooltip": null,
106 | "_model_module": "@jupyter-widgets/controls",
107 | "layout": "IPY_MODEL_26e8689652c84532ab352e23bfa7b993"
108 | }
109 | },
110 | "72dcaad2fb604c16962dfd021e75728b": {
111 | "model_module": "@jupyter-widgets/controls",
112 | "model_name": "HTMLModel",
113 | "state": {
114 | "_view_name": "HTMLView",
115 | "style": "IPY_MODEL_c372a837b7114fe8a8cb82b1a7917942",
116 | "_dom_classes": [],
117 | "description": "",
118 | "_model_name": "HTMLModel",
119 | "placeholder": "",
120 | "_view_module": "@jupyter-widgets/controls",
121 | "_model_module_version": "1.5.0",
122 | "value": " 434/434 [00:45<00:00, 9.57B/s]",
123 | "_view_count": null,
124 | "_view_module_version": "1.5.0",
125 | "description_tooltip": null,
126 | "_model_module": "@jupyter-widgets/controls",
127 | "layout": "IPY_MODEL_0fe7ee5433f545e29058ba5d1bb2f901"
128 | }
129 | },
130 | "156cc1a1dd494b6fa3872e801619a0d0": {
131 | "model_module": "@jupyter-widgets/controls",
132 | "model_name": "ProgressStyleModel",
133 | "state": {
134 | "_view_name": "StyleView",
135 | "_model_name": "ProgressStyleModel",
136 | "description_width": "initial",
137 | "_view_module": "@jupyter-widgets/base",
138 | "_model_module_version": "1.5.0",
139 | "_view_count": null,
140 | "_view_module_version": "1.2.0",
141 | "bar_color": null,
142 | "_model_module": "@jupyter-widgets/controls"
143 | }
144 | },
145 | "26e8689652c84532ab352e23bfa7b993": {
146 | "model_module": "@jupyter-widgets/base",
147 | "model_name": "LayoutModel",
148 | "state": {
149 | "_view_name": "LayoutView",
150 | "grid_template_rows": null,
151 | "right": null,
152 | "justify_content": null,
153 | "_view_module": "@jupyter-widgets/base",
154 | "overflow": null,
155 | "_model_module_version": "1.2.0",
156 | "_view_count": null,
157 | "flex_flow": null,
158 | "width": null,
159 | "min_width": null,
160 | "border": null,
161 | "align_items": null,
162 | "bottom": null,
163 | "_model_module": "@jupyter-widgets/base",
164 | "top": null,
165 | "grid_column": null,
166 | "overflow_y": null,
167 | "overflow_x": null,
168 | "grid_auto_flow": null,
169 | "grid_area": null,
170 | "grid_template_columns": null,
171 | "flex": null,
172 | "_model_name": "LayoutModel",
173 | "justify_items": null,
174 | "grid_row": null,
175 | "max_height": null,
176 | "align_content": null,
177 | "visibility": null,
178 | "align_self": null,
179 | "height": null,
180 | "min_height": null,
181 | "padding": null,
182 | "grid_auto_rows": null,
183 | "grid_gap": null,
184 | "max_width": null,
185 | "order": null,
186 | "_view_module_version": "1.2.0",
187 | "grid_template_areas": null,
188 | "object_position": null,
189 | "object_fit": null,
190 | "grid_auto_columns": null,
191 | "margin": null,
192 | "display": null,
193 | "left": null
194 | }
195 | },
196 | "c372a837b7114fe8a8cb82b1a7917942": {
197 | "model_module": "@jupyter-widgets/controls",
198 | "model_name": "DescriptionStyleModel",
199 | "state": {
200 | "_view_name": "StyleView",
201 | "_model_name": "DescriptionStyleModel",
202 | "description_width": "",
203 | "_view_module": "@jupyter-widgets/base",
204 | "_model_module_version": "1.5.0",
205 | "_view_count": null,
206 | "_view_module_version": "1.2.0",
207 | "_model_module": "@jupyter-widgets/controls"
208 | }
209 | },
210 | "0fe7ee5433f545e29058ba5d1bb2f901": {
211 | "model_module": "@jupyter-widgets/base",
212 | "model_name": "LayoutModel",
213 | "state": {
214 | "_view_name": "LayoutView",
215 | "grid_template_rows": null,
216 | "right": null,
217 | "justify_content": null,
218 | "_view_module": "@jupyter-widgets/base",
219 | "overflow": null,
220 | "_model_module_version": "1.2.0",
221 | "_view_count": null,
222 | "flex_flow": null,
223 | "width": null,
224 | "min_width": null,
225 | "border": null,
226 | "align_items": null,
227 | "bottom": null,
228 | "_model_module": "@jupyter-widgets/base",
229 | "top": null,
230 | "grid_column": null,
231 | "overflow_y": null,
232 | "overflow_x": null,
233 | "grid_auto_flow": null,
234 | "grid_area": null,
235 | "grid_template_columns": null,
236 | "flex": null,
237 | "_model_name": "LayoutModel",
238 | "justify_items": null,
239 | "grid_row": null,
240 | "max_height": null,
241 | "align_content": null,
242 | "visibility": null,
243 | "align_self": null,
244 | "height": null,
245 | "min_height": null,
246 | "padding": null,
247 | "grid_auto_rows": null,
248 | "grid_gap": null,
249 | "max_width": null,
250 | "order": null,
251 | "_view_module_version": "1.2.0",
252 | "grid_template_areas": null,
253 | "object_position": null,
254 | "object_fit": null,
255 | "grid_auto_columns": null,
256 | "margin": null,
257 | "display": null,
258 | "left": null
259 | }
260 | },
261 | "6325df1ce8864fb3b5d0bff032da05a1": {
262 | "model_module": "@jupyter-widgets/controls",
263 | "model_name": "HBoxModel",
264 | "state": {
265 | "_view_name": "HBoxView",
266 | "_dom_classes": [],
267 | "_model_name": "HBoxModel",
268 | "_view_module": "@jupyter-widgets/controls",
269 | "_model_module_version": "1.5.0",
270 | "_view_count": null,
271 | "_view_module_version": "1.5.0",
272 | "box_style": "",
273 | "layout": "IPY_MODEL_a646da07b54441f9be91881d5d9fad80",
274 | "_model_module": "@jupyter-widgets/controls",
275 | "children": [
276 | "IPY_MODEL_dd3df885e3b747f3b73dd83128df1ec4",
277 | "IPY_MODEL_4ae4e62c04214b2897d1e1bf10291bf8"
278 | ]
279 | }
280 | },
281 | "a646da07b54441f9be91881d5d9fad80": {
282 | "model_module": "@jupyter-widgets/base",
283 | "model_name": "LayoutModel",
284 | "state": {
285 | "_view_name": "LayoutView",
286 | "grid_template_rows": null,
287 | "right": null,
288 | "justify_content": null,
289 | "_view_module": "@jupyter-widgets/base",
290 | "overflow": null,
291 | "_model_module_version": "1.2.0",
292 | "_view_count": null,
293 | "flex_flow": null,
294 | "width": null,
295 | "min_width": null,
296 | "border": null,
297 | "align_items": null,
298 | "bottom": null,
299 | "_model_module": "@jupyter-widgets/base",
300 | "top": null,
301 | "grid_column": null,
302 | "overflow_y": null,
303 | "overflow_x": null,
304 | "grid_auto_flow": null,
305 | "grid_area": null,
306 | "grid_template_columns": null,
307 | "flex": null,
308 | "_model_name": "LayoutModel",
309 | "justify_items": null,
310 | "grid_row": null,
311 | "max_height": null,
312 | "align_content": null,
313 | "visibility": null,
314 | "align_self": null,
315 | "height": null,
316 | "min_height": null,
317 | "padding": null,
318 | "grid_auto_rows": null,
319 | "grid_gap": null,
320 | "max_width": null,
321 | "order": null,
322 | "_view_module_version": "1.2.0",
323 | "grid_template_areas": null,
324 | "object_position": null,
325 | "object_fit": null,
326 | "grid_auto_columns": null,
327 | "margin": null,
328 | "display": null,
329 | "left": null
330 | }
331 | },
332 | "dd3df885e3b747f3b73dd83128df1ec4": {
333 | "model_module": "@jupyter-widgets/controls",
334 | "model_name": "FloatProgressModel",
335 | "state": {
336 | "_view_name": "ProgressView",
337 | "style": "IPY_MODEL_9e64745ad1c24886bb41cd83e60d97cd",
338 | "_dom_classes": [],
339 | "description": "Downloading: 100%",
340 | "_model_name": "FloatProgressModel",
341 | "bar_style": "success",
342 | "max": 1344997306,
343 | "_view_module": "@jupyter-widgets/controls",
344 | "_model_module_version": "1.5.0",
345 | "value": 1344997306,
346 | "_view_count": null,
347 | "_view_module_version": "1.5.0",
348 | "orientation": "horizontal",
349 | "min": 0,
350 | "description_tooltip": null,
351 | "_model_module": "@jupyter-widgets/controls",
352 | "layout": "IPY_MODEL_2550e787808642b28c9e694c20b682ad"
353 | }
354 | },
355 | "4ae4e62c04214b2897d1e1bf10291bf8": {
356 | "model_module": "@jupyter-widgets/controls",
357 | "model_name": "HTMLModel",
358 | "state": {
359 | "_view_name": "HTMLView",
360 | "style": "IPY_MODEL_30506f8609f74724859b617810b79416",
361 | "_dom_classes": [],
362 | "description": "",
363 | "_model_name": "HTMLModel",
364 | "placeholder": "",
365 | "_view_module": "@jupyter-widgets/controls",
366 | "_model_module_version": "1.5.0",
367 | "value": " 1.34G/1.34G [00:43<00:00, 31.2MB/s]",
368 | "_view_count": null,
369 | "_view_module_version": "1.5.0",
370 | "description_tooltip": null,
371 | "_model_module": "@jupyter-widgets/controls",
372 | "layout": "IPY_MODEL_24143e15fe744a6d92c526e19a17b0d4"
373 | }
374 | },
375 | "9e64745ad1c24886bb41cd83e60d97cd": {
376 | "model_module": "@jupyter-widgets/controls",
377 | "model_name": "ProgressStyleModel",
378 | "state": {
379 | "_view_name": "StyleView",
380 | "_model_name": "ProgressStyleModel",
381 | "description_width": "initial",
382 | "_view_module": "@jupyter-widgets/base",
383 | "_model_module_version": "1.5.0",
384 | "_view_count": null,
385 | "_view_module_version": "1.2.0",
386 | "bar_color": null,
387 | "_model_module": "@jupyter-widgets/controls"
388 | }
389 | },
390 | "2550e787808642b28c9e694c20b682ad": {
391 | "model_module": "@jupyter-widgets/base",
392 | "model_name": "LayoutModel",
393 | "state": {
394 | "_view_name": "LayoutView",
395 | "grid_template_rows": null,
396 | "right": null,
397 | "justify_content": null,
398 | "_view_module": "@jupyter-widgets/base",
399 | "overflow": null,
400 | "_model_module_version": "1.2.0",
401 | "_view_count": null,
402 | "flex_flow": null,
403 | "width": null,
404 | "min_width": null,
405 | "border": null,
406 | "align_items": null,
407 | "bottom": null,
408 | "_model_module": "@jupyter-widgets/base",
409 | "top": null,
410 | "grid_column": null,
411 | "overflow_y": null,
412 | "overflow_x": null,
413 | "grid_auto_flow": null,
414 | "grid_area": null,
415 | "grid_template_columns": null,
416 | "flex": null,
417 | "_model_name": "LayoutModel",
418 | "justify_items": null,
419 | "grid_row": null,
420 | "max_height": null,
421 | "align_content": null,
422 | "visibility": null,
423 | "align_self": null,
424 | "height": null,
425 | "min_height": null,
426 | "padding": null,
427 | "grid_auto_rows": null,
428 | "grid_gap": null,
429 | "max_width": null,
430 | "order": null,
431 | "_view_module_version": "1.2.0",
432 | "grid_template_areas": null,
433 | "object_position": null,
434 | "object_fit": null,
435 | "grid_auto_columns": null,
436 | "margin": null,
437 | "display": null,
438 | "left": null
439 | }
440 | },
441 | "30506f8609f74724859b617810b79416": {
442 | "model_module": "@jupyter-widgets/controls",
443 | "model_name": "DescriptionStyleModel",
444 | "state": {
445 | "_view_name": "StyleView",
446 | "_model_name": "DescriptionStyleModel",
447 | "description_width": "",
448 | "_view_module": "@jupyter-widgets/base",
449 | "_model_module_version": "1.5.0",
450 | "_view_count": null,
451 | "_view_module_version": "1.2.0",
452 | "_model_module": "@jupyter-widgets/controls"
453 | }
454 | },
455 | "24143e15fe744a6d92c526e19a17b0d4": {
456 | "model_module": "@jupyter-widgets/base",
457 | "model_name": "LayoutModel",
458 | "state": {
459 | "_view_name": "LayoutView",
460 | "grid_template_rows": null,
461 | "right": null,
462 | "justify_content": null,
463 | "_view_module": "@jupyter-widgets/base",
464 | "overflow": null,
465 | "_model_module_version": "1.2.0",
466 | "_view_count": null,
467 | "flex_flow": null,
468 | "width": null,
469 | "min_width": null,
470 | "border": null,
471 | "align_items": null,
472 | "bottom": null,
473 | "_model_module": "@jupyter-widgets/base",
474 | "top": null,
475 | "grid_column": null,
476 | "overflow_y": null,
477 | "overflow_x": null,
478 | "grid_auto_flow": null,
479 | "grid_area": null,
480 | "grid_template_columns": null,
481 | "flex": null,
482 | "_model_name": "LayoutModel",
483 | "justify_items": null,
484 | "grid_row": null,
485 | "max_height": null,
486 | "align_content": null,
487 | "visibility": null,
488 | "align_self": null,
489 | "height": null,
490 | "min_height": null,
491 | "padding": null,
492 | "grid_auto_rows": null,
493 | "grid_gap": null,
494 | "max_width": null,
495 | "order": null,
496 | "_view_module_version": "1.2.0",
497 | "grid_template_areas": null,
498 | "object_position": null,
499 | "object_fit": null,
500 | "grid_auto_columns": null,
501 | "margin": null,
502 | "display": null,
503 | "left": null
504 | }
505 | },
506 | "9b2a34fac4414e58bd3c7440de663661": {
507 | "model_module": "@jupyter-widgets/controls",
508 | "model_name": "HBoxModel",
509 | "state": {
510 | "_view_name": "HBoxView",
511 | "_dom_classes": [],
512 | "_model_name": "HBoxModel",
513 | "_view_module": "@jupyter-widgets/controls",
514 | "_model_module_version": "1.5.0",
515 | "_view_count": null,
516 | "_view_module_version": "1.5.0",
517 | "box_style": "",
518 | "layout": "IPY_MODEL_995478437b39417fbbaefdb4f8ed8c31",
519 | "_model_module": "@jupyter-widgets/controls",
520 | "children": [
521 | "IPY_MODEL_a068918d9ed642aebedd4f69b1117110",
522 | "IPY_MODEL_6e390e78d1a34628b3d1e371cba6cdb8"
523 | ]
524 | }
525 | },
526 | "995478437b39417fbbaefdb4f8ed8c31": {
527 | "model_module": "@jupyter-widgets/base",
528 | "model_name": "LayoutModel",
529 | "state": {
530 | "_view_name": "LayoutView",
531 | "grid_template_rows": null,
532 | "right": null,
533 | "justify_content": null,
534 | "_view_module": "@jupyter-widgets/base",
535 | "overflow": null,
536 | "_model_module_version": "1.2.0",
537 | "_view_count": null,
538 | "flex_flow": null,
539 | "width": null,
540 | "min_width": null,
541 | "border": null,
542 | "align_items": null,
543 | "bottom": null,
544 | "_model_module": "@jupyter-widgets/base",
545 | "top": null,
546 | "grid_column": null,
547 | "overflow_y": null,
548 | "overflow_x": null,
549 | "grid_auto_flow": null,
550 | "grid_area": null,
551 | "grid_template_columns": null,
552 | "flex": null,
553 | "_model_name": "LayoutModel",
554 | "justify_items": null,
555 | "grid_row": null,
556 | "max_height": null,
557 | "align_content": null,
558 | "visibility": null,
559 | "align_self": null,
560 | "height": null,
561 | "min_height": null,
562 | "padding": null,
563 | "grid_auto_rows": null,
564 | "grid_gap": null,
565 | "max_width": null,
566 | "order": null,
567 | "_view_module_version": "1.2.0",
568 | "grid_template_areas": null,
569 | "object_position": null,
570 | "object_fit": null,
571 | "grid_auto_columns": null,
572 | "margin": null,
573 | "display": null,
574 | "left": null
575 | }
576 | },
577 | "a068918d9ed642aebedd4f69b1117110": {
578 | "model_module": "@jupyter-widgets/controls",
579 | "model_name": "FloatProgressModel",
580 | "state": {
581 | "_view_name": "ProgressView",
582 | "style": "IPY_MODEL_061d2049dd2e4b8da89f632ea0ec964d",
583 | "_dom_classes": [],
584 | "description": "Downloading: 100%",
585 | "_model_name": "FloatProgressModel",
586 | "bar_style": "success",
587 | "max": 231508,
588 | "_view_module": "@jupyter-widgets/controls",
589 | "_model_module_version": "1.5.0",
590 | "value": 231508,
591 | "_view_count": null,
592 | "_view_module_version": "1.5.0",
593 | "orientation": "horizontal",
594 | "min": 0,
595 | "description_tooltip": null,
596 | "_model_module": "@jupyter-widgets/controls",
597 | "layout": "IPY_MODEL_fb8c6afe56dd4295b30c6a09d541f921"
598 | }
599 | },
600 | "6e390e78d1a34628b3d1e371cba6cdb8": {
601 | "model_module": "@jupyter-widgets/controls",
602 | "model_name": "HTMLModel",
603 | "state": {
604 | "_view_name": "HTMLView",
605 | "style": "IPY_MODEL_e5abd3a72c93427986159fe62d2c8161",
606 | "_dom_classes": [],
607 | "description": "",
608 | "_model_name": "HTMLModel",
609 | "placeholder": "",
610 | "_view_module": "@jupyter-widgets/controls",
611 | "_model_module_version": "1.5.0",
612 | "value": " 232k/232k [00:00<00:00, 756kB/s]",
613 | "_view_count": null,
614 | "_view_module_version": "1.5.0",
615 | "description_tooltip": null,
616 | "_model_module": "@jupyter-widgets/controls",
617 | "layout": "IPY_MODEL_904e25aae6394be0baaa20cdfcc412f0"
618 | }
619 | },
620 | "061d2049dd2e4b8da89f632ea0ec964d": {
621 | "model_module": "@jupyter-widgets/controls",
622 | "model_name": "ProgressStyleModel",
623 | "state": {
624 | "_view_name": "StyleView",
625 | "_model_name": "ProgressStyleModel",
626 | "description_width": "initial",
627 | "_view_module": "@jupyter-widgets/base",
628 | "_model_module_version": "1.5.0",
629 | "_view_count": null,
630 | "_view_module_version": "1.2.0",
631 | "bar_color": null,
632 | "_model_module": "@jupyter-widgets/controls"
633 | }
634 | },
635 | "fb8c6afe56dd4295b30c6a09d541f921": {
636 | "model_module": "@jupyter-widgets/base",
637 | "model_name": "LayoutModel",
638 | "state": {
639 | "_view_name": "LayoutView",
640 | "grid_template_rows": null,
641 | "right": null,
642 | "justify_content": null,
643 | "_view_module": "@jupyter-widgets/base",
644 | "overflow": null,
645 | "_model_module_version": "1.2.0",
646 | "_view_count": null,
647 | "flex_flow": null,
648 | "width": null,
649 | "min_width": null,
650 | "border": null,
651 | "align_items": null,
652 | "bottom": null,
653 | "_model_module": "@jupyter-widgets/base",
654 | "top": null,
655 | "grid_column": null,
656 | "overflow_y": null,
657 | "overflow_x": null,
658 | "grid_auto_flow": null,
659 | "grid_area": null,
660 | "grid_template_columns": null,
661 | "flex": null,
662 | "_model_name": "LayoutModel",
663 | "justify_items": null,
664 | "grid_row": null,
665 | "max_height": null,
666 | "align_content": null,
667 | "visibility": null,
668 | "align_self": null,
669 | "height": null,
670 | "min_height": null,
671 | "padding": null,
672 | "grid_auto_rows": null,
673 | "grid_gap": null,
674 | "max_width": null,
675 | "order": null,
676 | "_view_module_version": "1.2.0",
677 | "grid_template_areas": null,
678 | "object_position": null,
679 | "object_fit": null,
680 | "grid_auto_columns": null,
681 | "margin": null,
682 | "display": null,
683 | "left": null
684 | }
685 | },
686 | "e5abd3a72c93427986159fe62d2c8161": {
687 | "model_module": "@jupyter-widgets/controls",
688 | "model_name": "DescriptionStyleModel",
689 | "state": {
690 | "_view_name": "StyleView",
691 | "_model_name": "DescriptionStyleModel",
692 | "description_width": "",
693 | "_view_module": "@jupyter-widgets/base",
694 | "_model_module_version": "1.5.0",
695 | "_view_count": null,
696 | "_view_module_version": "1.2.0",
697 | "_model_module": "@jupyter-widgets/controls"
698 | }
699 | },
700 | "904e25aae6394be0baaa20cdfcc412f0": {
701 | "model_module": "@jupyter-widgets/base",
702 | "model_name": "LayoutModel",
703 | "state": {
704 | "_view_name": "LayoutView",
705 | "grid_template_rows": null,
706 | "right": null,
707 | "justify_content": null,
708 | "_view_module": "@jupyter-widgets/base",
709 | "overflow": null,
710 | "_model_module_version": "1.2.0",
711 | "_view_count": null,
712 | "flex_flow": null,
713 | "width": null,
714 | "min_width": null,
715 | "border": null,
716 | "align_items": null,
717 | "bottom": null,
718 | "_model_module": "@jupyter-widgets/base",
719 | "top": null,
720 | "grid_column": null,
721 | "overflow_y": null,
722 | "overflow_x": null,
723 | "grid_auto_flow": null,
724 | "grid_area": null,
725 | "grid_template_columns": null,
726 | "flex": null,
727 | "_model_name": "LayoutModel",
728 | "justify_items": null,
729 | "grid_row": null,
730 | "max_height": null,
731 | "align_content": null,
732 | "visibility": null,
733 | "align_self": null,
734 | "height": null,
735 | "min_height": null,
736 | "padding": null,
737 | "grid_auto_rows": null,
738 | "grid_gap": null,
739 | "max_width": null,
740 | "order": null,
741 | "_view_module_version": "1.2.0",
742 | "grid_template_areas": null,
743 | "object_position": null,
744 | "object_fit": null,
745 | "grid_auto_columns": null,
746 | "margin": null,
747 | "display": null,
748 | "left": null
749 | }
750 | }
751 | }
752 | }
753 | },
754 | "cells": [
755 | {
756 | "cell_type": "code",
757 | "metadata": {
758 | "colab": {
759 | "base_uri": "https://localhost:8080/"
760 | },
761 | "id": "pdu6HdnKsaZR",
762 | "outputId": "cac0e0c8-f139-466d-b5e7-ee4d8fc46fd9"
763 | },
764 | "source": [
765 | "!pip install -q bert-extractive-summarizer\r\n",
766 | "!pip install -q spacy==2.1.3\r\n",
767 | "!pip install -q transformers==2.2.2\r\n",
768 | "!pip install -q neuralcoref"
769 | ],
770 | "execution_count": 1,
771 | "outputs": [
772 | {
773 | "output_type": "stream",
774 | "text": [
775 | "\u001b[K |████████████████████████████████| 1.8MB 10.4MB/s \n",
776 | "\u001b[K |████████████████████████████████| 3.2MB 36.3MB/s \n",
777 | "\u001b[K |████████████████████████████████| 890kB 59.0MB/s \n",
778 | "\u001b[?25h Building wheel for sacremoses (setup.py) ... \u001b[?25l\u001b[?25hdone\n",
779 | "\u001b[K |████████████████████████████████| 27.7MB 113kB/s \n",
780 | "\u001b[K |████████████████████████████████| 3.2MB 51.2MB/s \n",
781 | "\u001b[K |████████████████████████████████| 92kB 15.2MB/s \n",
782 | "\u001b[K |████████████████████████████████| 2.1MB 51.6MB/s \n",
783 | "\u001b[31mERROR: en-core-web-sm 2.2.5 has requirement spacy>=2.2.2, but you'll have spacy 2.1.3 which is incompatible.\u001b[0m\n",
784 | "\u001b[K |████████████████████████████████| 389kB 7.6MB/s \n",
785 | "\u001b[K |████████████████████████████████| 1.2MB 14.8MB/s \n",
786 | "\u001b[K |████████████████████████████████| 102kB 13.3MB/s \n",
787 | "\u001b[K |████████████████████████████████| 7.2MB 28.2MB/s \n",
788 | "\u001b[K |████████████████████████████████| 71kB 12.2MB/s \n",
789 | "\u001b[?25h Building wheel for boto3 (setup.py) ... \u001b[?25l\u001b[?25hdone\n",
790 | "\u001b[31mERROR: botocore 1.20.12 has requirement urllib3<1.27,>=1.25.4, but you'll have urllib3 1.24.3 which is incompatible.\u001b[0m\n",
791 | "\u001b[K |████████████████████████████████| 296kB 9.1MB/s \n",
792 | "\u001b[?25h"
793 | ],
794 | "name": "stdout"
795 | }
796 | ]
797 | },
798 | {
799 | "cell_type": "code",
800 | "metadata": {
801 | "id": "CF88ZdxOtAIG"
802 | },
803 | "source": [
804 | "from summarizer import Summarizer\r\n",
805 | "from pprint import pprint"
806 | ],
807 | "execution_count": 2,
808 | "outputs": []
809 | },
810 | {
811 | "cell_type": "code",
812 | "metadata": {
813 | "id": "edfIarrYtxYG"
814 | },
815 | "source": [
816 | "with open(\"The Present by Spencer Johnson.txt\", 'r') as file:\r\n",
817 | " data = file.read().replace('\\n', '')"
818 | ],
819 | "execution_count": 3,
820 | "outputs": []
821 | },
822 | {
823 | "cell_type": "code",
824 | "metadata": {
825 | "id": "uurP1DJUzqpN"
826 | },
827 | "source": [
828 | "data = data.replace(\"\\ufeff\", \"\")"
829 | ],
830 | "execution_count": 4,
831 | "outputs": []
832 | },
833 | {
834 | "cell_type": "code",
835 | "metadata": {
836 | "colab": {
837 | "base_uri": "https://localhost:8080/",
838 | "height": 52
839 | },
840 | "id": "tBHeKCkYtxap",
841 | "outputId": "43c440d4-b2df-49fc-b3a6-8bd1f75a41e2"
842 | },
843 | "source": [
844 | "data[0:100]"
845 | ],
846 | "execution_count": 5,
847 | "outputs": [
848 | {
849 | "output_type": "execute_result",
850 | "data": {
851 | "application/vnd.google.colaboratory.intrinsic+json": {
852 | "type": "string"
853 | },
854 | "text/plain": [
855 | "'LATE ONE AFTERNOON, Bill Green received an urgent phone call from Liz Michaels, who he used to work '"
856 | ]
857 | },
858 | "metadata": {
859 | "tags": []
860 | },
861 | "execution_count": 5
862 | }
863 | ]
864 | },
865 | {
866 | "cell_type": "code",
867 | "metadata": {
868 | "id": "_mz1CUQ-tcxw",
869 | "colab": {
870 | "base_uri": "https://localhost:8080/",
871 | "height": 165,
872 | "referenced_widgets": [
873 | "1ddea2fadcf54f54af27b06de3f6bfbb",
874 | "d3c0f66b77244bef9490b1abb203194d",
875 | "2cdf125675094fde8c360a73f8a22496",
876 | "72dcaad2fb604c16962dfd021e75728b",
877 | "156cc1a1dd494b6fa3872e801619a0d0",
878 | "26e8689652c84532ab352e23bfa7b993",
879 | "c372a837b7114fe8a8cb82b1a7917942",
880 | "0fe7ee5433f545e29058ba5d1bb2f901",
881 | "6325df1ce8864fb3b5d0bff032da05a1",
882 | "a646da07b54441f9be91881d5d9fad80",
883 | "dd3df885e3b747f3b73dd83128df1ec4",
884 | "4ae4e62c04214b2897d1e1bf10291bf8",
885 | "9e64745ad1c24886bb41cd83e60d97cd",
886 | "2550e787808642b28c9e694c20b682ad",
887 | "30506f8609f74724859b617810b79416",
888 | "24143e15fe744a6d92c526e19a17b0d4",
889 | "9b2a34fac4414e58bd3c7440de663661",
890 | "995478437b39417fbbaefdb4f8ed8c31",
891 | "a068918d9ed642aebedd4f69b1117110",
892 | "6e390e78d1a34628b3d1e371cba6cdb8",
893 | "061d2049dd2e4b8da89f632ea0ec964d",
894 | "fb8c6afe56dd4295b30c6a09d541f921",
895 | "e5abd3a72c93427986159fe62d2c8161",
896 | "904e25aae6394be0baaa20cdfcc412f0"
897 | ]
898 | },
899 | "outputId": "aaea8e17-b1a2-451a-f3cb-eb8686ac99c8"
900 | },
901 | "source": [
902 | "model = Summarizer()"
903 | ],
904 | "execution_count": 6,
905 | "outputs": [
906 | {
907 | "output_type": "display_data",
908 | "data": {
909 | "application/vnd.jupyter.widget-view+json": {
910 | "model_id": "1ddea2fadcf54f54af27b06de3f6bfbb",
911 | "version_minor": 0,
912 | "version_major": 2
913 | },
914 | "text/plain": [
915 | "HBox(children=(FloatProgress(value=0.0, description='Downloading', max=434.0, style=ProgressStyle(description_…"
916 | ]
917 | },
918 | "metadata": {
919 | "tags": []
920 | }
921 | },
922 | {
923 | "output_type": "stream",
924 | "text": [
925 | "\n"
926 | ],
927 | "name": "stdout"
928 | },
929 | {
930 | "output_type": "display_data",
931 | "data": {
932 | "application/vnd.jupyter.widget-view+json": {
933 | "model_id": "6325df1ce8864fb3b5d0bff032da05a1",
934 | "version_minor": 0,
935 | "version_major": 2
936 | },
937 | "text/plain": [
938 | "HBox(children=(FloatProgress(value=0.0, description='Downloading', max=1344997306.0, style=ProgressStyle(descr…"
939 | ]
940 | },
941 | "metadata": {
942 | "tags": []
943 | }
944 | },
945 | {
946 | "output_type": "stream",
947 | "text": [
948 | "\n"
949 | ],
950 | "name": "stdout"
951 | },
952 | {
953 | "output_type": "display_data",
954 | "data": {
955 | "application/vnd.jupyter.widget-view+json": {
956 | "model_id": "9b2a34fac4414e58bd3c7440de663661",
957 | "version_minor": 0,
958 | "version_major": 2
959 | },
960 | "text/plain": [
961 | "HBox(children=(FloatProgress(value=0.0, description='Downloading', max=231508.0, style=ProgressStyle(descripti…"
962 | ]
963 | },
964 | "metadata": {
965 | "tags": []
966 | }
967 | },
968 | {
969 | "output_type": "stream",
970 | "text": [
971 | "\n"
972 | ],
973 | "name": "stdout"
974 | }
975 | ]
976 | },
977 | {
978 | "cell_type": "code",
979 | "metadata": {
980 | "id": "wkqAhTfpuQ25"
981 | },
982 | "source": [
983 | "result = model(data, num_sentences=5, min_length=60)"
984 | ],
985 | "execution_count": 13,
986 | "outputs": []
987 | },
988 | {
989 | "cell_type": "code",
990 | "metadata": {
991 | "id": "kM0e8Qko0EMs"
992 | },
993 | "source": [
994 | "full = ''.join(result)"
995 | ],
996 | "execution_count": 14,
997 | "outputs": []
998 | },
999 | {
1000 | "cell_type": "code",
1001 | "metadata": {
1002 | "colab": {
1003 | "base_uri": "https://localhost:8080/"
1004 | },
1005 | "id": "Avej5YzWuW7x",
1006 | "outputId": "65d3178c-ba62-4277-ff03-68c6da9b3c8e"
1007 | },
1008 | "source": [
1009 | "pprint(full)"
1010 | ],
1011 | "execution_count": 15,
1012 | "outputs": [
1013 | {
1014 | "output_type": "stream",
1015 | "text": [
1016 | "('LATE ONE AFTERNOON, Bill Green received an urgent phone call from Liz '\n",
1017 | " 'Michaels, who he used to work with. When you do not use your feelings about '\n",
1018 | " 'The Past to learn from your experiences, you lose the joy of The Present. '\n",
1019 | " 'That day, he worked hard at staying fully engaged in the present moment, and '\n",
1020 | " 'he looked for opportunities to learn from The Past. ”The young man asked, '\n",
1021 | " '“So, when do I help create The Future?”The old man said, “After you first '\n",
1022 | " 'appreciate The Present, and respect what you have now. And he had never felt '\n",
1023 | " 'happier, and more in command of his life. The young man now went to work '\n",
1024 | " 'each day, using what he had learned: to be in The Present often, learn from '\n",
1025 | " 'The Past, and help create The Future.')\n"
1026 | ],
1027 | "name": "stdout"
1028 | }
1029 | ]
1030 | },
1031 | {
1032 | "cell_type": "code",
1033 | "metadata": {
1034 | "id": "bGmJEChzvS6U"
1035 | },
1036 | "source": [
1037 | ""
1038 | ],
1039 | "execution_count": null,
1040 | "outputs": []
1041 | }
1042 | ]
1043 | }
--------------------------------------------------------------------------------