Grammar

class textworld.generator.text_generation.CountOrderedDict[source]

Bases: OrderedDict

An OrderedDict whose empty items are 0

class textworld.generator.text_generation.MergeAction[source]

Bases: object

Group of actions merged into one.

This allows for blending consecutive instructions.

textworld.generator.text_generation.assign_description_to_object(obj, grammar, game)[source]

Assign a descripton to an object.

textworld.generator.text_generation.assign_description_to_quest(quest, game, grammar)[source]
textworld.generator.text_generation.assign_description_to_room(room, game, grammar)[source]

Assign a descripton to a room.

textworld.generator.text_generation.assign_name_to_object(obj, grammar, game_infos)[source]

Assign a name to an object (if needed).

textworld.generator.text_generation.assign_new_matching_names(obj1_infos, obj2_infos, grammar, exclude)[source]
textworld.generator.text_generation.clean_replace_objs(grammar, desc, objs, game)[source]

Return a cleaned/keyword replaced for a list of objects.

textworld.generator.text_generation.describe_event(event, game, grammar)[source]

Assign a descripton to a quest.

Return type

str

textworld.generator.text_generation.expand_clean_replace(symbol, grammar, obj, game)[source]

Return a cleaned/keyword replaced symbol.

textworld.generator.text_generation.generate_instruction(action, grammar, game, counts)[source]

Generate text instruction for a specific action.

textworld.generator.text_generation.generate_text_from_grammar(game, grammar)[source]
textworld.generator.text_generation.get_action_chains(actions, grammar, game)[source]

Reduce the action list by combining similar actions.

textworld.generator.text_generation.is_seq(chain, game)[source]

Check if we have a theoretical chain in actions.

textworld.generator.text_generation.list_to_string(lst, det, det_type='a')[source]

Convert a list to a natural language string.

textworld.generator.text_generation.obj_list_to_prop_string(objs, property, game, det=True, det_type='a')[source]

Convert an object list to a nl string list of names.

textworld.generator.text_generation.repl_sing_plur(phrase, length)[source]

Alter a sentence depending on whether or not we are dealing with plural or singular objects (for counting)

textworld.generator.text_generation.replace_num(phrase, val)[source]

Add a numerical value to a string.

exception textworld.generator.text_grammar.MissingTextGrammar(path)[source]

Bases: NameError

class textworld.generator.text_grammar.Grammar(options={}, rng=None, kb=None)[source]

Bases: object

Context-Free Grammar for text generation.

Parameters
  • options (Union[GrammarOptions, Mapping[str, Any]]) – For customizing text generation process (see textworld.generator.GrammarOptions for the list of available options).

  • rng (Optional[RandomState]) – Random generator used for sampling tag expansions.

check()[source]

Check if this grammar is valid.

TODO: use logging mechanism to report warnings and errors.

Return type

bool

expand(text, rng=None)[source]

Expand some text until there is no more tag to expand.

Parameters
  • text (str) – Text potentially containing grammar tags to be expanded.

  • rng (optional) – Random generator used to chose an expansion when there is many. By default, it used the random generator of this grammar object.

Returns

Resulting text in which there is no grammar tag left to be expanded.

Return type

expanded_text

generate_name(obj_type, room_type='', include_adj=None, exclude=[])[source]

Generate a name given an object type and the type room it belongs to.

Parameters
  • obj_type (str) – Type of the object for which we will generate a name.

  • room_type (optional) – Type of the room the object belongs to.

  • include_adj (optional) – If True, the name can contain a generated adjective. If False, any generated adjective will be discarded. Default: use value grammar.options.include_adj

  • exclude (optional) – List of names we should avoid generating.

Return type

Tuple[str, str, str]

Returns

  • name – The whole name, i.e. adj + " " + noun.

  • adj – The adjective part of the name.

  • noun – The noun part of the name.

get_all_adjective_for_type(type)[source]

Get all possible adjectives for a given object type.

Parameters

type (str) – Object type.

Returns

All possible adjectives sorted in alphabetical order.

Return type

adjectives

get_all_expansions_for_tag(tag, max_depth=500)[source]

Get all possible expansions for a grammar tag.

Parameters
  • tag (str) – Grammar tag to be expanded.

  • max_depth (optional) – Maximum recursion depth when expanding tag.

Returns

All possible expansions.

Return type

expansions

get_all_expansions_for_type(type)[source]

Get all possible expansions for a given object type.

Parameters

type (str) – Object type.

Returns

All possible names.

Return type

names

get_all_names_for_type(type, include_adj)[source]

Get all possible names for a given object type.

Parameters
  • type (str) – Object type.

  • include_adj (optional) – If True, names can contain generated adjectives. If False, any generated adjectives will be discarded.

Returns

All possible names sorted in alphabetical order.

Return type

names

get_all_nouns_for_type(type)[source]

Get all possible nouns for a given object type.

Parameters

type (str) – Object type.

Returns

All possible nouns sorted in alphabetical order.

Return type

nouns

get_random_expansion(tag, rng=None)[source]

Return a randomly chosen expansion for the given tag.

Parameters
  • tag (str) – Grammar tag to be expanded.

  • rng (optional) – Random generator used to chose an expansion when there is many. By default, it used the random generator of this grammar object.

Returns

An expansion chosen randomly for the provided tag.

Return type

expansion

get_vocabulary()[source]
Return type

List[str]

has_tag(tag)[source]

Check if the grammar has a given tag.

Return type

bool

split_name_adj_noun(candidate, include_adj)[source]

Extract the full name, the adjective and the noun from a string.

Parameters
  • candidate (str) – String that may contain one adjective-noun sperator ‘|’.

  • include_adj (optional) – If True, the name can contain a generated adjective. If False, any generated adjective will be discarded.

Return type

Optional[Tuple[str, str, str]]

Returns

  • name – The whole name, i.e. adj + " " + noun.

  • adj – The adjective part of the name.

  • noun – The noun part of the name.

class textworld.generator.text_grammar.GrammarOptions(options=None, **kwargs)[source]

Bases: object

copy()[source]
Return type

GrammarOptions

classmethod deserialize(data)[source]

Creates a GrammarOptions from serialized data.

Parameters

data (Mapping) – Serialized data with the needed information to build a GrammarOptions object.

Return type

GrammarOptions

serialize()[source]

Serialize this object.

Results:

GrammarOptions’s data serialized to be JSON compatible.

Return type

Mapping

allowed_variables_numbering

Append numbers after an object name if there is not enough variation for it.

Type

bool

ambiguous_instructions

When True, in the game objective, objects of interest might be refer to by their type or adjective rather than full name.

Type

bool

blend_descriptions

When True, objects sharing some properties might be described in a single sentence rather than separate consecutive ones.

Type

bool

blend_instructions

When True, consecutive actions to be accomplished might be described in a single sentence rather than separate ones.

Type

bool

include_adj

When True, object names can be preceeded by an adjective.

Type

bool

names_to_exclude

List of names the text generation should not use.

Type

List[str]

only_last_action

When True, only the last action of a quest will be described in the generated objective.

Type

bool

theme

Grammar theme’s name. All *.twg files starting with that name will be loaded.

Type

str

unique_expansion

When True, #symbol# are force to be expanded to unique text.

Type

bool

property uuid: str

Generate UUID for this set of grammar options.

Return type

str

textworld.generator.text_grammar.fix_determinant(var)[source]