class Formatter(object): def __init__(self, dictionary): self.speller = Speller(dictionary) def formatting(self, text): refTable = {} counter = 1 text = text.decode('utf8') words = text.split(); n = len(words) for i in range(n): tempWord, termType = "", -1 if words[i] == '-' and 0 < i < n-1: termType = 0 tempWord = words[i-1] + words[i+1] elif words[i].startswith('-') and i > 0: termType = 1 tempWord = words[i-1] + words[i][1:] elif words[i].endswith('-') and i < n-1: termType = 2 tempWord = words[i][:-1] + words[i+1] tempWord = self.speller.correct(tempWord.lower()) if tempWord else "" if tempWord in self.speller.keyterms: if tempWord not in refTable: refTable[tempWord] = counter i = counter counter += 1 else: i = refTable[tempWord] # tempWord += " [%s]" % str(i) if termType == 0: words[i-1] = tempWord words[i] = "" words[i+1] = "" elif termType == 1: words[i-1] = tempWord words[i] = "" elif termType == 2: words[i] = tempWord words[i+1] = "" return (" ".join(words)).strip().encode('utf8') # return {"content": (" ".join(words)).strip().encode('utf8'), "keyterms": refTable} def setDictionary(self, dictionary): self.speller = Speller(dictionary) def prettyPrint(self, text, titleDict, keyterms): toReturn = "%s\n\n" % text for item in titleDict: try: index = "[%s] " % str(keyterms.index(item['title'].lower())+1) toReturn += index + ("%s\nDefinition: %s\nWikipedia: %s\n\n" % (item['title'], item['summary'], item['url'])) except: continue return toReturn.strip()
def main() -> None: parser = argparse.ArgumentParser('IVONA TTS reader') parser.add_argument('-l', '--language', type=str, help='Voice language (e.g. pl-PL, en-US)') parser.add_argument('-n', '--name', type=str, help='Voice name') parser.add_argument('-g', '--gender', type=str, help='Voice gender (Male or Female)') parser.add_argument('--spelling', dest='spelling', action='store_true', help="Enable spelling (default)") parser.add_argument('--no-spelling', dest='spelling', action='store_false', help="Disable spelling") parser.set_defaults(spelling=True) args = parser.parse_args() ivona = Ivona(os.environ.get('IVONA_ACCESS_KEY'), os.environ.get('IVONA_SECRET_KEY'), Region(os.environ.get('IVONA_REGION', 'eu-west-1'))) voices = ivona.list_voices(name=args.name, language=args.language, gender=args.gender) if len(voices) == 0: print("No voices with specified criteria.") return voice = voices[0] if len(voices) > 1: for i, voice in enumerate(voices): print(i, voice) voice = voices[int(input("voice number> "))] print("Selected voice:", voice) player = Player() if args.spelling: speller = Speller(language=voice.language.split('-')[0]) while True: text = input("").strip() if text == '': continue elif text in {'.q', '.quit'}: break if args.spelling: if text.startswith('!'): text = text[1:] else: fixed_text = speller.fix(text) if text != fixed_text: text = fixed_text print('fixed:', text) while True: try: speech_file = ivona.create_speech(text, voice) player.play(speech_file) break except requests.Timeout: print("Request timed out, retrying")
def __init__(self, dictionary): self.speller = Speller(dictionary)
def setDictionary(self, dictionary): self.speller = Speller(dictionary)