使用node.js和自然语言处理来处理多个单词短语

时间:2014-04-19 16:55:04

标签: javascript node.js nlp

我正在为node.js使用非常酷的natural库。

我正在尝试训练我的分类器以匹配短语user experience。我的问题是,如果我做这样的事情:

classifier.addDocument(['user experience'], 'ux');

它与2个单词短语不匹配,我相信因为它会对单词进行标记。如果我做这样的事情:

classifier.addDocument(['user', 'experience'], 'ux');

它的效果就像我想要的那样,但我的问题是,我不想只对user这个词进行匹配,因为一篇文章可能会多次提及user这个词,它会可能与用户体验无关,这会导致不准确的分类。所以,我的问题是如何使用NLP匹配2个或更多单词短语?

先谢谢你的帮助。

3 个答案:

答案 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);  
});