【问题标题】:Using Wordnet to generate superlative, comparative and adjectives使用 Wordnet 生成最高级、比较级和形容词
【发布时间】:2014-11-30 19:11:50
【问题描述】:

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

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

我猜我需要对给定语言的频率进行某种检查,或者对一个词进行词干提取以获得基本词(例如,great-> great、great-> best)。

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

【问题讨论】:

  • Lemmatize,不要词干。另外,您能否详细说明“什么表……感觉?”
  • Greatest to Great 可能由词性标注者提供,请参阅此处的 JJ、JJR、JJS gate.ac.uk/sale/tao/splitap7.html#x39-802000G。作为一个非常牵强的建议,​​您可以查看词嵌入:code.google.com/p/word2vec 关闭词不是同义词,但调整模型和对正确数据的训练可能会产生同义词。或者获取词库结果和词簇的交集。

标签: python nlp nltk wordnet


【解决方案1】:

stemmer 或 lemmatizer 都无法从 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')]

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

>>> 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,而当我们转换,我们可以肯定地说,通过我们的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 是一个有效的转换是主观的

【讨论】:

  • 我实际上并没有使用 NLTK,而是将 Wordnet 转换为 MySQL 数据库。但我会调查一下 - 这似乎是一个合理的解决方案。
猜你喜欢
  • 1970-01-01
  • 2014-08-03
  • 2014-07-08
  • 2010-09-14
  • 1970-01-01
  • 1970-01-01
  • 2012-08-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多