2016-01-10 2 views
0

Мне нужен этот набор кода, чтобы иметь возможность конвертировать предложение/предложение2/предложение3 в позиции как отдельный список для каждого предложения, предпочтительно в simalar-методе, к которому я попытался. поэтому из положить должно выглядеть примерно так:python 3.3 преобразование предложений в позиции

[1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 3, 8, 9, 5, 6, 7, 4]

[1, 2, 3, 4, 5, 6, 7, 3, 4]

[1, 2, 3, 4, 5, 6, 7, 8, 5, 1, 11, 12 , 13, 14, 8]

sentence = ("ask not what you can do for your country ask what your country can do for you") 
sentence2 = ("some people enjoy computing others do not enjoy computing") 
sentence3 = ("i will use this as my last sentence as i do not need another sentence") 

d = {} 
i = 0 
values = [] 
for i, word in enumerate(sentence, sentence2, sentence3(" ")): 
    if not word in d: 
     d[word] = (i + 1) 
    values += [d[word]] 
print(values) 
+0

Вам нужно будет объяснить, что это за позиция. Что вы подразумеваете под несколькими предложениями и тому подобными. Он уже работает на 3 предложения (но не на 1). –

+0

Вы уверены, что ваш код работает на первом месте. – Chaker

+0

Благодарим вас за предоставление ожидаемого результата. См. Мой отредактированный ответ – Pynchia

ответ

1

Это решает его

def conv2pos(*sentences): 
    def conv_one(s): 
     words = s.split() 
     word_pos = {w:words.index(w) for w in set(words)} 
     return [word_pos[w]+1 for w in words] 

    return [conv_one(s) for s in sentences] 

print(conv2pos(sentence, sentence2, sentence3)) 

, как для данных предложений он производит

[ 
[1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 3, 8, 9, 5, 6, 7, 4], 
[1, 2, 3, 4, 5, 6, 7, 3, 4], 
[1, 2, 3, 4, 5, 6, 7, 8, 5, 1, 11, 12, 13, 14, 8] 
] 

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

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

Затем он создает список позиций каждого слова в предложении в соответствии с таким словарем.

Примечание: словарь не является обязательным. Он используется для кэширования позиции каждого слова и предотвращения сканирования списка слов, которые уже встречались. В случае, если мы хотим его удалить, мы можем сделать

def conv2pos(*sentences): 
    def conv_one(s): 
     words = s.split() 
     return [words.index(w)+1 for w in words] 

    return [conv_one(s) for s in sentences]