我正在为node.js使用非常酷的natural库。
我正在尝试训练我的分类器以匹配短语user experience
。我的问题是,如果我做这样的事情:
classifier.addDocument(['user experience'], 'ux');
它与2个单词短语不匹配,我相信因为它会对单词进行标记。如果我做这样的事情:
classifier.addDocument(['user', 'experience'], 'ux');
它的效果就像我想要的那样,但我的问题是,我不想只对user
这个词进行匹配,因为一篇文章可能会多次提及user
这个词,它会可能与用户体验无关,这会导致不准确的分类。所以,我的问题是如何使用NLP匹配2个或更多单词短语?
先谢谢你的帮助。
答案 0 :(得分:9)
你应该看看n-gram,特别是在这种情况下,它被称为bigram,一系列两个令牌。 https://github.com/NaturalNode/natural#bigrams
我没有使用那个特定的库(不要认为nodejs是NLP的最佳语言,它还处于早期阶段,我建议你使用更成熟的库(NLTK)/语言(python) NLP。虽然我觉得它只适用于测试或一些小项目。)
无论如何,从手册来看,你可以做一些像
这样的事情classifier.addDocument([['user', 'experience']], 'ux');
为要添加的每个序列添加括号。
答案 1 :(得分:0)
可能为时已晚......但
我使用Natural,我认为您不需要传递数组,只需执行:
classifier.addDocument('user experience', 'ux');
那应该有用。基本上只需删除括号。
答案 2 :(得分:0)
我认为最好的方法是将文本视为一个对象数组。像这样:
var natural = require('natural');
var classifier = //Here comes the classifier that you had to choose
var trainingData = [{text: 'user experience', label: 'ux'}]
var yourTestData = [];
trainingData.forEach(function(item){
// finally you add the data to classifier
classifier.addDocument(item.text, item.label);
});