Простой переводчик языка

1

Поэтому мои друзья и я создаем несколько языков для удовольствия, и я решил, что это будет хороший шанс практиковать питон и сделать переводчика. Язык очень прост, поэтому в этот момент я думал, что могу сделать отдельные словари для размещения всех разных частей речи, а затем связать их вместе в строку. Вначале я начал с местоимения dict, и глагол dict начал только для того, чтобы получить переводную часть. Это то, что у меня есть сейчас, хотя оно не работает

pro = {"I":"ii"}
verb = {"am":"esti"}
noun = {"theatre":"trieto"}
adj = {"red":"reada"}

sentence = input("translate: \n")
for word in sentence.split(" "):
    print(pro.get(word, word)+ verb.get(word, word))

Я хочу сделать переводчика, который в основном включает слова в конкретную часть речи в строке.

Если есть совершенно другой способ сделать это, это облегчит мне все уши. Также мне сложно учиться nltk для этого, поэтому, если вы знаете, как использовать nltk для этого, я был бы очень благодарен за то, что вы узнаете.

Теги:
python-3.x
translate

2 ответа

2
Лучший ответ

Если вы хотите рассматривать каждое слово как потенциально какую-либо часть речи, у вас нет необходимости в отдельных словарях для каждой части речи, просто в одном большом словаре.

Итак, пусть их слить:

translate = {}
for d in pro, verb, noun, adj:
    translate.update(d)

... и теперь то, что вы хотите сделать, тривиально:

for word in sentence.split(" "):
    print(translate.get(word, word))

Если, с другой стороны, у вас есть логика, чтобы выбрать часть речи, основанную, скажем, на позиции, вам нужно написать эту логику.

Например, возможно, первое слово всегда является местоимением, затем глаголом, затем 0 или более прилагательными, а затем существительным. (Это довольно глупая грамматика для английского, но это пример для начала.) Итак:

p, v, *aa, n = sentence.split()
print(pro.get(p, p))
print(verb.get(v, v))
for a in aa:
    print(adj.get(a, a))
print(noun.get(n, n))
0

Чтобы начать, вы можете просто проверить, появляется ли слово в каждом словаре, и распечатать перевод, если это произойдет.

pro = {"I":"ii"}
verb = {"am":"esti"}
noun = {"theatre":"trieto"}
adj = {"red":"reada"}

sentence = input("translate: \n")
for word in sentence.split(" "):
    if word in pro:
        print(pro[word] + " ")
    elif word in verb:
        print(verb[word] + " ")
    elif word in noun:
        print(noun[word] + " ")
    elif word in adj:
        print(adj[word] + " ")
    else:
        print(word + " ")
  • 0
    Это имеет очевидную синтаксическую ошибку ( else if ), но, кроме того, это чрезмерно усложняет вещи.
  • 0
    Согласовано. Я полагаю, что у ОП есть веская причина для использования нескольких словарей, поэтому я хотел сохранить это и написать простой код для их начала. Рефакторинг к чему-то более питоническому, прежде чем понять, как это вписалось бы в остальную часть их кода, показался глупым.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню