0

私は、それらの間の字句/意味の類似性に基づいて検索を行いたい小さな辞書データベースを実装しています..

たとえば、それぞれ「異なる」「異なる方向」beerなどの「姉妹語」がありますsoda, lemonade, wine, champagne(例: 最初の 2 つは「ビール」のアイデアの「適度な」バージョンであり、後の 2 つは「より極端な」バージョンです)。 )

WordNet に API があることは知っていますが、私の辞書にある単語 (およびフレーズ) のほとんどは、より非公式な方法で関連しています。

(別の例。「ギャングスター」は [ 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を使用するには、hypernyms('beer')関係を使用していくつかのレベルを「上げる」ことにより、「姉妹」の単語を見つけることができます。したがって、「ビール」から始めた場合、レベルを3つ上げると、「飲み物」になります。次に、hyponyms('beverage')関係を使用して、いくつかのレベルを「下げ」、ビールと同じ量の特異性を持つ種類の飲料を取得します。

これは、NodeboxLinguisticsを介してアクセスされる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 に答える