如何使用 NLTK 从文档中仅提取问题?
我们可以将此问题分类为 Y/N 和可回答的详细信息类型吗?
注意:我在 NLTK 一周大 ;-)
如何使用 NLTK 从文档中仅提取问题?
我们可以将此问题分类为 Y/N 和可回答的详细信息类型吗?
注意:我在 NLTK 一周大 ;-)
查看NLTK book的第 6 章第 2.2 节。
编辑:因为显然社区希望我复制/粘贴东西,所以你去:
2.2 识别对话行为类型
在处理对话时,将话语视为说话者执行的一种动作会很有用。这种解释对于诸如“我原谅你”或“我打赌你不能爬那座山”之类的表演性陈述是最直接的。但是问候、问题、答案、断言和澄清都可以被认为是基于语音的行为类型。识别对话中话语背后的对话行为可能是理解对话的重要第一步。
NPS 聊天语料库,在 1 中展示,由来自即时消息会话的 10,000 多个帖子组成。这些帖子都被标记为 15 种对话行为类型之一,例如“陈述”、“情感”、“ynQuestion”和“继续”。因此,我们可以使用这些数据来构建一个分类器,该分类器可以识别新即时消息帖子的对话行为类型。第一步是提取基本的消息传递数据。我们将调用 xml_posts() 来获取表示每个帖子的 XML 注释的数据结构:
>>> posts = nltk.corpus.nps_chat.xml_posts()[:10000]
接下来,我们将定义一个简单的特征提取器来检查帖子包含的单词:
>>> def dialogue_act_features(post):
... features = {}
... for word in nltk.word_tokenize(post):
... features['contains({})'.format(word.lower())] = True
... return features
最后,我们通过将特征提取器应用于每个帖子(使用 post.get('class') 获取帖子的对话行为类型)来构建训练和测试数据,并创建一个新的分类器:
>>> featuresets = [(dialogue_act_features(post.text), post.get('class'))
... for post in posts]
>>> size = int(len(featuresets) * 0.1)
>>> train_set, test_set = featuresets[size:], featuresets[:size]
>>> classifier = nltk.NaiveBayesClassifier.train(train_set)
>>> print(nltk.classify.accuracy(classifier, test_set))
0.67