Ejemplo n.º 1
0
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()
Ejemplo n.º 2
0
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")
Ejemplo n.º 3
0
 def __init__(self, dictionary):
     self.speller = Speller(dictionary)
Ejemplo n.º 4
0
 def setDictionary(self, dictionary):
     self.speller = Speller(dictionary)