2013-03-14 2 views
0

Пожалуйста, помогите!python pig latin converter

Я конвертирую текстовый файл с несколькими строками в латинский свиньи.

Пример: Свинья Латинский перевод: Это пример. должен быть: Histay siay naay xampleeay.

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

Это мой код:

def main(): 
    fileName= input('Please enter the file name: ') 

    validate_file(fileName) 
    newWords= convert_file(fileName) 
    print(newWords) 


def validate_file(fileName): 
    try: 
     inputFile= open(fileName, 'r') 
     inputFile.close() 
    except IOError: 
     print('File not found.') 


def convert_file(fileName): 
    inputFile= open(fileName, 'r') 
    line_string= [line.split() for line in inputFile] 

    for line in line_string: 
     for word in line: 
      endString= str(word[1:]) 
      them=endString, str(word[0:1]), 'ay' 
      newWords="".join(them) 
      return newWords 

мой текстовый файл:

This is an example. 

My name is Kara! 

И возвращается программа:

Please enter the file name: piglatin tester.py 
hisTay 
siay 
naay 
xample.eay 
yMay 
amenay 
siay 
ara!Kay 
None 

Как я могу получить их, чтобы распечатать в линии, в которых они находились? А также, как я могу справиться с проблемой пунктуации и капитализацией?

ответ

1

Вот моя доработка вашего кода. Вы должны рассмотреть возможность работы с nltk. Он имеет гораздо более надежную обработку токенизации слова.

def main(): 
    fileName= raw_input('Please enter the file name: ') 

    validate_file(fileName) 
    new_lines = convert_file(fileName) 
    for line in new_lines: 
     print line 

def validate_file(fileName): 
    try: 
     inputFile= open(fileName, 'r') 
     inputFile.close() 
    except IOError: 
     print('File not found.') 

def strip_punctuation(line): 
    punctuation = '' 
    line = line.strip() 
    if len(line)>0: 
     if line[-1] in ('.','!','?'): 
      punctuation = line[-1] 
      line = line[:-1] 
    return line, punctuation 

def convert_file(fileName): 
    inputFile= open(fileName, 'r') 
    converted_lines = [] 
    for line in inputFile: 
     line, punctuation = strip_punctuation(line) 
     line = line.split() 
     new_words = [] 
     for word in line: 
      endString= str(word[1:]) 
      them=endString, str(word[0:1]), 'ay' 
      new_word="".join(them) 
      new_words.append(new_word) 
     new_sentence = ' '.join(new_words) 
     new_sentence = new_sentence.lower() 
     if len(new_sentence): 
      new_sentence = new_sentence[0].upper() + new_sentence[1:] 
     converted_lines.append(new_sentence + punctuation) 
    return converted_lines 
+0

Спасибо! Однако я получаю эту ошибку: Файл «/Users/tinydancer9454/Documents/python/pigLatinFile.py», строка 17, в основном strip_punc (строка) UnboundLocalError: локальная переменная 'строка', на которую ссылаются перед присвоением – tinydancer9454

+0

Также, что означает new_lines ? – tinydancer9454

+0

new_lines относится к строкам, которые были преобразованы с английского языка на PigLatin. – ChrisGuest

0

Выполняю задания, кроме знаков препинания. Я все еще думаю о решении. Вот мой код:

def convert_file(fileName): 
    inputFile = open(fileName,'r') 
    punctuations = ['.',',','!','?',':',';'] 
    newWords = [] 
    linenum = 1 

    for line in inputFile: 
     line_string = line.split() 
     for word in line_string: 
      endString= str(word[1]).upper()+str(word[2:]) 
      them=endString, str(word[0:1]).lower(), 'ay' 
      word = ''.join(them) 
      wordAndline = [word,linenum] 
      newWords.append(wordAndline) 
     linenum +=1 
    return newWords 

Это отличается тем, что возвращает слово и его строку в файле.

['Histay', 1], ['Siay', 1], ['Naay', 1], ['Xample.eay', 1], ['Ymay', 3], ['Amenay', 3], ['Siay', 3], ['Ara!kay', 3]