0

我正在实现一个小型字典数据库,我想根据它们之间的词汇/语义相似性进行搜索..

例如,beer有“姐妹词”,例如soda, lemonade, wine, champagne每个“不同”的“不同方向”(例如:前两个是“啤酒”概念的“温和”版本,而后两个是“更极端”的版本)

我知道 WordNet 有一个 API,但我字典中的大多数单词(和短语)都以更非正式的方式相关

(另一个例子。“gangster”与[ nun, orphan, rebel] { criminal, mafia boss, murderer}相关,其中极点从左到右变化,[]中的被认为是“正极点”,而{}中的那些是“负极点”)

使用中:

  1. 用户输入搜索输入(一个词)
  2. 词与姊妹词相匹配。
  3. 用户有机会通过在至少 2 个方向上改变肢体来“微调单词”,例如上面的示例。

实现这种搜索的最佳方式是什么——上面的步骤 2 和 3?

我正在考虑使用 PHP/MySQL,因为这是我熟悉的,但有什么更好的选择?再次 - 请记住,这不是一本大字典。这只是一些常用词的选择。


这是我回答这个问题的尝试 - 这是非常非常基本的......欢迎改进建议:

MySQL表字:


id, (primary key, autoincrement) 
word (varchar 75), 
relatedword (varchar 75)
relationscore (int 11)
direction (tinyint, -1 or 1)

给定一个 $word 查询和 $direction:

"SELECT relatedword FROM words WHERE word='$word' AND direction=$direction ORDER BY relationscore DESC"

4

1 回答 1

0

我不清楚你为什么认为 Wordnet 不合适。我认为您所说的“阳性/阴性肢体”和“姐妹词”是语言学家所说的上位词(更一般的同义词)和下位词(更具体的同义词)。Wordnet 包括一个相当好的模型。

要使用 Wordnet,您可以通过使用上位词('beer')关系“向上”几个级别来找到“姐妹”词。因此,如果您从“啤酒”开始,则上升 3 级将为您提供“饮料”。然后,您使用下位词('beverage')关系“向下”几个级别,以获得与啤酒具有相同特异性的饮料类型。

这是通过Nodebox Linguistics访问的 Wordnet 界面示例。我相信 PHP 有一个等效的 Wordnet 接口,虽然我从未使用过它。

>>> import en
>>> noun = 'beer'
>>> generalization_depth = 3
>>> sister_words = en.noun.hyponym(en.noun.hypernyms(noun)[generalization_depth][0])
>>> for word in reduce(lambda a,b: a+b, sister_words, []):
...     print word
... 
milk
wish-wash
potion
alcohol
alcoholic beverage
intoxicant
inebriant
hydromel
oenomel
near beer
ginger beer
mixer
cooler
refresher
smoothie
fizz
cider
cyder
cocoa
chocolate
hot chocolate
drinking chocolate
fruit juice
fruit crush
fruit drink
ade
mate
soft drink
coffee
java
tea
tea-like drink
drinking water
于 2010-08-04T23:57:05.653 回答