Home > database >  Extraction of the text content of mixed text/json list of strings using python3
Extraction of the text content of mixed text/json list of strings using python3

Time:01-25

I have a corpus of texts packaged into JSON. I have already stripped of some outer JSON layers and I have now lists like the following one

data = [
    '“Ми підписали угоду, яка дозволяє громадянам України подорожувати без віз до Монголії. Це означає, що громадяни України можуть в’їжджати до Монголії без віз на 90 днів упродовж 180 днів” - ',
    {
        'type': 'link',
        'attributes': {
            'href': 'https://www.facebook.com/UkraineMFA/posts/2498886686831903',
            'target': '_blank',
            'rel': None
        },
        'content': [
            'повідомляє сторінка МЗС у Facebook'
        ]
    },
    ' із посиланям на посла України у Польщі Андрія Дещицю.'
]

Each list element is either a text string or yet another JSON element encoded as a Python dict and finally I want to reduce it to its content (niftily already named 'content' here).

What is the Pythonese way of achieving this task?

P.S. The final output should be a line of plain text without any embellishments (neither from Python syntax nor from JSON) left, i.e. for the sample snippet

“Ми підписали угоду, яка дозволяє громадянам України подорожувати без віз до Монголії. Це означає, що громадяни України можуть в’їжджати до Монголії без віз на 90 днів упродовж 180 днів” - повідомляє сторінка МЗС у Facebook із посиланям на посла України у Польщі Андрія Дещицю.

CodePudding user response:

A single-line solution:

data = [
    '“Ми підписали угоду, яка дозволяє громадянам України подорожувати без віз до Монголії. Це означає, що громадяни України можуть в’їжджати до Монголії без віз на 90 днів упродовж 180 днів” - ',
    {'type': 'link', 'attributes': {'href': 'https://www.facebook.com/UkraineMFA/posts/2498886686831903', 'target': '_blank', 'rel': None}, 'content': ['повідомляє сторінка МЗС у Facebook']},
    ' із посиланям на посла України у Польщі Андрія Дещицю.'
]

flat = [item if type(item) is str else item["content"][0] for item in data]

final = "".join(flat)
print(final)

yields

'“Ми підписали угоду, яка дозволяє громадянам України подорожувати без віз до Монголії. Це означає, що громадяни України можуть в’їжджати до Монголії без віз на 90 днів упродовж 180 днів” - повідомляє сторінка МЗС у Facebook із посиланям на посла України у Польщі Андрія Дещицю.'

CodePudding user response:

import json

a=['“Ми підписали угоду, яка дозволяє громадянам України подорожувати без віз до Монголії. Це означає, що громадяни України можуть в’їжджати до Монголії без віз на 90 днів упродовж 180 днів” - ',    {'type': 'link', 'attributes': {'href': 'https://www.facebook.com/UkraineMFA/posts/2498886686831903', 'target': '_blank', 'rel': None}, 'content': ['повідомляє сторінка МЗС у Facebook']},    ' із посиланям на посла України у Польщі Андрія Дещицю.']

for x in range(len(a)):
    #y = json.loads(a[x])
    if isinstance(a[x], dict) and a[x]['content'] is not None:
        print(a[x]['content'])

Output:

['повідомляє сторінка МЗС у Facebook']

  • Related