如何在Compromise.js中以任何时态匹配动词

时间:2019-06-17 01:01:52

标签: javascript node.js nlp text-processing nlp-compromise

相当出色的compromise.js提供了match功能。

我正在努力使它适用于动词的变体:

var nlp = require('compromise');
var sentences = [
    'I am discharging you',
    'I have discharged you',
    'I will discharge him',
    'I discharged you',
    'Monkey'
];

let doc = nlp(sentences.join('. '));
console.log(doc.match('discharge').sentences().out('text'));

/* Output:
discharge
*/

以上仅匹配预期4个中的1个句子。 我如何才能匹配上面显示的所有包含“ discharge”一词的共轭词的四个句子?

运行以下内容可以正确找到动词“ discharge”的变位形式:

doc.verbs().conjugate()

/* Output:
[ { PastTense: 'discharged',
    PresentTense: 'discharges',
    Infinitive: 'discharge',
    Gerund: 'discharging',
    Actor: 'discharger',
    FutureTense: 'will discharge' },
  { PastTense: 'had',
    PresentTense: 'has',
    Infinitive: 'have',
    Gerund: 'having',
    Actor: 'haver',
    Participle: 'had',
    FutureTense: 'will have' },
  { PastTense: 'discharged',
    PresentTense: 'discharges',
    Infinitive: 'discharge',
    Gerund: 'discharging',
    Actor: 'discharger',
    FutureTense: 'will discharge' },
  { PastTense: 'discharged',
    PresentTense: 'discharges',
    Infinitive: 'discharge',
    Gerund: 'discharging',
    Actor: 'discharger',
    FutureTense: 'will discharge' } ]
  */

2 个答案:

答案 0 :(得分:2)

  

.match()的目标是提供一种描述任何内容的快速方法   使用人类可读的语法模式或匹配条件,以及   大多是合理的风格。 Ref

您可以在regex中使用match模式,而无需使用sentences

var nlp = nlp
var sentences = ['I am discharging you','I have discharged you','I will discharge him','I discharged you','Monkey'];

let doc = nlp(sentences.join('. '));

console.log(doc.match('/discharg(ing|e|ed)/').out('text'));

// to capture all verbs

console.log(doc.match('#verb').out('array'));
<script src="https://unpkg.com/compromise@latest/builds/compromise.min.js"></script>

答案 1 :(得分:0)

为此,早​​期的妥协版本试图为每个动词存储一个“根”共轭词,但是对于大文本它变得太慢了。

也许最好的方法是将文档中的术语与已知时态结合起来,然后查找。

let doc = nlp('i discharged and was discharging')
doc.verbs().toInfinitive()
doc.match('discharge').length
// 2

https://runkit.com/spencermountain/5d080c35d95eb800198fcc78

欢呼