NLTK认为祈使句是名词

2024-10-03 15:33:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我在食谱上用pos_标签。我遇到的一个问题是pos_tagger返回祈使时态中的单词是名词,不是应该是动词吗? 例如:

输入:

combine 1 1/2 cups floud, 3/4 cup sugar, salt and baking powder

输出为:

^{pr2}$

我用的代码是:

    def part_of_speech(self,input_sentance):
        text = nltk.word_tokenize(input_sentance)
        return nltk.pos_tag(text)

“combine”不应该被标记为某种动词吗?这是nltk的错吗?还是我做错了什么?在


Tags: textposinput动词标签单词tagger食谱
3条回答

您所看到的是传统统计自然语言处理(NLP)中非常常见的问题。简言之,您使用标记器的数据看起来不像它所使用的数据。NLTK没有记录细节,但据我所知,默认的标记者是在《华尔街日报》的文章、布朗语料库或两者的某种组合中训练出来的。这些语料库包含的祈使句很少,所以当你给它数据时,它做得不对。在

一个好的长期解决方案是纠正大量食谱的标签,并根据修正的数据进行训练,这样就解决了训练和测试数据不匹配的问题。然而,这是一个巨大的工作量。理想情况下,已经存在一个含有大量祈使句的语料库;我的研究小组对此进行了研究,但我们还没有找到一个合适的语料库,尽管我们正在制作一个。在

我最近在一个需要正确理解祈使句的项目中使用了一个更简单的解决方案,就是简单地记下你想要什么样的命令,并强制那些单词的标签是正确的。在

所以在下面的例子中,我制作了一个字典,说“combine”应该被视为一个动词,然后使用列表理解来更改标记。在

tagged_words = [('combine', 'NN'), ('1', 'CD'), ('1/2', 'CD'), ('cups', 'NNS'), ('flour', 'VBD')]
force_tags = {'combine': 'VB'}
new_tagged_words = [(word, force_tags.get(word, tag)) for word, tag in tagged_words]

新的_tagged_words的内容现在具有原始标记,除了在有效的_标记中有条目发生更改之外。在

^{2}$

这个解决方案确实要求你说出你想强迫动词使用的词是什么。这远不理想,但没有更好的通用解决方案。在

“组合”到名词的映射可能是因为它认为它是一个名词。例如联合收割机。我的猜测是你应该为你的用例调整名词算法或者改变/修改单词库。在

对祈使语料库的培训是最好的选择。但是,如果你没有时间或者认为不值得,这里有一个简单的解决方法(更像是一个黑客):只要在每个句子前面加上一个代词“they”(你确信这是必须的)。现在nltk使用默认标记器做得很好。在

相关问题 更多 >