【问题标题】:Using NLTK and WordNet; how do I convert simple tense verb into its present, past or past participle form?使用 NLTK 和 WordNet;如何将简单时态动词转换为现在、过去或过去分词形式?
【发布时间】:2011-04-14 18:13:35
【问题描述】:

使用 NLTK 和WordNet,如何将简单时态动词转换成现在、过去或过去分词形式?

例如:

我想写一个函数,它会以预期的形式给我动词,如下所示。

v = 'go'
present = present_tense(v)
print present # prints "going"

past = past_tense(v)
print past # prints "went"

【问题讨论】:

  • 没有人能回答这个问题吗?

标签: python nlp nltk wordnet


【解决方案1】:

在 NLTK 的帮助下,这也可以完成。它可以给出动词的基本形式。但不是确切的时态,但它仍然很有用。试试下面的代码。

from nltk.stem.wordnet import WordNetLemmatizer
words = ['gave','went','going','dating']
for word in words:
    print word+"-->"+WordNetLemmatizer().lemmatize(word,'v')

输出是:

gave-->give
went-->go
going-->go
dating-->date

看看 Stack Overflow 问题NLTK WordNet Lemmatizer: Shouldn't it lemmatize all inflections of a word?

【讨论】:

  • 你应该注意第二形式与其他动词不定式相同的词。我最后一个不幸的例子是“跌倒”。 WordNetLemmatizer 不会将其转换为“fall”,因为实际上有一个动词“to fall”。另一个例子是“感觉”。而且没有办法告诉词形还原器动词是第二种形式。
  • 我之前评论的答案是使用“_morphy”方法。它返回可能的基本形式的列表。如果您知道要进行词形还原的单词不是其基本形式,则可以将其从从“_morphy”获得的列表中排除,然后选择其余的一个。
  • 值得注意的是,NLTK 受 GNU 许可,未经商业许可不得用于商业目的
  • 这不是对已发布问题的回答,而是对相反问题的回答:问题是如何从基本形式中获取变形形式,而这个答案提供了一种从基本形式中获取基本形式的方法变形的形式。
【解决方案2】:

我认为您正在寻找的是NodeBox::Linguistics 库。它正是这样做的:

print en.verb.present("gave")
>>> give

【讨论】:

  • 很好,我想我只找这个……让我试试吧。
  • 它似乎有一些错误。比如 en.is_verb("download") 返回 true,但是 en.verb.present("download") 会报错
  • 是的,无法在python 3中导入en
  • NodeBox 已被替换为模式 (clips.uantwerpen.be/pattern)。目前没有对模式的官方 python 3 支持,尽管您似乎可以通过构建开发分支来使其工作(请参阅:github.com/clips/pattern/issues/62
  • 我已经设法让它在 Windows/Anaconda/Python 3.6 上运行,只需要先运行“pip install mysqlclient”和“git clone github.com/clips/pattern cd pattern git fetch git checkout development python setup .py 安装”稍后。优秀的工作模式团队,将在最接近的场合为您提供支持。
【解决方案3】:

对于 Python3:

pip install pattern

然后

from pattern.en import conjugate, lemma, lexeme, PRESENT, SG
print (lemma('gave'))
print (lexeme('gave'))
print (conjugate(verb='give',tense=PRESENT,number=SG)) # he / she / it

产量

give 
['give', 'gives', 'giving', 'gave', 'given'] 
gives

感谢@Aggarara 的指点和 Pattern 的作者,感谢他们出色的工作,去支持他们 ;-)

PS。要在 python 3.7+ 中使用大多数模式的功能,您可能需要使用描述的技巧here

【讨论】:

  • 我试过这个。但是我遇到了一些错误。 Traceback (most recent call last): File "..\venv\lib\site-packages\pattern\text\__init__.py", line 609, in _read raise StopIteration StopIteration
  • Sashini 对不起,作者可能已经更改了包装。 “pip uninstall pattern”然后“pip install pattern -U”就可以了。我已经更新了我的答案。
  • 这给出错误,错误:命令错误退出状态为 1:'c:\users\prabhat\appdata\local\programs\python\python39\python.exe''c:\users \prabhat\appdata\local\programs\python\python39\lib\site-packages\pip_vendor\pep517_in_process.py' prepare_metadata_for_build_wheel 'C:\Users\PRABHAT\AppData\Local\Temp\tmp3ucs_d6m' 检查日志以获取完整的命令输出。
【解决方案4】:

JWI(麻省理工学院的 WordNet 库)也有一个词干分析器 (WordNetStemmer),它可以将单词的不同形态形式(如“written”、“writes”、“wrote”)转换为其基本形式。它似乎只适用于名词(如复数)和动词。

Word Stemming in Java with WordNet and JWNL 还展示了如何使用 JWNL(另一个基于 Java 的 Wordnet 库)进行这种词干提取:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-20
    • 2017-01-21
    • 2012-09-12
    • 2023-03-30
    • 2015-09-10
    • 2013-03-10
    相关资源
    最近更新 更多