повторение циклов и подпрограмм для n списков в списке - PullRequest
0 голосов
/ 30 сентября 2018

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

  • сделать изображение
  • сделать сайт
  • сделать акцию
  • получить изображение
  • получить сайт
  • получить запас ...

Я новичок в использовании итераций, и автоматизация этого цикла, основанного на n словах для замены, заставила меня почесать голову.Ниже приведены примеры данных ...

> replaceable_list: [('mow', 'VB'), ('lawn', 'NN')]

> mostCommon_list [['make', 'get', 'draw', 'sign', 'sell'], ['image', 'site', 'stock', 'drawing', 'photo', 'way', 'people', 'money', 'image', 'skill']]

> Question: "You are trying to earn one hundred nine dollars for some new CDs. If you charge forty-seven dollars to mow a lawn, how many lawns will you need to mow to earn the money?"

Как видите, у меня уже есть самый Common_list, соответствующий replaceable_list.Последний код, который я использовал, выглядит следующим образом:

:)

question = word_tokenize(question)
first_word = question
#This loops through each replacement word
mostCommonwords, mostCommonPOS = zip(*replaceable_list)
commonlisttuples = list(itertools.product(*mostCommon_list))
for wordsintuple in commonlisttuples:
    for wordintuple in wordsintuple:
        #print(wordintuple)
        for commonwords in mostCommonwords:
            print(replace_all(str(question), commonwords, wordintuple))

Я ооочень близок!Обновление: я изменил код выше:

    for x in result:
    print("x", x)
    for idxy, val in enumerate(replaceable_list): #Caputure the word and the POS in list
    #print("idxy", idxy, "\n", "val", val, "\n")
        print("replaceable_list",val[0]) #prints each replacement word
        print("mostCommon_list[idxy]",mostCommon_list[idxy], "\n") #prints the list that the replacement should come from 
        print(replace_all(str(first_word), val[0], x[idxy])) #target, find, replacement

Вот функция replace_all, которую я забыл упомянуть.Мои извинения ..

  def replace_all (target,find,replace):
  return replace.join(target.split(find))

Теперь я пытаюсь добавить возвращенные результаты вместе.Ввод косить газон , но вывод выглядит следующим образом:

  • сделать газон
  • косить изображение
  • сделать газон
  • косить участок
  • сделать газон
  • косить на складе

Вместо ..

  • сделать a изображение
  • make a site
  • make a stock
  • get a image
  • get a site
  • get a акции ...
...