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

Php db中的单词-通过词汇词典搜索(语义相似性),php,dictionary,semantic-markup,ontology,lexical,Php,Dictionary,Semantic Markup,Ontology,Lexical,我正在实现一个小的字典数据库,我想根据它们之间的词汇/语义相似性进行搜索 例如,啤酒有姐妹词,如苏打水、柠檬水、葡萄酒、香槟,它们在不同的方向上各不相同:前两个是啤酒概念的温和版本,后两个是更极端的版本 我知道WordNet有一个API,但我字典中的大多数单词和短语都是以更非正式的方式联系在一起的 另一个例子。歹徒与[修女、孤儿、叛乱分子]{罪犯、黑手党头目、杀人犯}有关,极端从左到右变化,[]中的被视为积极极端,{}中的被视为消极极端 使用中: 用户输入搜索输入一个单词 单词与姐妹单词匹配。

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

例如,啤酒有姐妹词,如苏打水、柠檬水、葡萄酒、香槟,它们在不同的方向上各不相同:前两个是啤酒概念的温和版本,后两个是更极端的版本

我知道WordNet有一个API,但我字典中的大多数单词和短语都是以更非正式的方式联系在一起的

另一个例子。歹徒与[修女、孤儿、叛乱分子]{罪犯、黑手党头目、杀人犯}有关,极端从左到右变化,[]中的被视为积极极端,{}中的被视为消极极端

使用中:

用户输入搜索输入一个单词 单词与姐妹单词匹配。 用户有机会通过在至少两个方向上改变端点来微调单词,如上面的示例中所示。 实现这种搜索的最佳方法是什么?上面的步骤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:


从word='$word'和direction=$direction ORDER BY relationscore DESC的单词中选择relatedword。我不清楚您为什么认为Wordnet不合适。我认为你所说的积极/消极极端和姐妹词是语言学家所说的上位词,更一般的同义词和下位词,更具体的同义词。Wordnet包含了一个相当好的模型

要使用Wordnet,您可以通过使用超字母词“啤酒”关系将其提升几级来找到姐妹词。所以,如果你从啤酒开始,上升3级会给你饮料。然后,你使用下位词“饮料”关系,将其下放到几个层次,得到与啤酒具有相同特异性的饮料类型

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

嗯,我想这也取决于分类——例如,叛军不一定是坏的,但当涉及到杀人犯/罪犯时,有一种明显消极的感觉。这不是特殊性本身,而是对好人、坏人的实际分类程度。在牛奶/啤酒箱里。。。啤酒会被认为比其他啤酒更消极/极端。@ina,我明白你的意思。因为这是一个非常主观的标准,我认为你不会发现任何现有的数据库有好/坏的单词分类。