【问题标题】:How do you get the past tense of a verb? [closed]你如何获得动词的过去式? [关闭]
【发布时间】:2012-03-01 16:55:08
【问题描述】:

什么是获取动词过去时最有效的方法,最好不使用记忆力大的 NLP 框架?

例如

  • 住到:住过
  • 尝试:尝试过
  • 点击到:点击
  • 煮至:煮沸
  • 卖给:卖了

我自己快速写了一些东西(堆栈溢出不会让我自己回答),这似乎适用于规则动词(例如该列表的前 4 个),但不适用于不规则动词:http://pastebin.com/Txh76Dnb

编辑:感谢所有回复,由于动词不规则,看起来没有字典就无法正确完成。

【问题讨论】:

  • "..不使用内存重的 NLP 框架?" 使用 VooDoo API?记忆力很轻,虽然它可能会花费你一些母鸡和其他小动物。
  • @OliCharlesworth,您是否知道该算法无法正确解析的任何单词:web2.uvcs.uvic.ca/elc/studyzone/330/grammar/pasted.htm 需要字典?
  • @RichardEB:“做”、“我”、“有”...
  • 您的算法不适用于任何不规则动词。
  • 我一直在想怎么做,但是我发现这句话中的所有动词都不能在没有字典的情况下变成过去式。

标签: java nlp


【解决方案1】:

虽然我想在不使用字典的情况下通过算法执行此操作,但我不得不求助于使用字典。

我发现效率最高的库是SimpleNLG

由于他们的文档与当前 API 不同步,以下是实现此目的的方法:

XMLLexicon lexicon = new XMLLexicon("path\\to\\default-lexicon.xml");
WordElement word = lexicon.getWord("live", LexicalCategory.VERB);
InflectedWordElement infl = new InflectedWordElement(word);
infl.setFeature(Feature.TENSE, Tense.PAST);
Realiser realiser = new Realiser(lexicon);
String past = realiser.realise(infl).getRealisation();
System.out.println(past);

【讨论】:

  • 我该如何做相反的事情?即我想从“played”关键字中找到“play”。
  • 我在这台 PC 上没有 SimpleNLG 库了,所以我没有测试它,但我相信它应该像更改第 4 行一样简单,以便 Tense.PAST 是 Tense。 FUTURE 并更改第二行,以便“播放”“现场”。
  • 不,不是..我试过你说的;但没有用。为输入“played”给出“played”的输出。
  • 在这种情况下,您将使用getWordFromVariant,它不依赖于基本形式的单词。然而,值得补充的是,默认的 Lexicon 不知道大量的单词,因此通常不会起作用(在这种情况下确实不起作用)。您可能需要更大的词典:code.google.com/p/simplenlg/wiki/AppendixC
  • @talha06 有很多库可以做到这一点,一个是斯坦福 NLP:stackoverflow.com/a/9531996/897059
【解决方案2】:

一种方法可能是创建一个仅包含不规则动词(不遵循通常模式的动词)的字典,然后首先在其中查找单词。如果单词没有出现,请使用您的算法。有谁知道英语中规则动词和不规则动词的相对数量吗?

【讨论】:

  • en.wikipedia.org/wiki/List_of_English_irregular_verbs 它看起来并不多,直到您意识到,如表所示,许多动词可以复合,并且您可以通过这种方式创建的动词种类实际上是无限的。特别提到“hang”和“lie”,它们可以有规则和不规则的过去时态,具体取决于它们的语义。
【解决方案3】:

使用字典网络服务。

DictService 是一个相当受欢迎的。

它从http://www.dict.org 获取结果。它提供了各种数据库。我发现有一个很有用的“The Collaborative International Dictionary of English v.0.48”,它返回单词定义和时态。

您必须以某种方式解析结果才能找到过去时。

【讨论】:

  • 感谢您的链接,但我更喜欢离线解决方案以提高便携性和性能。
猜你喜欢
  • 2020-07-08
  • 2010-09-11
  • 1970-01-01
  • 2010-09-20
  • 2013-10-18
  • 1970-01-01
  • 1970-01-01
  • 2022-09-27
  • 2020-12-08
相关资源
最近更新 更多