句子中单词的位置不正常

时间:2016-04-17 12:07:45

标签: python position enumeration

我的代码出了问题:

def sentence_recreation(grammar_choice, sentence):
    new_sentence=''
    for char in sentence:
        if char not in grammar_choice:
            new_sentence=new_sentence + char
            sentence_list=new_sentence.split()
    compression(sentence_list)

def validation(sentence):
    if sentence=='':
        print('Input invalid. Please enter a sentence: ')
        compress_sentence()
    else:
        grammar_choice = input("Would you like to remove any punctuation or numbers in your sentence?('None', 'Both', 'Punctuation' or 'Numbers'): ")
        grammar_choice.lower()
        both=('''!()-[]{};:'"\,<>./?@#$%^&*_~0123456789''')
        punctuation=('''!()-[]{};:'"\,<>./?@#$%^&*_~''')
        numbers=('0123456789')
        #These if statements decide to remove: nothing, punctuation, numbers or punctuation and numbers
        if grammar_choice=='':
            print('Input invalid. Please try again.')
            validation(sentence)
        if grammar_choice=="none":
            sentence_list=sentence.split()
            compression(sentence_list)
        elif grammar_choice == "punctuation":
            grammar_choice = punctuation
            sentence_recreation(grammar_choice, sentence)
        elif grammar_choice == "numbers":
            grammar_choice = numbers
            sentence_recreation(grammar_choice, sentence)
        elif grammar_choice == "both":
            grammar_choice = both
            sentence_recreation(grammar_choice, sentence)
        else:
            print('Input invalid. Please try again.')
            validation(sentence)

def compression(sentence_list):
    words=[]
    positions=[]
    y={}
    #This enumerate function allows the program to create two lists with the unique words as well as the positions of those words within the sentence
    for i,x in enumerate(sentence_list):
        if x in y:
            positions.append(y[x])
        else:
            y[x]=i
            positions.append(i)
    for i,x in enumerate(sentence_list):
        if sentence_list[i] not in words:
            words.append(sentence_list[i])
    print(words)
    print(positions)
    file=open('positions and words.txt','w')
    file.write(str(words))
    file.write(str(positions))
    file.close
    print('Goodbye')
    import sys
    sys.exit()

def compress_sentence():
    sentence=input('Please enter your desired sentence: ')
    validation(sentence)

compress_sentence()

代码在输出句子中由于某种原因似乎不起作用的单词位置时起作用,例如:

>>> 
Please enter your desired sentence: When you crack the code, you don't just crack the code, you crack all the codes 1.048596
Would you like to remove any punctuation or numbers in your sentence?('None', 'Both', 'Punctuation' or 'Numbers'): none
['When', 'you', 'crack', 'the', 'code,', "don't", 'just', 'all', 'codes', '1.048596']
[0, 1, 2, 3, 4, 1, 6, 7, 2, 3, 4, 1, 2, 13, 3, 15, 16]
Goodbye
>>> 

该程序应该输出位置[0,1,2,3,4,1,5,6,2,3,4,1,2,7,3,8,9]但是它没有。我真的很感激一些帮助,因为我不确定我要做些什么来修复它,我对它为什么这样做有一个模糊的想法。

1 个答案:

答案 0 :(得分:0)

以下是问题的根源:

positions.append(i)

这是从枚举函数追加索引,该函数附加每个唯一单词的原始位置,因此数字不断增加。您想要做的是,每个新术语的增量为1。这可以通过将该行更改为以下内容来完成:

positions.append(len(y) -1)

输出:

Please enter your desired sentence:  When you crack the code, you don't just crack the code, you crack all the codes 1.048596
Would you like to remove any punctuation or numbers in your sentence?('None', 'Both', 'Punctuation' or 'Numbers'):  none
['When', 'you', 'crack', 'the', 'code,', "don't", 'just', 'all', 'codes', '1.048596']
[0, 1, 2, 3, 4, 1, 5, 6, 2, 3, 4, 1, 2, 7, 3, 8, 9]
Goodbye
相关问题