Как сопоставить глагол в любом времени в Compromise.js - PullRequest
0 голосов
/ 17 июня 2019

Довольно превосходный компромисс.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
*/

Выше соответствует только 1 предложению из ожидаемых 4. Как я могу сделать так, чтобы он совпадал со всеми четырьмя предложениями, показанными выше, которые содержат сопряжение слова «разрядка»?

Выполнение следующего правильно находит спряжения глагола «разгрузка»:

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 ]

2 голосов
/ 17 июня 2019

Цель .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>
0 голосов
/ 18 июня 2019

Ранние версии компромисса пытались сохранить «корневое» спряжение для каждого глагола, но для большого текста оно стало слишком медленным.

возможно, лучший способ сделать это - соединить термины в документе с известным временем, а затем найти его.

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

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

ура

...