Module jpfreq.exporters.json

Expand source code
"""
.. include:: ../../../documentation/exporters/json.md
"""

from json import dumps
from collections import OrderedDict
from typing import Iterable
from ..jp_frequency_list import JapaneseFrequencyList
from .iexporter import IExporter


class JsonExporter(IExporter):
    def __init__(self):
        pass

    @staticmethod
    def _create_export_dictionary(
        frequency_list: JapaneseFrequencyList, limit: int = 100, combine: bool = False
    ) -> dict:
        """
        Creates a dictionary that can be exported to JSON.
        Parameters
        ----------
        frequency_list : JapaneseFrequencyList
            The frequency list to export
        limit : int
            The number of words to export
        combine : bool
            Whether to combine the word slots or not

        Returns
        -------
        dict
            The dictionary that can be exported to JSON
        """
        frequency = frequency_list.get_most_frequent(limit=limit)
        dictionary = OrderedDict()

        dictionary["text_info"] = frequency_list.generate_text_info().to_dict()
        dictionary["word_slots"] = [slot.to_dict(combine=combine) for slot in frequency]

        return dictionary

    def export(
        self,
        frequency_list: JapaneseFrequencyList,
        limit: int = 100,
        combine: bool = False,
        as_dict: bool = False,
    ) -> str | dict:
        """
        Exports the frequency list to JSON.
        Parameters
        ----------
        frequency_list : JapaneseFrequencyList
            The frequency list to export
        limit : int
            The MAX number of words to export
        combine : bool
            Whether to combine the word slots or not
        as_dict : bool
            Whether to return the dictionary or the JSON string

        Returns
        -------
        str
            The JSON string
        """
        result = self._create_export_dictionary(
            frequency_list, limit=limit, combine=combine
        )

        if as_dict:
            return result

        return dumps(result, ensure_ascii=False, indent=4)

    def export_lazy(
        self,
        frequency_list: JapaneseFrequencyList,
        limit: int = 100,
        combine: bool = False,
    ) -> Iterable[str]:
        return super().export_lazy(frequency_list, limit)

Classes

class JsonExporter
Expand source code
class JsonExporter(IExporter):
    def __init__(self):
        pass

    @staticmethod
    def _create_export_dictionary(
        frequency_list: JapaneseFrequencyList, limit: int = 100, combine: bool = False
    ) -> dict:
        """
        Creates a dictionary that can be exported to JSON.
        Parameters
        ----------
        frequency_list : JapaneseFrequencyList
            The frequency list to export
        limit : int
            The number of words to export
        combine : bool
            Whether to combine the word slots or not

        Returns
        -------
        dict
            The dictionary that can be exported to JSON
        """
        frequency = frequency_list.get_most_frequent(limit=limit)
        dictionary = OrderedDict()

        dictionary["text_info"] = frequency_list.generate_text_info().to_dict()
        dictionary["word_slots"] = [slot.to_dict(combine=combine) for slot in frequency]

        return dictionary

    def export(
        self,
        frequency_list: JapaneseFrequencyList,
        limit: int = 100,
        combine: bool = False,
        as_dict: bool = False,
    ) -> str | dict:
        """
        Exports the frequency list to JSON.
        Parameters
        ----------
        frequency_list : JapaneseFrequencyList
            The frequency list to export
        limit : int
            The MAX number of words to export
        combine : bool
            Whether to combine the word slots or not
        as_dict : bool
            Whether to return the dictionary or the JSON string

        Returns
        -------
        str
            The JSON string
        """
        result = self._create_export_dictionary(
            frequency_list, limit=limit, combine=combine
        )

        if as_dict:
            return result

        return dumps(result, ensure_ascii=False, indent=4)

    def export_lazy(
        self,
        frequency_list: JapaneseFrequencyList,
        limit: int = 100,
        combine: bool = False,
    ) -> Iterable[str]:
        return super().export_lazy(frequency_list, limit)

Ancestors

Methods

def export(self, frequency_list: JapaneseFrequencyList, limit: int = 100, combine: bool = False, as_dict: bool = False) ‑> str | dict

Exports the frequency list to JSON. Parameters


frequency_list : JapaneseFrequencyList
The frequency list to export
limit : int
The MAX number of words to export
combine : bool
Whether to combine the word slots or not
as_dict : bool
Whether to return the dictionary or the JSON string

Returns

str
The JSON string
Expand source code
def export(
    self,
    frequency_list: JapaneseFrequencyList,
    limit: int = 100,
    combine: bool = False,
    as_dict: bool = False,
) -> str | dict:
    """
    Exports the frequency list to JSON.
    Parameters
    ----------
    frequency_list : JapaneseFrequencyList
        The frequency list to export
    limit : int
        The MAX number of words to export
    combine : bool
        Whether to combine the word slots or not
    as_dict : bool
        Whether to return the dictionary or the JSON string

    Returns
    -------
    str
        The JSON string
    """
    result = self._create_export_dictionary(
        frequency_list, limit=limit, combine=combine
    )

    if as_dict:
        return result

    return dumps(result, ensure_ascii=False, indent=4)
def export_lazy(self, frequency_list: JapaneseFrequencyList, limit: int = 100, combine: bool = False) ‑> Iterable[str]
Expand source code
def export_lazy(
    self,
    frequency_list: JapaneseFrequencyList,
    limit: int = 100,
    combine: bool = False,
) -> Iterable[str]:
    return super().export_lazy(frequency_list, limit)