2016-12-01 12 views
4

У меня нет такого большого опыта программирования на python, поэтому мой вопрос может быть очень простым. Я работаю над проектом для школы, где нам нужно создать выход из пользовательского ввода (мы хотим эмулировать Eliza, но очень простым способом). Прямо сейчас, единственное, что делает программа, - это поиск ключевых слов и соответствующее реагирование. Однако, поскольку я еду в французскую школу, и все на французском, мне нужно использовать акценты (например, é, è, à, á). И здесь проблема приходит: я не могу использовать акценты в моем предопределенного списка ключевых слов (так что это не ключевые слова из пользовательского ввода, но в моей собственной программе: /)Как иметь акценты в моей программе (например, é, è, à, á) - Python

Здесь у вас есть целая программа:

#Greeting from bot 
print("Salut!") 

(Вот предопределенное ключевое слово мы используем, чтобы знать, если есть отрицание, и если есть какие-либо унизительные эпитеты в предложении пользователя - мы должны сделать намного больше для того, чтобы сделать наш бот более по-человечески, но это просто принцип)

negation = ("ne", "n'", "pas", "guere", "ne", "plus", "jamais") 
AnD = ("artificiel", "cree", "mecanique", "invente", "concu", "construit", "programme", "innove", "fabrique") 

Но вот в чем проблема: для запуска нашей программы нам пришлось удалить все акценты. Так слова, как guère, Cree, MECANIQUE, inventé, programmé стать guere, Cree, MECANIQUE, invente, программа, а в некоторых случаях изменяет значение слова (например, программа становится существительное вместо прилагательного)

adj_neg_decl = None 
nega = None 

#FONCTION: phrase declarative, pas de negations, adjectif pejoratif 
def decl_non_neg_adj_neg(statement): 
    if (statement.endswith('.')) and (nega == False) and (adj_neg_decl == True): 
     print(AnD_ici + '? Mais moi je suis humain. Ca se voit pas?') 
    else: 
    #Only for testing 
     print('tralalalala') 


while True: 

    statement = raw_input("> ").lower() 

    if statement == "au revoir": 
     print("Au revoir!") 
     break 

(Здесь мы просто ищем отрицаний, а прилагательные - если у вас есть другой (более эффективный) способ сделать это, я хотел бы услышать ваши предложения, я мог бы также узнать некоторые новые вещи:))

for i in negation: 
     if i in statement: 
      nega = True 
      break 
     else: 
      nega = False 

    for i in AnD: 
     if i in statement: 
      adj_neg_decl = True 
      AnD_ici = i 
      break 
     else: 
      adj_nej_decl = False 

    decl_non_neg_adj_neg(statement) 

#Reset variables 
    for var in (adj_neg_decl, nega): 
     var = None 

Я думал о возможностях использования unicode или utf-8, но я действительно не знаю, как его использовать ... Правильно ли это? Или есть что-то еще, что я могу сделать?

Большое вам спасибо за вашу помощь :)

+6

Вы используете Python 2 или 3? Обработка юникода сильно изменилась между версиями. – Aurora0001

+2

Почему вы должны удалить все акценты? Появляется ли сообщение об ошибке? Затем покажите полное сообщение об ошибке. – furas

+0

Да, вы должны использовать unicode для своей программы. В Python 3 он должен работать из коробки для обычного текста. В Python 2 префикс ваших строк буквой u, как u "mécanique". –

ответ

-1

Я использую Python 2, и я думаю, что списки может быть хорошим способом для хранения ключевых слов.

Я могу набрать акценты напрямую. Для & eacute; я нажал клавишу Alt, а затем нажал эти цифры с цифровой клавиатуры: 130. (Если вы хотите найти других персонажей, найдите в своей любимой поисковой системе windows alt key symbols.)

Это может быть также полезно использовать оператор in, чтобы определить, находится ли данное слово в вашем списке.

Вот пример.

>>> AnD = ['créé', 'mécanique', 'artificiel'] 
>>> 'jamais' in AnD 
False 
>>> 'créé' in AnD 
True 

Bonne шанс!

+1

Это не работает в python 2. '' créé'' по-прежнему кодируется utf-8 ('len ('créé')' is 6, а не 4) и не будет сравниваться с эквивалентом unicode (''créé' ! = u'créé''). – tdelaney

 Смежные вопросы

  • Нет связанных вопросов^_^