Skip to main content

benetech annotation parser

Project description

bentech annotation parser

Simple Python API to read the annotation data of the Kaggle/Benetech-Making Graphs Accessible competition. For more details on the Kaggle/Benetech-Making Graphs Accessible competition, please refer to the following: https://www.kaggle.com/competitions/benetech-making-graphs-accessible.

Installing

pip install benetech-annotation-parser

Example

from benetech_annotation_parser.annotation_api import AnnotationParser, Axis 
annotation_parser = AnnotationParser("mock/dummy_data")

# (0) "Extract one JSON data from a list of JSON file paths."
p = annotation_parser.get_annotation(0)
"""
print(p.name)
#>>> "dummy_001"
print(p.json_path)
#>>> "mock/dummy_data/annotations/dummy_001.json"
print(p.image_path)
#>>> "mock/dummy_data/images/dummy_001.jpg"
"""

# (1) source Literal["generated", "extracted"]
print(p.source)
"""
>>> p.source
'generated'
"""
# (2) chart-type Literal["dot", "horaizontal_bar", "vertical_bar", "line", "scatter"]
print(p.chart_type)
"""
>>> p.chart_type
'vertical_bar'
"""
# (3) plot-bb
print(p.plot_bb)
"""
>>> p.plot_bb
{'height': 150, 'width': 150, 'x0': 50, 'y0': 50}
"""
# (4) text
print(p.text())
"""
>>> p.text()
[
{'id': 0, 'polygon': {'x0': 10, 'x1': 10, 'x2': 10, 'x3': 10, 'y0': 10, 'y1': 10, 'y2': 10, 'y3': 10}, 'text': 'Dummy_title', 'role': 'chart_title'}, 
{'id': 1, 'polygon': {'x0': 20, 'x1': 20, 'x2': 20, 'x3': 20, 'y0': 20, 'y1': 20, 'y2': 20, 'y3': 20}, 'text': 'Dummy_title', 'role': 'axis_title'}, 
{'id': 2, 'polygon': {'x0': 30, 'x1': 30, 'x2': 30, 'x3': 30, 'y0': 30, 'y1': 30, 'y2': 30, 'y3': 30}, 'text': 'Dummy_title2', 'role': 'axis_title'}, 
{'id': 3, 'polygon': {'x0': 30, 'x1': 30, 'x2': 30, 'x3': 30, 'y0': 30, 'y1': 30, 'y2': 30, 'y3': 30}, 'text': '10', 'role': 'tick_label'}, 
{'id': 5, 'polygon': {'x0': 40, 'x1': 40, 'x2': 40, 'x3': 40, 'y0': 40, 'y1': 40, 'y2': 40, 'y3': 40}, 'text': '20', 'role': 'tick_label'}, 
{'id': 6, 'polygon': {'x0': 50, 'x1': 50, 'x2': 50, 'x3': 50, 'y0': 50, 'y1': 50, 'y2': 50, 'y3': 50}, 'text': 'dummy_country1', 'role': 'tick_label'}, 
{'id': 7, 'polygon': {'x0': 60, 'x1': 60, 'x2': 60, 'x3': 60, 'y0': 60, 'y1': 60, 'y2': 60, 'y3': 60}, 'text': 'dummy_country2', 'role': 'tick_label'}
]
"""
## (4-1) text/id
print(p.text(filter="id"))
"""
>>> p.text(filter='id')
[0, 1, 2, 3, 5, 6, 7]
"""
## (4-2) text/polygon
print(p.text(filter="polygon"))
"""
>>> p.text(filter='polygon')
[
    {'x0': 10, 'x1': 10, 'x2': 10, 'x3': 10, 'y0': 10, 'y1': 10, 'y2': 10, 'y3': 10}, 
    {'x0': 20, 'x1': 20, 'x2': 20, 'x3': 20, 'y0': 20, 'y1': 20, 'y2': 20, 'y3': 20}, 
    {'x0': 30, 'x1': 30, 'x2': 30, 'x3': 30, 'y0': 30, 'y1': 30, 'y2': 30, 'y3': 30}, 
    {'x0': 30, 'x1': 30, 'x2': 30, 'x3': 30, 'y0': 30, 'y1': 30, 'y2': 30, 'y3': 30}, 
    {'x0': 40, 'x1': 40, 'x2': 40, 'x3': 40, 'y0': 40, 'y1': 40, 'y2': 40, 'y3': 40}, 
    {'x0': 50, 'x1': 50, 'x2': 50, 'x3': 50, 'y0': 50, 'y1': 50, 'y2': 50, 'y3': 50}, 
    {'x0': 60, 'x1': 60, 'x2': 60, 'x3': 60, 'y0': 60, 'y1': 60, 'y2': 60, 'y3': 60}
]
"""
## (4-3) text/text
print(p.text(filter="text"))
"""
>>> p.text(filter='text')
['Dummy_title', 'Dummy_title', 'Dummy_title2', '10', '20', 'dummy_country1', 'dummy_country2']
"""
## (4-4) text/role
print(p.text(filter="role"))

"""
>>> p.text(filter='role')
['chart_title', 'axis_title', 'axis_title', 'tick_label', 'tick_label', 'tick_label', 'tick_label']
"""


# (5) axes
print(p.axes)
"""
>>> p.axes
{
    'x-axis': {'ticks': [{'id': 6, 'tick_pt': {'x': 40, 'y': 50}}, {'id': 7, 'tick_pt': {'x': 50, 'y': 60}}], 'tick-type': 'markers', 'values-type': 'categorical'}, 
    'y-axis': {'ticks': [{'id': 3, 'tick_pt': {'x': 55, 'y': 65}}, {'id': 4, 'tick_pt': {'x': 65, 'y': 75}}], 'tick-type': 'markers', 'values-type': 'numerical'}
}
"""
## (5-1) axes/{x|y}-axis
### (5-1-x) axes/x-axis
print(p.axis(axis=Axis.X))
"""
>>> p.axis(Axis.X)
{'ticks': [{'id': 6, 'tick_pt': {'x': 40, 'y': 50}}, {'id': 7, 'tick_pt': {'x': 50, 'y': 60}}], 'tick-type': 'markers', 'values-type': 'categorical'}
"""
### (5-1-y) axes/y-axis
print(p.axis(axis=Axis.Y))
"""
>>> p.axis(axis=Axis.Y)
{'ticks': [{'id': 3, 'tick_pt': {'x': 55, 'y': 65}}, {'id': 4, 'tick_pt': {'x': 65, 'y': 75}}], 'tick-type': 'markers', 'values-type': 'numerical'}
"""
## (5-2) axes/{x|y}-axis/ticks
print(p.ticks(axis=Axis.X))
"""
>>> p.ticks(axis=Axis.X)
[{'id': 6, 'tick_pt': {'x': 40, 'y': 50}}, {'id': 7, 'tick_pt': {'x': 50, 'y': 60}}]
"""
### (5-2-1) axes/{x|y}-axis/ticks/id
print(p.ticks(axis=Axis.X, filter="id"))
"""
>>> p.ticks(axis=Axis.X, filter='id')
[6, 7]
"""
### (5-2-2) axes/{x|y}-axis/ticks/tick_pt
print(p.ticks(axis=Axis.X, filter="tick_pt"))
"""
>>> p.ticks(axis=Axis.X, filter='tick_pt')
[{'x': 40, 'y': 50}, {'x': 50, 'y': 60}]
"""
### (5-2-3) axes/{x|y}-axis/tick-type
print(p.tick_type(axis=Axis.X))
"""
>>> p.tick_type(axis=Axis.X)
markers
"""
### (5-2-4) axes/{x|y}-axis/values-type
print(p.values_type(axis=Axis.X))
"""
>>> p.values_type(axis=Axis.X)
"categorical"
"""
# (6) data-series/{x|y}
print(p.data_series())
"""
>>> p.data_series()
[{'x': 'dummy_country1', 'y': 15.66666}, {'x': 'dummy_country2', 'y': 5.555555}]
"""
## (6-x) data-series/x
print(p.data_series(filter="x"))
"""
>>> p.data_series(filter='x')
['dummy_country1', 'dummy_country2']
"""
## (6-y) data-series/y
print(p.data_series(filter="y"))
"""
>>> p.data_series(filter='y')
[15.66666, 5.555555]
"""

Demo

The demo is available on a Kaggle notebook[https://www.kaggle.com/koyyy0/benetech-annotation-parser/]. Please refer to the Kaggle notebook for more details.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

benetech_annotation_parser-0.0.3.tar.gz (8.3 kB view details)

Uploaded Source

Built Distribution

File details

Details for the file benetech_annotation_parser-0.0.3.tar.gz.

File metadata

File hashes

Hashes for benetech_annotation_parser-0.0.3.tar.gz
Algorithm Hash digest
SHA256 8790137cb6dc71d4f1bc3175b1faf932291b2674d7652a93aa6a6a17c4fd530f
MD5 9566f30bebd8c7468c23b9e6903acba5
BLAKE2b-256 82109fbe7a6f3f36ee57812f1cdebe5c425ac327ec960f804863c14f91b2d55d

See more details on using hashes here.

File details

Details for the file benetech_annotation_parser-0.0.3-py3-none-any.whl.

File metadata

File hashes

Hashes for benetech_annotation_parser-0.0.3-py3-none-any.whl
Algorithm Hash digest
SHA256 36db35ce4f116655c8d7781e61fd0eecaea0e727c6a40ddb52fabd3eed5f29f4
MD5 69a3ef69c912e1fc73d1d8c425cf0155
BLAKE2b-256 9496c8baff9d267183b959348ca48544312f5fc157100b1e911f1834988e277b

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page