{"action":"created","comment":{"url":"https://api.github.com/repos/OCR-D/ocrd_tesserocr/pulls/comments/213751066","pull_request_review_id":150651493,"id":213751066,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDIxMzc1MTA2Ng==","diff_hunk":"@@ -19,62 +24,251 @@ def process(self):\n         \"\"\"\n         Performs the (text) recognition.\n         \"\"\"\n-        print(self.parameter)\n-        if self.parameter['textequiv_level'] not in ['line', 'glyph']:\n-            raise Exception(\"currently only implemented at the line/glyph level\")\n+        # print(self.parameter)\n+        maxlevel = self.parameter['textequiv_level']\n         model = get_languages()[1][-1] # last installed model\n         if 'model' in self.parameter:\n             model = self.parameter['model']\n             if model not in get_languages()[1]:\n                 raise Exception(\"configured model \" + model + \" is not installed\")\n         with PyTessBaseAPI(path=TESSDATA_PREFIX, lang=model) as tessapi:\n-            log.info(\"Using model %s in %s for recognition\", model, get_languages()[0])\n+            log.info(\"Using model '%s' in %s for recognition at the %s level\", model, get_languages()[0], maxlevel)\n+            # tessapi.SetVariable(\"tessedit_single_match\", \"0\")\n+            # \n+            # tessedit_load_sublangs\n+            # tessedit_preserve_min_wd_len 2\n+            # tessedit_prefer_joined_punct 0\n+            # tessedit_write_rep_codes 0\n+            # tessedit_parallelize 0\n+            # tessedit_zero_rejection 0\n+            # tessedit_zero_kelvin_rejection 0\n+            # tessedit_reject_mode 0\n+            # tessedit_use_reject_spaces 1\n+            # tessedit_fix_fuzzy_spaces 1\n+            # tessedit_char_blacklist\n+            # tessedit_char_whitelist\n+            # chs_leading_punct ('`\"\n+            # chs_trailing_punct1 ).,;:?!\n+            # chs_trailing_punct2 )'`\"\n+            # numeric_punctuation .,\n+            # unrecognised_char |\n+            # ok_repeated_ch_non_alphanum_wds -?*=\n+            # conflict_set_I_l_1 Il1[]\n+            # preserve_interword_spaces 0\n+            # tessedit_enable_dict_correction 0\n+            # tessedit_enable_bigram_correction 1\n+            # stopper_smallword_size 2\n+            # wordrec_max_join_chunks 4\n+            # suspect_space_level 100\n+            # suspect_short_words 2\n+            # language_model_ngram_on 0\n+            # language_model_ngram_order 8\n+            # language_model_min_compound_length 3\n+            # language_model_penalty_non_freq_dict_word 0.1\n+            # language_model_penalty_non_dict_word 0.15\n+            # language_model_penalty_punc 0.2\n+            # language_model_penalty_case 0.1\n+            # language_model_penalty_script 0.5\n+            # language_model_penalty_chartype 0.3\n+            # language_model_penalty_spacing 0.05\n+            # textord_max_noise_size 7\n+            # enable_noise_removal 1\n+            # classify_bln_numeric_mode 0\n+            # lstm_use_matrix 1\n+            # user_words_file\n+            # user_patterns_file\n             for (n, input_file) in enumerate(self.input_files):\n                 log.info(\"INPUT FILE %i / %s\", n, input_file)\n                 pcgts = from_file(self.workspace.download_file(input_file))\n                 # TODO use binarized / gray\n                 pil_image = self.workspace.resolve_image_as_pil(pcgts.get_Page().imageFilename)\n                 tessapi.SetImage(pil_image)\n+                metadata = pcgts.get_Metadata() # ensured by from_file()\n+                metadata.add_MetadataItem(\n+                    MetadataItemType(type_=\"processingStep\",\n+                                     name=OCRD_TOOL['tools']['ocrd-tesserocr-recognize']['steps'][0],\n+                                     value='ocrd-tesserocr-recognize',\n+                                     Labels=[LabelsType(externalRef=\"parameters\",\n+                                                        Label=[LabelType(type_=name,\n+                                                                         value=self.parameter[name])\n+                                                               for name in self.parameter.keys()])]))\n                 # TODO slow\n                 #  tessapi.SetPageSegMode(PSM.SINGLE_LINE)\n-                log.info(\"page %s\", pcgts)\n-                for region in pcgts.get_Page().get_TextRegion():\n+                log.info(\"Recognizing text in page '%s'\", pcgts.get_pcGtsId())\n+                page = pcgts.get_Page()\n+                if maxlevel == 'page':\n+                    # not sure what to do here: \n+                    # - We cannot simply do GetUTF8Text(), because there is no TextEquiv on the page level.\n+                    # - We could GetComponentImages(RIL.BLOCK) and add a text region for each, then enter region level recognition below. But what if regions are already annotated? How to go about non-text blocks?","path":"ocrd_tesserocr/recognize.py","position":107,"original_position":107,"commit_id":"d2115c0e92febc39556d1dd269623b9b0f1921d4","original_commit_id":"d2115c0e92febc39556d1dd269623b9b0f1921d4","user":{"login":"kba","id":273367,"node_id":"MDQ6VXNlcjI3MzM2Nw==","avatar_url":"https://avatars0.githubusercontent.com/u/273367?v=4","gravatar_id":"","url":"https://api.github.com/users/kba","html_url":"https://github.com/kba","followers_url":"https://api.github.com/users/kba/followers","following_url":"https://api.github.com/users/kba/following{/other_user}","gists_url":"https://api.github.com/users/kba/gists{/gist_id}","starred_url":"https://api.github.com/users/kba/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/kba/subscriptions","organizations_url":"https://api.github.com/users/kba/orgs","repos_url":"https://api.github.com/users/kba/repos","events_url":"https://api.github.com/users/kba/events{/privacy}","received_events_url":"https://api.github.com/users/kba/received_events","type":"User","site_admin":false},"body":"If textequiv_level is meant as maxlevel (which is semantically cleaner), this should be an error for page as it is implemented.","created_at":"2018-08-29T16:38:28Z","updated_at":"2018-08-29T16:48:32Z","html_url":"https://github.com/OCR-D/ocrd_tesserocr/pull/17#discussion_r213751066","pull_request_url":"https://api.github.com/repos/OCR-D/ocrd_tesserocr/pulls/17","author_association":"MEMBER","_links":{"self":{"href":"https://api.github.com/repos/OCR-D/ocrd_tesserocr/pulls/comments/213751066"},"html":{"href":"https://github.com/OCR-D/ocrd_tesserocr/pull/17#discussion_r213751066"},"pull_request":{"href":"https://api.github.com/repos/OCR-D/ocrd_tesserocr/pulls/17"}}},"pull_request":{"url":"https://api.github.com/repos/OCR-D/ocrd_tesserocr/pulls/17","id":207822392,"node_id":"MDExOlB1bGxSZXF1ZXN0MjA3ODIyMzky","html_url":"https://github.com/OCR-D/ocrd_tesserocr/pull/17","diff_url":"https://github.com/OCR-D/ocrd_tesserocr/pull/17.diff","patch_url":"https://github.com/OCR-D/ocrd_tesserocr/pull/17.patch","issue_url":"https://api.github.com/repos/OCR-D/ocrd_tesserocr/issues/17","number":17,"state":"open","locked":false,"title":"support more textequiv levels","user":{"login":"bertsky","id":38561704,"node_id":"MDQ6VXNlcjM4NTYxNzA0","avatar_url":"https://avatars3.githubusercontent.com/u/38561704?v=4","gravatar_id":"","url":"https://api.github.com/users/bertsky","html_url":"https://github.com/bertsky","followers_url":"https://api.github.com/users/bertsky/followers","following_url":"https://api.github.com/users/bertsky/following{/other_user}","gists_url":"https://api.github.com/users/bertsky/gists{/gist_id}","starred_url":"https://api.github.com/users/bertsky/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bertsky/subscriptions","organizations_url":"https://api.github.com/users/bertsky/orgs","repos_url":"https://api.github.com/users/bertsky/repos","events_url":"https://api.github.com/users/bertsky/events{/privacy}","received_events_url":"https://api.github.com/users/bertsky/received_events","type":"User","site_admin":false},"body":"This is an attempt to implement the other annotation levels. In my opinion, the behaviour for the different levels cannot be made completely analogous with Tesseract: simply pointing it to rectangles for words and glyphs (from an external layout segmentation) would produce results of far worse quality than always recognizing one complete line and allowing its own segmentation below it (accessible by iterators). In contrast, from the line level upwards we can reliably use its respective page segmentation mode (SINGLE_LINE / SINGLE_BLOCK / AUTO). \r\nPerhaps warnings and exceptions should be dealt with in a different, more systematic way though.","created_at":"2018-08-12T13:54:02Z","updated_at":"2018-08-29T16:48:31Z","closed_at":null,"merged_at":null,"merge_commit_sha":"3e407f7b522f3163a8a133c3379613bf363cb110","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/OCR-D/ocrd_tesserocr/pulls/17/commits","review_comments_url":"https://api.github.com/repos/OCR-D/ocrd_tesserocr/pulls/17/comments","review_comment_url":"https://api.github.com/repos/OCR-D/ocrd_tesserocr/pulls/comments{/number}","comments_url":"https://api.github.com/repos/OCR-D/ocrd_tesserocr/issues/17/comments","statuses_url":"https://api.github.com/repos/OCR-D/ocrd_tesserocr/statuses/d2115c0e92febc39556d1dd269623b9b0f1921d4","head":{"label":"bertsky:master","ref":"master","sha":"d2115c0e92febc39556d1dd269623b9b0f1921d4","user":{"login":"bertsky","id":38561704,"node_id":"MDQ6VXNlcjM4NTYxNzA0","avatar_url":"https://avatars3.githubusercontent.com/u/38561704?v=4","gravatar_id":"","url":"https://api.github.com/users/bertsky","html_url":"https://github.com/bertsky","followers_url":"https://api.github.com/users/bertsky/followers","following_url":"https://api.github.com/users/bertsky/following{/other_user}","gists_url":"https://api.github.com/users/bertsky/gists{/gist_id}","starred_url":"https://api.github.com/users/bertsky/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bertsky/subscriptions","organizations_url":"https://api.github.com/users/bertsky/orgs","repos_url":"https://api.github.com/users/bertsky/repos","events_url":"https://api.github.com/users/bertsky/events{/privacy}","received_events_url":"https://api.github.com/users/bertsky/received_events","type":"User","site_admin":false},"repo":{"id":143551648,"node_id":"MDEwOlJlcG9zaXRvcnkxNDM1NTE2NDg=","name":"ocrd_tesserocr","full_name":"bertsky/ocrd_tesserocr","owner":{"login":"bertsky","id":38561704,"node_id":"MDQ6VXNlcjM4NTYxNzA0","avatar_url":"https://avatars3.githubusercontent.com/u/38561704?v=4","gravatar_id":"","url":"https://api.github.com/users/bertsky","html_url":"https://github.com/bertsky","followers_url":"https://api.github.com/users/bertsky/followers","following_url":"https://api.github.com/users/bertsky/following{/other_user}","gists_url":"https://api.github.com/users/bertsky/gists{/gist_id}","starred_url":"https://api.github.com/users/bertsky/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bertsky/subscriptions","organizations_url":"https://api.github.com/users/bertsky/orgs","repos_url":"https://api.github.com/users/bertsky/repos","events_url":"https://api.github.com/users/bertsky/events{/privacy}","received_events_url":"https://api.github.com/users/bertsky/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/bertsky/ocrd_tesserocr","description":"Run tesseract with the tesserocr bindings with @OCR-D's interfaces","fork":true,"url":"https://api.github.com/repos/bertsky/ocrd_tesserocr","forks_url":"https://api.github.com/repos/bertsky/ocrd_tesserocr/forks","keys_url":"https://api.github.com/repos/bertsky/ocrd_tesserocr/keys{/key_id}","collaborators_url":"https://api.github.com/repos/bertsky/ocrd_tesserocr/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/bertsky/ocrd_tesserocr/teams","hooks_url":"https://api.github.com/repos/bertsky/ocrd_tesserocr/hooks","issue_events_url":"https://api.github.com/repos/bertsky/ocrd_tesserocr/issues/events{/number}","events_url":"https://api.github.com/repos/bertsky/ocrd_tesserocr/events","assignees_url":"https://api.github.com/repos/bertsky/ocrd_tesserocr/assignees{/user}","branches_url":"https://api.github.com/repos/bertsky/ocrd_tesserocr/branches{/branch}","tags_url":"https://api.github.com/repos/bertsky/ocrd_tesserocr/tags","blobs_url":"https://api.github.com/repos/bertsky/ocrd_tesserocr/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/bertsky/ocrd_tesserocr/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/bertsky/ocrd_tesserocr/git/refs{/sha}","trees_url":"https://api.github.com/repos/bertsky/ocrd_tesserocr/git/trees{/sha}","statuses_url":"https://api.github.com/repos/bertsky/ocrd_tesserocr/statuses/{sha}","languages_url":"https://api.github.com/repos/bertsky/ocrd_tesserocr/languages","stargazers_url":"https://api.github.com/repos/bertsky/ocrd_tesserocr/stargazers","contributors_url":"https://api.github.com/repos/bertsky/ocrd_tesserocr/contributors","subscribers_url":"https://api.github.com/repos/bertsky/ocrd_tesserocr/subscribers","subscription_url":"https://api.github.com/repos/bertsky/ocrd_tesserocr/subscription","commits_url":"https://api.github.com/repos/bertsky/ocrd_tesserocr/commits{/sha}","git_commits_url":"https://api.github.com/repos/bertsky/ocrd_tesserocr/git/commits{/sha}","comments_url":"https://api.github.com/repos/bertsky/ocrd_tesserocr/comments{/number}","issue_comment_url":"https://api.github.com/repos/bertsky/ocrd_tesserocr/issues/comments{/number}","contents_url":"https://api.github.com/repos/bertsky/ocrd_tesserocr/contents/{+path}","compare_url":"https://api.github.com/repos/bertsky/ocrd_tesserocr/compare/{base}...{head}","merges_url":"https://api.github.com/repos/bertsky/ocrd_tesserocr/merges","archive_url":"https://api.github.com/repos/bertsky/ocrd_tesserocr/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/bertsky/ocrd_tesserocr/downloads","issues_url":"https://api.github.com/repos/bertsky/ocrd_tesserocr/issues{/number}","pulls_url":"https://api.github.com/repos/bertsky/ocrd_tesserocr/pulls{/number}","milestones_url":"https://api.github.com/repos/bertsky/ocrd_tesserocr/milestones{/number}","notifications_url":"https://api.github.com/repos/bertsky/ocrd_tesserocr/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/bertsky/ocrd_tesserocr/labels{/name}","releases_url":"https://api.github.com/repos/bertsky/ocrd_tesserocr/releases{/id}","deployments_url":"https://api.github.com/repos/bertsky/ocrd_tesserocr/deployments","created_at":"2018-08-04T18:09:32Z","updated_at":"2018-08-29T16:27:25Z","pushed_at":"2018-08-29T16:27:23Z","git_url":"git://github.com/bertsky/ocrd_tesserocr.git","ssh_url":"git@github.com:bertsky/ocrd_tesserocr.git","clone_url":"https://github.com/bertsky/ocrd_tesserocr.git","svn_url":"https://github.com/bertsky/ocrd_tesserocr","homepage":"","size":73,"stargazers_count":0,"watchers_count":0,"language":"Python","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":0,"license":{"key":"mit","name":"MIT License","spdx_id":"MIT","url":"https://api.github.com/licenses/mit","node_id":"MDc6TGljZW5zZTEz"},"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"OCR-D:master","ref":"master","sha":"fa05844237e5aec69ede3df471a94cc85c555d1f","user":{"login":"OCR-D","id":26362587,"node_id":"MDEyOk9yZ2FuaXphdGlvbjI2MzYyNTg3","avatar_url":"https://avatars2.githubusercontent.com/u/26362587?v=4","gravatar_id":"","url":"https://api.github.com/users/OCR-D","html_url":"https://github.com/OCR-D","followers_url":"https://api.github.com/users/OCR-D/followers","following_url":"https://api.github.com/users/OCR-D/following{/other_user}","gists_url":"https://api.github.com/users/OCR-D/gists{/gist_id}","starred_url":"https://api.github.com/users/OCR-D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/OCR-D/subscriptions","organizations_url":"https://api.github.com/users/OCR-D/orgs","repos_url":"https://api.github.com/users/OCR-D/repos","events_url":"https://api.github.com/users/OCR-D/events{/privacy}","received_events_url":"https://api.github.com/users/OCR-D/received_events","type":"Organization","site_admin":false},"repo":{"id":128755353,"node_id":"MDEwOlJlcG9zaXRvcnkxMjg3NTUzNTM=","name":"ocrd_tesserocr","full_name":"OCR-D/ocrd_tesserocr","owner":{"login":"OCR-D","id":26362587,"node_id":"MDEyOk9yZ2FuaXphdGlvbjI2MzYyNTg3","avatar_url":"https://avatars2.githubusercontent.com/u/26362587?v=4","gravatar_id":"","url":"https://api.github.com/users/OCR-D","html_url":"https://github.com/OCR-D","followers_url":"https://api.github.com/users/OCR-D/followers","following_url":"https://api.github.com/users/OCR-D/following{/other_user}","gists_url":"https://api.github.com/users/OCR-D/gists{/gist_id}","starred_url":"https://api.github.com/users/OCR-D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/OCR-D/subscriptions","organizations_url":"https://api.github.com/users/OCR-D/orgs","repos_url":"https://api.github.com/users/OCR-D/repos","events_url":"https://api.github.com/users/OCR-D/events{/privacy}","received_events_url":"https://api.github.com/users/OCR-D/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/OCR-D/ocrd_tesserocr","description":"Run tesseract with the tesserocr bindings with @OCR-D's interfaces","fork":false,"url":"https://api.github.com/repos/OCR-D/ocrd_tesserocr","forks_url":"https://api.github.com/repos/OCR-D/ocrd_tesserocr/forks","keys_url":"https://api.github.com/repos/OCR-D/ocrd_tesserocr/keys{/key_id}","collaborators_url":"https://api.github.com/repos/OCR-D/ocrd_tesserocr/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/OCR-D/ocrd_tesserocr/teams","hooks_url":"https://api.github.com/repos/OCR-D/ocrd_tesserocr/hooks","issue_events_url":"https://api.github.com/repos/OCR-D/ocrd_tesserocr/issues/events{/number}","events_url":"https://api.github.com/repos/OCR-D/ocrd_tesserocr/events","assignees_url":"https://api.github.com/repos/OCR-D/ocrd_tesserocr/assignees{/user}","branches_url":"https://api.github.com/repos/OCR-D/ocrd_tesserocr/branches{/branch}","tags_url":"https://api.github.com/repos/OCR-D/ocrd_tesserocr/tags","blobs_url":"https://api.github.com/repos/OCR-D/ocrd_tesserocr/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/OCR-D/ocrd_tesserocr/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/OCR-D/ocrd_tesserocr/git/refs{/sha}","trees_url":"https://api.github.com/repos/OCR-D/ocrd_tesserocr/git/trees{/sha}","statuses_url":"https://api.github.com/repos/OCR-D/ocrd_tesserocr/statuses/{sha}","languages_url":"https://api.github.com/repos/OCR-D/ocrd_tesserocr/languages","stargazers_url":"https://api.github.com/repos/OCR-D/ocrd_tesserocr/stargazers","contributors_url":"https://api.github.com/repos/OCR-D/ocrd_tesserocr/contributors","subscribers_url":"https://api.github.com/repos/OCR-D/ocrd_tesserocr/subscribers","subscription_url":"https://api.github.com/repos/OCR-D/ocrd_tesserocr/subscription","commits_url":"https://api.github.com/repos/OCR-D/ocrd_tesserocr/commits{/sha}","git_commits_url":"https://api.github.com/repos/OCR-D/ocrd_tesserocr/git/commits{/sha}","comments_url":"https://api.github.com/repos/OCR-D/ocrd_tesserocr/comments{/number}","issue_comment_url":"https://api.github.com/repos/OCR-D/ocrd_tesserocr/issues/comments{/number}","contents_url":"https://api.github.com/repos/OCR-D/ocrd_tesserocr/contents/{+path}","compare_url":"https://api.github.com/repos/OCR-D/ocrd_tesserocr/compare/{base}...{head}","merges_url":"https://api.github.com/repos/OCR-D/ocrd_tesserocr/merges","archive_url":"https://api.github.com/repos/OCR-D/ocrd_tesserocr/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/OCR-D/ocrd_tesserocr/downloads","issues_url":"https://api.github.com/repos/OCR-D/ocrd_tesserocr/issues{/number}","pulls_url":"https://api.github.com/repos/OCR-D/ocrd_tesserocr/pulls{/number}","milestones_url":"https://api.github.com/repos/OCR-D/ocrd_tesserocr/milestones{/number}","notifications_url":"https://api.github.com/repos/OCR-D/ocrd_tesserocr/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/OCR-D/ocrd_tesserocr/labels{/name}","releases_url":"https://api.github.com/repos/OCR-D/ocrd_tesserocr/releases{/id}","deployments_url":"https://api.github.com/repos/OCR-D/ocrd_tesserocr/deployments","created_at":"2018-04-09T10:34:21Z","updated_at":"2018-08-07T11:15:05Z","pushed_at":"2018-08-29T16:27:24Z","git_url":"git://github.com/OCR-D/ocrd_tesserocr.git","ssh_url":"git@github.com:OCR-D/ocrd_tesserocr.git","clone_url":"https://github.com/OCR-D/ocrd_tesserocr.git","svn_url":"https://github.com/OCR-D/ocrd_tesserocr","homepage":"","size":57,"stargazers_count":1,"watchers_count":1,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":6,"mirror_url":null,"archived":false,"open_issues_count":5,"license":{"key":"mit","name":"MIT License","spdx_id":"MIT","url":"https://api.github.com/licenses/mit","node_id":"MDc6TGljZW5zZTEz"},"forks":6,"open_issues":5,"watchers":1,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/OCR-D/ocrd_tesserocr/pulls/17"},"html":{"href":"https://github.com/OCR-D/ocrd_tesserocr/pull/17"},"issue":{"href":"https://api.github.com/repos/OCR-D/ocrd_tesserocr/issues/17"},"comments":{"href":"https://api.github.com/repos/OCR-D/ocrd_tesserocr/issues/17/comments"},"review_comments":{"href":"https://api.github.com/repos/OCR-D/ocrd_tesserocr/pulls/17/comments"},"review_comment":{"href":"https://api.github.com/repos/OCR-D/ocrd_tesserocr/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/OCR-D/ocrd_tesserocr/pulls/17/commits"},"statuses":{"href":"https://api.github.com/repos/OCR-D/ocrd_tesserocr/statuses/d2115c0e92febc39556d1dd269623b9b0f1921d4"}},"author_association":"CONTRIBUTOR"}}
{"actor":{"display_login":"kba"}}