



import numpy as np
from nltk.translate import meteor_score

import datasets
from datasets.config import importlib_metadata, version


UpperCAmelCase_							:      Dict      =  version.parse(importlib_metadata.version("nltk"))
if NLTK_VERSION >= version.Version("3.6.4"):
						from nltk import word_tokenize


UpperCAmelCase_							:      List[Any]      =  "\\n@inproceedings{banarjee2005,\n  title     = {{METEOR}: An Automatic Metric for {MT} Evaluation with Improved Correlation with Human Judgments},\n  author    = {Banerjee, Satanjeev  and Lavie, Alon},\n  booktitle = {Proceedings of the {ACL} Workshop on Intrinsic and Extrinsic Evaluation Measures for Machine Translation and/or Summarization},\n  month     = jun,\n  year      = {2005},\n  address   = {Ann Arbor, Michigan},\n  publisher = {Association for Computational Linguistics},\n  url       = {https://www.aclweb.org/anthology/W05-0909},\n  pages     = {65--72},\n}\n"

UpperCAmelCase_							:      Any      =  "\\nMETEOR, an automatic metric for machine translation evaluation\nthat is based on a generalized concept of unigram matching between the\nmachine-produced translation and human-produced reference translations.\nUnigrams can be matched based on their surface forms, stemmed forms,\nand meanings; furthermore, METEOR can be easily extended to include more\nadvanced matching strategies. Once all generalized unigram matches\nbetween the two strings have been found, METEOR computes a score for\nthis matching using a combination of unigram-precision, unigram-recall, and\na measure of fragmentation that is designed to directly capture how\nwell-ordered the matched words in the machine translation are in relation\nto the reference.\n\nMETEOR gets an R correlation value of 0.347 with human evaluation on the Arabic\ndata and 0.331 on the Chinese data. This is shown to be an improvement on\nusing simply unigram-precision, unigram-recall and their harmonic F1\ncombination.\n"

UpperCAmelCase_							:      int      =  "\nComputes METEOR score of translated segments against one or more references.\nArgs:\n    predictions: list of predictions to score. Each prediction\n        should be a string with tokens separated by spaces.\n    references: list of reference for each prediction. Each\n        reference should be a string with tokens separated by spaces.\n    alpha: Parameter for controlling relative weights of precision and recall. default: 0.9\n    beta: Parameter for controlling shape of penalty as a function of fragmentation. default: 3\n    gamma: Relative weight assigned to fragmentation penalty. default: 0.5\nReturns:\n    'meteor': meteor score.\nExamples:\n\n    >>> meteor = datasets.load_metric('meteor')\n    >>> predictions = [\"It is a guide to action which ensures that the military always obeys the commands of the party\"]\n    >>> references = [\"It is a guide to action that ensures that the military will forever heed Party commands\"]\n    >>> results = meteor.compute(predictions=predictions, references=references)\n    >>> print(round(results[\"meteor\"], 4))\n    0.6944\n"






@datasets.utils.file_utils.add_start_docstrings(_DESCRIPTION       ,    _KWARGS_DESCRIPTION     )
class      UpperCamelCase    (						datasets.Metric     ):



	def 			__A							(       self		):
							return datasets.MetricInfo(
							    description=_DESCRIPTION			,	citation=_CITATION			,	inputs_description=_KWARGS_DESCRIPTION			,	features=datasets.Features(
							        {
							            "predictions": datasets.Value("string"			,	id="sequence"		),
							            "references": datasets.Value("string"			,	id="sequence"		),
							        }		)			,	codebase_urls=["https://github.com/nltk/nltk/blob/develop/nltk/translate/meteor_score.py"]			,	reference_urls=[
							        "https://www.nltk.org/api/nltk.translate.html#module-nltk.translate.meteor_score",
							        "https://en.wikipedia.org/wiki/METEOR",
							    ]			,	)



	def 			__A							(       self			,	UpperCAmelCase__		):
							import nltk

							nltk.download("wordnet"		)
							if NLTK_VERSION >= version.Version("3.6.5"		):
													nltk.download("punkt"		)
							if NLTK_VERSION >= version.Version("3.6.6"		):
													nltk.download("omw-1.4"		)



	def 			__A							(       self			,	UpperCAmelCase__			,	UpperCAmelCase__			,	UpperCAmelCase__=0.9			,	UpperCAmelCase__=3			,	UpperCAmelCase__=0.5		):
							if NLTK_VERSION >= version.Version("3.6.5"		):
													A__							=       [
													    meteor_score.single_meteor_score(
													        word_tokenize(UpperCAmelCase__		)			,	word_tokenize(UpperCAmelCase__		)			,	alpha=UpperCAmelCase__			,	beta=UpperCAmelCase__			,	gamma=UpperCAmelCase__		)
													    for ref, pred in zip(UpperCAmelCase__			,	UpperCAmelCase__		)
													]
							else:
													A__							=       [
													    meteor_score.single_meteor_score(UpperCAmelCase__			,	UpperCAmelCase__			,	alpha=UpperCAmelCase__			,	beta=UpperCAmelCase__			,	gamma=UpperCAmelCase__		)
													    for ref, pred in zip(UpperCAmelCase__			,	UpperCAmelCase__		)
													]

							return {"meteor": np.mean(UpperCAmelCase__		)}










def  UpperCamelCase						(       _A			:				str    )->       str:





						"""simple docstring"""





						A__							=       ""
						for ch in key:
												if ch == " " or ch not in key_no_dups and ch.isalpha():
																		key_no_dups += ch
						return key_no_dups
def  UpperCamelCase						(       _A			:				str    )->       dict[str, str]:





						"""simple docstring"""





						A__							=       [chr(i + 65    ) for i in range(26    )]
						# Remove duplicate characters from key
						A__							=       remove_duplicates(key.upper()    )
						A__							=       len(_A    )
						# First fill cipher with key characters
						A__							=       {alphabet[i]: char for i, char in enumerate(_A    )}
						# Then map remaining characters in alphabet to
						# the alphabet from the beginning
						for i in range(len(_A    )			,							26    ):
												A__							=       alphabet[i - offset]
												# Ensure we are not mapping letters to letters previously mapped
												while char in key:
																		offset -= 1
																		A__							=       alphabet[i - offset]
												A__							=       char
						return cipher_alphabet
def  UpperCamelCase						(       _A			:				str			,							_A			:				dict[str, str]    )->       str:





						"""simple docstring"""





						return "".join(cipher_map.get(_A			,							_A    ) for ch in message.upper()    )
def  UpperCamelCase						(       _A			:				str			,							_A			:				dict[str, str]    )->       str:





						"""simple docstring"""





						A__							=       {v: k for k, v in cipher_map.items()}
						return "".join(rev_cipher_map.get(_A			,							_A    ) for ch in message.upper()    )
def  UpperCamelCase						(       )->       None:





						"""simple docstring"""





						A__							=       input("Enter message to encode or decode: "    ).strip()
						A__							=       input("Enter keyword: "    ).strip()
						A__							=       input("Encipher or decipher? E/D:"    ).strip()[0].lower()
						try:
												A__							=       {"e": encipher, "d": decipher}[option]
						except KeyError:
												raise KeyError("invalid input option"    )
						A__							=       create_cipher_map(_A    )
						print(func(_A			,							_A    )    )


if __name__ == "__main__":
						import doctest

						doctest.testmod()
						main()





