我正在尝试找到动词的词根形式。我通过管道运行文本,可以识别与
PartOfSpeech.VERB
匹配的所有标记,但我不知道如何从那里继续。
这是我到目前为止所拥有的:
const string text = "The disastrous cat runs after the fat field mouse.";
Catalyst.Models.English.Register();
Storage.Current = new DiskStorage(AppDomain.CurrentDomain.BaseDirectory);
var nlp = await Pipeline.ForAsync(Language.English);
var doc = new Document(text, Language.English);
nlp.ProcessSingle(doc);
foreach (var sentence in doc.TokensData)
{
foreach (var token in sentence)
{
if(token.Tag == PartOfSpeech.VERB)
{
// so here I'd like to the root form of the verb
}
}
}
非常感谢任何帮助。
以下代码(针对 .NET 8.0)演示了一种从屈折形式获取动词词根形式的方法。
(我已经以代码注释的形式注释了所需的三个 NuGet 包(带有版本)。大部分代码与上面的原始示例相同。)
//// Installed Curiosity.Library v24.10.52882
//// Installed Catalyst v1.0.51118
//// Installed Catalyst.Models.English v1.0.30952
using Catalyst;
using Mosaik.Core;
const string text = "The disastrous cat quickly runs after the fat field mouse.";
Catalyst.Models.English.Register();
Storage.Current = new DiskStorage(AppDomain.CurrentDomain.BaseDirectory);
var nlp = await Pipeline.ForAsync(Language.English);
var doc = new Document(text, Language.English);
nlp.ProcessSingle(doc);
foreach (var span in doc.Spans)
{
foreach (var token in span.Tokens)
{
if (token.POS == PartOfSpeech.VERB)
{
Console.WriteLine($"Root of the verb '{token.Value}' is '{token.Lemma}'.");
}
}
}
Console.WriteLine();
Console.WriteLine("Complete; press any key.");
Console.ReadKey();
注意: 对于这个特定的句子,我在动词(“runs”)之前添加了一个副词(“quickly”)。如果没有这个,库就会错误地将“runs”解释为名词。根据您的源文本,这对您来说可能是一个问题,但我相信它与所提出的问题是分开的。