使用自定义模块检查语法,以查找字符串中所有可能的单词组合

时间:2016-06-05 08:49:00

标签: python parsing nltk permutation

我正在为学校创建一个软件,学生实际上会输入句子,然后会检查他们的语法,但是会给他们随机组合的单词,如

    The brown quick fox fence over jumped the
从这里他们将不得不弄清楚句子并用正确的语法重写句子。当他们的回答错误时,我希望程序重新排列所有可能组合的句子,然后检查每个可能组合的语法。

为了得到我使用的句子的随机排列,

    text = raw_input("You:")
    #shuffling for all possibilities
    def randm(text):
          text = text.split(" ")
          for i in itertools.permutations(text): 
                    rnd_text = " ".join(i) 

然后我有自己的模块用方法检查语法,

    engrammar.grammar_cache(rnd_text)

当rnd_text作为上述方法的参数传递时,如果它在语法上是正确的,则重新排列的文本将以正确的语法显示。那么如何将一个输出从“for循环”一次传递给我必须检查语法以获取所有可能的输出的方法?

1 个答案:

答案 0 :(得分:2)

执行此操作的一种方法是将您的功能转换为生成器。

def randm(text):
      text = text.split(" ")
      for i in itertools.permutations(text): 
                yield " ".join(i)

然后你所要做的就是

for word in randm(text):
    engrammar.grammar_cache(word)

您可以阅读有关生成器here的更多信息。

如果您不想使用生成器,您可以随时从函数返回一个列表,然后遍历该列表。

def randm(text):
      words = []
      text = text.split(" ")
      for i in itertools.permutations(text): 
                words.append(" ".join(i))
      return words

words = randm(text)
for word in words:
    engrammar.grammar_cache(word)