相当出色的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' } ]
*/
答案 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
欢呼