Commit 6b6f40f3 authored by liukaiwen's avatar liukaiwen
Browse files

Merge branch 'master' of github.com:papayalove/Magic-PDF

parents 851d191d b7710723
# This workflow will install Python dependencies, run tests and lint with a variety of Python versions
# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-python
name: PDF
on:
push:
branches:
- "master"
paths-ignore:
- "cmds/**"
- "**.md"
pull_request:
branches:
- "master"
paths-ignore:
- "cmds/**"
- "**.md"
workflow_dispatch:
jobs:
cli-test:
runs-on: pdf
timeout-minutes: 40
strategy:
fail-fast: true
steps:
- name: config-net
run: |
export http_proxy=http://bigdata_open_proxy:H89k5qwQRDYfz@10.140.90.20:10811
export https_proxy=http://bigdata_open_proxy:H89k5qwQRDYfz@10.140.90.20:10811
- name: PDF cli
uses: actions/checkout@v3
with:
fetch-depth: 2
- name: check-requirements
run: |
changed_files=$(git diff --name-only -r HEAD~1 HEAD)
echo $changed_files
if [[ $changed_files =~ "requirements.txt" ]]; then
pip install -r requirements.txt
fi
- name: config-net-reset
run: |
export http_proxy=""
export https_proxy=""
- name: test_cli
run: |
echo $GITHUB_WORKSPACE
cd $GITHUB_WORKSPACE && pytest -s -v tests/test_cli/test_cli.py
notify_to_feishu:
if: ${{ always() && !cancelled() && contains(needs.*.result, 'failure') && (github.ref_name == 'master') }}
needs: [cli-test]
runs-on: pdf
steps:
- name: get_actor
run: |
metion_list="quyuan"
echo $GITHUB_ACTOR
if [[ $GITHUB_ACTOR == "drunkpig" ]]; then
metion_list="xuchao"
elif [[ $GITHUB_ACTOR == "myhloli" ]]; then
metion_list="zhaoxiaomeng"
elif [[ $GITHUB_ACTOR == "icecraft" ]]; then
metion_list="xurui1"
fi
echo $metion_list
echo "METIONS=$metion_list" >> "$GITHUB_ENV"
echo ${{ env.METIONS }}
- name: notify
run: |
curl ${{ secrets.WEBHOOK_URL }} -H 'Content-Type: application/json' -d '{
"msgtype": "text",
"text": {
"mentioned_list": ["${{ env.METIONS }}"] , "content": "'${{ github.repository }}' GitHubAction Failed!\n 细节请查看:https://github.com/'${{ github.repository }}'/actions/runs/'${GITHUB_RUN_ID}'"
}
}'
\ No newline at end of file
......@@ -95,7 +95,7 @@ def ocr_mk_markdown_with_para_core_v2(paras_of_layout, mode, img_buket_path=""):
page_markdown = []
for para_block in paras_of_layout:
para_text = ''
para_type = para_block.get('type')
para_type = para_block['type']
if para_type == BlockType.Text:
para_text = merge_para_with_text(para_block)
elif para_type == BlockType.Title:
......@@ -106,32 +106,30 @@ def ocr_mk_markdown_with_para_core_v2(paras_of_layout, mode, img_buket_path=""):
if mode == 'nlp':
continue
elif mode == 'mm':
img_blocks = para_block.get('blocks')
for img_block in img_blocks:
if img_block.get('type') == BlockType.ImageBody:
for line in img_block.get('lines'):
for block in para_block['blocks']:
if block['type'] == BlockType.ImageBody:
for line in block['lines']:
for span in line['spans']:
if span.get('type') == ContentType.Image:
if span['type'] == ContentType.Image:
para_text = f"\n![]({join_path(img_buket_path, span['image_path'])})\n"
for img_block in img_blocks:
if img_block.get('type') == BlockType.ImageCaption:
para_text += merge_para_with_text(img_block)
for block in para_block['blocks']:
if block['type'] == BlockType.ImageCaption:
para_text += merge_para_with_text(block)
elif para_type == BlockType.Table:
if mode == 'nlp':
continue
elif mode == 'mm':
table_blocks = para_block.get('blocks')
for table_block in table_blocks:
if table_block.get('type') == BlockType.TableBody:
for line in table_block.get('lines'):
for block in para_block['blocks']:
if block['type'] == BlockType.TableBody:
for line in block['lines']:
for span in line['spans']:
if span.get('type') == ContentType.Table:
if span['type'] == ContentType.Table:
para_text = f"\n![]({join_path(img_buket_path, span['image_path'])})\n"
for table_block in table_blocks:
if table_block.get('type') == BlockType.TableCaption:
para_text += merge_para_with_text(table_block)
elif table_block.get('type') == BlockType.TableFootnote:
para_text += merge_para_with_text(table_block)
for block in para_block['blocks']:
if block['type'] == BlockType.TableCaption:
para_text += merge_para_with_text(block)
elif block['type'] == BlockType.TableFootnote:
para_text += merge_para_with_text(block)
if para_text.strip() == '':
continue
......@@ -141,11 +139,11 @@ def ocr_mk_markdown_with_para_core_v2(paras_of_layout, mode, img_buket_path=""):
return page_markdown
def merge_para_with_text(para):
def merge_para_with_text(para_block):
para_text = ''
for line in para['lines']:
for line in para_block['lines']:
for span in line['spans']:
span_type = span.get('type')
span_type = span['type']
content = ''
language = ''
if span_type == ContentType.Text:
......@@ -159,6 +157,7 @@ def merge_para_with_text(para):
content = f"${span['content']}$"
elif span_type == ContentType.InterlineEquation:
content = f"\n$$\n{span['content']}\n$$\n"
if content != '':
if language == 'en': # 英文语境下 content间需要空格分隔
para_text += content + ' '
......
......@@ -132,7 +132,7 @@ def draw_layout_bbox(pdf_info, pdf_bytes, out_path):
pdf_docs = fitz.open("pdf", pdf_bytes)
for i, page in enumerate(pdf_docs):
draw_bbox_with_number(i, layout_bbox_list, page, [255, 0, 0], False)
draw_bbox_without_number(i, dropped_bbox_list, page, [0, 255, 0], True)
draw_bbox_without_number(i, dropped_bbox_list, page, [158, 158, 158], True)
draw_bbox_without_number(i, tables_list, page, [153, 153, 0], True) # color !
draw_bbox_without_number(i, tables_body_list, page, [204, 204, 0], True)
draw_bbox_without_number(i, tables_caption_list, page, [255, 255, 102], True)
......@@ -142,7 +142,7 @@ def draw_layout_bbox(pdf_info, pdf_bytes, out_path):
draw_bbox_without_number(i, imgs_caption_list, page, [102, 178, 255], True)
draw_bbox_without_number(i, titles_list, page, [102, 102, 255], True)
draw_bbox_without_number(i, texts_list, page, [153, 0, 76], True)
draw_bbox_without_number(i, interequations_list, page, [160, 160, 160], True)
draw_bbox_without_number(i, interequations_list, page, [0, 255, 0], True)
# Save the PDF
pdf_docs.save(f"{out_path}/layout.pdf")
......
......@@ -61,7 +61,7 @@ def parse_pdf_by_ocr(pdf_bytes,
'''将所有区块的bbox整理到一起'''
all_bboxes = ocr_prepare_bboxes_for_layout_split(
img_blocks, table_blocks, discarded_blocks, text_blocks, title_blocks,
interline_equation_blocks, page_w, page_h)
interline_equations, page_w, page_h)
'''根据区块信息计算layout'''
page_boundry = [0, 0, page_w, page_h]
......
......@@ -57,8 +57,8 @@ def fix_text_overlap_title_blocks(all_bboxes):
for text_block in text_blocks:
for title_block in title_blocks:
text_block_bbox = text_block[0], text_block[1], text_block[2], text_block[3]
title_block_bbox = title_block[0], title_block[1], title_block[2], title_block[3]
text_block_bbox = text_block[:4]
title_block_bbox = title_block[:4]
if calculate_iou(text_block_bbox, title_block_bbox) > 0.8:
all_bboxes.remove(title_block)
......@@ -66,27 +66,37 @@ def fix_text_overlap_title_blocks(all_bboxes):
def remove_need_drop_blocks(all_bboxes, discarded_blocks):
for block in all_bboxes.copy():
need_remove = []
for block in all_bboxes:
for discarded_block in discarded_blocks:
block_bbox = block[0], block[1], block[2], block[3]
block_bbox = block[:4]
if calculate_overlap_area_in_bbox1_area_ratio(block_bbox, discarded_block['bbox']) > 0.6:
all_bboxes.remove(block)
if block not in need_remove:
need_remove.append(block)
break
if len(need_remove) > 0:
for block in need_remove:
all_bboxes.remove(block)
return all_bboxes
def remove_overlaps_min_blocks(all_bboxes):
# 删除重叠blocks中较小的那些
for block1 in all_bboxes.copy():
for block2 in all_bboxes.copy():
need_remove = []
for block1 in all_bboxes:
for block2 in all_bboxes:
if block1 != block2:
block1_bbox = [block1[0], block1[1], block1[2], block1[3]]
block2_bbox = [block2[0], block2[1], block2[2], block2[3]]
block1_bbox = block1[:4]
block2_bbox = block2[:4]
overlap_box = get_minbox_if_overlap_by_ratio(block1_bbox, block2_bbox, 0.8)
if overlap_box is not None:
bbox_to_remove = next(
(block for block in all_bboxes if [block[0], block[1], block[2], block[3]] == overlap_box),
None)
if bbox_to_remove is not None:
all_bboxes.remove(bbox_to_remove)
bbox_to_remove = next((block for block in all_bboxes if block[:4] == overlap_box), None)
if bbox_to_remove is not None and bbox_to_remove not in need_remove:
need_remove.append(bbox_to_remove)
if len(need_remove) > 0:
for block in need_remove:
all_bboxes.remove(block)
return all_bboxes
......@@ -9,16 +9,20 @@ from magic_pdf.libs.ocr_content_type import ContentType, BlockType
def remove_overlaps_min_spans(spans):
dropped_spans = []
# 删除重叠spans中较小的那些
for span1 in spans.copy():
for span2 in spans.copy():
for span1 in spans:
for span2 in spans:
if span1 != span2:
overlap_box = get_minbox_if_overlap_by_ratio(span1['bbox'], span2['bbox'], 0.65)
if overlap_box is not None:
bbox_to_remove = next((span for span in spans if span['bbox'] == overlap_box), None)
if bbox_to_remove is not None:
spans.remove(bbox_to_remove)
bbox_to_remove['tag'] = DropTag.SPAN_OVERLAP
dropped_spans.append(bbox_to_remove)
span_need_remove = next((span for span in spans if span['bbox'] == overlap_box), None)
if span_need_remove is not None and span_need_remove not in dropped_spans:
dropped_spans.append(span_need_remove)
if len(dropped_spans) > 0:
for span_need_remove in dropped_spans:
spans.remove(span_need_remove)
span_need_remove['tag'] = DropTag.SPAN_OVERLAP
return spans, dropped_spans
......@@ -29,11 +33,13 @@ def remove_spans_by_bboxes(spans, need_remove_spans_bboxes):
for span in spans:
for removed_bbox in need_remove_spans_bboxes:
if calculate_overlap_area_in_bbox1_area_ratio(span['bbox'], removed_bbox) > 0.5:
need_remove_spans.append(span)
break
if span not in need_remove_spans:
need_remove_spans.append(span)
break
for span in need_remove_spans:
spans.remove(span)
if len(need_remove_spans) > 0:
for span in need_remove_spans:
spans.remove(span)
return spans
......
......@@ -74,7 +74,7 @@ def parse_union_pdf(pdf_bytes: bytes, pdf_models: list, imageWriter: AbsReaderWr
debug_mode=is_debug,
)
except Exception as e:
logger.error(f"{method.__name__} error: {e}")
logger.exception(e)
return None
pdf_info_dict = parse_pdf(parse_pdf_by_txt)
......
......@@ -17,4 +17,6 @@ zh_core_web_sm @ https://github.com/explosion/spacy-models/releases/download/zh_
scikit-learn>=1.0.2
nltk==3.8.1
s3pathlib>=2.1.1
pytest
subprocess
import os
conf = {
"code_path": os.environ.get('GITHUB_WORKSPACE'),
"pdf_dev_path" : os.environ.get('GITHUB_WORKSPACE') + "/tests/test_cli/pdf_dev",
"pdf_res_path": "/home/quyuan/code/Magic-PDF/Magic-PDF/Magic-PDF/data"
}
import subprocess
def check_shell(cmd):
res = subprocess.check_output(cmd, shell=True)
assert res == 0
def count_folders_and_check_contents(directory):
# 获取目录下的所有文件和文件夹
contents = os.listdir(directory)
folder_count = 0
for item in contents:
# 检查是否为文件夹
if os.path.isdir(os.path.join(directory, item)):
folder_count += 1
# 检查文件夹是否为空
folder_path = os.path.join(directory, item)
assert os.listdir(folder_path) is not None
assert folder_count == 3
[{"layout_dets": [{"category_id": 2, "poly": [87.20602416992188, 74.71974182128906, 199.11016845703125, 74.71974182128906, 199.11016845703125, 186.71868896484375, 87.20602416992188, 186.71868896484375], "score": 0.999997615814209}, {"category_id": 1, "poly": [88.9511489868164, 2102.3251953125, 239.1959686279297, 2102.3251953125, 239.1959686279297, 2129.5693359375, 88.9511489868164, 2129.5693359375], "score": 0.9999799728393555}, {"category_id": 1, "poly": [116.55731964111328, 1038.072509765625, 404.0063781738281, 1038.072509765625, 404.0063781738281, 1999.6717529296875, 116.55731964111328, 1999.6717529296875], "score": 0.9999767541885376}, {"category_id": 1, "poly": [118.98762512207031, 409.9966735839844, 241.70457458496094, 409.9966735839844, 241.70457458496094, 497.07415771484375, 118.98762512207031, 497.07415771484375], "score": 0.999961256980896}, {"category_id": 1, "poly": [530.2610473632812, 991.6522827148438, 656.4911499023438, 991.6522827148438, 656.4911499023438, 1020.6025390625, 530.2610473632812, 1020.6025390625], "score": 0.9999524354934692}, {"category_id": 1, "poly": [85.32998657226562, 2012.22607421875, 629.1658325195312, 2012.22607421875, 629.1658325195312, 2086.741943359375, 85.32998657226562, 2086.741943359375], "score": 0.9961878657341003}, {"category_id": 3, "poly": [88.28943634033203, 515.3642578125, 1571.0567626953125, 515.3642578125, 1571.0567626953125, 770.622314453125, 88.28943634033203, 770.622314453125], "score": 0.9950484037399292}, {"category_id": 1, "poly": [89.6951675415039, 355.63616943359375, 375.6934814453125, 355.63616943359375, 375.6934814453125, 385.2062072753906, 89.6951675415039, 385.2062072753906], "score": 0.968115508556366}, {"category_id": 4, "poly": [89.67754364013672, 769.5524291992188, 604.6519165039062, 769.5524291992188, 604.6519165039062, 797.0578002929688, 89.67754364013672, 797.0578002929688], "score": 0.9242470264434814}, {"category_id": 1, "poly": [88.6801986694336, 2160.639892578125, 1512.985595703125, 2160.639892578125, 1512.985595703125, 2237.59375, 88.6801986694336, 2237.59375], "score": 0.7926853895187378}, {"category_id": 2, "poly": [88.54387664794922, 2160.384521484375, 1513.3607177734375, 2160.384521484375, 1513.3607177734375, 2237.283935546875, 88.54387664794922, 2237.283935546875], "score": 0.31747689843177795}, {"category_id": 2, "poly": [89.85008239746094, 355.71478271484375, 374.5365295410156, 355.71478271484375, 374.5365295410156, 385.2820129394531, 89.85008239746094, 385.2820129394531], "score": 0.2773781418800354}, {"category_id": 15, "poly": [349.0, 319.0, 376.0, 319.0, 376.0, 339.0, 349.0, 339.0], "score": 0.99, "text": "Go"}, {"category_id": 15, "poly": [143.0, 412.0, 207.0, 412.0, 207.0, 439.0, 143.0, 439.0], "score": 1.0, "text": "Home"}, {"category_id": 15, "poly": [140.0, 436.0, 229.0, 436.0, 229.0, 470.0, 140.0, 470.0], "score": 0.88, "text": " Journals"}, {"category_id": 15, "poly": [138.0, 465.0, 239.0, 465.0, 239.0, 499.0, 138.0, 499.0], "score": 1.0, "text": "About Us"}, {"category_id": 15, "poly": [529.0, 994.0, 654.0, 994.0, 654.0, 1021.0, 529.0, 1021.0], "score": 1.0, "text": "Journal Menu"}, {"category_id": 15, "poly": [140.0, 1045.0, 320.0, 1045.0, 320.0, 1072.0, 140.0, 1072.0], "score": 0.96, "text": " About this Journal \u00b7"}, {"category_id": 15, "poly": [138.0, 1069.0, 382.0, 1075.0, 381.0, 1109.0, 137.0, 1103.0], "score": 0.98, "text": "Abstracting and Indexing \u00b7"}, {"category_id": 15, "poly": [143.0, 1106.0, 310.0, 1106.0, 310.0, 1133.0, 143.0, 1133.0], "score": 0.99, "text": "Advance Access \u00b7"}, {"category_id": 15, "poly": [139.0, 1125.0, 308.0, 1131.0, 307.0, 1165.0, 137.0, 1159.0], "score": 0.98, "text": "Aims and Scope \u00b7"}, {"category_id": 15, "poly": [143.0, 1162.0, 285.0, 1162.0, 285.0, 1189.0, 143.0, 1189.0], "score": 0.99, "text": "Annual Issues \u00b7"}, {"category_id": 15, "poly": [119.0, 1175.0, 132.0, 1166.0, 140.0, 1178.0, 127.0, 1186.0], "score": 0.52, "text": "\u00b7"}, {"category_id": 15, "poly": [140.0, 1186.0, 399.0, 1189.0, 398.0, 1223.0, 140.0, 1221.0], "score": 0.95, "text": "Article Processing Charges :"}, {"category_id": 15, "poly": [145.0, 1221.0, 298.0, 1221.0, 298.0, 1247.0, 145.0, 1247.0], "score": 0.99, "text": "Articles in Press"}, {"category_id": 15, "poly": [141.0, 1240.0, 313.0, 1245.0, 312.0, 1280.0, 140.0, 1274.0], "score": 0.99, "text": "Author Guidelines"}, {"category_id": 15, "poly": [140.0, 1274.0, 379.0, 1274.0, 379.0, 1308.0, 140.0, 1308.0], "score": 0.98, "text": "Bibliographic Information "}, {"category_id": 15, "poly": [140.0, 1304.0, 369.0, 1304.0, 369.0, 1338.0, 140.0, 1338.0], "score": 0.97, "text": "Citations to this Jounal ."}, {"category_id": 15, "poly": [141.0, 1330.0, 340.0, 1333.0, 339.0, 1367.0, 140.0, 1364.0], "score": 0.95, "text": " Contact Information \u00b7"}, {"category_id": 15, "poly": [143.0, 1364.0, 298.0, 1364.0, 298.0, 1391.0, 143.0, 1391.0], "score": 0.96, "text": "Editorial Board \u00b7"}, {"category_id": 15, "poly": [138.0, 1389.0, 330.0, 1391.0, 329.0, 1426.0, 138.0, 1423.0], "score": 0.96, "text": " Editorial Workflow \u00b7"}, {"category_id": 15, "poly": [138.0, 1415.0, 323.0, 1421.0, 322.0, 1455.0, 137.0, 1449.0], "score": 0.95, "text": "Free eTOC Alerts \u00b7"}, {"category_id": 15, "poly": [143.0, 1452.0, 312.0, 1452.0, 312.0, 1479.0, 143.0, 1479.0], "score": 0.99, "text": "Publication Ethics"}, {"category_id": 15, "poly": [140.0, 1479.0, 408.0, 1479.0, 408.0, 1511.0, 140.0, 1511.0], "score": 0.99, "text": "Reviewers Acknowledgment "}, {"category_id": 15, "poly": [138.0, 1503.0, 345.0, 1508.0, 344.0, 1543.0, 137.0, 1537.0], "score": 0.98, "text": "Submit a Manuscript -"}, {"category_id": 15, "poly": [138.0, 1532.0, 376.0, 1535.0, 376.0, 1569.0, 138.0, 1567.0], "score": 0.99, "text": "Subscription Information \u00b7"}, {"category_id": 15, "poly": [138.0, 1559.0, 313.0, 1565.0, 312.0, 1599.0, 137.0, 1593.0], "score": 0.99, "text": "Table ofContents"}, {"category_id": 15, "poly": [138.0, 1618.0, 342.0, 1618.0, 342.0, 1649.0, 138.0, 1649.0], "score": 0.96, "text": " Open Special Issues \u00b7"}, {"category_id": 15, "poly": [140.0, 1645.0, 374.0, 1645.0, 374.0, 1676.0, 140.0, 1676.0], "score": 0.96, "text": " Published Special Issues :"}, {"category_id": 15, "poly": [140.0, 1676.0, 367.0, 1676.0, 367.0, 1708.0, 140.0, 1708.0], "score": 0.98, "text": "Special Issue Guidelines"}, {"category_id": 15, "poly": [139.0, 1722.0, 234.0, 1728.0, 232.0, 1762.0, 137.0, 1756.0], "score": 1.0, "text": "Abstract"}, {"category_id": 15, "poly": [143.0, 1759.0, 283.0, 1759.0, 283.0, 1786.0, 143.0, 1786.0], "score": 0.98, "text": "Full- Text PDF"}, {"category_id": 15, "poly": [143.0, 1788.0, 298.0, 1788.0, 298.0, 1815.0, 143.0, 1815.0], "score": 0.98, "text": "Full- Text HTML"}, {"category_id": 15, "poly": [143.0, 1818.0, 293.0, 1818.0, 293.0, 1844.0, 143.0, 1844.0], "score": 0.97, "text": "Full- Text ePUB"}, {"category_id": 15, "poly": [143.0, 1847.0, 288.0, 1847.0, 288.0, 1874.0, 143.0, 1874.0], "score": 0.94, "text": " Full- Text XML"}, {"category_id": 15, "poly": [145.0, 1876.0, 320.0, 1876.0, 320.0, 1903.0, 145.0, 1903.0], "score": 0.99, "text": "Linked References"}, {"category_id": 15, "poly": [138.0, 1898.0, 357.0, 1903.0, 356.0, 1937.0, 137.0, 1932.0], "score": 0.97, "text": "Citations to this Article"}, {"category_id": 15, "poly": [140.0, 1932.0, 362.0, 1932.0, 362.0, 1964.0, 140.0, 1964.0], "score": 0.97, "text": "How to Cite this Article"}, {"category_id": 15, "poly": [140.0, 1961.0, 362.0, 1961.0, 362.0, 1993.0, 140.0, 1993.0], "score": 0.99, "text": "Complete Special Issue"}, {"category_id": 15, "poly": [86.0, 2010.0, 438.0, 2010.0, 438.0, 2042.0, 86.0, 2042.0], "score": 0.99, "text": "Abstract and Applied Analysis"}, {"category_id": 15, "poly": [86.0, 2030.0, 627.0, 2032.0, 627.0, 2066.0, 86.0, 2064.0], "score": 0.98, "text": "Volume 2013 (2013), Article ID 259470, 7 pages"}, {"category_id": 15, "poly": [81.0, 2056.0, 526.0, 2054.0, 526.0, 2088.0, 81.0, 2091.0], "score": 0.96, "text": "http: //dx.doi. org/10.1155/2013/259470"}, {"category_id": 15, "poly": [89.0, 2103.0, 241.0, 2103.0, 241.0, 2129.0, 89.0, 2129.0], "score": 1.0, "text": "Research Article"}], "page_info": {"page_no": 0, "height": 2339, "width": 1653}}, {"layout_dets": [{"category_id": 1, "poly": [88.79041290283203, 223.1548614501953, 596.5608520507812, 223.1548614501953, 596.5608520507812, 253.82266235351562, 88.79041290283203, 253.82266235351562], "score": 0.9999997019767761}, {"category_id": 1, "poly": [91.42396545410156, 476.6983947753906, 760.12841796875, 476.6983947753906, 760.12841796875, 507.5973815917969, 91.42396545410156, 507.5973815917969], "score": 0.9999997019767761}, {"category_id": 1, "poly": [90.55570220947266, 277.474609375, 378.6082458496094, 277.474609375, 378.6082458496094, 307.3374938964844, 90.55570220947266, 307.3374938964844], "score": 0.9999987483024597}, {"category_id": 1, "poly": [89.56867218017578, 327.1041259765625, 1510.0347900390625, 327.1041259765625, 1510.0347900390625, 389.6576232910156, 89.56867218017578, 389.6576232910156], "score": 0.9999944567680359}, {"category_id": 1, "poly": [119.38919067382812, 526.0288696289062, 1547.9219970703125, 526.0288696289062, 1547.9219970703125, 704.6207275390625, 119.38919067382812, 704.6207275390625], "score": 0.9999933242797852}, {"category_id": 1, "poly": [90.37564849853516, 139.7214813232422, 819.9425048828125, 139.7214813232422, 819.9425048828125, 201.7053985595703, 90.37564849853516, 201.7053985595703], "score": 0.9999151229858398}, {"category_id": 2, "poly": [89.54802703857422, 83.24105834960938, 424.4089050292969, 83.24105834960938, 424.4089050292969, 114.5113525390625, 89.54802703857422, 114.5113525390625], "score": 0.9983628988265991}, {"category_id": 1, "poly": [90.10054779052734, 417.296142578125, 437.4447021484375, 417.296142578125, 437.4447021484375, 447.23638916015625, 90.10054779052734, 447.23638916015625], "score": 0.8091702461242676}, {"category_id": 0, "poly": [89.9825210571289, 417.32232666015625, 437.4376525878906, 417.32232666015625, 437.4376525878906, 447.24578857421875, 89.9825210571289, 447.24578857421875], "score": 0.23477844893932343}, {"category_id": 13, "poly": [181, 332, 204, 332, 204, 355, 181, 355], "score": 0.73, "latex": "\\copyright"}, {"category_id": 13, "poly": [1167, 530, 1275, 530, 1275, 559, 1167, 559], "score": 0.68, "latex": "\\S\\S\\mathfrak{p h i}\\S\\S\\phi"}, {"category_id": 13, "poly": [803, 624, 817, 624, 817, 640, 803, 640], "score": 0.37, "latex": "\\cdot"}, {"category_id": 13, "poly": [824, 566, 838, 566, 838, 582, 824, 582], "score": 0.35, "latex": "\\cdot"}, {"category_id": 13, "poly": [1228, 530, 1274, 530, 1274, 559, 1228, 559], "score": 0.32, "latex": "\\S\\S\\phi"}, {"category_id": 13, "poly": [705, 681, 718, 681, 718, 698, 705, 698], "score": 0.32, "latex": "\\cdot"}, {"category_id": 15, "poly": [89.0, 136.0, 824.0, 141.0, 824.0, 176.0, 88.0, 170.0], "score": 0.99, "text": "Department of Mathematics, Zhejang Normal University, Zhejiang 321004, China"}, {"category_id": 15, "poly": [86.0, 168.0, 740.0, 171.0, 740.0, 212.0, 86.0, 209.0], "score": 0.98, "text": "2Department of Mathematics, Nanjing University, Nanjing 210093, China"}, {"category_id": 15, "poly": [89.0, 227.0, 595.0, 227.0, 595.0, 261.0, 89.0, 261.0], "score": 0.99, "text": "Received 15 January 2013; Accepted 18 February 2013"}, {"category_id": 15, "poly": [89.0, 275.0, 377.0, 280.0, 376.0, 315.0, 88.0, 309.0], "score": 1.0, "text": "Academic Editor: Yisheng Song"}, {"category_id": 15, "poly": [91.0, 358.0, 1018.0, 358.0, 1018.0, 392.0, 91.0, 392.0], "score": 0.98, "text": "unrestricted use, distribution, and reproduction in any medium, provided the original work is properly cited."}, {"category_id": 15, "poly": [89.0, 422.0, 440.0, 422.0, 440.0, 453.0, 89.0, 453.0], "score": 0.99, "text": "Citations to this Article [3 citations]"}, {"category_id": 15, "poly": [89.0, 480.0, 765.0, 480.0, 765.0, 512.0, 89.0, 512.0], "score": 0.98, "text": "The following is the list of published articles that have cited the current article."}, {"category_id": 15, "poly": [140.0, 587.0, 1550.0, 587.0, 1550.0, 621.0, 140.0, 621.0], "score": 0.99, "text": "Yuanheng Wang, and Humin Shi, \u201cA Modified Mixed Ishikawa Iteration for Common Fixed Points of Two Asymptotically Quasi Pseudocontractive Type Non-"}, {"category_id": 15, "poly": [140.0, 646.0, 1525.0, 646.0, 1525.0, 680.0, 140.0, 680.0], "score": 0.98, "text": "Yuanheng Wang, \u201cStrong Convergence Theorems for Common Fixed Points of an Infinite Family of Asymptotically Nonexpansive Mappings,\u201d Abstract and"}, {"category_id": 15, "poly": [89.0, 329.0, 180.0, 329.0, 180.0, 363.0, 89.0, 363.0], "score": 1.0, "text": "Copyright"}, {"category_id": 15, "poly": [205.0, 329.0, 1500.0, 329.0, 1500.0, 363.0, 205.0, 363.0], "score": 0.99, "text": "2013 Yuanheng Wang and Weifeng Xuan. This is an open access article distributed under the Creative Commons Attribution License, which permits"}, {"category_id": 15, "poly": [118.0, 531.0, 1166.0, 531.0, 1166.0, 565.0, 118.0, 565.0], "score": 0.97, "text": "\u25cf Pham Ky Anh, and Dang Van Hieu, Parallel and sequential hybrid methods for a finite family of asymptotically quasi"}, {"category_id": 15, "poly": [1276.0, 531.0, 1508.0, 531.0, 1508.0, 565.0, 1276.0, 565.0], "score": 0.94, "text": "-nonexpansive mappings,*\""}, {"category_id": 15, "poly": [145.0, 619.0, 802.0, 619.0, 802.0, 653.0, 145.0, 653.0], "score": 0.98, "text": "Self- Mappings,\" Abstract and Applied Analysis, 2014. View at Publisher"}, {"category_id": 15, "poly": [818.0, 619.0, 1036.0, 619.0, 1036.0, 653.0, 818.0, 653.0], "score": 0.98, "text": "View at Google Scholar"}, {"category_id": 15, "poly": [145.0, 560.0, 823.0, 560.0, 823.0, 592.0, 145.0, 592.0], "score": 0.98, "text": "Journal of AppliedMathematics and Computing, 2014.View at Publisher"}, {"category_id": 15, "poly": [839.0, 560.0, 1058.0, 560.0, 1058.0, 592.0, 839.0, 592.0], "score": 0.99, "text": "View at Google Scholar"}, {"category_id": 15, "poly": [145.0, 677.0, 704.0, 672.0, 704.0, 707.0, 145.0, 712.0], "score": 0.97, "text": "Applied Analysis, vol. 2014, pp. 1-6, 2014. View at Publisher"}, {"category_id": 15, "poly": [719.0, 677.0, 935.0, 672.0, 935.0, 707.0, 719.0, 712.0], "score": 1.0, "text": "View at Google Scholar"}], "page_info": {"page_no": 1, "height": 2339, "width": 1653}}]
\ No newline at end of file
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment