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


我用的很酷 自然 node.js的库。

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

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

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

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

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

谢谢你的帮助提前。


5090
2018-04-19 16:55


起源

NLP是不可能的,还是我应该向不同的方向看? - imns
嗨@bababa,我有同样的问题,你最终的解决方案是什么?谢谢 :) - Pablo
没找到一个有效的。 @jedanput在下面的回答并不适合我。使用bigrams数组并没有产生我想要的预期结果。 - imns


答案:


你应该看看n-gram,特别是在这种情况下,它被称为二元组,一系列两个标记。 https://github.com/NaturalNode/natural#bigrams

我没有使用过那个特定的库(不要认为nodejs是NLP的最佳语言,它还处于早期阶段,我建议你为NLP使用更成熟的库(NLTK)/语言(python)。虽然我想这对测试或一些小项目来说很好。

无论如何,从手册来看,你可能会做类似的事情

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

为要添加的每个序列添加括号。


9
2018-04-23 22:48





也许为时已晚......

我使用Natural,我认为你不需要传递数组,只需:

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

这应该工作。基本上只需删除括号。


0
2018-02-20 18:58





我认为最好的方法是将文本视为一个对象数组。喜欢这个:

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


0
2017-12-16 15:53