Эмодзи в питоне - PullRequest
       20

Эмодзи в питоне

0 голосов
/ 04 сентября 2018

Я пытаюсь поработать над моим небольшим сайд-проектом с python (недавно начал узнавать об этом), и я пытаюсь сделать конвертер эмодзи. Под этим я подразумеваю, что когда текст содержит смайлики, преобразователь превращает это слово в смайлики. Примером может быть:

Строка для перевода: Улыбнись! Ты слишком крут.

Перевод: ?! Ты тоже ?.

Проблема в том, что я не имею ни малейшего представления, с чего начать, и то, что я пробовал, постоянно выдает мне ту же ошибку:

UnicodeEncodeError: кодек «UCS-2» не может кодировать символ «\ U0001f40d» в позиции 0: не-BMP символ не поддерживается в Tk

Есть предложения? Заранее спасибо

1 Ответ

0 голосов
/ 04 сентября 2018

https://pypi.org/project/emoji/

не так много документации, но вы можете получить представление об этом на github https://github.com/carpedm20/emoji/search?q=emojize&unscoped_q=emojize

import emoji
import os
from string import punctuation

#example 1
string_to_translate1 = ":smile:! You're too :cool:."
translation1 = emoji.emojize(string_to_translate1,use_aliases=True,delimiters =(':',':'))

#example 2
string_to_translate2 = ":smile:! You're too :sunglasses:."
translation2 = emoji.emojize(string_to_translate2,use_aliases=True,delimiters =(':',':'))

#example 3
def custom_emojizer(user_text):
    temp_word_list = []

    for w in user_text.split():
        word = w
        endwith = ''
        for idx,char in enumerate(word):
            if char in punctuation:
                endwith = word[idx:]
                word = word.strip(char)
                break

        word_emoji = emoji.emojize(':'+word.lower()+':',use_aliases=True,delimiters =(':',':'))

        if ':' in word_emoji:
            temp_word_list.append(w)
        else:
            temp_word_list.append(word_emoji+endwith)

    return ' '.join(temp_word_list)


string_to_translate3 = "Smile! You're too cool."
translation3 = custom_emojizer(string_to_translate3)


with open('test.html','w+',encoding='utf-8-sig') as f:
    f.write(translation1+'<br>')
    f.write(translation2+'<br>')
    f.write(translation3)
os.startfile('test.html')

Что мы делаем в custom_emojizer:

с тех пор как в вашей user_string ' Smile! Ты слишком крут. ' у вас есть пунктуация в конце слов, а слово может быть в верхнем регистре / заглавном регистре, и у вас нет разделителей, нам нужно циклически перебирать слова в user_string и 1) удалять пунктуацию и 2) преобразовывать слова в lower () и 3) добавьте разделители перед тем, как передать его emoji.emojize, тогда, если слово успешно преобразуется в emoji, у нас не будет разделителей, и все, что нам нужно сделать, это добавить пунктуацию, если таковая имеется, иначе мы просто добавим исходное слово.

выход:

?! You're too ?.
?! You're too ?.
?! You're too ?.
...