Итак, в основном, вы хотите присвоить оценку каждому слову. Данную функцию можно улучшить, используя словарь вместо нескольких if
операторов.
Также вы должны вернуть все оценки, а не только оценку первой word
в words_to_work_with
, которая является текущим поведением функции, поскольку она вернет целое число на первой итерации.
Таким образом, новая функция будет:
def word_score(text)
words_to_work_with = []
passed_text = TextBlob(text)
for word in words_to_work_with:
word = word.singularize().lower()
word = str(word) # Is this line really useful ?
e_word_lemma = lemmatizer.lemmatize(word)
words_to_work_with.append(e_word_lemma)
dict_scores = {'body' : 2, 'ocean' : 3, etc ...}
return [dict_scores.get(word, None)] # if word is not recognized, score is None
Для второй части, которая реконструирует строку, я бы фактически сделал это в той же функции (так что это отвечает на ваш второй вопрос):
def word_score_and_reconstruct(text):
words_to_work_with = []
passed_text = TextBlob(text)
reconstructed_text = ''
for word in words_to_work_with:
word = word.singularize().lower()
word = str(word) # Is this line really useful ?
e_word_lemma = lemmatizer.lemmatize(word)
words_to_work_with.append(e_word_lemma)
dict_scores = {'body': 2, 'ocean': 3}
dict_strings = {'body': ' (2)', 'ocean': ' (3)'}
word_scores = []
for word in words_to_work_with:
word_scores.append(dict_scores.get(word, None)) # we still construct the scores list here
# we add 'word'+'(word's score)', only if the word has a score
# if not, we add the default value '' meaning we don't add anything
reconstructed_text += word + dict_strings.get(word, '')
return reconstructed_text, word_scores
Я не гарантирую, что этот код будет работать с первой попытки, я не могу его протестировать, но он даст вам основную идею