【问题标题】:Transforming statement in interegative sentence with python NLTK用python NLTK在疑问句中转换语句
【发布时间】:2015-05-09 15:58:15
【问题描述】:

关于过去发生的事件,我有成千上万的句子。例如

sentence1 = 'The Knights Templar are founded to protect Christian pilgrims in Jerusalem.'
sentence2 = 'Alfonso VI of Castile captures the Moorish Muslim city of Toledo, Spain.'
sentence3 = 'The Hindu Medang kingdom flourishes and declines.'

我想将它们转换为以下形式的问题:

question1 = 'When were the Knights Templar founded to protect Christian pilgrims in Jerusalem?'
question2 = 'When did Alfonso VI of Castile capture the Moorish Muslim city of Toledo, Spain?'
question3 = 'When did the Hindu Medang kingdom flourish and decline?'

我意识到这是一个复杂的问题,并且成功率达到了 80%。

据我在网络上的搜索了解,NTLK 是解决此类问题的方法。 我开始尝试一些东西,但这是我第一次使用这个库,我不能走得更远:

import nltk
question = 'The Knights Templar are founded to protect Christian pilgrims in Jerusalem.'
tokens = nltk.word_tokenize(question)
tagged = nltk.pos_tag(tokens)

这听起来是很多人一定遇到并解决的问题。 有什么建议吗?

【问题讨论】:

    标签: python string text nlp nltk


    【解决方案1】:

    NLTK 绝对是在这里使用的正确工具。但是你的分词器和后标注器输出的质量取决于你的语料库和句子的类型。此外,通常没有真正的开箱即用解决方案(afaik),它需要一些调整。如果你没有太多时间投入,我怀疑你的成功率甚至会达到 80%。

    话虽如此;这是一个基于列表插入的基本示例,可以帮助您捕获并成功转换您的一些句子。

    import nltk
    
    question_one = 'The Knights Templar are founded to protect Christian     pilgrims in Jerusalem.'
    question_two = 'Alfonso VI of Castile captures the Moorish Muslim city of Toledo, Spain.'
    
    def modify(inputStr):
    
        tokens = nltk.PunktWordTokenizer().tokenize(inputStr)
        tagged = nltk.pos_tag(tokens)
        auxiliary_verbs = [i for i, w in enumerate(tagged) if w[1] == 'VBP']
        if auxiliary_verbs:
            tagged.insert(0, tagged.pop(auxiliary_verbs[0]))
        else:
            tagged.insert(0, ('did', 'VBD'))
        tagged.insert(0, ('When', 'WRB'))
    
        return ' '.join([t[0] for t in tagged])
    
    question_one = modify(question_one)
    question_two = modify(question_two)
    
    print(question_one)
    print(question_two)
    

    输出:

    When are The Knights Templar founded to protect Christian pilgrims in Jerusalem.
    When did Alfonso VI of Castile captures the Moorish Muslim city of Toledo , Spain.
    

    如您所见,您仍然需要修复正确的大小写(“The”仍然是大写),“captures”现在的时态错误,您需要扩展auxiliary_verbs 类型(可能仅是“VBP”太有限了)。但这是一个开始。希望这会有所帮助!

    【讨论】:

      猜你喜欢
      • 2014-05-05
      • 2018-08-12
      • 1970-01-01
      • 1970-01-01
      • 2011-04-04
      • 2016-03-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多