确定名词/动词的复数

问题描述 投票:0回答:2

我有一个程序,该程序根据一堆包含所有名词,动词,形容词和副词的文本文档随机生成句子。有谁知道一种确定名词/动词是复数还是单数的方法,或者是否有文本文档包含单数名词/动词和复数名词的列表?我正在用Java进行所有操作,而且我对如何从网站中获取信息有一个不错的想法,因此,如果有任何网站也可以做到这一点,我也将不胜感激。

java nlp word
2个回答
0
投票

[恐怕您不能通过固定的单词列表来解决此问题,尤其是动词。考虑句子:

您有空。我们有空。

在第一个中,are是单数,是复数。使用@jdaz建议使用适当的标记器是您以可靠方式实现标记的唯一方法。

如果使用英语或其他受支持的其他语言,StanfordNLP是一个不错的选择。如果需要广泛的语言覆盖,可以使用UDPipe,它是C ++的本地语言,但是具有Java绑定。


0
投票

第一步是在列表中查找它。对于英语,您可以通过仅包括单数名词来减小列表的大小,然后应用一些基本的字符串处理来查找复数形式:如果您的单词以-s结尾并且不在列表中,则剪下 -s,然后再次查看。如果现在在列表中,则为简单的复数(car / cars)。如果没有,请继续。如果它以-ies结尾,则将其删除,附加-y并再次查看。现在,您将捕获补救措施 / 补救措施。您可以使用许多这样的模式。

一些不规则名词需要在例外列表(ox / oxen)中,但数量不多。当然,某些词是未指定的,例如sheepdatapolice。在这里,您需要查看上下文:如果名词后跟单数动词(例如eatsis),那么它也将是单数。

使用(英语)动词,您通常只能识别第三人称单数(具有与名词所用相似的过程;您需要动词&ing在-s中的例外列表(例如kiss ))。 to be的形式更有用,但是第二人称单数是一个问题(are)。但是,除非您的文字中有直接的语音,否则不会经常使用。

部分语音标记者也只能根据上下文做出这些决定,因此我认为在这里它们不会有太大帮助。这可能是过大的。几个单词列表和简单的启发式规则可能会使用更少的资源为您提供同等或更好的准确性。这是在大量注释数据可用之前完成这些操作的方式。

最后取决于您的情况。简单地使用现有的标记器可能会更快,但是针对此有限的问题使用基于规则的方法可能会获得更高的准确性和速度,(或者甚至可以结合使用以提高准确性)。

© www.soinside.com 2019 - 2024. All rights reserved.