db中的单词 - 通过词典词典搜索(语义相似性)

时间:2010-08-03 05:17:34

标签: php dictionary semantic-markup ontology lexical

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

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

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

(另一个例子。“强盗”与[nun, orphan, rebel] {criminal, mafia boss, murderer}有关,其中肢体从左到右不同,而[]中的被认为是“正四肢”, {}中的那些是“负极”)

用法:

  1. 用户输入搜索输入(单词)
  2. 单词与姐妹单词匹配。
  3. 用户有机会通过改变至少2个方向的肢体来“微调单词”,例如上面的例子。
  4. 实施此类搜索的最佳方式是什么 - 上面的第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"

1 个答案:

答案 0 :(得分:0)

我不清楚为什么你认为Wordnet不合适。我认为你所谓的“正面/负面肢体”和“姐妹话语”是语言学家所谓的上位词(更一般的同义词)和下位词(更具体的同义词)。 Wordnet包含了相当不错的模型。

要使用Wordnet,你会发现使用上位词('beer')关系“上升”几个级别的“姐妹”字样。因此,如果你开始使用“啤酒”,那么上升3级会给你“饮料”。然后,您使用下位(“饮料”)关系“下降”几个级别,以获得与啤酒具有相同特异性的饮料类型。

这是通过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