Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
74 commits
Select commit Hold shift + click to select a range
0b2dabd
Add files via upload
BAOOOOOM Aug 20, 2021
2e278f4
Create 文本语法结构解析.rst
BAOOOOOM Aug 20, 2021
4f323ee
Create 公式语法结构解析.rst
BAOOOOOM Aug 20, 2021
2e936fe
Create parse.rst
BAOOOOOM Aug 20, 2021
648e67d
Create parse.rst
BAOOOOOM Aug 20, 2021
cdd3082
Create 文本语法结构解析.rst
BAOOOOOM Aug 20, 2021
ccb4677
Create 文本语法结构解析.rst
BAOOOOOM Aug 20, 2021
e6fe68d
Create 公式语法结构解析.rst
BAOOOOOM Aug 20, 2021
1dc6b23
Create 公式语法结构解析.rst
BAOOOOOM Aug 20, 2021
c8d92f7
Create 公式语法结构解析.rst
BAOOOOOM Aug 20, 2021
7c83e20
Create 文本语法结构解析.rst
BAOOOOOM Aug 20, 2021
cf1ef1e
Create 公式语法结构解析.rst
BAOOOOOM Aug 20, 2021
2ef99c3
Create 文本语法结构解析.rst
BAOOOOOM Aug 20, 2021
4edafdf
Create 公式语法结构解析.rst
BAOOOOOM Aug 20, 2021
f3ce5e5
Add files via upload
BAOOOOOM Aug 20, 2021
c103035
Create 语义成分分解.rst
BAOOOOOM Aug 20, 2021
60b6820
Create 结构成分分解.rst
BAOOOOOM Aug 20, 2021
6b86fbc
Delete tokenizer.ipynb
BAOOOOOM Aug 20, 2021
85b9abd
Add files via upload
BAOOOOOM Aug 20, 2021
571d7be
Delete examples/Tokenizer directory
BAOOOOOM Aug 20, 2021
d5cc0f1
Add files via upload
BAOOOOOM Aug 20, 2021
e70e865
Delete examples/formula directory
BAOOOOOM Aug 20, 2021
d2f3eee
Add files via upload
BAOOOOOM Aug 20, 2021
db55d06
Add files via upload
BAOOOOOM Aug 20, 2021
c0bc61e
Add files via upload
BAOOOOOM Aug 20, 2021
2a8cb43
Add files via upload
BAOOOOOM Aug 20, 2021
4c8246b
Merge pull request #3 from test2021413/docs_dev
BAOOOOOM Aug 20, 2021
b53ba42
Create 结构成分分解.rst
BAOOOOOM Aug 20, 2021
f3f3bf2
Create 语义成分分解.rst
BAOOOOOM Aug 20, 2021
f45b415
Create 结构成分分解.rst
BAOOOOOM Aug 20, 2021
35bb4ed
Create pretrain.rst
BAOOOOOM Aug 20, 2021
ea5de51
Create seg.rst
BAOOOOOM Aug 20, 2021
7caf3a0
Create parse.rst
BAOOOOOM Aug 20, 2021
0b0c4fa
Create seg.rst
BAOOOOOM Aug 20, 2021
cf828b9
Create 公式语法结构解析.rst
BAOOOOOM Aug 20, 2021
f4e0819
Create 文本语法结构解析.rst
BAOOOOOM Aug 20, 2021
026d670
Create parse.rst
BAOOOOOM Aug 20, 2021
262a11c
Create seg.rst
BAOOOOOM Aug 20, 2021
48f45ae
Create 结构成分分解.rst
BAOOOOOM Aug 20, 2021
cc6981a
Create 语义成分分解.rst
BAOOOOOM Aug 20, 2021
6ad9a96
Create 结构成分分解.rst
BAOOOOOM Aug 20, 2021
a7c5837
Create 公式语法结构解析.rst
BAOOOOOM Aug 20, 2021
a5e8b24
Create 文本语法结构解析.rst
BAOOOOOM Aug 20, 2021
32d1316
Create 结构成分分解.rst
BAOOOOOM Aug 20, 2021
0fa9720
Create 语义成分分解.rst
BAOOOOOM Aug 20, 2021
393d2f3
Create 语义成分分解.rst
BAOOOOOM Aug 20, 2021
b17ac0b
Create i2v.ipynb
BAOOOOOM Aug 20, 2021
4e50287
Delete examples/i2v directory
BAOOOOOM Aug 20, 2021
f14520e
Delete examples/t2v directory
BAOOOOOM Aug 20, 2021
1be5415
Add files via upload
BAOOOOOM Aug 20, 2021
a5dae70
Add files via upload
BAOOOOOM Aug 20, 2021
faf5251
Create conf.py
BAOOOOOM Aug 20, 2021
590db46
Add files via upload
BAOOOOOM Aug 20, 2021
26a38d1
Create conf.py
BAOOOOOM Aug 20, 2021
b669ff8
Delete sif_addition.png
BAOOOOOM Aug 21, 2021
dbba074
Add files via upload
BAOOOOOM Aug 21, 2021
6cf3dea
Add files via upload
BAOOOOOM Aug 21, 2021
def858b
Delete seg.png
BAOOOOOM Aug 21, 2021
8ccc06e
Add files via upload
BAOOOOOM Aug 21, 2021
82d58cf
Create parse.ipynb
BAOOOOOM Aug 21, 2021
de36978
Delete data.png
BAOOOOOM Aug 21, 2021
7db6bbf
Add files via upload
BAOOOOOM Aug 21, 2021
06c73a3
Add files via upload
BAOOOOOM Aug 21, 2021
bde48bc
Delete data.png
BAOOOOOM Aug 21, 2021
7ea98d0
Add files via upload
BAOOOOOM Aug 21, 2021
eafbd9d
Create conf.py
BAOOOOOM Aug 21, 2021
8225171
Add files via upload
BAOOOOOM Aug 21, 2021
146f6b2
Delete data.png
BAOOOOOM Aug 21, 2021
418e48e
Add files via upload
BAOOOOOM Aug 21, 2021
cfc70cb
Create conf.py
BAOOOOOM Aug 21, 2021
d5d0530
Create conf.py
BAOOOOOM Aug 21, 2021
d43dc1d
Add files via upload
BAOOOOOM Aug 21, 2021
62451e5
Create conf.py
BAOOOOOM Aug 21, 2021
92afc44
Add files via upload
BAOOOOOM Aug 21, 2021
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file added asset/_static/data.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified asset/_static/formula.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added asset/_static/i2v.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added asset/_static/parse.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added asset/_static/prepare_dataset.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added asset/_static/seg.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added asset/_static/sif_addition.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added asset/_static/tokenizer.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
13 changes: 8 additions & 5 deletions docs/source/conf.py
Original file line number Diff line number Diff line change
Expand Up @@ -57,12 +57,15 @@ def copy_tree(src, tar):

nbsphinx_thumbnails = {
'build/blitz/sif/sif': '_static/item_figure.png',
'build/blitz/utils/data.ipynb': '_static/data.png',
'build/blitz/formula/formula.ipynb': '_static/item_formula.png',
'build/blitz/sif/sif_addition.ipynb': '_static/sif_addition.png',
'build/blitz/sif/sif_addition': '_static/sif_addition.png',
'build/blitz/utils/data': '_static/data.png',
'build/blitz/formula/formula': '_static/formula.png',
'build/blitz/seg/seg': '_static/seg.png',
'build/blitz/parse/parse': '_static/parse.png',
'build/blitz/formula/formula': '_static/formula.png',
'build/blitz/tokenizer/tokenizer': '_static/tokenizer.png',
'build/blitz/pretrain/prepare_dataset.ipynb': '_static/item_figure.png',
'build/blitz/pretrain/d2v.ipynb': '_static/item_figure.png',
'build/blitz/pretrain/prepare_dataset': '_static/prepare_dataset.jpg',
'build/blitz/vectorization/i2v': '_static/i2v.png',
}

# Add any paths that contain templates here, relative to this directory.
Expand Down
40 changes: 3 additions & 37 deletions docs/source/tutorial/zh/parse.rst
Original file line number Diff line number Diff line change
Expand Up @@ -24,46 +24,12 @@

4.匹配latex公式,主要检查latex公式的完整性和可解析性,对latex 中出现中文字符发出警告

文本语法结构解析
学习路线图
--------------------


将文本中的字母、数字等进行提取,将其转换为标准格式。

Examples:
::

>>> text = '生产某种零件的A工厂25名工人的日加工零件数_ _'
>>> text_parser = Parser(text)
>>> text_parser.description_list()
>>> text_parser.text
>>> '生产某种零件的$A$工厂$25$名工人的日加工零件数$\\SIFBlank$'

.. toctree::
:maxdepth: 1
:titlesonly:

parse <../../build/blitz/parse/parse.ipynb>


公式语法结构解析
--------------------

可以检查公式是否合法。

Examples:
::

>>> text = '支持公式如$\\frac{y}{x}$,$\\SIFBlank$,$\\FigureID{1}$,不支持公式如$\\frac{ \\dddot y}{x}$'
>>> text_parser = Parser(text)
>>> text_parser.description_list()
>>> text_parser.fomula_illegal_flag
>>> 1


.. toctree::
:maxdepth: 1
:titlesonly:
文本语法结构解析 <parse/文本语法结构解析>
公式语法结构解析 <parse/公式语法结构解析>

tree <../../build/blitz/formula/tree.ipynb>
formula <../../build/blitz/formula/formula.ipynb>
61 changes: 61 additions & 0 deletions docs/source/tutorial/zh/parse/公式语法结构解析.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
公式语法结构解析
--------------------

本功能主要由EduNLP.Formula模块实现,具有检查传入的公式是否合法,并将合法的公式转换为art树的形式。从实际使用的角度,本模块常作为中间处理过程,调用相应的模型即可自动选择本模块的相关参数,故一般不需要特别关注。

主要内容介绍
+++++++++++++++

1.Formula:对传入的单个公式进行判断,判断传入的公式是否为str形式,如果是则使用ast的方法进行处理,否则进行报错。此外,提供了variable_standardization参数,当此参数为True时,使用变量标准化方法,即同一变量拥有相同的变量编号。

2.FormulaGroup:如果需要传入公式集则可调用此接口,最终将形成ast森林,森林中树的结构同Formula。


Examples:

::

>>> text = '支持公式如$\\frac{y}{x}$,$\\SIFBlank$,$\\FigureID{1}$,不支持公式如$\\frac{ \\dddot y}{x}$'
>>> text_parser = Parser(text)
>>> text_parser.description_list()
>>> text_parser.fomula_illegal_flag
>>> 1

::

>>> f = Formula("x")
>>> f
<Formula: x>
>>> f.ast
[{'val': {'id': 0, 'type': 'mathord', 'text': 'x', 'role': None}, 'structure': {'bro': [None, None], 'child': None, 'father': None, 'forest': None}}]
>>> f.elements
[{'id': 0, 'type': 'mathord', 'text': 'x', 'role': None}]
>>> f.variable_standardization(inplace=True)
<Formula: x>
>>> f.elements
[{'id': 0, 'type': 'mathord', 'text': 'x', 'role': None, 'var': 0}]

::

>>> fg = FormulaGroup(["x + y", "y + x", "z + x"])
>>> fg
<FormulaGroup: <Formula: x + y>;<Formula: y + x>;<Formula: z + x>>
>>> fg = FormulaGroup(["x + y", Formula("y + x"), "z + x"])
>>> fg
<FormulaGroup: <Formula: x + y>;<Formula: y + x>;<Formula: z + x>>
>>> fg = FormulaGroup(["x", Formula("y"), "x"])
>>> fg.elements
[{'id': 0, 'type': 'mathord', 'text': 'x', 'role': None}, {'id': 1, 'type': 'mathord', 'text': 'y', 'role': None},\
{'id': 2, 'type': 'mathord', 'text': 'x', 'role': None}]
>>> fg = FormulaGroup(["x", Formula("y"), "x"], variable_standardization=True)
>>> fg.elements
[{'id': 0, 'type': 'mathord', 'text': 'x', 'role': None, 'var': 0}, {'id': 1, 'type': 'mathord', 'text': 'y', 'role': None, 'var': 1}, {'id': 2, 'type': 'mathord', 'text': 'x', 'role': None, 'var': 0}]

详细示范
+++++++++++++++

.. toctree::
:titlesonly:

树型处理效果 <../../../build/blitz/formula/tree.ipynb>
公式解析效果案例 <../../../build/blitz/formula/formula.ipynb>
39 changes: 39 additions & 0 deletions docs/source/tutorial/zh/parse/文本语法结构解析.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
文本语法结构解析
--------------------

本部分主要由EduNLP.SIF.Parse模块实现,主要功能为将文本中的字母、数字等进行提取,将其转换为标准格式。

主要流程介绍
+++++++++++++++

1.按照以下顺序,先后对传入的文本进行判断类型

* is_chinese:用于匹配中文字符 [\u4e00-\u9fa5]

* is_alphabet:匹配公式之外的英文字母,将匹配到的只对两个汉字之间的字母做修正(使用$$包裹起来),其余匹配到的情况视为不合 latex 语法录入的公式

* is_number:匹配公式之外的数字,只对两个汉字之间的数字做修正(使用$$包裹起来),其余匹配到的情况视为不合 latex 语法录入的公式

2.匹配 latex 公式

* latex 中出现中文字符,打印且只打印一次 warning

* 使用_is_formula_legal函数,检查latex公式的完整性和可解析性,对于不合法公式报错

Examples:

::

>>> text = '生产某种零件的A工厂25名工人的日加工零件数_ _'
>>> text_parser = Parser(text)
>>> text_parser.description_list()
>>> text_parser.text
>>> '生产某种零件的$A$工厂$25$名工人的日加工零件数$\\SIFBlank$'

详细示范
+++++++++++++++

.. toctree::
:titlesonly:

文本语法结构解析的案例 <../../../build/blitz/parse/parse.ipynb>
2 changes: 1 addition & 1 deletion docs/source/tutorial/zh/pretrain.rst
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ Examples:
::

全量版本-全学科的D2V模型路径:
`/share/qlh/d2v_model/luna_private/luna_private_all_gensim_luna_stem_general_d2v_256.bin`
`/share/qlh/d2v_model/luna_pub/luna_pub_all_gensim_luna_stem_general_d2v_256.bin`
(备注:一个D2V模型含4个bin后缀的文件)

模型训练数据说明
Expand Down
52 changes: 8 additions & 44 deletions docs/source/tutorial/zh/seg.rst
Original file line number Diff line number Diff line change
Expand Up @@ -7,55 +7,19 @@
* 语义成分分解
* 结构成分分解

语义成分分解
------------
主要处理内容
--------------------

特别的,由于选择题是以字典的形式给出,故需要进行特殊处理,这里可以调用./Utils/data中的dict2str4sif函数,将选择题形式的item转换为字符格式,并将题干和选项、各选项之间分割开来。
1.将字典输入形式的选择题通过语义成分分解转换为符合条件的item;

Examples:
::
2.将输入的item按照元素类型进行切分、分组。

>>> item = {
学习路线图
--------------------

... "stem": r"若复数$z=1+2 i+i^{3}$,则$|z|=$",

... "options": ['0', '1', r'$\sqrt{2}$', '2'],

... }

>>> item

{'stem': '若复数$z=1+2 i+i^{3}$,则$|z|=$', 'options': ['0', '1', '$\\sqrt{2}$', '2']}

>>> dict2str4sif(item, key_as_tag=False)

'若复数$z=1+2 i+i^{3}$,则$|z|=$0$\\SIFSep$1$\\SIFSep$$\\sqrt{2}$$\\SIFSep$2'

.. toctree::
:maxdepth: 1
:titlesonly:

dict2str4sif <../../build/blitz/utils/data.ipynb>


结构成分分解
------------

对切片后的item中的各个元素进行分词,提供深度选项,可以按照需求选择所有地方切分或者在部分标签处切分(比如\SIFSep、\SIFTag处);对标签添加的位置也可以进行选择,可以在头尾处添加或仅在头或尾处添加。

具有两种模式,一种是linear模式,用于对文本进行处理(使用jieba库进行分词);一种是ast模式,用于对公式进行解析。

Examples:
::

>>> test_item = r"如图所示,则$\bigtriangleup ABC$的面积是$\SIFBlank$。$\FigureID{1}$"
>>> seg(test_item)
>>> ['如图所示,则', '\\bigtriangleup ABC', '的面积是', '\\SIFBlank', '。', \FigureID{1}]
>>> seg(test_item, symbol="fgm")
>>> ['如图所示,则', '[FORMULA]', '的面积是', '[MARK]', '。', '[FIGURE]']

.. toctree::
:maxdepth: 1
:titlesonly:
语义成分分解 <seg/语义成分分解>
结构成分分解 <seg/结构成分分解>

seg <../../build/blitz/seg/seg.ipynb>
53 changes: 53 additions & 0 deletions docs/source/tutorial/zh/seg/结构成分分解.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
结构成分分解
------------

对切片后的item中的各个元素进行分词,提供深度选项,可以按照需求选择所有地方切分或者在部分标签处切分(比如\SIFSep、\SIFTag处);对标签添加的位置也可以进行选择,可以在头尾处添加或仅在头或尾处添加。

具有两种模式,一种是linear模式,用于对文本进行处理(使用jieba库进行分词);一种是ast模式,用于对公式进行解析。

基础使用方法
++++++++++++++++++

::

>>> test_item = r"如图所示,则$\bigtriangleup ABC$的面积是$\SIFBlank$。$\FigureID{1}$"
>>> seg(test_item)
>>> ['如图所示,则', '\\bigtriangleup ABC', '的面积是', '\\SIFBlank', '。', \FigureID{1}]

可选的的额外参数/接口
++++++++++++++++++++++

1.describe:可以统计出各种类型元素的数量

::

>>> s.describe()
{'t': 3, 'f': 1, 'g': 1, 'm': 1}

2.filter:可以选择性的筛除某种或几种类型的元素

::

>>> with s.filter("f"):
... s
['如图所示,则', '的面积是', '\\SIFBlank', '。', \FigureID{1}]
>>> with s.filter(keep="t"):
... s
['如图所示,则', '的面积是', '。']

3.symbol:选择性的将部分类型的数据转换为特殊符号遮掩起来

::

>>> seg(test_item, symbol="fgm")
['如图所示,则', '[FORMULA]', '的面积是', '[MARK]', '。', '[FIGURE]']
>>> seg(test_item, symbol="tfgm")
['[TEXT]', '[FORMULA]', '[TEXT]', '[MARK]', '[TEXT]', '[FIGURE]']

详细示范
+++++++++++

.. toctree::
:titlesonly:

结构成分分解的案例 <../../../build/blitz/seg/seg.ipynb>
55 changes: 55 additions & 0 deletions docs/source/tutorial/zh/seg/语义成分分解.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
语义成分分解
------------

由于选择题是以字典的形式给出,故需要将其在保留数据类型关系的情况下转换为文本格式。dict2str4sif函数就是实现此功能的一个模块,该模块可以将选择题形式的item转换为字符格式,并将题干和选项、各选项之间分割开来。


基础使用方法
++++++++++++++++++

::

>>> item = {
... "stem": r"若复数$z=1+2 i+i^{3}$,则$|z|=$",
... "options": ['0', '1', r'$\sqrt{2}$', '2'],
... }
>>> dict2str4sif(item) # doctest: +ELLIPSIS
'$\\SIFTag{stem_begin}$若复数$z=1+2 i+i^{3}$,则$|z|=$$\\SIFTag{stem_end}$$\\SIFTag{options_begin}$$\\SIFTag{list_0}$0$\\SIFTag{list_1}$1$\\SIFTag{list_2}$$\\sqrt{2}$$\\SIFTag{list_3}$2$\\SIFTag{options_end}$'

可选的的额外参数/接口
++++++++++++++++++++++

1.add_list_no_tag:当此参数为True较False时区别在于是否需要将选项部分的标签计数

::

>>> dict2str4sif(item, add_list_no_tag=True) # doctest: +ELLIPSIS
'$\\SIFTag{stem_begin}$若复数$z=1+2 i+i^{3}$,则$|z|=$$\\SIFTag{stem_end}$$\\SIFTag{options_begin}$$\\SIFTag{list_0}$0$\\SIFTag{list_1}$1$\\SIFTag{list_2}$$\\sqrt{2}$$\\SIFTag{list_3}$2$\\SIFTag{options_end}$'

>>> dict2str4sif(item, add_list_no_tag=False) # doctest: +ELLIPSIS
'$\\SIFTag{stem_begin}$若复数$z=1+2 i+i^{3}$,则$|z|=$$\\SIFTag{stem_end}$$\\SIFTag{options_begin}$0$\\SIFSep$1$\\SIFSep$$\\sqrt{2}$$\\SIFSep$2$\\SIFTag{options_end}$'

2.tag_mode:此参数为选择标签所在位置,delimiter为头尾都加标签,head为仅头部加标签,tail为仅尾部加标签

::

>>> dict2str4sif(item, tag_mode="head") # doctest: +ELLIPSIS
'$\\SIFTag{stem}$若复数$z=1+2 i+i^{3}$,则$|z|=$$\\SIFTag{options}$$\\SIFTag{list_0}$0$\\SIFTag{list_1}$1$\\SIFTag{list_2}$$\\sqrt{2}$$\\SIFTag{list_3}$2'

>>> dict2str4sif(item, tag_mode="tail") # doctest: +ELLIPSIS
'若复数$z=1+2 i+i^{3}$,则$|z|=$$\\SIFTag{stem}$$\\SIFTag{list_0}$0$\\SIFTag{list_1}$1$\\SIFTag{list_2}$$\\sqrt{2}$$\\SIFTag{list_3}$2$\\SIFTag{options}$'

3.key_as_tag:当其为False时则不区分切分标签的类型,而是仅在选项之间加入$\SIFSep$

::

>>> dict2str4sif(item, key_as_tag=False)
'若复数$z=1+2 i+i^{3}$,则$|z|=$0$\\SIFSep$1$\\SIFSep$$\\sqrt{2}$$\\SIFSep$2'

详细示范
++++++++++++++++++++++

.. toctree::
:titlesonly:

语义成分分解的案例 <../../../build/blitz/utils/data.ipynb>
4 changes: 2 additions & 2 deletions examples/formula/formula.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
"\n",
"## 概述\n",
"\n",
"Formula 首先在分词功能中(SIF/segment ==> SIF/tokenization)中对原始文本的公式做切分处理,之后在 Formula/ast 中提供 [公式解析树] 功能,可以将数学公式的抽象语法分析树用文本或图片的形式表示出来。 \n",
"Formula 首先在分词功能中对原始文本的公式做切分处理,另外提供 [公式解析树] 功能,可以将数学公式的抽象语法分析树用文本或图片的形式表示出来。 \n",
"\n",
"本模块另提供公式变量标准化的功能,如判断几个子公式内的‘x’为同一变量。"
],
Expand Down Expand Up @@ -508,4 +508,4 @@
},
"nbformat": 4,
"nbformat_minor": 2
}
}
Loading