gpt4 book ai didi

python - 使用 Wordnet 生成最高级、比较级和形容词

转载 作者:太空狗 更新时间:2023-10-30 00:06:56 25 4
gpt4 key购买 nike

我有一个 wordnet 数据库设置,我正在尝试为各种单词生成同义词。

例如,“最伟大”这个词。我将浏览并找到几个不同的同义词,但没有一个真正符合定义 - 例如,一个是“最高级”。

我猜想我需要在给定语言中按频率进行某种检查或词干提取以获得基本词(例如,最伟大的 -> 伟大的,伟大的 -> 最好的)。

我应该使用什么表格来确保我的话有一定意义?

最佳答案

词干分析器或词形还原器都不能让你从greatest -> great:

>>> from nltk.stem import WordNetLemmatizer
>>> from nltk.stem import WordNetLemmatizer, PorterStemmer
>>> porter = PorterStemmer()
>>> wnl = WordNetLemmatizer()
>>> greatest = 'greatest'
>>> porter.stem(greatest)
u'greatest'
>>> wnl.lemmatize(greatest)
'greatest'
>>> greater = 'greater'
>>> wnl.lemmatize(greater)
'greater'
>>> porter.stem(greater)
u'greater'

但似乎您可以利用 PennTreeBank 标签集的一些不错的属性来从 greatest -> great 获取:

>>> from nltk import pos_tag
>>> pos_tag(['greatest'])
[('greatest', 'JJS')]
>>> pos_tag(['greater'])
[('greater', 'JJR')]
>>> pos_tag(['great'])
[('great', 'JJ')]

让我们尝试一个疯狂的基于规则的系统,让我们从最伟大的开始:

>>> import re
>>> word1 = 'greatest'
>>> re.sub('est$', '', word1)
'great'
>>> re.sub('est$', 'er', word1)
'greater'
>>> pos_tag([re.sub('est$', '', word1)])[0][1]
'JJ'
>>> pos_tag([re.sub('est$', 'er', word1)])[0][1]
'JJR'
>>> word1
'greatest'

既然我们知道我们可以构建我们自己的小型最高级词干分析器/lemmatizer/tail_substituter,让我们编写一个规则来说明如果一个词给出最高级 POS 标记并且我们的 tail_substituter 给我们 JJ 当我们stem 和 JJR 当我们转换时,我们可以有把握地说这个词的比较级和基本形式可以很容易地用我们的 tail_substituter 得到:

>>> if pos_tag([word1])[0][1] == 'JJS' \
... and pos_tag([re.sub('est$', '', word1)])[0][1] == 'JJ' \
... and pos_tag([re.sub('est$', 'er', word1)])[0][1] == 'JJR':
... comparative = re.sub('est$', 'er', word1)
... adjective = re.sub('est$', '', word1)
...
>>> adjective
'great'
>>> comparative
'greater'

现在这让你从greatest -> greater -> great。来自 great -> best 有点奇怪,因为它们在词法上并不相关,尽管它们的语义相关似乎相关。

所以我认为说 great -> best 是一个有效的转换是主观的

关于python - 使用 Wordnet 生成最高级、比较级和形容词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27217103/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com